#!/bin/sh # sftp local test no_pid=-1 server_pid="$no_pid" ready_file="$PWD/wolfssh_sftp_ready$$" nonblockingOnly=0 [ ! -x ./examples/sftpclient/wolfsftp ] && echo && echo "wolfSFTP client doesn't exist" && exit 1 WOLFSSH_OPTIONS=$(./apps/wolfssh-options) || { echo "fail: could not run ./apps/wolfssh-options" exit 1 } # test for if the SFTP client works if ! echo "$WOLFSSH_OPTIONS" | grep -qx "CLIENT" then echo "macro NO_WOLFSSH_CLIENT was used" echo "skipping test" exit 77 fi # test for nonblocking only if echo "$WOLFSSH_OPTIONS" | grep -qx "TEST_BLOCK" then echo "macro WOLFSSH_TEST_BLOCK was used" nonblockingOnly=1 fi #echo "ready file $ready_file" create_port() { # counted per server start, so a slow first start cannot eat the wait # the later ones need counter=0 while [ ! -s "$ready_file" ] && [ "$counter" -lt 20 ]; do echo "waiting for ready file..." sleep 0.1 counter=$((counter+ 1)) done # -s, not -e: the loop waits for the port to be written, and an empty # file here means the wait ran out if [ -s "$ready_file" ]; then echo "found ready file, starting client..." # get created port 0 ephemeral port port=$(cat "$ready_file") else echo "NO ready file ending test..." do_cleanup exit 1 fi } remove_ready_file() { if test -e "$ready_file"; then echo "removing existing ready file" rm "$ready_file" fi } do_cleanup() { echo "in cleanup" if [ "$server_pid" != "$no_pid" ] then echo "killing server" kill -9 "$server_pid" fi remove_ready_file } do_trap() { echo "got trap" do_cleanup exit 1 } trap do_trap INT TERM if [ "$nonblockingOnly" = 0 ]; then echo "Test basic connection" ./examples/echoserver/echoserver -1 -R "$ready_file" & server_pid=$! create_port echo "exit" | ./examples/sftpclient/wolfsftp -u jill -P upthehill -p "$port" RESULT=$? remove_ready_file if [ $RESULT -ne 0 ]; then echo echo "failed to connect" do_cleanup exit 1 fi fi # Test non blocking connection echo "Test non blocking connection" ./examples/echoserver/echoserver -N -1 -R "$ready_file" & server_pid=$! create_port echo "exit" | ./examples/sftpclient/wolfsftp -N -u jill -P upthehill -p "$port" RESULT=$? remove_ready_file if [ $RESULT -ne 0 ]; then echo echo "failed to connect" do_cleanup exit 1 fi # Test want write return from highwater callback if [ "$nonblockingOnly" = 0 ]; then echo "Test want write return from highwater callback" ./examples/echoserver/echoserver -H -N -1 -R "$ready_file" & server_pid=$! create_port ./examples/sftpclient/wolfsftp -N -u jill -P upthehill -p "$port" -g -r "$PWD/README.md-2" -l "$PWD/README.md" RESULT=$? remove_ready_file rm -f "$PWD/README.md-2" if [ $RESULT -ne 0 ]; then echo echo "failed to connect" do_cleanup exit 1 fi fi # Test of setting directory if [ "$nonblockingOnly" = 0 ]; then echo "Test of setting directory" ./examples/echoserver/echoserver -d "$PWD/examples" -1 -R "$ready_file" & server_pid=$! create_port echo "exit" | ./examples/sftpclient/wolfsftp -N -u jill -P upthehill -p "$port" RESULT=$? remove_ready_file if [ $RESULT -ne 0 ]; then echo echo "failed to connect" do_cleanup exit 1 fi fi # Test SFTP status failure for non-existing file if [ "$nonblockingOnly" = 0 ]; then echo "Test SFTP status failure for non-existing file" ./examples/echoserver/echoserver -N -1 -R "$ready_file" & server_pid=$! create_port ./examples/sftpclient/wolfsftp -N -u jill -P upthehill -p "$port" -G -r "$PWD/this_file_does_not_exist_12345.txt" -l "$PWD/test_output.txt" > sftp_status_failure.log 2>&1 RESULT=$? grep -q "Unable to copy remote file" sftp_status_failure.log RESULT_MSG=$? remove_ready_file rm -f sftp_status_failure.log rm -f "$PWD/test_output.txt" if [ $RESULT -eq 0 ]; then echo echo "ERROR: Should have failed for non-existing file" do_cleanup exit 1 fi if [ $RESULT_MSG -ne 0 ]; then echo echo "ERROR: Unexpected failure path while testing missing remote file" do_cleanup exit 1 fi echo "Successfully received failure status packet" fi echo echo "ALL Tests Passed" exit 0