Update password storage to a more compact form
[blerg.git] / lib / perl / Blerg-Database / t / database.t
1 # Before 'make install' is performed this script should be runnable with
2 # 'make test'. After 'make install' it should work as 'perl Blerg-Database.t'
3
4 #########################
5
6 # change 'tests => 1' to 'tests => last_test_to_print';
7
8 use File::Path qw/remove_tree/;
9 use strict;
10 use warnings;
11
12 use Test::More tests => 26;
13 BEGIN { use_ok('Blerg::Database') };
14
15 #########################
16
17 # Insert your test code below, the Test::More module is use()ed here so read
18 # its man page ( perldoc Test::More ) for help writing this test script.
19
20 # Setup
21 my $test_user = 'barfy';
22 my $test_dir = "/tmp/blerg_test_$$";
23 mkdir $test_dir;
24 chdir $test_dir;
25 mkdir 'data';
26 mkdir 'hash_tags';
27 mkdir 'ref_tags';
28
29 $ENV{BLERG_PATH} = $test_dir;
30 ok( Blerg::Database::init() );
31
32 my ($ptr, @list, $n);
33 $n = 0;
34
35 ### C interface
36
37 # Open a database
38 $ptr = Blerg::Database::_open($test_user);
39 ok( ref $ptr eq 'struct blergPtr' );
40
41 # Store
42 my $data = "Hello!";
43 my $t0 = time;
44 ok( Blerg::Database::_store($ptr, $data) == $n );
45
46 # Check internal database
47 open DATA, "data/$test_user/data0";
48 my $check_data = <DATA>;
49 close DATA;
50 ok( $check_data eq $data );
51
52 # Fetch
53 ok( Blerg::Database::_fetch($ptr, $n) eq $data );
54 ok( not defined Blerg::Database::_fetch($ptr, $n + 1) );
55
56 # Get time
57 my $t = Blerg::Database::_get_timestamp($ptr, $n);
58 ok( $t0 - $t <= 1.0 );
59
60 # Test tags
61 Blerg::Database::_store($ptr, "This is data A #data");
62 Blerg::Database::_store($ptr, "This is data B #data");
63 Blerg::Database::_store($ptr, "This is data C #data");
64 $n += 3;
65
66 @list = Blerg::Database::tag_list('#data', 0, 1);
67 ok( @list == 3 );
68 ok( $list[0]->{author} eq $test_user );
69 ok( $list[0]->{record} == $n );
70
71 # Test mute
72 ok( Blerg::Database::_set_mute($ptr, 1) );
73 ok( Blerg::Database::_get_mute($ptr) == 1 );
74 Blerg::Database::_store($ptr, "Testing more #data");
75 @list = Blerg::Database::tag_list('#data', 0, 1);
76 ok( @list == 3 );
77 ok( Blerg::Database::_set_mute($ptr, 0) );
78 ok( Blerg::Database::_get_mute($ptr) == 0 );
79 Blerg::Database::_store($ptr, "Testing more #data");
80 @list = Blerg::Database::tag_list('#data', 0, 1);
81 ok( @list == 4 );
82 $n += 2;
83
84 # Count
85 my $count = Blerg::Database::_get_record_count($ptr);
86 ok( $count == $n + 1 );
87
88 # Close database
89 ok( Blerg::Database::_close($ptr) );
90
91 # Test existence
92 ok( Blerg::Database::exists($test_user) );
93
94
95 ### Perl OO interface
96
97 # Open a nonexistent database
98 my $blerg = Blerg::Database->open_existing('nonexistent');
99 ok( not defined $blerg );
100
101 # Open a database
102 $blerg = Blerg::Database->open($test_user);
103 ok( defined $blerg );
104 ok( ref $blerg->{ptr} eq 'struct blergPtr');
105
106 # Fetch/Store
107 ok( $blerg->fetch(0) eq $data );
108 ok( $blerg->store($data) == $n + 1 );
109 $n++;
110 ok( $blerg->fetch($n) eq $data );
111
112 # Close database
113 $blerg->close;
114
115 END {
116         chdir;
117         remove_tree "/tmp/blerg_test_$$";
118 }