swithc to Data::Dumper
[gitmo/MooseX-Storage.git] / t / 030_with_checksum.t
CommitLineData
c4a322ec 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
34dcaa5d 6use Test::More tests => 26;
c4a322ec 7use Test::Exception;
8use Test::Deep;
9
10BEGIN {
11 use_ok('MooseX::Storage');
12}
13
14{
15
16 package Foo;
17 use Moose;
18 use MooseX::Storage;
19
98ae09f0 20 with Storage(base => 'WithChecksum', format => "JSON");
c4a322ec 21
22 has 'number' => ( is => 'ro', isa => 'Int' );
23 has 'string' => ( is => 'ro', isa => 'Str' );
24 has 'float' => ( is => 'ro', isa => 'Num' );
25 has 'array' => ( is => 'ro', isa => 'ArrayRef' );
26 has 'hash' => ( is => 'ro', isa => 'HashRef' );
27 has 'object' => ( is => 'ro', isa => 'Foo' );
28}
29
30{
31 my $foo = Foo->new(
32 number => 10,
33 string => 'foo',
34 float => 10.5,
35 array => [ 1 .. 10 ],
36 hash => { map { $_ => undef } ( 1 .. 10 ) },
37 object => Foo->new( number => 2 ),
38 );
39 isa_ok( $foo, 'Foo' );
40
41 my $packed = $foo->pack;
42
43 cmp_deeply(
44 $packed,
45 {
46 __CLASS__ => 'Foo',
98ae09f0 47 __DIGEST__ => re('[0-9a-f]+'),
c4a322ec 48 number => 10,
49 string => 'foo',
50 float => 10.5,
51 array => [ 1 .. 10 ],
52 hash => { map { $_ => undef } ( 1 .. 10 ) },
53 object => {
54 __CLASS__ => 'Foo',
98ae09f0 55 __DIGEST__ => re('[0-9a-f]+'),
c4a322ec 56 number => 2
57 },
58 },
59 '... got the right frozen class'
60 );
61
62 my $foo2;
63 lives_ok {
64 $foo2 = Foo->unpack($packed);
65 } '... unpacked okay';
66 isa_ok($foo2, 'Foo');
67
68 cmp_deeply(
69 $foo2->pack,
70 {
71 __CLASS__ => 'Foo',
98ae09f0 72 __DIGEST__ => re('[0-9a-f]+'),
c4a322ec 73 number => 10,
74 string => 'foo',
75 float => 10.5,
76 array => [ 1 .. 10 ],
77 hash => { map { $_ => undef } ( 1 .. 10 ) },
78 object => {
79 __CLASS__ => 'Foo',
98ae09f0 80 __DIGEST__ => re('[0-9a-f]+'),
c4a322ec 81 number => 2
82 },
83 },
84 '... got the right frozen class'
85 );
c4a322ec 86}
87
98ae09f0 88{
89 my $foo = Foo->new(
90 number => 10,
91 string => 'foo',
92 float => 10.5,
93 array => [ 1 .. 10 ],
94 hash => { map { $_ => undef } ( 1 .. 10 ) },
95 object => Foo->new( number => 2 ),
96 );
97 isa_ok( $foo, 'Foo' );
98
99 my $frozen = $foo->freeze;
100
101 ok( length($frozen), "got frozen data" );
102
103 $frozen =~ s/foo/bar/;
104
105 my $foo2 = eval { Foo->thaw( $frozen ) };
106 my $e = $@;
107
108 ok( !$foo2, "not thawed" );
109 ok( $e, "has error" );
110 like( $e, qr/bad checksum/i, "bad checksum error" );
111}
112
113SKIP: {
114 eval { require Digest::HMAC_SHA1 };
115 skip join( " ", "no Digest::HMAC", ( $@ =~ /\@INC/ ? () : do { chomp(my $e = $@); "($e)" } ) ), 14 if $@;
116
34dcaa5d 117 local $::DEBUG = 1;
118
98ae09f0 119 my $foo = Foo->new(
120 number => 10,
121 string => 'foo',
122 float => 10.5,
123 array => [ 1 .. 10 ],
124 hash => { map { $_ => undef } ( 1 .. 10 ) },
125 object => Foo->new( number => 2 ),
126 );
127 isa_ok( $foo, 'Foo' );
128
a6ebb4c8 129 my $frozen1 = $foo->freeze( digest => [ "HMAC_SHA1", "secret" ] );
98ae09f0 130 ok( length($frozen1), "got frozen data" );
131
34dcaa5d 132 $::DEBUG = 0;
133
98ae09f0 134 my $d2 = Digest::HMAC_SHA1->new("s3cr3t");
135
a6ebb4c8 136 my $frozen2 = $foo->freeze( digest => $d2 );
98ae09f0 137 ok( length($frozen2), "got frozen data" );
138
139 cmp_ok( $frozen1, "ne", $frozen2, "versions are different" );
140
34dcaa5d 141 is( $frozen1, $foo->freeze( digest => [ HMAC_SHA1 => "secret" ] ), "refreeze" );
142
143$::DEBUG = 1;
144
a6ebb4c8 145 my $foo1 = eval { Foo->thaw( $frozen1, digest => [ "HMAC_SHA1", "secret" ] ) };
98ae09f0 146 my $e = $@;
147
148 ok( $foo1, "thawed" );
149 ok( !$e, "no error" ) || diag $e;
34dcaa5d 150
a6ebb4c8 151 my $foo2 = eval { Foo->thaw( $frozen2, digest => $d2 ) };
98ae09f0 152 $e = $@;
153
154 ok( $foo2, "thawed" );
155 ok( !$e, "no error" ) || diag $e;
156
a6ebb4c8 157 $foo1 = eval { Foo->thaw( $frozen1, digest => $d2 ) };
98ae09f0 158 $e = $@;
159
160 ok( !$foo1, "not thawed" );
161 ok( $e, "has error" );
162 like( $e, qr/bad checksum/i, "bad checksum error" );
163
164 $frozen1 =~ s/foo/bar/;
165
a6ebb4c8 166 $foo1 = eval { Foo->thaw( $frozen1, digest => [ "HMAC_SHA1", "secret" ] ) };
98ae09f0 167 $e = $@;
168
169 ok( !$foo1, "not thawed" );
170 ok( $e, "has error" );
171 like( $e, qr/bad checksum/i, "bad checksum error" );
172}