1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#
# start with persist on.
#
use strict;
use warnings;
use Test::More;
use MyNote;
use Config;
use File::Temp;
use Time::HiRes ();
use vars qw(@OPTS $tmpdir $fn0 $fn1);
BEGIN {
$tmpdir = File::Temp->newdir(CLEANUP => 0);
$fn0 = File::Temp::tempnam($tmpdir, 'UUID.test.');
$fn1 = File::Temp::tempnam($tmpdir, 'UUID.test.');
@OPTS = ('uuid1', ':mac=random', ':persist='.$fn0);
}
use UUID @OPTS;
my ($ts0, $ts1);
ok 1, 'loaded';
ok -d $tmpdir, 'tmpdir exists';
ok !-e $fn0, 'start persist missing';
ok !-e $fn1, 'later persist missing';
uuid1();
ok -e $fn0, 'start persist found';
$ts0 = gettime($fn0);
#note $ts0;
UUID::_persist(undef);
uuid1();
$ts1 = gettime($fn0);
is $ts1, $ts0, 'start persist unchanged';
UUID::_persist($fn1);
uuid1();
ok -e $fn1, 'later persist found';
$ts1 = gettime($fn1);
cmp_ok $ts1, '>', $ts0, 'later larger than start';
UUID::_persist($fn0);
uuid1();
$ts0 = gettime($fn0);
cmp_ok $ts0, '>', $ts1, 'latest largest';
# close state so Win32 can cleanup
UUID::_persist(undef);
unlink $fn0;
unlink $fn1;
rmdir $tmpdir;
done_testing;
sub gettime {
my ($fn) = @_;
open my $fh, '<', $fn or return 0;
#clock: 3735 tv: 0000001707180262 00390359 adj: 00000000
my $dat = <$fh>;
undef $fh;
note $dat;
my @vals = (split /\s+/, $dat)[3,4,6];
# sleep here so the timestamps actually change.
if (Time::HiRes::d_nanosleep()) {
Time::HiRes::nanosleep(10_000_000); # 10ms
}
elsif (Time::HiRes::d_usleep()) {
Time::HiRes::usleep(10_000); # 10ms
}
elsif ($Config{d_select}) {
select undef, undef, undef, 0.01; # 10ms
}
else {
sleep 1;
}
return sprintf '%d.%07d', $vals[0], $vals[1]*10+$vals[2];
}
|