]> granicus.if.org Git - curl/commitdiff
Added SFTP directory listing test case 613.
authorDan Fandrich <dan@coneharvesters.com>
Mon, 14 May 2007 22:03:42 +0000 (22:03 +0000)
committerDan Fandrich <dan@coneharvesters.com>
Mon, 14 May 2007 22:03:42 +0000 (22:03 +0000)
CHANGES
docs/curl.1
tests/data/Makefile.am
tests/data/test613 [new file with mode: 0644]
tests/libtest/Makefile.am
tests/libtest/test613.pl [new file with mode: 0755]

diff --git a/CHANGES b/CHANGES
index f41bce449e7bd484375b466b71d4e5f25351f81c..c49db5768ed76877f95bbb85e97bacd73cfeb748 100644 (file)
--- 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
index 79cfa9c6c25baccabe2d3341eb5baae5f307eb3c..11b7fe5304340d3c4da6a760f6adc67e70d0cc93 100644 (file)
@@ -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
index 14305c2c45d44104a0658820fcc2b09b468847d7..1671c4fa3a12fa0d2701e12b98c2b98c0e2a2664 100644 (file)
@@ -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 (file)
index 0000000..40b5ddb
--- /dev/null
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+SFTP
+directory
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<datacheck>
+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
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+sftp
+</server>
+<precheck>
+perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test613.dir
+</precheck>
+ <name>
+SFTP directory retrieval
+ </name>
+ <command>
+--key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%PWD/log/test613.dir/
+</command>
+<postcheck>
+perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test613.dir %PWD/log/curl613.out
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<valgrind>
+disable
+</valgrind>
+</verify>
+</testcase>
index 276ec85ebd00f74cd7219b3688cdc52635a714d6..b50b0ea2148f8464c87744a1605a3798a68ca119 100644 (file)
@@ -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 (executable)
index 0000000..282cf37
--- /dev/null
@@ -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;
+}
+
+# <precheck> 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 (<IN>) {
+                       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;