1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-09 08:58:35 +03:00

test_smbclient_tarmode.pl: add tests for wildcard pattern (cI, cX, cF, xF).

* add some test for wildcard pattern and r switch, when possible (-r
  is very buggy)
* change default DIR to "tar_test_dir"
* add tests for attributes (nohidden, nosystem which are undocumented)

Signed-off-by: Aurélien Aptel <aurelien.aptel@gmail.com>
Reviewed-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jim McDonough <jmcd@samba.org>
This commit is contained in:
Aurélien Aptel 2013-07-03 16:09:03 +02:00 committed by Jim McDonough
parent 581d128ef3
commit 60edcc7905

View File

@ -13,18 +13,18 @@ test_smbclient_tarmode.pl - Test for smbclient tar backup feature
# c a DONE
# c N DONE
# c I DONE
# c I r #
# c I r DONE
# c X DONE
# c X r #
# c X r DONE
# c F DONE
# c F r #
# c F r DONE
# x DONE
# x I DONE
# x I r #
# x X DONE
# x X r #
# x F DONE
# x F r #
# x F r DONE
use v5.16;
use strict;
@ -45,7 +45,7 @@ our $PW = '';
our $HOST = 'localhost';
our $IP = '';
our $SHARE = 'public';
our $DIR = 'tarmode';
our $DIR = 'tar_test_dir';
our $LOCALPATH = '/media/data/smb-test';
our $TMP = '/tmp/smb-tmp';
our $BIN = 'smbclient';
@ -146,14 +146,16 @@ my @all_tests = (
[\&test_creation_reset, '-a'],
[\&test_creation_reset, 'tarmode reset'],
[\&test_creation_newer],
[\&test_creation_attr],
[\&test_creation_include,],
[\&test_creation_exclude,],
[\&test_creation_list,],
[\&test_creation_glob],
[\&test_creation_wildcard],
[\&test_extraction_normal],
[\&test_extraction_include],
[\&test_extraction_exclude],
[\&test_extraction_list],
[\&test_extraction_wildcard],
);
if($SINGLE_TEST == -1) {
@ -205,6 +207,50 @@ sub test_creation_newer {
return check_tar($TAR, \@files);
}
sub test_creation_attr {
say "TEST: creation -- combinations of tarmodes (nosystem, nohidden, etc)";
my @attr = qw/r h s a/;
my @all;
my @inc;
my $err = 0;
# one normal file
my $f = File->new_remote("file-n.txt");
$f->set_attr();
push @all, $f;
# combinaisions of attributes
for my $n (1..@attr) {
for(combine(\@attr, $n)) {
my @t = @$_;
my $fn = "file-" . join('+', @t) . ".txt";
my $f = File->new_remote($fn);
$f->set_attr(@t);
push @all, $f;
}
}
@inc = grep { !$_->{attr}{s} } @all;
smb_tar('tarmode nosystem', '-Tc', $TAR, $DIR);
$err += check_tar($TAR, \@inc);
@inc = grep { !$_->{attr}{h} } @all;
smb_tar('tarmode nohidden', '-Tc', $TAR, $DIR);
$err += check_tar($TAR, \@inc);
@inc = grep { !$_->{attr}{h} and !$_->{attr}{s} } @all;
smb_tar('tarmode nohidden nosystem', '-Tc', $TAR, $DIR);
$err += check_tar($TAR, \@inc);
@inc = grep { $_->{attr}{a} and !$_->{attr}{h} and !$_->{attr}{s} } @all;
smb_tar('tarmode inc nohidden nosystem', '-Tc', $TAR, $DIR);
$err += check_tar($TAR, \@inc);
$err;
}
sub test_creation_reset {
my ($mode) = @_;
@ -403,49 +449,59 @@ sub test_creation_list {
}
sub tardump {
system sprintf q{tar tf %s | grep -v '/$' | sort}, $TAR;
system sprintf q{tar tf %s 2>&1 | grep -v '/$' | sort }, $TAR;
}
sub test_creation_glob {
sub test_creation_wildcard {
say "TEST: creation -- include/exclude with wildcards";
my @exts = qw(txt jpg exe);
my @dirs = ('', "$DIR/", "$DIR/dir/");
my @all;
my $nb;
my $err = 0;
$nb = 0;
for my $dir (@dirs) {
for(@exts) {
my $fn = $dir . 'file.' . $_;
my $fn = $dir . "file$nb." . $_;
my $f = File->new_remote($fn, 'ABSPATH');
$f->delete_on_destruction(1);
$f->set_attr();
push @all, $f;
$nb++;
}
}
my $err = 0;
$nb = 0;
for my $dir (@dirs) {
for my $ext (@exts) {
my @inc;
my $fn = $dir."file$nb.".$ext;
my $pattern = $dir.'*.'.$ext;
my $flist;
# include
@inc = grep { $_->remotepath eq $dir.'file.'.$ext } @all;
smb_tar('', '-Tc', $TAR, $dir.'*.'.$ext);
@inc = grep { $_->remotepath eq $fn } @all;
smb_tar('', '-Tc', $TAR, $pattern);
$err += check_tar($TAR, \@inc);
# include with -r
# if you include a pattern -> tar will be empty... bug?
# @inc = grep { my $n = $_->remotepath; $n =~ /$ext/ && $n !~ /dir/} @all;
# smb_tar('', '-Tcr', $TAR, "*.$ext");
# $err += check_tar($TAR, \@inc);
# supposed to be the same results but if you include a
# pattern not at the root -> tar will be empty... bug?
@inc = grep { $_->remotepath eq $fn } @all;
smb_tar('', '-Tcr', $TAR, $pattern);
$err += check_tar($TAR, \@inc);
# exclude with -r
# @inc = grep { my $n = $_->remotepath; $n !~ /$ext/} @all;
# smb_tar('', '-TcrX', $TAR, "*.$ext");
# #$err += check_tar($TAR, \@inc);
# #tardump();
# $err += check_tar($TAR, \@all);
# supposed to work on the whole hierarchy
@inc = grep { my $n = $_->remotepath; $n !~ /$ext/} @all;
smb_tar('', '-TcrX', $TAR, "*.$ext");
$err += check_tar($TAR, \@inc);
# # exclude
# @inc = grep { my $n = $_->remotepath; $n !~ /$ext/ && $n !~ /dir/} @all;
@ -453,12 +509,74 @@ sub test_creation_glob {
# #$err += check_tar($TAR, \@inc);
# $err += check_tar($TAR, \@all);
# with F
$flist = File->new_local("$TMP/list", "$pattern\n");
# include with F r
@inc = grep { $_->remotepath eq $fn } @all;
smb_tar('', '-TcFr', $TAR, $flist->localpath);
$err += check_tar($TAR, \@inc);
}
}
$err;
}
sub test_extraction_wildcard {
say "TEST: extraction -- include/exclude with wildcards";
my @exts = qw(txt jpg exe);
my @dirs = ('', "$DIR/", "$DIR/dir/");
my $nb;
my $err = 0;
for my $dir (@dirs) {
my @all;
$nb = 0;
for my $dir (@dirs) {
for(@exts) {
my $fn = $dir . "file$nb." . $_;
my $f = File->new_remote($fn, 'ABSPATH');
$f->delete_on_destruction(1);
$f->set_attr();
push @all, $f;
$nb++;
}
}
my @inc;
my $ext = 'exe';
my $fn = $dir."file$nb.".$ext;
my $pattern = $dir.'*.'.$ext;
my $flist;
# with F
$flist = File->new_local("$TMP/list", "$pattern\n");
# store
my $re = '^'.$dir.'.*file';
@inc = grep { $dir eq '' or $_->remotepath =~ m{$re} } @all;
smb_tar('', '-Tc', $TAR, $dir);
$err += check_tar($TAR, \@inc);
reset_remote();
my $re2 = '^'.$dir.'file.+exe';
@inc = grep { $_->remotepath =~ /$re2/ } @all;
smb_tar('', '-TxrF', $TAR, $flist->localpath);
$err += check_remote($dir, \@inc);
reset_remote();
}
$err;
}
sub test_extraction_list {
say "TEST: extraction -- filelist";
@ -508,17 +626,22 @@ sub print_res {
}
}
# create @files and return (the ones matching $re, all)
sub create_grep {
my ($re, @files) = @_;
my (@inc, @all);
for(@files) {
my $f = File->new_remote($_);
$f->set_attr();
push @inc, $f if /$re/;
push @all, $f;
# return list of combinations of n-uplet
sub combine {
my ($list, $n) = @_;
die "Insufficient list members" if $n > @$list;
return map [$_], @$list if $n <= 1;
my @comb;
for (my $i = 0; $i+$n <= @$list; $i++) {
my $val = $list->[$i];
my @rest = @$list[$i+1..$#$list];
push @comb, [$val, @$_] for combine(\@rest, $n-1);
}
return \@inc, \@all;
return @comb;
}
sub reset_remote {
@ -582,6 +705,11 @@ sub check_remote {
if($expected{$rfile}->md5 ne $rmd5) {
say " ! $rfile ($rmd5)";
push @diff, $rfile;
next;
}
if($DEBUG) {
say " $rfile";
}
}
@ -676,7 +804,7 @@ sub smb_client {
join(' ', map {quotemeta} (@SMBARGS, @args)));
if($DEBUG) {
say $cmd =~ s{\\([/+-])}{$1}gr;
say color('bold yellow'),$cmd =~ s{\\([./+-])}{$1}gr,color('reset');
}
my $out = `$cmd 2>&1`;