CVS commit by ossi: much improved journal replay testing. some clenup.
M +111 -66 run-tests.pl 1.16 --- isync/src/run-tests.pl #1.15:1.16 @@ -225,9 +225,4 @@ -sub fcfg(@) -{ - return join(" // ", map({ my $t = $_; chomp $t; $t =~ s/\n/ \/ /g; $t; } @_)); -} - sub qm($) { @@ -240,6 +235,6 @@ } -# $global, $master, $slave, $channel -sub runsync($$$) +# $global, $master, $slave +sub writecfg($$$) { open(FILE, ">", ".mbsyncrc") or @@ -260,34 +255,21 @@ ".shift(); close FILE; - open FILE, "../mbsync -D -J -c .mbsyncrc test 2>&1 |"; - my @out = <FILE>; - close FILE; - open(FILE, "<", "slave/.mbsyncstate") or - die "Cannot read old sync state.\n"; - my @oss = <FILE>; - close FILE; - open(FILE, "<", "slave/.mbsyncstate.journal") or - die "Cannot read journal.\n"; - my @nj = <FILE>; - close FILE; - open(FILE, "<", "slave/.mbsyncstate.new") or - die "Cannot read new sync state.\n"; - my @nss = <FILE>; - close FILE; - open FILE, "../mbsync -D -c .mbsyncrc --noop test 2>&1 |"; - my @jout = <FILE>; - close FILE; - open(FILE, "<", "slave/.mbsyncstate") or - die "Cannot read sync state.\n"; - my @jss = <FILE>; - close FILE; +} + +sub killcfg() +{ unlink ".mbsyncrc"; - if ("@nss" ne "@jss") { - print "Journalling error.\nOld State:\n".join("", @oss)."\nJournal:\n".join("", @nj)."\nNew State:\n".join("", @jss)."\nExpected New State:\n".join("", @nss)."\n"; - exit 1; - } +} + +# $options +sub runsync($) +{ + open FILE, "../mbsync -D ".shift()." -c .mbsyncrc test 2>&1 |"; + my @out = <FILE>; + close FILE or push(@out, $! ? "*** error closing mbsync: $!\n" : "*** mbsync exited with signal ".($?&127).", code ".($?>>8)."\n"); return @out; } + # $path sub readbox($) @@ -352,20 +334,27 @@ } -# $num -sub showchan() +# $filename +sub showstate($) { - showbox("master"); - showbox("slave"); - open(FILE, "<", "slave/.mbsyncstate") or - die "Cannot read sync state.\n"; + my ($fn) = @_; + + if (!open(FILE, "<", $fn)) { + print STDERR " Cannot read sync state $fn: $!\n"; + return; + } $_ = <FILE>; - /^1:(\d+) 1:(\d+):(\d+)\n$/; + if (!defined $_) { + print STDERR " Missing sync state header.\n"; + close FILE; + return; + } + if (!/^1:(\d+) 1:(\d+):(\d+)\n$/) { + print STDERR " Malformed sync state header '$_'.\n"; + close FILE; + return; + } print " [ $1, $2, $3,\n "; my $frst = 1; for (<FILE>) { - if (!/^(-?\d+) (-?\d+) (.*)\n$/) { - print STDERR "Malformed sync state entry '$_'.\n"; - next; - } if ($frst) { $frst = 0; @@ -373,5 +362,9 @@ print ", "; } - print "$1, $2, \"$3\""; + if (!/^(-?\d+) (-?\d+) (.*)\n$/) { + print "??, ??, \"??\""; + } else { + print "$1, $2, \"$3\""; + } } print " ],\n"; @@ -379,4 +372,14 @@ } +# $filename +sub showchan($) +{ + my ($fn) = @_; + + showbox("master"); + showbox("slave"); + showstate($fn); +} + sub show($$@) { @@ -386,10 +389,12 @@ mkchan($sp[0], $sp[1], @{ $sp[2] }); print "my [EMAIL PROTECTED] = (\n"; - showchan(); + showchan("slave/.mbsyncstate"); print ");\n"; - &runsync(@sfx); + &writecfg(@sfx); + runsync(""); + killcfg(); print "my [EMAIL PROTECTED] = (\n"; print " [ ".join(", ", map('"'.qm($_).'"', @sfx))." ],\n"; - showchan(); + showchan("slave/.mbsyncstate"); print ");\n"; print "test([EMAIL PROTECTED], [EMAIL PROTECTED]);\n\n"; @@ -472,18 +477,21 @@ } -# $config, [EMAIL PROTECTED], [EMAIL PROTECTED], @syncstate -sub ckchan($$$@) +# $filename, @syncstate +sub ckstate($@) { - my ($cfg, $M, $S, @T) = @_; - my $rslt = 0; - open(FILE, "<", "slave/.mbsyncstate") or - die "Cannot read sync state.\n"; - chomp(my $l = <FILE>); + my ($fn, @T) = @_; + open(FILE, "<", $fn) or die "Cannot read sync state $fn.\n"; + my $l = <FILE>; chomp(my @ls = <FILE>); close FILE; + if (!defined $l) { + print STDERR "Sync state header missing.\n"; + return 1; + } + chomp($l); my $xl = "1:".shift(@T)." 1:".shift(@T).":".shift(@T); if ($l ne $xl) { print STDERR "Sync state header mismatch: '$l' instead of '$xl'.\n"; - $rslt = 1; + return 1; } else { for $l (@ls) { @@ -491,9 +499,16 @@ if ($l ne $xl) { print STDERR "Sync state entry mismatch: '$l' instead of '$xl'.\n"; - $rslt = 1; - last; + return 1; } } } + return 0; +} + +# [EMAIL PROTECTED], [EMAIL PROTECTED], @syncstate +sub ckchan($$@) +{ + my ($M, $S, @T) = @_; + my $rslt = ckstate("slave/.mbsyncstate.new", @T); $rslt |= &ckbox("master", @{ $M }); $rslt |= &ckbox("slave", @{ $S }); @@ -518,10 +533,9 @@ } -sub printchan($$@) +# @syncstate +sub printstate(@) { - my ($m, $s, @t) = @_; + my (@t) = @_; - &printbox("master", @{ $m }); - &printbox("slave", @{ $s }); print " [ ".shift(@t).", ".shift(@t).", ".shift(@t).",\n "; my $frst = 1; @@ -538,4 +552,14 @@ } +# [EMAIL PROTECTED], [EMAIL PROTECTED], @syncstate +sub printchan($$@) +{ + my ($m, $s, @t) = @_; + + &printbox("master", @{ $m }); + &printbox("slave", @{ $s }); + printstate(@t); +} + sub test($$) { @@ -543,14 +567,35 @@ mkchan($$sx[0], $$sx[1], @{ $$sx[2] }); - my @ret = &runsync(@{ $$tx[0] }); - if (ckchan(fcfg(@{ $$tx[0] }), $$tx[1], $$tx[2], @{ $$tx[3] })) { + &writecfg(@{ $$tx[0] }); + my @ret = runsync("-J"); + if (ckchan($$tx[1], $$tx[2], @{ $$tx[3] })) { print "Input:\n"; printchan($$sx[0], $$sx[1], @{ $$sx[2] }); print "Options:\n"; - print " [ ".join(", ", map('"'.qm($_).'"', @{ $$tx[0] }))." ],\n"; + print " [ ".join(", ", map('"'.qm($_).'"', @{ $$tx[0] }))." ]\n"; print "Expected result:\n"; printchan($$tx[1], $$tx[2], @{ $$tx[3] }); print "Actual result:\n"; - showchan(); + showchan("slave/.mbsyncstate.new"); + print "Debug output:\n"; + print @ret; + exit 1; + } + open(FILE, "<", "slave/.mbsyncstate.journal") or + die "Cannot read journal.\n"; + my @nj = <FILE>; + close FILE; + @ret = runsync(""); + killcfg(); + if (ckstate("slave/.mbsyncstate", @{ $$tx[3] })) { + print "Options:\n"; + print " [ ".join(", ", map('"'.qm($_).'"', @{ $$tx[0] }))." ]\n"; + print "Old State:\n"; + printstate(@{ $$sx[2] }); + print "Journal:\n".join("", @nj)."\n"; + print "Expected New State:\n"; + printstate(@{ $$tx[3] }); + print "New State:\n"; + showstate("slave/.mbsyncstate"); print "Debug output:\n"; print @ret; ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642 _______________________________________________ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel