Home | History | Annotate | Download | only in tests
      1 #***************************************************************************
      2 #                                  _   _ ____  _
      3 #  Project                     ___| | | |  _ \| |
      4 #                             / __| | | | |_) | |
      5 #                            | (__| |_| |  _ <| |___
      6 #                             \___|\___/|_| \_\_____|
      7 #
      8 # Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel (at] haxx.se>, et al.
      9 #
     10 # This software is licensed as described in the file COPYING, which
     11 # you should have received as part of this distribution. The terms
     12 # are also available at https://curl.haxx.se/docs/copyright.html.
     13 #
     14 # You may opt to use, copy, modify, merge, publish, distribute and/or sell
     15 # copies of the Software, and permit persons to whom the Software is
     16 # furnished to do so, under the terms of the COPYING file.
     17 #
     18 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     19 # KIND, either express or implied.
     20 #
     21 ###########################################################################
     22 %file_chmod1 = (
     23   'name'      => 'chmod1',
     24   'content'   => "This file should have permissions 444\n",
     25   'perm'      => 'r--r--r--',
     26   'time'      => 'Jan 11 10:00',
     27   'dostime'   => '01-11-10  10:00AM',
     28 );
     29 
     30 %file_chmod2 = (
     31   'name'      => 'chmod2',
     32   'content'   => "This file should have permissions 666\n",
     33   'perm'      => 'rw-rw-rw-',
     34   'time'      => 'Feb  1  8:00',
     35   'dostime'   => '02-01-10  08:00AM',
     36 );
     37 
     38 %file_chmod3 = (
     39   'name'      => 'chmod3',
     40   'content'   => "This file should have permissions 777\n",
     41   'perm'      => 'rwxrwxrwx',
     42   'time'      => 'Feb  1  8:00',
     43   'dostime'   => '02-01-10  08:00AM',
     44 );
     45 
     46 %file_chmod4 = (
     47   'type'      => 'd',
     48   'name'      => 'chmod4',
     49   'content'   => "This file should have permissions 001\n",
     50   'perm'      => '--S--S--t',
     51   'time'      => 'May  4  4:31',
     52   'dostime'   => '05-04-10  04:31AM'
     53 );
     54 
     55 %file_chmod5 = (
     56   'type'      => 'd',
     57   'name'      => 'chmod5',
     58   'content'   => "This file should have permissions 110\n",
     59   'perm'      => '--s--s--T',
     60   'time'      => 'May  4  4:31',
     61   'dostime'   => '05-04-10  04:31AM'
     62 );
     63 
     64 %link_link = (
     65   'type'      => 'l',
     66   'name'      => 'link -> file.txt',
     67   'size'      => '8',
     68   'perm'      => 'rwxrwxrwx',
     69   'time'      => 'Jan  6  4:42'
     70 );
     71 
     72 %link_link_absolute = (
     73   'type'      => 'l',
     74   'name'      => 'link_absolute -> /data/ftp/file.txt',
     75   'size'      => '15',
     76   'perm'      => 'rwxrwxrwx',
     77   'time'      => 'Jan  6  4:45'
     78 );
     79 
     80 %dir_dot = (
     81   'type'      => "d",
     82   'name'      => ".",
     83   'hlink'     => "4",
     84   'time'      => "Apr 27  5:12",
     85   'size'      => "20480",
     86   'dostime'   => "04-27-10  05:12AM",
     87   'perm'      => "rwxrwxrwx"
     88 );
     89 
     90 %dir_ddot = (
     91   'type'      => "d",
     92   'name'      => "..",
     93   'hlink'     => "4",
     94   'size'      => "20480",
     95   'time'      => "Apr 23  3:12",
     96   'dostime'   => "04-23-10  03:12AM",
     97   'perm'      => "rwxrwxrwx"
     98 );
     99 
    100 %dir_weirddir_txt = (
    101   'type'      => "d",
    102   'name'      => "weirddir.txt",
    103   'hlink'     => "2",
    104   'size'      => "4096",
    105   'time'      => "Apr 23  3:12",
    106   'dostime'   => "04-23-10  03:12AM",
    107   'perm'      => "rwxr-xrwx"
    108 );
    109 
    110 %dir_UNIX = (
    111   'type'      => "d",
    112   'name'      => "UNIX",
    113   'hlink'     => "11",
    114   'size'      => "4096",
    115   'time'      => "Nov 01  2008",
    116   'dostime'   => "11-01-08  11:11AM",
    117   'perm'      => "rwx--x--x"
    118 );
    119 
    120 %dir_DOS = (
    121   'type'      => "d",
    122   'name'      => "DOS",
    123   'hlink'     => "11",
    124   'size'      => "4096",
    125   'time'      => "Nov 01  2008",
    126   'dostime'   => "11-01-08  11:11AM",
    127   'perm'      => "rwx--x--x"
    128 );
    129 
    130 %dir_dot_NeXT = (
    131   'type'      => "d",
    132   'name'      => ".NeXT",
    133   'hlink'     => "4",
    134   'size'      => "4096",
    135   'time'      => "Jan 23  2:05",
    136   'dostime'   => "01-23-05  02:05AM",
    137   'perm'      => "rwxrwxrwx"
    138 );
    139 
    140 %file_empty_file_dat = (
    141   'name'      => "empty_file.dat",
    142   'content'   => "",
    143   'perm'      => "rw-r--r--",
    144   'time'      => "Apr 27 11:01",
    145   'dostime'   => "04-27-10  11:01AM"
    146 );
    147 
    148 %file_file_txt = (
    149   'name'      => "file.txt",
    150   'content'   => "This is content of file \"file.txt\"\n",
    151   'time'      => "Apr 27 11:01",
    152   'dostime'   => "04-27-10  11:01AM",
    153   'perm'      => "rw-r--r--"
    154 );
    155 
    156 %file_someothertext_txt = (
    157   'name'      => "someothertext.txt",
    158   'content'   => "Some junk ;-) This file does not really exist.\n",
    159   'time'      => "Apr 27 11:01",
    160   'dostime'   => "04-27-10  11:01AM",
    161   'perm'      => "rw-r--r--"
    162 );
    163 
    164 %lists = (
    165   '/fully_simulated/' => {
    166     'files'   => [ \%dir_dot, \%dir_ddot, \%dir_DOS, \%dir_UNIX ],
    167     'eol'     => "\r\n",
    168     'type'    => "unix"
    169   },
    170   '/fully_simulated/UNIX/' => {
    171     'files'   => [ \%dir_dot, \%dir_ddot,
    172                    \%file_chmod1, \%file_chmod2, \%file_chmod3, \%file_chmod4, \%file_chmod5,
    173                    \%file_empty_file_dat, \%file_file_txt,
    174                    \%link_link, \%link_link_absolute, \%dir_dot_NeXT,
    175                    \%file_someothertext_txt, \%dir_weirddir_txt ],
    176     'eol'     => "\r\n",
    177     'type'    => 'unix'
    178   },
    179   '/fully_simulated/DOS/' => {
    180     'files'   => [ \%dir_dot, \%dir_ddot,
    181                    \%file_chmod1, \%file_chmod2, \%file_chmod3, \%file_chmod4, \%file_chmod5,
    182                    \%file_empty_file_dat, \%file_file_txt,
    183                    \%dir_dot_NeXT, \%file_someothertext_txt, \%dir_weirddir_txt ],
    184     'eol'     => "\r\n",
    185     'type'    => 'dos'
    186   }
    187 );
    188 
    189 sub ftp_createcontent($) {
    190   my (%list) = @_;
    191 
    192   $type = $$list{'type'};
    193   $eol  = $$list{'eol'};
    194   $list_ref = $$list{'files'};
    195 
    196   my @diroutput;
    197   my @contentlist;
    198   if($type eq "unix") {
    199     for(@$list_ref) {
    200       my %file = %$_;
    201       my $line = "";
    202       my $ftype  = $file{'type'}  ? $file{'type'}  : "-";
    203       my $fperm  = $file{'perm'}  ? $file{'perm'}  : "rwxr-xr-x";
    204       my $fuser  = $file{'user'}  ? sprintf("%15s", $file{'user'})   : "ftp-default";
    205       my $fgroup = $file{'group'} ? sprintf("%15s", $file{'group'})  : "ftp-default";
    206       my $fsize = "";
    207       if($file{'type'} eq "d") {
    208         $fsize = $file{'size'} ? sprintf("%7s", $file{'size'}) : sprintf("%7d", 4096);
    209       }
    210       else {
    211         $fsize = sprintf("%7d", length $file{'content'});
    212       }
    213       my $fhlink = $file{'hlink'} ? sprintf("%4d",  $file{'hlink'})  : "   1";
    214       my $ftime  = $file{'time'}  ? sprintf("%10s", $file{'time'})   : "Jan 9  1933";
    215       push(@contentlist, "$ftype$fperm $fhlink $fuser $fgroup $fsize $ftime $file{'name'}$eol");
    216     }
    217 
    218     return @contentlist;
    219   }
    220   elsif($type =~ /^dos$/) {
    221     for(@$list_ref) {
    222       my %file = %$_;
    223       my $line = "";
    224       my $time = $file{'dostime'} ? $file{'dostime'} : "06-25-97  09:12AM";
    225       my $size_or_dir;
    226       if($file{'type'} =~ /^d$/) {
    227         $size_or_dir = "      <DIR>         ";
    228       }
    229       else {
    230         $size_or_dir = sprintf("%20d", length $file{'content'});
    231       }
    232       push(@contentlist, "$time $size_or_dir $file{'name'}$eol");
    233     }
    234     return @contentlist;
    235   }
    236 }
    237 
    238 sub wildcard_filesize($$) {
    239   my ($list_type, $file) = @_;
    240   $list = $lists{$list_type};
    241   if($list) {
    242     my $files = $list->{'files'};
    243     for(@$files) {
    244       my %f = %$_;
    245       if ($f{'name'} eq $file) {
    246         if($f{'content'}) {
    247           return length $f{'content'};
    248         }
    249         elsif ($f{'type'} ne "d"){
    250           return 0;
    251         }
    252         else {
    253           return -1;
    254         }
    255       }
    256     }
    257   }
    258   return -1;
    259 }
    260 sub wildcard_getfile($$) {
    261   my ($list_type, $file) = @_;
    262   $list = $lists{$list_type};
    263   if($list) {
    264     my $files = $list->{'files'};
    265     for(@$files) {
    266       my %f = %$_;
    267       if ($f{'name'} eq $file) {
    268         if($f{'content'}) {
    269           return (length $f{'content'}, $f{'content'});
    270         }
    271         elsif ($f{'type'} ne "d"){
    272           return (0, "");
    273         }
    274         else {
    275           return (-1, 0);
    276         }
    277       }
    278     }
    279   }
    280   return (-1, 0);
    281 }
    282 
    283 sub ftp_contentlist {
    284   my $listname = $_[0];
    285   $list = $lists{$listname};
    286   return ftp_createcontent(\$list);
    287 }
    288