11 eval "use Digest; use Digest::SHA1";
12 plan skip_all => "Digest and Digest::SHA1 is required for this test" if $@;
14 plan skip_all => "JSON::Any is required for this test" if $@;
16 use_ok('MooseX::Storage');
25 with Storage(base => 'WithChecksum', format => "JSON");
27 has 'number' => ( is => 'ro', isa => 'Int' );
28 has 'string' => ( is => 'ro', isa => 'Str' );
29 has 'float' => ( is => 'ro', isa => 'Num' );
30 has 'array' => ( is => 'ro', isa => 'ArrayRef' );
31 has 'hash' => ( is => 'ro', isa => 'HashRef' );
32 has 'object' => ( is => 'ro', isa => 'Foo' );
41 hash => { map { $_ => undef } ( 1 .. 10 ) },
42 object => Foo->new( number => 2 ),
44 isa_ok( $foo, 'Foo' );
46 my $packed = $foo->pack;
52 __DIGEST__ => re('[0-9a-f]+'),
57 hash => { map { $_ => undef } ( 1 .. 10 ) },
60 __DIGEST__ => re('[0-9a-f]+'),
64 '... got the right frozen class'
69 $foo2 = Foo->unpack($packed);
70 } '... unpacked okay';
77 __DIGEST__ => re('[0-9a-f]+'),
82 hash => { map { $_ => undef } ( 1 .. 10 ) },
85 __DIGEST__ => re('[0-9a-f]+'),
89 '... got the right frozen class'
99 hash => { map { $_ => undef } ( 1 .. 10 ) },
100 object => Foo->new( number => 2 ),
102 isa_ok( $foo, 'Foo' );
104 my $frozen = $foo->freeze;
106 ok( length($frozen), "got frozen data" );
108 $frozen =~ s/foo/bar/;
110 my $foo2 = eval { Foo->thaw( $frozen ) };
113 ok( !$foo2, "not thawed" );
114 ok( $e, "has error" );
115 like( $e, qr/bad checksum/i, "bad checksum error" );
119 eval { require Digest::HMAC_SHA1 };
120 skip join( " ", "no Digest::HMAC", ( $@ =~ /\@INC/ ? () : do { chomp(my $e = $@); "($e)" } ) ), 15 if $@;
128 array => [ 1 .. 10 ],
129 hash => { map { $_ => undef } ( 1 .. 10 ) },
130 object => Foo->new( number => 2 ),
132 isa_ok( $foo, 'Foo' );
134 my $frozen1 = $foo->freeze( digest => [ "HMAC_SHA1", "secret" ] );
135 ok( length($frozen1), "got frozen data" );
139 my $d2 = Digest::HMAC_SHA1->new("s3cr3t");
141 my $frozen2 = $foo->freeze( digest => $d2 );
142 ok( length($frozen2), "got frozen data" );
144 cmp_ok( $frozen1, "ne", $frozen2, "versions are different" );
146 is( $frozen1, $foo->freeze( digest => [ HMAC_SHA1 => "secret" ] ), "refreeze" );
150 my $foo1 = eval { Foo->thaw( $frozen1, digest => [ "HMAC_SHA1", "secret" ] ) };
153 ok( $foo1, "thawed" );
154 ok( !$e, "no error" ) || diag $e;
156 my $foo2 = eval { Foo->thaw( $frozen2, digest => $d2 ) };
159 ok( $foo2, "thawed" );
160 ok( !$e, "no error" ) || diag $e;
162 $foo1 = eval { Foo->thaw( $frozen1, digest => $d2 ) };
165 ok( !$foo1, "not thawed" );
166 ok( $e, "has error" );
167 like( $e, qr/bad checksum/i, "bad checksum error" );
169 $frozen1 =~ s/foo/bar/;
171 $foo1 = eval { Foo->thaw( $frozen1, digest => [ "HMAC_SHA1", "secret" ] ) };
174 ok( !$foo1, "not thawed" );
175 ok( $e, "has error" );
176 like( $e, qr/bad checksum/i, "bad checksum error" );