10c9329d8b05411718232cd1bafb74e6a7913909
[dbsrgits/DBM-Deep.git] / t / 15_digest.t
1 ##
2 # DBM::Deep Test
3 ##
4 use strict;
5 use Test::More tests => 14;
6 use File::Temp qw( tempfile tempdir );
7 use Fcntl qw( :flock );
8
9 use_ok( 'DBM::Deep' );
10
11 my $dir = tempdir( CLEANUP => 1 );
12 my ($fh, $filename) = tempfile( 'tmpXXXX', UNLINK => 1, DIR => $dir );
13 flock $fh, LOCK_UN;
14
15 my $salt = 38473827;
16
17 my $db = new DBM::Deep(
18         file => $filename,
19 );
20
21 ##
22 # Set digest handler
23 ##
24 $db->_get_self->{engine}->set_digest( \&my_digest, 8 );
25
26 ##
27 # put/get key
28 ##
29 $db->{key1} = "value1";
30 ok( $db->{key1} eq "value1" );
31
32 $db->put("key2", "value2");
33 ok( $db->get("key2") eq "value2" );
34
35 ##
36 # key exists
37 ##
38 ok( $db->exists("key1") );
39 ok( exists $db->{key2} );
40
41 ##
42 # count keys
43 ##
44 ok( scalar keys %$db == 2 );
45
46 ##
47 # step through keys
48 ##
49 my $temphash = {};
50 while ( my ($key, $value) = each %$db ) {
51         $temphash->{$key} = $value;
52 }
53
54 ok( ($temphash->{key1} eq "value1") && ($temphash->{key2} eq "value2") );
55
56 $temphash = {};
57 my $key = $db->first_key();
58 while ($key) {
59         $temphash->{$key} = $db->get($key);
60         $key = $db->next_key($key);
61 }
62
63 ok( ($temphash->{key1} eq "value1") && ($temphash->{key2} eq "value2") );
64
65 ##
66 # delete keys
67 ##
68 ok( delete $db->{key1} );
69 ok( $db->delete("key2") );
70
71 ok( scalar keys %$db == 0 );
72
73 ##
74 # delete all keys
75 ##
76 $db->put("another", "value");
77 $db->clear();
78
79 ok( scalar keys %$db == 0 );
80
81 ##
82 # replace key
83 ##
84 $db->put("key1", "value1");
85 $db->put("key1", "value2");
86
87 ok( $db->get("key1") eq "value2" );
88
89 $db->put("key1", "value222222222222222222222222");
90
91 ok( $db->get("key1") eq "value222222222222222222222222" );
92
93 sub my_digest {
94         ##
95         # Warning: This digest function is for testing ONLY
96         # It is NOT intended for actual use
97         ##
98         my $key = shift;
99         my $num = $salt;
100         
101         for (my $k=0; $k<length($key); $k++) {
102                 $num += ord( substr($key, $k, 1) );
103         }
104         
105         return sprintf("%00000008d", $num);
106 }