1# $Id: test.pl,v 1.1.1.1 2002/07/26 18:58:46 root Exp $
2# $Log: test.pl,v $
3# Revision 1.1.1.1  2002/07/26 18:58:46  root
4# initial
5#
6# Revision 0.3  1998/10/22 02:49:53  meltzek
7# Added verbose begining and ending of test.
8#
9# Revision 0.2  1998/10/22 02:46:56  meltzek
10# Added new checks.
11#
12
13BEGIN { $| = 1; print "Tests 1..20 begining\n"; }
14END {print "not ok 1\n" unless $loaded;}
15use Apache::Htpasswd;
16
17$loaded = 1;
18print "ok 1\n";
19
20######################### End of black magic.
21
22sub report_result {
23	my $ok = shift;
24	$TEST_NUM ||= 2;
25	print "not " unless $ok;
26	print "ok $TEST_NUM\n";
27	print "@_\n" if (not $ok and $ENV{TEST_VERBOSE});
28	$TEST_NUM++;
29}
30
31sub report_skip {
32        my $why = shift;
33        print "not ok $TEST_NUM # SKIP $why\n";
34	$TEST_NUM++;
35}
36
37# Create a test password file
38my $File = "testpasswords.test";
39open(TEST,">$File") || die "Can't run tests because I can't create $File [$!]";
40print TEST "kevin:kjDqW.pgNIz3Ufoo:suvPq./X7Q8nk\n";
41close TEST;
42
43
44
45{
46
47	# 2: Get file
48	&report_result($pwdFile = new Apache::Htpasswd ($File), $! );
49
50	# 3: store a value
51	&report_result($pwdFile->htpasswd("foo","foobar") , $! );
52
53	# 4: change value
54	&report_result(!$pwdFile->htpasswd("fooo", "goo","foobar" ) , $! );
55	&report_result($pwdFile->htpasswd("foo", "goo","foobar" ) , $! );
56
57	# 5: force change value
58	&report_result($pwdFile->htpasswd("foo","ummm",{'overwrite' => 1}), $! );
59
60	# 6: check the stored value
61	&report_result($pwdFile->fetchPass("foo") , $!);
62
63	# 7: check whether the empty key exists()
64	&report_result($pwdFile->htCheckPassword("foo","ummm"),$!);
65
66	# 8: add extra info
67	&report_result($pwdFile->writeInfo("kevin", "Test info"),$!);
68
69	# 9: fetch extra info
70	&report_result($pwdFile->fetchInfo("kevin"),$!);
71
72	# 10: Delete user
73	&report_result($pwdFile->htDelete("kevin"),$!);
74
75        # 11: get list
76        my @list = $pwdFile->fetchUsers();
77        &report_result($list[0] eq 'foo', $!);
78
79	# 12: get number of users
80        my $num  = $pwdFile->fetchUsers();
81        &report_result($num == 1, $!);
82
83	undef $pwdFile;
84
85	# 13: Create in read-only mode
86        &report_result($pwdFile = new Apache::Htpasswd({passwdFile => $File, ReadOnly => 1}), $! );
87
88  # 14: store a value (should fail)
89	# Should carp, but don't want to display it
90	sub Apache::Htpasswd::carp {};
91        &report_result(!$pwdFile->htpasswd("kevin","zog") , $! );
92
93}
94
95open(TEST,">>$File");
96print TEST "cryptuser:Iao36C/TVmCRc\n";
97print TEST "MD5user:\$apr1\$Yy.pS/..\$4bwpMUiVq/95BDr4kZ2lK.\n";
98print TEST "SHA1user:{SHA}QL0AFWMIX8NRZTKeof9cXsvbvu8=\n";
99print TEST "plainuser:123\n";
100close TEST;
101
102{
103	# 16: Create in read-only mode with UsePlain
104        &report_result($pwdFile = new Apache::Htpasswd({passwdFile => $File, ReadOnly => 1, UsePlain => 1}), $! );
105
106	# 17: check whether crypt passwords work
107	&report_result($pwdFile->htCheckPassword("cryptuser","123"),$!);
108
109	# 18: check whether MD5 passwords work
110        eval { require Crypt::PasswdMD5 };
111        if ($@) {
112            &report_skip('Crypt::PasswdMD5 required for this test');
113        } else {
114            &report_result($pwdFile->htCheckPassword("MD5user","123"),$!);
115        }
116
117	# 19: check whether SHA1 passwords work
118        eval { require Digest::SHA; require MIME::Base64 };
119        if ($@) {
120            &report_skip('Digest::SHA and MIME::Base64 required for this test');
121        } else {
122            &report_result($pwdFile->htCheckPassword("SHA1user","123"),$!);
123        }
124
125	# 20: check whether plain passwords work
126	&report_result($pwdFile->htCheckPassword("plainuser","123"),$!);
127
128}
129
130print "Test complete.\n";
131