#!/bin/bash # vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # runtest.sh of /CoreOS/curl/Sanity/scp-and-sftp-download-test # Description: downloads test file through scp and sftp # Author: Karel Srot # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # Copyright (c) 2012 Red Hat, Inc. All rights reserved. # # This copyrighted material is made available to anyone wishing # to use, modify, copy, or redistribute it subject to the terms # and conditions of the GNU General Public License version 2. # # This program is distributed in the hope that it will be # useful, but WITHOUT ANY WARRANTY; without even the implied # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public # License along with this program; if not, write to the Free # Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include Beaker environment . /usr/bin/rhts-environment.sh . /usr/lib/beakerlib/beakerlib.sh PACKAGE="curl" # GLOBAL/ENVIRONMENT VARIABLE: # PUBKEY_PARAM if [ "$PUBKEY_PARAM" == 'none' ]; then PUBKEY_PARAM="" elif [ "$PUBKEY_PARAM" == 'empty' ]; then PUBKEY_PARAM="--pubkey ''" else PUBKEY_PARAM='--pubkey /root/.ssh/id_rsa.pub' fi FILESIZE=200 #MB OPTIONS="" rlIsRHEL 7 && OPTIONS="--insecure" rlJournalStart rlPhaseStartSetup rlAssertRpm $PACKAGE rlFileBackup --clean /root/.ssh/known_hosts /root/.ssh rlFileBackup --clean /etc/ssh/sshd_config rlRun "useradd -m curltestuser" # In FIPS-140 we need to explicitly allow one of libssh2-implemented # Kex algorithms (eg. DH14-SHA1). rlRun "echo 'KexAlgorithms +diffie-hellman-group14-sha1' >> /etc/ssh/sshd_config" 0 rlServiceStop "sshd" rlRun "service sshd start && sleep 5" 0 # file for download test rlRun "su - curltestuser -c 'dd if=/dev/zero of=testfile bs=1M count=200'" 0 "Creating $FILESIZE MB large test file" SUM=`sha256sum /home/curltestuser/testfile | cut -d ' ' -f 1` rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" rlRun "pushd $TmpDir" rlRun "rm -vf /root/.ssh/*" rlRun "ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''" 0 "Generate ssh key" rlRun "mkdir /home/curltestuser/.ssh && cat /root/.ssh/id_rsa.pub > /home/curltestuser/.ssh/authorized_keys && chown -R curltestuser.curltestuser /home/curltestuser/.ssh/" 0 "Save the key to .ssh/authorized_keys" # this is a workaround as libssh2 is not able to use newer hashes #rlRun "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/root/.ssh/known_hosts curltestuser@localhost 'exit'" 0 "First ssh login to add localhost to known_hosts" rlRun "ssh-keyscan localhost >>/root/.ssh/known_hosts" # files for upload test rlRun "dd if=/dev/zero of=uploadfile1 bs=1M count=50" 0 "Creating 50 MB large test file" UPSUM1=`sha256sum uploadfile1 | cut -d ' ' -f 1` rlRun "dd if=/dev/zero of=uploadfile2 bs=1M count=20" 0 "Creating 20 MB large test file" UPSUM2=`sha256sum uploadfile2 | cut -d ' ' -f 1` rlPhaseEnd rlPhaseStartTest "scp download test" rlRun "curl -o ./scp_file -u curltestuser: --key /root/.ssh/id_rsa $PUBKEY_PARAM $OPTIONS scp://localhost/home/curltestuser/testfile" 0 "Initiate curl scp download" rlAssertExists scp_file SCPSUM=`sha256sum ./scp_file | cut -d ' ' -f 1` rlAssertEquals "Checking that whole file was properly downloaded" $SUM $SCPSUM rm -f ./scp_file rlPhaseEnd rlPhaseStartTest "sftp download test" rlRun "curl -o ./sftp_file -u curltestuser: --key /root/.ssh/id_rsa $PUBKEY_PARAM $OPTIONS sftp://localhost/home/curltestuser/testfile" 0 "Initiate curl scp download" rlAssertExists sftp_file SFTPSUM=`sha256sum ./sftp_file | cut -d ' ' -f 1` rlAssertEquals "Checking that whole file was properly downloaded" $SUM $SFTPSUM rm -f ./sftp_file rlPhaseEnd rlPhaseStartTest "scp upload test" rlRun "curl -T '{uploadfile1,uploadfile2}' scp://localhost/home/curltestuser/ -u curltestuser: --key /root/.ssh/id_rsa $PUBKEY_PARAM $OPTIONS" 0 "Initiate curl scp upload" rlAssertExists /home/curltestuser/uploadfile1 rlAssertExists /home/curltestuser/uploadfile2 SCPUPSUM1=`sha256sum /home/curltestuser/uploadfile1 | cut -d ' ' -f 1` SCPUPSUM2=`sha256sum /home/curltestuser/uploadfile2 | cut -d ' ' -f 1` rlAssertEquals "Checking that 1st file was properly uploaded" ${UPSUM1} ${SCPUPSUM1} rlAssertEquals "Checking that 2nd file was properly uploaded" ${UPSUM2} ${SCPUPSUM2} rm -f /home/curltestuser/uploadfile1 /home/curltestuser/uploadfile2 rlPhaseEnd rlPhaseStartTest "sftp upload test" rlRun "curl -T '{uploadfile1,uploadfile2}' sftp://localhost/home/curltestuser/ -u curltestuser: --key /root/.ssh/id_rsa $PUBKEY_PARAM $OPTIONS" 0 "Initiate curl sftp upload" rlAssertExists /home/curltestuser/uploadfile1 rlAssertExists /home/curltestuser/uploadfile2 SFTPUPSUM1=`sha256sum /home/curltestuser/uploadfile1 | cut -d ' ' -f 1` SFTPUPSUM2=`sha256sum /home/curltestuser/uploadfile2 | cut -d ' ' -f 1` rlAssertEquals "Checking that 1st file was properly uploaded" ${UPSUM1} ${SFTPUPSUM1} rlAssertEquals "Checking that 2nd file was properly uploaded" ${UPSUM2} ${SFTPUPSUM2} rm -f /home/curltestuser/uploadfile1 /home/curltestuser/uploadfile2 rlPhaseEnd rlPhaseStartCleanup rlRun "userdel -r --force curltestuser" rlRun "popd" rlRun "rm -r $TmpDir" 0 "Removing tmp directory" rlFileRestore rlServiceRestore "sshd" rlPhaseEnd rlJournalPrintText rlJournalEnd