# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN { $| = 1; print "1..22\n"; } END {print "not ok 1\n" unless $loaded;} #use lib qw (../../blib/lib blib/lib); use lib qw (blib/lib); require Crypt::License::Notice; $loaded = 1; print "ok 1\n"; ######################### End of black magic. # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): my $test = 2; my $tmp = './'; my $lf = 'License.tmp'; my $user = `/usr/bin/id -un`; chomp $user; my $tgt = "$user.bln"; my $notice = "./notice.tmp"; unlink $lf if (-e $lf); unlink $notice if (-e $notice); unlink "$tmp/$tgt" if (-e "$tmp/$tgt"); my $License_data = q| just some stuff to put in a file ID: : 54321 JUNK: : a little junk |; my $expected_txt = q|From: root To: monkey_see@monkey.do Subject: LICENSE EXPIRATION ID:| . (split('ID:', $License_data))[1] . "\n";; my $ptr = { 'path' => do {$_ = `/bin/pwd`; chomp;$_} . "/$lf", 'expires' => 12345, # will write tmp file if detected 'TMPDIR' => $tmp, 'ACTION' => "/bin/cat > $notice", 'TO' => 'monkey_see@monkey.do', 'INTERVALS' => '2w,4d,8h,16m,32s,64', }; @expectedI = (1209600,345600,28800,960,64,32); #### FAIL tests first # there is no license file print "did not detect missing License file\nnot " if Crypt::License::Notice->check($ptr); &OK_test; # write a temporary license file unless (open(LF,">$ptr->{path}")) { print "could not open $lf for write\nnot "; } else { print LF $License_data; close LF; } &OK_test; $tmp = $ptr->{path}; delete $ptr->{path}; print "did not detect missing 'path' hash key\nnot " if Crypt::License::Notice->check($ptr); &OK_test; $ptr->{path} = $tmp; delete $ptr->{expires}; # there is no expiration print "did not detect missing 'expires' hash key\nnot " if Crypt::License::Notice->check($ptr); &OK_test; # expiration is zero $ptr->{expires} = 0; print "did not detect zero 'expires' hash value\nnot " if Crypt::License::Notice->check($ptr); &OK_test; # expiration is greater than any check value $ptr->{expires} = $expectedI[0] +1; print "did not check expiration $ptr->{expires}\nnot " unless (@_ = Crypt::License::Notice->check($ptr)); &OK_test; # unexpected notice tracking file found print "unexpected tracking file $ptr->{TMPDIR}/$user.bln for $ptr->{expires}\nnot " if (-e "$ptr->{TMPDIR}/$user.bln"); &OK_test; # unexpected notice found print "created unexpected notice for $ptr->{expires}\nnot " if (-e $notice); &OK_test; # wrong number of check arguments $tmp = 0; ++$tmp unless @_ == @expectedI; # same number of arguments print "wrong number of check arguments @_\nnot " if $tmp; &OK_test; $tmp = 0; foreach(0..$#_) { ++$tmp unless $_[$_] == $expectedI[$_]; } print "check times @_ do not agree with expected values\nnot " if $tmp; &OK_test; # detect illegal character $tmp = $ptr->{INTERVALS}; $ptr->{INTERVALS} = '12x34'; eval{Crypt::License::Notice->check($ptr)}; print "did not detect illegal character string '$ptr->{INTERVALS}'\nnot " unless $@; &OK_test; $ptr->{INTERVALS} = $tmp; #### PASS tests # create tracking file and notice, test each epoch $ptr->{INTERVALS} = '5,2'; my ($ctime, $prev); foreach my $chk (5,2) { # check that abutting timeout is NOT found &no_find($chk) unless $chk == 5; # skip first back check # check that overflow value is found $ptr->{expires} = $chk; $prev = &next_sec(time); Crypt::License::Notice->check($ptr); $_ = `/bin/cat $notice`; print "$chk, notice text does not match expected\nnot " unless $_ eq $expected_txt; &OK_test; $ctime = (stat("$ptr->{TMPDIR}/$user.bln"))[10]; print "ctime $ctime is not now $prev\nnot " unless $ctime == $prev; &OK_test; unlink $notice; } # check 0 -- expired is not found ever &no_find(0); &no_find(0); unlink "$ptr->{TMPDIR}/$user.bln" if ( -e "$ptr->{TMPDIR}/$user.bln"); # clean up sub next_sec { my ($then) = @_; do { select(undef,undef,undef,0.1); $now = time } while ( $then == $now ); # wait for epoch $now; } sub OK_test { print "ok $test\n"; ++$test; } sub no_find { my $chk = $_[0]; $ptr->{expires} = $chk + 1; do { $tmp = &next_sec(time) } while ( $tmp < $prev + $ptr->{expires}); # wait for next epoch Crypt::License::Notice->check($ptr); print "$chk , unexpected notice found for check $ptr->{expires}\nnot " if (-e $notice); &OK_test; $ctime = (stat("$ptr->{TMPDIR}/$user.bln"))[10]; print "ctime $ctime should be $prev\nnot " unless $ctime == $prev; &OK_test; }