source: trunk/tests/AuthSQLTest.php @ 468

Last change on this file since 468 was 468, checked in by anonymous, 10 years ago

Completed integrating /branches/eli_branch into /trunk. Changes include:

  • Removed closing ?> from end of files
  • Upgrade old-style contructor methods to use construct() instead.
  • Class properties and methods defined as public, private, static or protected
  • Ensure code runs under E_ALL with only mysql_* deprecated warnings
  • Search for the '@' symbol anywhere it might be used to supress runtime errors, then replace with proper error recovery.
  • Run the php cli -l option to check files for syntax errors.
  • Bring tests up-to-date with latest version and methods of PHPUnit
File size: 9.7 KB
Line 
1<?php
2/**
3 * The Strangecode Codebase - a general application development framework for PHP
4 * For details visit the project site: <http://trac.strangecode.com/codebase/>
5 * Copyright 2001-2012 Strangecode, LLC
6 *
7 * This file is part of The Strangecode Codebase.
8 *
9 * The Strangecode Codebase is free software: you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as published by the
11 * Free Software Foundation, either version 3 of the License, or (at your option)
12 * any later version.
13 *
14 * The Strangecode Codebase is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License along with
20 * The Strangecode Codebase. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23/**
24 * PHPUnit test case for codebase/lib/Auth_SQL.inc.php
25 *
26 * The method skeletons below need to be filled in with
27 * real data so that the tests will run correctly. Replace
28 * all EXPECTED_VAL and PARAM strings with real data.
29 *
30 * Created with PHPUnit_Skeleton on 2005-08-09
31 */
32class AuthSQLTest extends PHPUnit_Framework_TestCase {
33
34    var $Auth_SQL;
35
36    static $shared_session;
37
38    function setUp()
39    {
40        require dirname(__FILE__) . '/_config.inc.php';
41        require_once '../lib/Auth_SQL.inc.php';
42        $this->Auth_SQL = new Auth_SQL('testauth');
43        $this->Auth_SQL->setParam(array(
44            'db_table'          => 'test_user_tbl',
45            'db_primary_key'    => 'user_id',
46            'db_login_table'    => 'test_login_tbl',
47            'login_url'         => '/login.php',
48            'blocking'          => true,
49            'encryption_type' => Auth_SQL::ENCRYPT_MD5_HARDENED,
50        ));
51
52        // Use fresh user table.
53        $this->Auth_SQL->initDB(true);
54
55        // Insert test data.
56        $db =& DB::getInstance();
57        $db->query("
58            INSERT INTO test_user_tbl (
59                username,
60                userpass,
61                first_name,
62                last_name,
63                email
64            ) VALUES (
65                'testuser',
66                '" . $this->Auth_SQL->encryptPassword('testpass') . "',
67                'John',
68                'Doe',
69                'root@localhost'
70            )
71        ");
72        $_SESSION = AuthSQLTest::$shared_session;
73    }
74
75    function tearDown()
76    {
77        $db =& DB::getInstance();
78
79        unset($this->Auth_SQL);
80        $db->query("DROP TABLE IF EXISTS test_user_tbl");
81        $db->query("DROP TABLE IF EXISTS test_login_tbl");
82        AuthSQLTest::$shared_session = $_SESSION;
83    }
84
85    function test_set()
86    {
87        $this->Auth_SQL->set('testuserkey', 'testuserval');
88        $this->assertEquals('testuserval', $_SESSION['_auth_sql']['testauth']['user_data']['testuserkey']);
89    }
90
91    function test_get()
92    {
93        $_SESSION['_auth_sql']['testauth']['user_data']['testuserkey'] = 'testuserval';
94        $val = $this->Auth_SQL->get('testuserkey');
95        $this->assertEquals('testuserval', $val);
96    }
97
98    function test_setparam()
99    {
100        $this->Auth_SQL->setParam(array(
101            'login_url'         => 'testloginurl.php'
102        ));
103        $this->assertEquals('testloginurl.php', $this->Auth_SQL->getParam('login_url'));
104    }
105
106    function test_getparam()
107    {
108        //$this->Auth_SQL->_params['login_url'] = 'testloginurl.php';
109        $this->Auth_SQL->setParam(array(
110            'login_url'         => 'testloginurl.php'
111        ));
112        $param = $this->Auth_SQL->getParam('login_url');
113        $this->assertEquals('testloginurl.php', $param);
114    }
115
116    function test_clear()
117    {
118        $login = $this->Auth_SQL->login('testuser', 'testpass');
119        $this->assertTrue($login, 'User login failed, but should have succeeded.');
120        $before_logged_in = $this->Auth_SQL->isloggedin();
121        $this->assertTrue($before_logged_in, 'User is not logged in, but should be.');
122        $this->Auth_SQL->clear();
123        $after_logged_in = $this->Auth_SQL->isloggedin();
124        $this->assertFalse($after_logged_in, 'User is still logged in but should not be.');
125    }
126
127    function test_authenticate()
128    {
129        $true = $this->Auth_SQL->authenticate('testuser', 'testpass');
130        $this->assertInternalType('array', $true, 'User login failed, but should have succeeded.');
131
132        // Testing wrong password.
133        $false = $this->Auth_SQL->authenticate('testuser', 'wrongpass');
134
135        $this->assertfalse($false, 'User login succeeded, but should have failed.');
136    }
137
138    function test_login_and_isLoggedIn()
139    {
140        $login = $this->Auth_SQL->login('testuser', 'testpass');
141        $this->assertTrue($login, '1. User login failed, but should have succeeded.');
142        $before_logged_in = $this->Auth_SQL->isloggedin();
143        $this->assertTrue($before_logged_in, '2. User is not logged in, but should be.');
144        $this->Auth_SQL->clear();
145        $after_logged_in = $this->Auth_SQL->isloggedin();
146        $this->assertFalse($after_logged_in, '3. User is still logged in but should not be.');
147
148        // Testing wrong password.
149        $login2 = $this->Auth_SQL->login('testuser', 'wrongpass');
150        $this->assertFalse($login2, '4. User login succeeded, but should have failed.');
151        $before_logged_in2 = $this->Auth_SQL->isloggedin();
152        $this->assertFalse($before_logged_in2, '5. User is logged in, but should not be.');
153        $this->Auth_SQL->clear();
154        $after_logged_in2 = $this->Auth_SQL->isloggedin();
155        $this->assertFalse($after_logged_in2, '6. Wrong user is still logged in but should not be.');
156    }
157
158    function test_requirelogin()
159    {
160//         $this->Auth_SQL->requirelogin('Login is required!');
161    }
162
163    function test_blockaccount()
164    {
165        $db =& DB::getInstance();
166
167        $this->Auth_SQL->login('testuser', 'testpass');
168        $this->Auth_SQL->blockaccount(null, 'blocktestuser');
169        $qid = $db->query("
170            SELECT blocked_reason
171            FROM test_user_tbl
172        ");
173        list($reason) = mysql_fetch_row($qid);
174        $this->assertEquals('blocktestuser', $reason, "Block not found in DB record.");
175    }
176
177    function test_unblockaccount()
178    {
179        $db =& DB::getInstance();
180
181        $db->query("
182            UPDATE test_user_tbl SET blocked_reason = 'blocktestuser'
183        ");
184        $this->Auth_SQL->unblockaccount();
185
186        $qid = $db->query("
187            SELECT blocked_reason
188            FROM test_user_tbl
189        ");
190        list($reason) = mysql_fetch_row($qid);
191        $this->assertTrue('' == $reason, "Block not removed from DB record.");
192    }
193
194    function test_usernameexists()
195    {
196        $result = $this->Auth_SQL->usernameexists('testuser');
197        $this->assertTrue($result);
198    }
199
200    function test_getusername()
201    {
202        $result = $this->Auth_SQL->getusername(1);
203        $this->assertEquals('testuser', $result);
204    }
205
206    function test_generatepassword()
207    {
208        $result = $this->Auth_SQL->generatepassword('xCVcvd');
209        $this->assertRegExp('/[bcdfghjklmnprstvwxzBCDFGHJKLMNPRSTVWXZaeiouyAEIOUY0123456789!@#%&*-=+.?][bcdfghjklmnprstvwxzBCDFGHJKLMNPRSTVWXZ][aeiouyAEIOUY][bcdfghjklmnprstvwxz][aeiouy][0123456789]/', $result, 'Generated password does not match intended pattern');
210    }
211
212    function test_encryptpassword()
213    {
214        $this->Auth_SQL->setParam(array('encryption_type' => Auth_SQL::ENCRYPT_MD5));
215        $result = $this->Auth_SQL->encryptpassword('123');
216        $this->assertEquals('202cb962ac59075b964b07152d234b70', $result);
217
218        $this->Auth_SQL->setParam(array('encryption_type' => Auth_SQL::ENCRYPT_MD5_HARDENED));
219        $result = $this->Auth_SQL->encryptpassword('123');
220        $this->assertEquals('c55e4ac608a8768ecd758fab971b0646', $result);
221
222        $this->Auth_SQL->setParam(array('encryption_type' => Auth_SQL::ENCRYPT_SHA1));
223        $result = $this->Auth_SQL->encryptpassword('123');
224        $this->assertEquals('40bd001563085fc35165329ea1ff5c5ecbdbbeef', $result);
225
226        $this->Auth_SQL->setParam(array('encryption_type' => Auth_SQL::ENCRYPT_SHA1_HARDENED));
227        $result = $this->Auth_SQL->encryptpassword('123');
228        $this->assertEquals('33d90af96a5928ac93cbd41fc436e8c55d2768c2', $result);
229
230        $this->Auth_SQL->setParam(array('encryption_type' => Auth_SQL::ENCRYPT_PLAINTEXT));
231        $result = $this->Auth_SQL->encryptpassword('123');
232        $this->assertEquals('123', $result);
233
234        $this->Auth_SQL->setParam(array('encryption_type' => Auth_SQL::ENCRYPT_CRYPT));
235        $result = $this->Auth_SQL->encryptpassword('123', 'saltstring');
236        $this->assertEquals('saEZ6MlWYV9nQ', $result);
237    }
238
239    function test_setpassword()
240    {
241        $db =& DB::getInstance();
242
243        $this->Auth_SQL->setParam(array('encryption_type' => Auth_SQL::ENCRYPT_SHA1_HARDENED));
244        $this->Auth_SQL->setpassword(null, '123');
245        $qid = $db->query("
246            SELECT userpass
247            FROM test_user_tbl
248        ");
249        list($pass) = mysql_fetch_row($qid);
250        $this->assertEquals('33d90af96a5928ac93cbd41fc436e8c55d2768c2', $pass);
251    }
252
253    function test_resetpassword()
254    {
255        $result = $this->Auth_SQL->resetpassword(1, 'Because this is a test.');
256        $this->assertInternalType('array', $result);
257
258    }
259
260//     function test_inclearancezone()
261//     {
262//         $result = $this->Auth_SQL->inclearancezone(PARAM);
263//         $expected = EXPECTED_VAL;
264//         $this->assertEquals($expected, $result);
265//     }
266//
267//     function test_requireaccessclearance()
268//     {
269//         $result = $this->Auth_SQL->requireaccessclearance(PARAM);
270//         $expected = EXPECTED_VAL;
271//         $this->assertEquals($expected, $result);
272//     }
273
274}
275
Note: See TracBrowser for help on using the repository browser.