From b0a4c992e73539b2a895ba2df5b7defd19d2629f Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Mon, 14 May 2007 22:03:42 +0000 Subject: [PATCH] Added SFTP directory listing test case 613. --- CHANGES | 3 ++ docs/curl.1 | 2 +- tests/data/Makefile.am | 2 +- tests/data/test613 | 48 ++++++++++++++++++++++ tests/libtest/Makefile.am | 2 +- tests/libtest/test613.pl | 84 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 tests/data/test613 create mode 100755 tests/libtest/test613.pl diff --git a/CHANGES b/CHANGES index f41bce449..c49db5768 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,9 @@ \___|\___/|_| \_\_____| Changelog +Dan F (14 May 2007) +- Added SFTP directory listing test case 613. + Dan F (9 May 2007) - Kristian Gunstone fixed a problem where overwriting an uploaded file with sftp didn't truncate it first, which would corrupt the file if the new diff --git a/docs/curl.1 b/docs/curl.1 index 79cfa9c6c..11b7fe530 100644 --- a/docs/curl.1 +++ b/docs/curl.1 @@ -900,7 +900,7 @@ default config file search path. commands are sent BEFORE the transfer is taking place (just after the initial PWD command to be exact). To make commands take place after a successful transfer, prefix -them with a dash '-' (only the latter is support with SFTP). To make +them with a dash '-' (only the latter is supported with SFTP). To make commands get sent after libcurl has changed working directory, just before the transfer command(s), prefix the command with '+'. You may specify any amount of commands. If the server returns failure for one diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 14305c2c4..1671c4fa3 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -41,4 +41,4 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test603 test401 test402 test290 test291 test292 test293 test403 test404 \ test405 test604 test605 test606 test607 test608 test609 test294 test295 \ test296 test297 test298 test610 test611 test612 test406 test407 test408 \ - test409 + test409 test613 diff --git a/tests/data/test613 b/tests/data/test613 new file mode 100644 index 000000000..40b5ddb2c --- /dev/null +++ b/tests/data/test613 @@ -0,0 +1,48 @@ + + + +SFTP +directory + + + +# +# Server-side + + +d????????? N U U N ??? N NN:NN . +d????????? N U U N ??? N NN:NN .. +d????????? N U U N ??? N NN:NN asubdir +-rw?rw?rw? 1 U U 37 Jan 1 2000 plainfile.txt +-r-?r-?r-? 1 U U 47 Dec 31 2000 rofile.txt + + + +# +# Client-side + + +sftp + + +perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test613.dir + + +SFTP directory retrieval + + +--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/test613.dir/ + + +perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test613.dir %PWD/log/curl613.out + + + +# +# Verify data after the test has been "shot" + + +disable + + + diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am index 276ec85eb..b50b0ea21 100644 --- a/tests/libtest/Makefile.am +++ b/tests/libtest/Makefile.am @@ -35,7 +35,7 @@ INCLUDES = -I$(top_srcdir)/include/curl \ LIBDIR = $(top_builddir)/lib -EXTRA_DIST = test75.pl test307.pl test610.pl +EXTRA_DIST = test75.pl test307.pl test610.pl test613.pl # files used only in some libcurl test programs TESTUTIL = testutil.c testutil.h diff --git a/tests/libtest/test613.pl b/tests/libtest/test613.pl new file mode 100755 index 000000000..282cf3791 --- /dev/null +++ b/tests/libtest/test613.pl @@ -0,0 +1,84 @@ +#!/usr/bin/env perl +# Prepare a directory with known files and clean up afterwards +use Time::Local; + +if ( $#ARGV < 1 ) +{ + print "Usage: $0 prepare|postprocess dir [logfile]\n"; + exit 1; +} + +# expects an error message on stdout +sub errout { + print $_[0] . "\n"; + exit 1; +} + +if ($ARGV[0] eq "prepare") +{ + my $dirname = $ARGV[1]; + mkdir $dirname || errout "$!"; + chdir $dirname; + + # Create the files in alphabetical order, to increase the chances + # of receiving a consistent set of directory contents regardless + # of whether the server alphabetizes the results or not. + mkdir "asubdir" || errout "$!"; + chmod 0777, "asubdir"; + + open(FILE, ">plainfile.txt") || errout "$!"; + binmode FILE; + print FILE "Test file to support curl test suite\n"; + close(FILE); + utime time, timegm(0,0,12,1,0,100), "plainfile.txt"; + chmod 0666, "plainfile.txt"; + + open(FILE, ">rofile.txt") || errout "$!"; + binmode FILE; + print FILE "Read-only test file to support curl test suite\n"; + close(FILE); + utime time, timegm(0,0,12,31,11,100), "rofile.txt"; + chmod 0444, "rofile.txt"; + + exit 0; +} +elsif ($ARGV[0] eq "postprocess") +{ + my $dirname = $ARGV[1]; + my $logfile = $ARGV[2]; + + # Clean up the test directory + unlink "$dirname/rofile.txt"; + unlink "$dirname/plainfile.txt"; + rmdir "$dirname/asubdir"; + + rmdir $dirname || die "$!"; + + if ($logfile) { + # Process the directory file to remove all information that could + # be inconsistent from one test run to the next (e.g. file date) + # or may be unsupported on some platforms (e.g. Windows) + + my $newfile = $logfile . ".new"; + open(OUT, ">$newfile") || die "$!"; + open(IN, "<$logfile") || die "$!"; + while () { + s/^(.)(..).(..).(..).(.{4}?).{6}?.{6}?(.{12}?)/\1\2?\3?\4?\5 U U\6/; + if ($1 eq "d") { + # Erase inodes, size, mode, time fields for directories + s/^.{14}?(.{12}?).{11}? ... .\d \d\d:\d\d/d????????? N\1 N ??? N NN:NN/; + } + print OUT $_; + } + + close(IN); + close(OUT); + + unlink $logfile; + rename $newfile, $logfile; + } + + exit 0; +} +print "Unsupported command $ARGV[0]\n"; +exit 1;