Annotation of embedaddon/curl/tests/libtest/test613.pl, revision 1.1

1.1     ! misho       1: #!/usr/bin/env perl
        !             2: #***************************************************************************
        !             3: #                                  _   _ ____  _
        !             4: #  Project                     ___| | | |  _ \| |
        !             5: #                             / __| | | | |_) | |
        !             6: #                            | (__| |_| |  _ <| |___
        !             7: #                             \___|\___/|_| \_\_____|
        !             8: #
        !             9: # Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
        !            10: #
        !            11: # This software is licensed as described in the file COPYING, which
        !            12: # you should have received as part of this distribution. The terms
        !            13: # are also available at https://curl.haxx.se/docs/copyright.html.
        !            14: #
        !            15: # You may opt to use, copy, modify, merge, publish, distribute and/or sell
        !            16: # copies of the Software, and permit persons to whom the Software is
        !            17: # furnished to do so, under the terms of the COPYING file.
        !            18: #
        !            19: # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
        !            20: # KIND, either express or implied.
        !            21: #
        !            22: ###########################################################################
        !            23: # Prepare a directory with known files and clean up afterwards
        !            24: use Time::Local;
        !            25: 
        !            26: if ( $#ARGV < 1 )
        !            27: {
        !            28:     print "Usage: $0 prepare|postprocess dir [logfile]\n";
        !            29:     exit 1;
        !            30: }
        !            31: 
        !            32: # <precheck> expects an error message on stdout
        !            33: sub errout {
        !            34:     print $_[0] . "\n";
        !            35:     exit 1;
        !            36: }
        !            37: 
        !            38: if ($ARGV[0] eq "prepare")
        !            39: {
        !            40:     my $dirname = $ARGV[1];
        !            41:     mkdir $dirname || errout "$!";
        !            42:     chdir $dirname;
        !            43: 
        !            44:     # Create the files in alphabetical order, to increase the chances
        !            45:     # of receiving a consistent set of directory contents regardless
        !            46:     # of whether the server alphabetizes the results or not.
        !            47:     mkdir "asubdir" || errout "$!";
        !            48:     chmod 0777, "asubdir";
        !            49: 
        !            50:     open(FILE, ">plainfile.txt") || errout "$!";
        !            51:     binmode FILE;
        !            52:     print FILE "Test file to support curl test suite\n";
        !            53:     close(FILE);
        !            54:     # The mtime is specifically chosen to be an even number so that it can be
        !            55:     # represented exactly on a FAT filesystem.
        !            56:     utime time, timegm(0,0,12,1,0,100), "plainfile.txt";
        !            57:     chmod 0666, "plainfile.txt";
        !            58: 
        !            59:     open(FILE, ">rofile.txt") || errout "$!";
        !            60:     binmode FILE;
        !            61:     print FILE "Read-only test file to support curl test suite\n";
        !            62:     close(FILE);
        !            63:     # The mtime is specifically chosen to be an even number so that it can be
        !            64:     # represented exactly on a FAT filesystem.
        !            65:     utime time, timegm(0,0,12,31,11,100), "rofile.txt";
        !            66:     chmod 0444, "rofile.txt";
        !            67: 
        !            68:     exit 0;
        !            69: }
        !            70: elsif ($ARGV[0] eq "postprocess")
        !            71: {
        !            72:     my $dirname = $ARGV[1];
        !            73:     my $logfile = $ARGV[2];
        !            74: 
        !            75:     # Clean up the test directory
        !            76:     unlink "$dirname/rofile.txt";
        !            77:     unlink "$dirname/plainfile.txt";
        !            78:     rmdir "$dirname/asubdir";
        !            79: 
        !            80:     rmdir $dirname || die "$!";
        !            81: 
        !            82:     if ($logfile) {
        !            83:         # Process the directory file to remove all information that
        !            84:         # could be inconsistent from one test run to the next (e.g.
        !            85:         # file date) or may be unsupported on some platforms (e.g.
        !            86:         # Windows). Also, since 7.17.0, the sftp directory listing
        !            87:         # format can be dependent on the server (with a recent
        !            88:         # enough version of libssh2) so this script must also
        !            89:         # canonicalize the format.  Here are examples of the general
        !            90:         # format supported:
        !            91:         # -r--r--r--   12 ausername grp            47 Dec 31  2000 rofile.txt
        !            92:         # -r--r--r--   1  1234  4321         47 Dec 31  2000 rofile.txt
        !            93:         # The "canonical" format is similar to the first (which is
        !            94:         # the one generated on a typical Linux installation):
        !            95:         # -r-?r-?r-?   12 U         U              47 Dec 31  2000 rofile.txt
        !            96: 
        !            97:         my @canondir;
        !            98:         open(IN, "<$logfile") || die "$!";
        !            99:         while (<IN>) {
        !           100:             /^(.)(..).(..).(..).\s*(\S+)\s+\S+\s+\S+\s+(\S+)\s+(\S+\s+\S+\s+\S+)(.*)$/;
        !           101:             if ($1 eq "d") {
        !           102:                 # Erase all directory metadata except for the name, as it is not
        !           103:                 # consistent for across all test systems and filesystems
        !           104:                 push @canondir, "d?????????    N U         U               N ???  N NN:NN$8\n";
        !           105:             } elsif ($1 eq "-") {
        !           106:                 # Erase user and group names, as they are not consistent across
        !           107:                 # all test systems
        !           108:                 my $line = sprintf("%s%s?%s?%s?%5d U         U %15d %s%s\n", $1,$2,$3,$4,$5,$6,$7,$8);
        !           109:                 push @canondir, $line;
        !           110:             } else {
        !           111:                 # Unexpected format; just pass it through and let the test fail
        !           112:                 push @canondir, $_;
        !           113:             }
        !           114:         }
        !           115:         close(IN);
        !           116: 
        !           117:         @canondir = sort {substr($a,57) cmp substr($b,57)} @canondir;
        !           118:         my $newfile = $logfile . ".new";
        !           119:         open(OUT, ">$newfile") || die "$!";
        !           120:         print OUT join('', @canondir);
        !           121:         close(OUT);
        !           122: 
        !           123:         unlink $logfile;
        !           124:         rename $newfile, $logfile;
        !           125:     }
        !           126: 
        !           127:     exit 0;
        !           128: }
        !           129: print "Unsupported command $ARGV[0]\n";
        !           130: exit 1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>