-
Notifications
You must be signed in to change notification settings - Fork 181
/
Copy pathsfMySQLStorageTest.php
139 lines (110 loc) · 4.79 KB
/
sfMySQLStorageTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
/*
* This file is part of the symfony package.
* (c) 2004-2006 Fabien Potencier <[email protected]>
* (c) 2008 Dejan Spasic <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
require_once __DIR__.'/../../bootstrap/unit.php';
ob_start();
$plan = 16;
$t = new lime_test($plan);
if (!extension_loaded('mysql')) {
$t->skip('Mysql extension must be loaded', $plan);
return;
}
// Configure your database with the settings below in order to run the test
$mysql_config = [
'host' => 'localhost',
'username' => 'root',
'password' => '', ];
if (!isset($mysql_config)) {
$t->skip('Mysql credentials needed to run these tests', $plan);
return;
}
try {
// Creating mysql database connection
$database = new sfMySQLDatabase($mysql_config);
$connection = $database->getResource();
} catch (sfDatabaseException $e) {
$t->diag($e->getMessage());
$t->skip('Unable to connect to MySQL database, skipping', $plan);
return;
}
// Creates test database
mysql_query('DROP DATABASE IF EXISTS sf_mysql_storage_unit_test', $connection);
mysql_query('CREATE DATABASE sf_mysql_storage_unit_test', $connection) or $t->fail('Cannot create database sf_mysql_storage_unit_test');
mysql_select_db('sf_mysql_storage_unit_test', $connection);
mysql_query("CREATE TABLE `session` (
`sess_id` varchar(40) NOT NULL PRIMARY KEY,
`sess_time` int(10) unsigned NOT NULL default '0',
`sess_data` text collate utf8_unicode_ci
) ENGINE=MyISAM", $connection)
or $t->fail('Can not create table session');
ini_set('session.use_cookies', 0);
$session_id = '1';
$storage = new sfMySQLSessionStorage(
[
'db_table' => 'session',
'session_id' => $session_id,
'database' => $database]
);
$t->ok($storage instanceof sfStorage, 'sfMySQLSessionStorage is an instance of sfStorage');
$t->ok($storage instanceof sfDatabaseSessionStorage, 'sfMySQLSessionStorage is an instance of sfDatabaseSessionStorage');
// regenerate()
$oldSessionData = 'foo:bar';
$storage->sessionWrite($session_id, $oldSessionData);
$storage->regenerate(false);
$newSessionData = 'foo:bar:baz';
$storage->sessionWrite(session_id(), $newSessionData);
$t->isnt(session_id(), $session_id, 'regenerate() regenerated the session with a different session id');
// checking if the old session record still exists
$result = mysql_query(sprintf('SELECT sess_data FROM session WHERE sess_id = "%s"', $session_id), $connection);
$t->is(mysql_num_rows($result), 1, 'regenerate() has kept destroyed old session');
$rSessionData = list($thisSessData) = mysql_fetch_row($result);
$t->is($rSessionData[0], $oldSessionData, 'regenerate() has kept destroyed old session data');
// checking if the new session record has been created
$result = mysql_query(sprintf('SELECT sess_data FROM session WHERE sess_id = "%s"', session_id()), $connection);
$t->is(mysql_num_rows($result), 1, 'regenerate() has created a new session record');
$rSessionData = list($thisSessData) = mysql_fetch_row($result);
$t->is($rSessionData[0], $newSessionData, 'regenerate() has created a new record with correct data');
$session_id = session_id();
// check session data in the database
$result = mysql_query(sprintf('SELECT sess_data FROM session WHERE sess_id = "%s"', $session_id), $connection);
list($thisSessData) = mysql_fetch_row($result);
$t->is(mysql_num_rows($result), 1, 'session is stored in the database');
$t->is($thisSessData, $newSessionData, 'session variables are stored in the database');
mysql_free_result($result);
unset($thisSessData, $result);
// sessionRead()
try {
$retrieved_data = $storage->sessionRead($session_id);
$t->pass('sessionRead() does not throw an exception');
} catch (Exception $e) {
$t->fail('sessionRead() does not throw an exception');
}
$t->is($retrieved_data, $newSessionData, 'sessionRead() reads session data');
// sessionWrite()
$otherSessionData = 'foo:foo:foo';
try {
$write = $storage->sessionWrite($session_id, $otherSessionData);
$t->pass('sessionWrite() does not throw an exception');
} catch (Exception $e) {
$t->fail('sessionWrite() does not throw an exception');
}
$t->ok($write, 'sessionWrite() returns true');
$t->is($storage->sessionRead($session_id), $otherSessionData, 'sessionWrite() wrote session data');
// sessionDestroy()
try {
$storage->sessionDestroy($session_id);
$t->pass('sessionDestroy() does not throw an exception');
} catch (Exception $e) {
$t->fail('sessionDestroy() does not throw an exception');
}
$result = mysql_query(sprintf('SELECT COUNT(sess_id) FROM session WHERE sess_id = "%s"', $session_id), $connection);
list($count) = mysql_fetch_row($result);
$t->is($count, 0, 'session is removed from the database');
mysql_free_result($result);
unset($count, $result);