From 74f537e89d899831c606b9abe218383a4e71408e Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Tue, 4 Jan 2011 17:14:36 +0100 Subject: [task/session-tests] Added tests for the session class. Two first simple tests to check functionality of session_begin and session_create. Added a mock class for the cache as well as a subclass of session which has its cookie handling function mocked out to avoid header sending problems. PHPBB3-9732 --- tests/session/fixtures/sessions_empty.xml | 19 +++++++ tests/session/fixtures/sessions_full.xml | 37 ++++++++++++++ tests/session/session_continue.php | 83 +++++++++++++++++++++++++++++++ tests/session/session_init.php | 76 ++++++++++++++++++++++++++++ 4 files changed, 215 insertions(+) create mode 100644 tests/session/fixtures/sessions_empty.xml create mode 100644 tests/session/fixtures/sessions_full.xml create mode 100644 tests/session/session_continue.php create mode 100644 tests/session/session_init.php (limited to 'tests/session') diff --git a/tests/session/fixtures/sessions_empty.xml b/tests/session/fixtures/sessions_empty.xml new file mode 100644 index 0000000000..66fa585b18 --- /dev/null +++ b/tests/session/fixtures/sessions_empty.xml @@ -0,0 +1,19 @@ + + + + user_id + username_clean + + 1 + anonymous + + + 3 + foo + + + 4 + bar + +
+
diff --git a/tests/session/fixtures/sessions_full.xml b/tests/session/fixtures/sessions_full.xml new file mode 100644 index 0000000000..4559a08c55 --- /dev/null +++ b/tests/session/fixtures/sessions_full.xml @@ -0,0 +1,37 @@ + + + + user_id + username_clean + + 1 + anonymous + + + 3 + foo + + + 4 + bar + +
+ + session_id + session_user_id + session_ip + session_browser + + anon_session + 1 + 127.0.0.1 + anonymous user agent + + + bar_session + 4 + 127.0.0.1 + user agent + +
+
diff --git a/tests/session/session_continue.php b/tests/session/session_continue.php new file mode 100644 index 0000000000..15be667325 --- /dev/null +++ b/tests/session/session_continue.php @@ -0,0 +1,83 @@ +createXMLDataSet(dirname(__FILE__).'/fixtures/sessions_full.xml'); + } + + public function test_session_begin_valid_session() + { + $session = new phpbb_mock_session_testable; + $session->page = array('page' => 'page', 'forum' => 0); + + // set up all the global variables used in session_create + global $SID, $_SID, $db, $config, $cache; + + $config = $this->get_config(); + $db = $this->new_dbal(); + $cache_data = array( + '_bots' => array(), + ); + $cache = new phpbb_mock_cache; + $SID = $_SID = null; + + $_COOKIE['_sid'] = 'bar_session'; + $_COOKIE['_u'] = '4'; + $_SERVER['HTTP_USER_AGENT'] = 'user agent'; + + $config['session_length'] = time(); // need to do this to allow sessions started at time 0 + $session->session_begin(); + + $sql = 'SELECT session_id, session_user_id + FROM phpbb_sessions'; + + $this->assertResultEquals( + $sql, + array( + array('session_id' => 'anon_session', 'session_user_id' => 1), + array('session_id' => 'bar_session', 'session_user_id' => 4) + ), + 'Check if no new session was created' + ); + + $cookie_expire = $session->time_now + (($config['max_autologin_time']) ? 86400 * (int) $config['max_autologin_time'] : 31536000); + + $session->check_cookies($this, array()); + + $cache->check($this, $cache_data); + } + + static public function get_config() + { + return array( + 'allow_autologin' => false, + 'auth_method' => 'db', + 'forwarded_for_check' => true, + 'active_sessions' => 0, // disable + 'rand_seed' => 'foo', + 'rand_seed_last_update' => 0, + 'max_autologin_time' => 0, + 'session_length' => 100, + 'form_token_lifetime' => 100, + 'cookie_name' => '', + 'limit_load' => 0, + 'limit_search_load' => 0, + 'ip_check' => 3, + 'browser_check' => 1, + ); + } +} + diff --git a/tests/session/session_init.php b/tests/session/session_init.php new file mode 100644 index 0000000000..f6fa564880 --- /dev/null +++ b/tests/session/session_init.php @@ -0,0 +1,76 @@ +createXMLDataSet(dirname(__FILE__).'/fixtures/sessions_empty.xml'); + } + + // also see security/extract_current_page.php + + public function test_login_session_create() + { + $session = new phpbb_mock_session_testable; + $session->page = array('page' => 'page', 'forum' => 0); + + // set up all the global variables used in session_create + global $SID, $_SID, $db, $config, $cache; + + $config = $this->get_config(); + $db = $this->new_dbal(); + $cache_data = array( + '_bots' => array(), + ); + $cache = new phpbb_mock_cache; + $SID = $_SID = null; + + $session->session_create(3); + + $sql = 'SELECT session_user_id + FROM phpbb_sessions'; + + $this->assertResultEquals( + $sql, + array(array('session_user_id' => 3)), + 'Check if exacly one session for user id 3 was created' + ); + + $cookie_expire = $session->time_now + (($config['max_autologin_time']) ? 86400 * (int) $config['max_autologin_time'] : 31536000); + + $session->check_cookies($this, array( + 'u' => array(null, $cookie_expire), + 'k' => array(null, $cookie_expire), + 'sid' => array($_SID, $cookie_expire), + )); + + $cache->check($this, $cache_data); + } + + static public function get_config() + { + return array( + 'allow_autologin' => false, + 'auth_method' => 'db', + 'forwarded_for_check' => true, + 'active_sessions' => 0, // disable + 'rand_seed' => 'foo', + 'rand_seed_last_update' => 0, + 'max_autologin_time' => 0, + 'session_length' => 100, + 'form_token_lifetime' => 100, + ); + } +} + -- cgit v1.2.1 From 8538561b31d4d7cc995d6948062b496f260ae05a Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 6 Jan 2011 23:06:59 +0100 Subject: [task/session-tests] Test additional combinations of session_begin. PHPBB3-9732 --- tests/session/session_continue.php | 58 ++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 12 deletions(-) (limited to 'tests/session') diff --git a/tests/session/session_continue.php b/tests/session/session_continue.php index 15be667325..58956c18a9 100644 --- a/tests/session/session_continue.php +++ b/tests/session/session_continue.php @@ -18,7 +18,38 @@ class phpbb_session_continue_test extends phpbb_database_test_case return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/sessions_full.xml'); } - public function test_session_begin_valid_session() + static public function session_begin_attempts() + { + return array( + array( + 'bar_session', '4', 'user agent', + array( + array('session_id' => 'anon_session', 'session_user_id' => 1), + array('session_id' => 'bar_session', 'session_user_id' => 4) + ), + array(), + 'Check if no new session was created', + ), + array( + 'anon_session', '4', 'user agent', + array( + array('session_id' => 'bar_session', 'session_user_id' => 4), + array('session_id' => null, 'session_user_id' => 1) // use generated SID + ), + array( + 'u' => array('1', null), + 'k' => array(null, null), + 'sid' => array($_SID, null), + ), + 'Check if an anonymous new session was created', + ), + ); + } + + /** + * @dataProvider session_begin_attempts + */ + public function test_session_begin_valid_session($session_id, $user_id, $user_agent, $expected_sessions, $expected_cookies, $message) { $session = new phpbb_mock_session_testable; $session->page = array('page' => 'page', 'forum' => 0); @@ -34,9 +65,9 @@ class phpbb_session_continue_test extends phpbb_database_test_case $cache = new phpbb_mock_cache; $SID = $_SID = null; - $_COOKIE['_sid'] = 'bar_session'; - $_COOKIE['_u'] = '4'; - $_SERVER['HTTP_USER_AGENT'] = 'user agent'; + $_COOKIE['_sid'] = $session_id; + $_COOKIE['_u'] = $user_id; + $_SERVER['HTTP_USER_AGENT'] = $user_agent; $config['session_length'] = time(); // need to do this to allow sessions started at time 0 $session->session_begin(); @@ -44,22 +75,25 @@ class phpbb_session_continue_test extends phpbb_database_test_case $sql = 'SELECT session_id, session_user_id FROM phpbb_sessions'; + // little tickery to allow using a dataProvider with dynamic expected result + foreach ($expected_sessions as $i => $s) + { + if (is_null($s['session_id'])) + { + $expected_sessions[$i]['session_id'] = $session->session_id; + } + } + $this->assertResultEquals( $sql, - array( - array('session_id' => 'anon_session', 'session_user_id' => 1), - array('session_id' => 'bar_session', 'session_user_id' => 4) - ), + $expected_sessions, 'Check if no new session was created' ); - $cookie_expire = $session->time_now + (($config['max_autologin_time']) ? 86400 * (int) $config['max_autologin_time'] : 31536000); - - $session->check_cookies($this, array()); + $session->check_cookies($this, $expected_cookies); $cache->check($this, $cache_data); } - static public function get_config() { return array( -- cgit v1.2.1 From 1abf7ad80932cdb2651dbefff51406c9d234f3bd Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 19 Feb 2011 20:30:46 -0500 Subject: [ticket/10049] Renamed session test files to proper file names. phpunit.xml.dist specifies that only files ending in _test.php are test files; with the old names session tests were not run as a result. PHPBB3-10049 --- tests/session/continue_test.php | 117 +++++++++++++++++++++++++++++++++++++ tests/session/init_test.php | 76 ++++++++++++++++++++++++ tests/session/session_continue.php | 117 ------------------------------------- tests/session/session_init.php | 76 ------------------------ 4 files changed, 193 insertions(+), 193 deletions(-) create mode 100644 tests/session/continue_test.php create mode 100644 tests/session/init_test.php delete mode 100644 tests/session/session_continue.php delete mode 100644 tests/session/session_init.php (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php new file mode 100644 index 0000000000..58956c18a9 --- /dev/null +++ b/tests/session/continue_test.php @@ -0,0 +1,117 @@ +createXMLDataSet(dirname(__FILE__).'/fixtures/sessions_full.xml'); + } + + static public function session_begin_attempts() + { + return array( + array( + 'bar_session', '4', 'user agent', + array( + array('session_id' => 'anon_session', 'session_user_id' => 1), + array('session_id' => 'bar_session', 'session_user_id' => 4) + ), + array(), + 'Check if no new session was created', + ), + array( + 'anon_session', '4', 'user agent', + array( + array('session_id' => 'bar_session', 'session_user_id' => 4), + array('session_id' => null, 'session_user_id' => 1) // use generated SID + ), + array( + 'u' => array('1', null), + 'k' => array(null, null), + 'sid' => array($_SID, null), + ), + 'Check if an anonymous new session was created', + ), + ); + } + + /** + * @dataProvider session_begin_attempts + */ + public function test_session_begin_valid_session($session_id, $user_id, $user_agent, $expected_sessions, $expected_cookies, $message) + { + $session = new phpbb_mock_session_testable; + $session->page = array('page' => 'page', 'forum' => 0); + + // set up all the global variables used in session_create + global $SID, $_SID, $db, $config, $cache; + + $config = $this->get_config(); + $db = $this->new_dbal(); + $cache_data = array( + '_bots' => array(), + ); + $cache = new phpbb_mock_cache; + $SID = $_SID = null; + + $_COOKIE['_sid'] = $session_id; + $_COOKIE['_u'] = $user_id; + $_SERVER['HTTP_USER_AGENT'] = $user_agent; + + $config['session_length'] = time(); // need to do this to allow sessions started at time 0 + $session->session_begin(); + + $sql = 'SELECT session_id, session_user_id + FROM phpbb_sessions'; + + // little tickery to allow using a dataProvider with dynamic expected result + foreach ($expected_sessions as $i => $s) + { + if (is_null($s['session_id'])) + { + $expected_sessions[$i]['session_id'] = $session->session_id; + } + } + + $this->assertResultEquals( + $sql, + $expected_sessions, + 'Check if no new session was created' + ); + + $session->check_cookies($this, $expected_cookies); + + $cache->check($this, $cache_data); + } + static public function get_config() + { + return array( + 'allow_autologin' => false, + 'auth_method' => 'db', + 'forwarded_for_check' => true, + 'active_sessions' => 0, // disable + 'rand_seed' => 'foo', + 'rand_seed_last_update' => 0, + 'max_autologin_time' => 0, + 'session_length' => 100, + 'form_token_lifetime' => 100, + 'cookie_name' => '', + 'limit_load' => 0, + 'limit_search_load' => 0, + 'ip_check' => 3, + 'browser_check' => 1, + ); + } +} + diff --git a/tests/session/init_test.php b/tests/session/init_test.php new file mode 100644 index 0000000000..f6fa564880 --- /dev/null +++ b/tests/session/init_test.php @@ -0,0 +1,76 @@ +createXMLDataSet(dirname(__FILE__).'/fixtures/sessions_empty.xml'); + } + + // also see security/extract_current_page.php + + public function test_login_session_create() + { + $session = new phpbb_mock_session_testable; + $session->page = array('page' => 'page', 'forum' => 0); + + // set up all the global variables used in session_create + global $SID, $_SID, $db, $config, $cache; + + $config = $this->get_config(); + $db = $this->new_dbal(); + $cache_data = array( + '_bots' => array(), + ); + $cache = new phpbb_mock_cache; + $SID = $_SID = null; + + $session->session_create(3); + + $sql = 'SELECT session_user_id + FROM phpbb_sessions'; + + $this->assertResultEquals( + $sql, + array(array('session_user_id' => 3)), + 'Check if exacly one session for user id 3 was created' + ); + + $cookie_expire = $session->time_now + (($config['max_autologin_time']) ? 86400 * (int) $config['max_autologin_time'] : 31536000); + + $session->check_cookies($this, array( + 'u' => array(null, $cookie_expire), + 'k' => array(null, $cookie_expire), + 'sid' => array($_SID, $cookie_expire), + )); + + $cache->check($this, $cache_data); + } + + static public function get_config() + { + return array( + 'allow_autologin' => false, + 'auth_method' => 'db', + 'forwarded_for_check' => true, + 'active_sessions' => 0, // disable + 'rand_seed' => 'foo', + 'rand_seed_last_update' => 0, + 'max_autologin_time' => 0, + 'session_length' => 100, + 'form_token_lifetime' => 100, + ); + } +} + diff --git a/tests/session/session_continue.php b/tests/session/session_continue.php deleted file mode 100644 index 58956c18a9..0000000000 --- a/tests/session/session_continue.php +++ /dev/null @@ -1,117 +0,0 @@ -createXMLDataSet(dirname(__FILE__).'/fixtures/sessions_full.xml'); - } - - static public function session_begin_attempts() - { - return array( - array( - 'bar_session', '4', 'user agent', - array( - array('session_id' => 'anon_session', 'session_user_id' => 1), - array('session_id' => 'bar_session', 'session_user_id' => 4) - ), - array(), - 'Check if no new session was created', - ), - array( - 'anon_session', '4', 'user agent', - array( - array('session_id' => 'bar_session', 'session_user_id' => 4), - array('session_id' => null, 'session_user_id' => 1) // use generated SID - ), - array( - 'u' => array('1', null), - 'k' => array(null, null), - 'sid' => array($_SID, null), - ), - 'Check if an anonymous new session was created', - ), - ); - } - - /** - * @dataProvider session_begin_attempts - */ - public function test_session_begin_valid_session($session_id, $user_id, $user_agent, $expected_sessions, $expected_cookies, $message) - { - $session = new phpbb_mock_session_testable; - $session->page = array('page' => 'page', 'forum' => 0); - - // set up all the global variables used in session_create - global $SID, $_SID, $db, $config, $cache; - - $config = $this->get_config(); - $db = $this->new_dbal(); - $cache_data = array( - '_bots' => array(), - ); - $cache = new phpbb_mock_cache; - $SID = $_SID = null; - - $_COOKIE['_sid'] = $session_id; - $_COOKIE['_u'] = $user_id; - $_SERVER['HTTP_USER_AGENT'] = $user_agent; - - $config['session_length'] = time(); // need to do this to allow sessions started at time 0 - $session->session_begin(); - - $sql = 'SELECT session_id, session_user_id - FROM phpbb_sessions'; - - // little tickery to allow using a dataProvider with dynamic expected result - foreach ($expected_sessions as $i => $s) - { - if (is_null($s['session_id'])) - { - $expected_sessions[$i]['session_id'] = $session->session_id; - } - } - - $this->assertResultEquals( - $sql, - $expected_sessions, - 'Check if no new session was created' - ); - - $session->check_cookies($this, $expected_cookies); - - $cache->check($this, $cache_data); - } - static public function get_config() - { - return array( - 'allow_autologin' => false, - 'auth_method' => 'db', - 'forwarded_for_check' => true, - 'active_sessions' => 0, // disable - 'rand_seed' => 'foo', - 'rand_seed_last_update' => 0, - 'max_autologin_time' => 0, - 'session_length' => 100, - 'form_token_lifetime' => 100, - 'cookie_name' => '', - 'limit_load' => 0, - 'limit_search_load' => 0, - 'ip_check' => 3, - 'browser_check' => 1, - ); - } -} - diff --git a/tests/session/session_init.php b/tests/session/session_init.php deleted file mode 100644 index f6fa564880..0000000000 --- a/tests/session/session_init.php +++ /dev/null @@ -1,76 +0,0 @@ -createXMLDataSet(dirname(__FILE__).'/fixtures/sessions_empty.xml'); - } - - // also see security/extract_current_page.php - - public function test_login_session_create() - { - $session = new phpbb_mock_session_testable; - $session->page = array('page' => 'page', 'forum' => 0); - - // set up all the global variables used in session_create - global $SID, $_SID, $db, $config, $cache; - - $config = $this->get_config(); - $db = $this->new_dbal(); - $cache_data = array( - '_bots' => array(), - ); - $cache = new phpbb_mock_cache; - $SID = $_SID = null; - - $session->session_create(3); - - $sql = 'SELECT session_user_id - FROM phpbb_sessions'; - - $this->assertResultEquals( - $sql, - array(array('session_user_id' => 3)), - 'Check if exacly one session for user id 3 was created' - ); - - $cookie_expire = $session->time_now + (($config['max_autologin_time']) ? 86400 * (int) $config['max_autologin_time'] : 31536000); - - $session->check_cookies($this, array( - 'u' => array(null, $cookie_expire), - 'k' => array(null, $cookie_expire), - 'sid' => array($_SID, $cookie_expire), - )); - - $cache->check($this, $cache_data); - } - - static public function get_config() - { - return array( - 'allow_autologin' => false, - 'auth_method' => 'db', - 'forwarded_for_check' => true, - 'active_sessions' => 0, // disable - 'rand_seed' => 'foo', - 'rand_seed_last_update' => 0, - 'max_autologin_time' => 0, - 'session_length' => 100, - 'form_token_lifetime' => 100, - ); - } -} - -- cgit v1.2.1 From 0cf741f3434ed5ad6550e3e8384d3f5665a23fe8 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 19 Feb 2011 20:40:32 -0500 Subject: [ticket/10049] Fixed requires in session tests and mock. PHPBB3-10049 --- tests/session/continue_test.php | 5 ++--- tests/session/init_test.php | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php index 58956c18a9..f909737f86 100644 --- a/tests/session/continue_test.php +++ b/tests/session/continue_test.php @@ -7,9 +7,8 @@ * */ -require_once 'test_framework/framework.php'; -require_once 'mock/cache.php'; -require_once 'mock/session_testable.php'; +require_once dirname(__FILE__) . '/../mock/cache.php'; +require_once dirname(__FILE__) . '/../mock/session_testable.php'; class phpbb_session_continue_test extends phpbb_database_test_case { diff --git a/tests/session/init_test.php b/tests/session/init_test.php index f6fa564880..6cda7a0c2c 100644 --- a/tests/session/init_test.php +++ b/tests/session/init_test.php @@ -7,9 +7,8 @@ * */ -require_once 'test_framework/framework.php'; -require_once 'mock/cache.php'; -require_once 'mock/session_testable.php'; +require_once dirname(__FILE__) . '/../mock/cache.php'; +require_once dirname(__FILE__) . '/../mock/session_testable.php'; class phpbb_session_init_test extends phpbb_database_test_case { -- cgit v1.2.1 From 26b922ac3f220902bb527426039c552a0bcb8f5c Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 19 Feb 2011 20:44:59 -0500 Subject: [ticket/10049] Chase assertResultEquals rename. cd694e9b9dfd59c8be00a52b30db8e6c280b97a9 renamed assertResultEquals to assertSqlResultEquals. However, since the session tests were never executed calls in them were never updated. Parameter order also changed; chase that too. PHPBB3-10049 --- tests/session/continue_test.php | 4 ++-- tests/session/init_test.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php index f909737f86..8debb10175 100644 --- a/tests/session/continue_test.php +++ b/tests/session/continue_test.php @@ -83,9 +83,9 @@ class phpbb_session_continue_test extends phpbb_database_test_case } } - $this->assertResultEquals( - $sql, + $this->assertSqlResultEquals( $expected_sessions, + $sql, 'Check if no new session was created' ); diff --git a/tests/session/init_test.php b/tests/session/init_test.php index 6cda7a0c2c..c810bd6c3c 100644 --- a/tests/session/init_test.php +++ b/tests/session/init_test.php @@ -40,9 +40,9 @@ class phpbb_session_init_test extends phpbb_database_test_case $sql = 'SELECT session_user_id FROM phpbb_sessions'; - $this->assertResultEquals( - $sql, + $this->assertSqlResultEquals( array(array('session_user_id' => 3)), + $sql, 'Check if exacly one session for user id 3 was created' ); -- cgit v1.2.1 From f3ab9da0e9a79948f4ae87f1f960792daa90853f Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 19 Feb 2011 20:50:15 -0500 Subject: [ticket/10049] Globalize $_SID. PHPBB3-10049 --- tests/session/continue_test.php | 1 + 1 file changed, 1 insertion(+) (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php index 8debb10175..e5b2b7258e 100644 --- a/tests/session/continue_test.php +++ b/tests/session/continue_test.php @@ -19,6 +19,7 @@ class phpbb_session_continue_test extends phpbb_database_test_case static public function session_begin_attempts() { + global $_SID; return array( array( 'bar_session', '4', 'user agent', -- cgit v1.2.1 From c1e198e7213d42025f9184aacb10fc58776cdbf3 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 20 Feb 2011 08:45:59 -0500 Subject: [ticket/10049] Mark session continue test incomplete for now. I am unable to find any code revision in which this test worked. Thus to not break the entire suite I mark it incomplete. PHPBB3-10049 --- tests/session/continue_test.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php index e5b2b7258e..ac682e06ac 100644 --- a/tests/session/continue_test.php +++ b/tests/session/continue_test.php @@ -51,6 +51,8 @@ class phpbb_session_continue_test extends phpbb_database_test_case */ public function test_session_begin_valid_session($session_id, $user_id, $user_agent, $expected_sessions, $expected_cookies, $message) { + $this->markTestIncomplete('Test needs to be fixed'); + $session = new phpbb_mock_session_testable; $session->page = array('page' => 'page', 'forum' => 0); -- cgit v1.2.1 From 6902ecf6a97df44b6874c0bf4c9fa28275b7c9f7 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 20 Feb 2011 08:53:15 -0500 Subject: [ticket/10049] Mark session init test incomplete for now. This test passes by itself but fails when run as part of the compete suite. Mark it incomplete to avoid breaking the suite. PHPBB3-10049 --- tests/session/init_test.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tests/session') diff --git a/tests/session/init_test.php b/tests/session/init_test.php index c810bd6c3c..ccb0554409 100644 --- a/tests/session/init_test.php +++ b/tests/session/init_test.php @@ -21,6 +21,8 @@ class phpbb_session_init_test extends phpbb_database_test_case public function test_login_session_create() { + $this->markTestIncomplete('Test fails when run as part of the test suite'); + $session = new phpbb_mock_session_testable; $session->page = array('page' => 'page', 'forum' => 0); -- cgit v1.2.1 From 11262afa93fc7e1eea31873e3d1a7139230c427e Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Wed, 23 Feb 2011 17:21:51 +0100 Subject: [ticket/10052] Correct session tests, and separate session factory from tests PHPBB3-10052 --- tests/session/continue_test.php | 67 ++++++----------- tests/session/fixtures/sessions_empty.xml | 6 ++ tests/session/init_test.php | 45 +++--------- tests/session/testable_factory.php | 118 ++++++++++++++++++++++++++++++ 4 files changed, 158 insertions(+), 78 deletions(-) create mode 100644 tests/session/testable_factory.php (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php index ac682e06ac..06b03f5780 100644 --- a/tests/session/continue_test.php +++ b/tests/session/continue_test.php @@ -2,13 +2,13 @@ /** * * @package testing -* @copyright (c) 2008 phpBB Group +* @copyright (c) 2011 phpBB Group * @license http://opensource.org/licenses/gpl-license.php GNU Public License * */ require_once dirname(__FILE__) . '/../mock/cache.php'; -require_once dirname(__FILE__) . '/../mock/session_testable.php'; +require_once dirname(__FILE__) . '/testable_factory.php'; class phpbb_session_continue_test extends phpbb_database_test_case { @@ -22,16 +22,16 @@ class phpbb_session_continue_test extends phpbb_database_test_case global $_SID; return array( array( - 'bar_session', '4', 'user agent', + 'bar_session', '4', 'user agent', '127.0.0.1', array( array('session_id' => 'anon_session', 'session_user_id' => 1), array('session_id' => 'bar_session', 'session_user_id' => 4) ), array(), - 'Check if no new session was created', + 'If a request comes with a valid session id with matching user agent and IP, no new session should be created.', ), array( - 'anon_session', '4', 'user agent', + 'anon_session', '4', 'user agent', '127.0.0.1', array( array('session_id' => 'bar_session', 'session_user_id' => 4), array('session_id' => null, 'session_user_id' => 1) // use generated SID @@ -41,7 +41,7 @@ class phpbb_session_continue_test extends phpbb_database_test_case 'k' => array(null, null), 'sid' => array($_SID, null), ), - 'Check if an anonymous new session was created', + 'If a request comes with a valid session id and IP but different user id and user agent, a new anonymous session is created and the session matching the supplied session id is deleted.', ), ); } @@ -49,29 +49,25 @@ class phpbb_session_continue_test extends phpbb_database_test_case /** * @dataProvider session_begin_attempts */ - public function test_session_begin_valid_session($session_id, $user_id, $user_agent, $expected_sessions, $expected_cookies, $message) + public function test_session_begin_valid_session($session_id, $user_id, $user_agent, $ip, $expected_sessions, $expected_cookies, $message) { - $this->markTestIncomplete('Test needs to be fixed'); - - $session = new phpbb_mock_session_testable; - $session->page = array('page' => 'page', 'forum' => 0); - - // set up all the global variables used in session_create - global $SID, $_SID, $db, $config, $cache; - - $config = $this->get_config(); $db = $this->new_dbal(); - $cache_data = array( - '_bots' => array(), - ); - $cache = new phpbb_mock_cache; - $SID = $_SID = null; + $session_factory = new phpbb_session_testable_factory; + $session_factory->set_cookies(array( + '_sid' => $session_id, + '_u' => $user_id, + )); + $session_factory->merge_config_data(array( + 'session_length' => time(), // need to do this to allow sessions started at time 0 + )); + $session_factory->merge_server_data(array( + 'HTTP_USER_AGENT' => $user_agent, + 'REMOTE_ADDR' => $ip, + )); - $_COOKIE['_sid'] = $session_id; - $_COOKIE['_u'] = $user_id; - $_SERVER['HTTP_USER_AGENT'] = $user_agent; + $session = $session_factory->get_session($db); + $session->page = array('page' => 'page', 'forum' => 0); - $config['session_length'] = time(); // need to do this to allow sessions started at time 0 $session->session_begin(); $sql = 'SELECT session_id, session_user_id @@ -94,26 +90,7 @@ class phpbb_session_continue_test extends phpbb_database_test_case $session->check_cookies($this, $expected_cookies); - $cache->check($this, $cache_data); - } - static public function get_config() - { - return array( - 'allow_autologin' => false, - 'auth_method' => 'db', - 'forwarded_for_check' => true, - 'active_sessions' => 0, // disable - 'rand_seed' => 'foo', - 'rand_seed_last_update' => 0, - 'max_autologin_time' => 0, - 'session_length' => 100, - 'form_token_lifetime' => 100, - 'cookie_name' => '', - 'limit_load' => 0, - 'limit_search_load' => 0, - 'ip_check' => 3, - 'browser_check' => 1, - ); + $session_factory->check($this); } } diff --git a/tests/session/fixtures/sessions_empty.xml b/tests/session/fixtures/sessions_empty.xml index 66fa585b18..f94337314e 100644 --- a/tests/session/fixtures/sessions_empty.xml +++ b/tests/session/fixtures/sessions_empty.xml @@ -16,4 +16,10 @@ bar + + session_id + session_user_id + session_ip + session_browser +
diff --git a/tests/session/init_test.php b/tests/session/init_test.php index ccb0554409..cad327a490 100644 --- a/tests/session/init_test.php +++ b/tests/session/init_test.php @@ -2,13 +2,13 @@ /** * * @package testing -* @copyright (c) 2008 phpBB Group +* @copyright (c) 2011 phpBB Group * @license http://opensource.org/licenses/gpl-license.php GNU Public License * */ require_once dirname(__FILE__) . '/../mock/cache.php'; -require_once dirname(__FILE__) . '/../mock/session_testable.php'; +require_once dirname(__FILE__) . '/testable_factory.php'; class phpbb_session_init_test extends phpbb_database_test_case { @@ -21,21 +21,11 @@ class phpbb_session_init_test extends phpbb_database_test_case public function test_login_session_create() { - $this->markTestIncomplete('Test fails when run as part of the test suite'); - - $session = new phpbb_mock_session_testable; - $session->page = array('page' => 'page', 'forum' => 0); - - // set up all the global variables used in session_create - global $SID, $_SID, $db, $config, $cache; - - $config = $this->get_config(); $db = $this->new_dbal(); - $cache_data = array( - '_bots' => array(), - ); - $cache = new phpbb_mock_cache; - $SID = $_SID = null; + $session_factory = new phpbb_session_testable_factory; + + $session = $session_factory->get_session($db); + $session->page = array('page' => 'page', 'forum' => 0); $session->session_create(3); @@ -48,30 +38,19 @@ class phpbb_session_init_test extends phpbb_database_test_case 'Check if exacly one session for user id 3 was created' ); - $cookie_expire = $session->time_now + (($config['max_autologin_time']) ? 86400 * (int) $config['max_autologin_time'] : 31536000); + $cookie_expire = $session->time_now + 31536000; $session->check_cookies($this, array( 'u' => array(null, $cookie_expire), 'k' => array(null, $cookie_expire), - 'sid' => array($_SID, $cookie_expire), + 'sid' => array($session->session_id, $cookie_expire), )); - $cache->check($this, $cache_data); - } + global $SID, $_SID; + $this->assertEquals($session->session_id, $_SID); + $this->assertEquals('?sid=' . $session->session_id, $SID); - static public function get_config() - { - return array( - 'allow_autologin' => false, - 'auth_method' => 'db', - 'forwarded_for_check' => true, - 'active_sessions' => 0, // disable - 'rand_seed' => 'foo', - 'rand_seed_last_update' => 0, - 'max_autologin_time' => 0, - 'session_length' => 100, - 'form_token_lifetime' => 100, - ); + $session_factory->check($this); } } diff --git a/tests/session/testable_factory.php b/tests/session/testable_factory.php new file mode 100644 index 0000000000..6c42120c62 --- /dev/null +++ b/tests/session/testable_factory.php @@ -0,0 +1,118 @@ +config_data = array( + 'allow_autologin' => false, + 'auth_method' => 'db', + 'forwarded_for_check' => true, + 'active_sessions' => 0, // disable + 'rand_seed' => 'foo', + 'rand_seed_last_update' => 0, + 'max_autologin_time' => 0, + 'session_length' => 100, + 'form_token_lifetime' => 100, + 'cookie_name' => '', + 'limit_load' => 0, + 'limit_search_load' => 0, + 'ip_check' => 3, + 'browser_check' => 1, + ); + + $this->cache_data = array( + '_bots' => array(), + ); + + $this->cookies = array(); + + $this->server_data = $_SERVER; + } + + public function get_session(dbal $dbal) + { + // set up all the global variables used by session + global $SID, $_SID, $db, $config, $cache; + + $config = $this->config = $this->get_config_data(); + $db = $dbal; + + $cache = $this->cache = new phpbb_mock_cache($this->get_cache_data()); + $SID = $_SID = null; + + $_COOKIE = $this->cookies; + $_SERVER = $this->server_data; + + $session = new phpbb_mock_session_testable; + return $session; + } + + public function set_cookies($cookies) + { + $this->cookies = $cookies; + } + + public function check(PHPUnit_Framework_Assert $test) + { + $this->cache->check($test, $this->get_cache_data()); + } + + public function merge_config_data($config_data) + { + $this->config_data = array_merge($this->config_data, $config_data); + } + + public function get_config_data() + { + return $this->config_data; + } + + public function merge_cache_data($cache_data) + { + $this->cache_data = array_merge($this->cache_data, $cache_data); + } + + public function get_cache_data() + { + return $this->cache_data; + } + + public function merge_server_data($server_data) + { + return $this->server_data = array_merge($this->server_data, $server_data); + } + + public function get_server_data() + { + return $this->server_data; + } +} + -- cgit v1.2.1 From cb56ab2dbda6c2c33f6437069de35bd09aeadb82 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Wed, 23 Feb 2011 19:41:11 +0100 Subject: [ticket/10052] Add comments to the session testable factory. PHPBB3-10052 --- tests/session/init_test.php | 2 +- tests/session/testable_factory.php | 65 ++++++++++++++++++++++++++++++++++---- 2 files changed, 60 insertions(+), 7 deletions(-) (limited to 'tests/session') diff --git a/tests/session/init_test.php b/tests/session/init_test.php index cad327a490..1181fab636 100644 --- a/tests/session/init_test.php +++ b/tests/session/init_test.php @@ -38,7 +38,7 @@ class phpbb_session_init_test extends phpbb_database_test_case 'Check if exacly one session for user id 3 was created' ); - $cookie_expire = $session->time_now + 31536000; + $cookie_expire = $session->time_now + 31536000; // default is one year $session->check_cookies($this, array( 'u' => array(null, $cookie_expire), diff --git a/tests/session/testable_factory.php b/tests/session/testable_factory.php index 6c42120c62..f3ef19a257 100644 --- a/tests/session/testable_factory.php +++ b/tests/session/testable_factory.php @@ -12,9 +12,9 @@ require_once dirname(__FILE__) . '/../mock/session_testable.php'; /** * This class exists to setup an instance of phpbb's session class for testing. * -* The class has rather complex dependencies, so in order to make its tests more -* understandable and to make its dependencies more visible this class sets up -* all the necessary global state & variable contents. +* The session class has rather complex dependencies, so in order to make its +* tests more * understandable and to make its dependencies more visible this +* factory class sets up all the necessary global state & variable contents. */ class phpbb_session_testable_factory { @@ -57,6 +57,12 @@ class phpbb_session_testable_factory $this->server_data = $_SERVER; } + /** + * Retrieve the configured session class instance + * + * @param dbal $dbal The database connection to use for session data + * @return phpbb_mock_session_testable A session instance + */ public function get_session(dbal $dbal) { // set up all the global variables used by session @@ -75,41 +81,88 @@ class phpbb_session_testable_factory return $session; } - public function set_cookies($cookies) + /** + * Set the cookies which should be present in the request data. + * + * @param array $cookies The cookie data, structured like $_COOKIE contents. + */ + public function set_cookies(array $cookies) { $this->cookies = $cookies; } + /** + * Check if the cache used for the generated session contains correct data. + * + * @param PHPUnit_Framework_Assert $test The test case to call assert methods + * on + */ public function check(PHPUnit_Framework_Assert $test) { $this->cache->check($test, $this->get_cache_data()); } - public function merge_config_data($config_data) + /** + * Merge config data with the current config data to be supplied to session. + * + * New values overwrite new ones. + * + * @param array $config_data The config data to merge with previous data + */ + public function merge_config_data(array $config_data) { $this->config_data = array_merge($this->config_data, $config_data); } + /** + * Retrieve the entire config data to be passed to the session. + * + * @return array Configuration + */ public function get_config_data() { return $this->config_data; } - public function merge_cache_data($cache_data) + /** + * Merge the cache contents with more data. + * + * New values overwrite old ones. + * + * @param array $cache_data The additional cache data + */ + public function merge_cache_data(array $cache_data) { $this->cache_data = array_merge($this->cache_data, $cache_data); } + /** + * Retrieve the entire cache data to be passed to the session. + * + * @return array Cache contents + */ public function get_cache_data() { return $this->cache_data; } + /** + * Merge the current server info ($_SERVER) with more data. + * + * New values overwrite old ones. + * + * @param array $server_data The additional server variables + */ public function merge_server_data($server_data) { return $this->server_data = array_merge($this->server_data, $server_data); } + /** + * Retrieve all server variables to be passed to the session. + * + * @return array Server variables + */ public function get_server_data() { return $this->server_data; -- cgit v1.2.1 From 3d65c3c10484bc524160ebb4f4a483ba6c0dd8ed Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Sun, 27 Feb 2011 22:06:01 +0100 Subject: [task/session-tests] Make the session id replacement of dataset values clearer PHPBB3-9732 --- tests/session/continue_test.php | 44 ++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php index 06b03f5780..4e5df300f2 100644 --- a/tests/session/continue_test.php +++ b/tests/session/continue_test.php @@ -19,7 +19,6 @@ class phpbb_session_continue_test extends phpbb_database_test_case static public function session_begin_attempts() { - global $_SID; return array( array( 'bar_session', '4', 'user agent', '127.0.0.1', @@ -34,12 +33,12 @@ class phpbb_session_continue_test extends phpbb_database_test_case 'anon_session', '4', 'user agent', '127.0.0.1', array( array('session_id' => 'bar_session', 'session_user_id' => 4), - array('session_id' => null, 'session_user_id' => 1) // use generated SID + array('session_id' => '__new_session_id__', 'session_user_id' => 1) // use generated SID ), array( 'u' => array('1', null), 'k' => array(null, null), - 'sid' => array($_SID, null), + 'sid' => array('__new_session_id__', null), ), 'If a request comes with a valid session id and IP but different user id and user agent, a new anonymous session is created and the session matching the supplied session id is deleted.', ), @@ -73,14 +72,8 @@ class phpbb_session_continue_test extends phpbb_database_test_case $sql = 'SELECT session_id, session_user_id FROM phpbb_sessions'; - // little tickery to allow using a dataProvider with dynamic expected result - foreach ($expected_sessions as $i => $s) - { - if (is_null($s['session_id'])) - { - $expected_sessions[$i]['session_id'] = $session->session_id; - } - } + $expected_sessions = $this->replace_session($expected_sessions, $session->session_id); + $expected_cookies = $this->replace_session($expected_cookies, $session->session_id); $this->assertSqlResultEquals( $expected_sessions, @@ -92,5 +85,32 @@ class phpbb_session_continue_test extends phpbb_database_test_case $session_factory->check($this); } -} + /** + * Replaces recursively the value __new_session_id__ with the given session + * id. + * + * @param array $array An array of data + * @param string $session_id The new session id to use instead of the + * placeholder. + * @return array The input array with all occurances of __new_session_id__ + * replaced. + */ + public function replace_session($array, $session_id) + { + foreach ($array as $key => &$value) + { + if ($value === '__new_session_id__') + { + $value = $session_id; + } + + if (is_array($value)) + { + $value = $this->replace_session($value, $session_id); + } + } + + return $array; + } +} -- cgit v1.2.1 From bbf3864cb4cd3762a64b9489cfd38b7ac93df423 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Sun, 27 Feb 2011 22:16:39 +0100 Subject: [task/session-tests] Correctly display message on session continue test failure PHPBB3-9732 --- tests/session/continue_test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php index 4e5df300f2..27ac457c2d 100644 --- a/tests/session/continue_test.php +++ b/tests/session/continue_test.php @@ -78,7 +78,7 @@ class phpbb_session_continue_test extends phpbb_database_test_case $this->assertSqlResultEquals( $expected_sessions, $sql, - 'Check if no new session was created' + $message ); $session->check_cookies($this, $expected_cookies); -- cgit v1.2.1 From 921603b09e1e34059f783c502d5dfc9ae0189057 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Sun, 27 Feb 2011 22:20:36 +0100 Subject: [task/session-tests] Make result check independent of returned row order. PHPBB3-9732 --- tests/session/continue_test.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php index 27ac457c2d..3080121978 100644 --- a/tests/session/continue_test.php +++ b/tests/session/continue_test.php @@ -24,7 +24,7 @@ class phpbb_session_continue_test extends phpbb_database_test_case 'bar_session', '4', 'user agent', '127.0.0.1', array( array('session_id' => 'anon_session', 'session_user_id' => 1), - array('session_id' => 'bar_session', 'session_user_id' => 4) + array('session_id' => 'bar_session', 'session_user_id' => 4), ), array(), 'If a request comes with a valid session id with matching user agent and IP, no new session should be created.', @@ -32,8 +32,8 @@ class phpbb_session_continue_test extends phpbb_database_test_case array( 'anon_session', '4', 'user agent', '127.0.0.1', array( + array('session_id' => '__new_session_id__', 'session_user_id' => 1), // use generated SID array('session_id' => 'bar_session', 'session_user_id' => 4), - array('session_id' => '__new_session_id__', 'session_user_id' => 1) // use generated SID ), array( 'u' => array('1', null), @@ -70,7 +70,8 @@ class phpbb_session_continue_test extends phpbb_database_test_case $session->session_begin(); $sql = 'SELECT session_id, session_user_id - FROM phpbb_sessions'; + FROM phpbb_sessions + ORDER BY session_user_id'; $expected_sessions = $this->replace_session($expected_sessions, $session->session_id); $expected_cookies = $this->replace_session($expected_cookies, $session->session_id); -- cgit v1.2.1 From d36f78b9f1c7fc0c52a36d95510be1d8e2361f5d Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 18 Mar 2011 03:15:40 +0100 Subject: [ticket/10082] session_id is CHAR(32) not VARCHAR(32), so give them a CHAR(32). This fixes session unit tests on PostgreSQL in particular. PHPBB3-10082 --- tests/session/continue_test.php | 14 +++++++++----- tests/session/fixtures/sessions_full.xml | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'tests/session') diff --git a/tests/session/continue_test.php b/tests/session/continue_test.php index 3080121978..6737562a0a 100644 --- a/tests/session/continue_test.php +++ b/tests/session/continue_test.php @@ -19,21 +19,25 @@ class phpbb_session_continue_test extends phpbb_database_test_case static public function session_begin_attempts() { + // The session_id field is defined as CHAR(32) in the database schema. + // Thus the data we put in session_id fields has to have a length of 32 characters on stricter DBMSes. + // Thus we fill those strings up with zeroes until they have a string length of 32. + return array( array( - 'bar_session', '4', 'user agent', '127.0.0.1', + 'bar_session000000000000000000000', '4', 'user agent', '127.0.0.1', array( - array('session_id' => 'anon_session', 'session_user_id' => 1), - array('session_id' => 'bar_session', 'session_user_id' => 4), + array('session_id' => 'anon_session00000000000000000000', 'session_user_id' => 1), + array('session_id' => 'bar_session000000000000000000000', 'session_user_id' => 4), ), array(), 'If a request comes with a valid session id with matching user agent and IP, no new session should be created.', ), array( - 'anon_session', '4', 'user agent', '127.0.0.1', + 'anon_session00000000000000000000', '4', 'user agent', '127.0.0.1', array( array('session_id' => '__new_session_id__', 'session_user_id' => 1), // use generated SID - array('session_id' => 'bar_session', 'session_user_id' => 4), + array('session_id' => 'bar_session000000000000000000000', 'session_user_id' => 4), ), array( 'u' => array('1', null), diff --git a/tests/session/fixtures/sessions_full.xml b/tests/session/fixtures/sessions_full.xml index 4559a08c55..bf6fc65997 100644 --- a/tests/session/fixtures/sessions_full.xml +++ b/tests/session/fixtures/sessions_full.xml @@ -22,13 +22,13 @@ session_ip session_browser - anon_session + anon_session00000000000000000000 1 127.0.0.1 anonymous user agent - bar_session + bar_session000000000000000000000 4 127.0.0.1 user agent -- cgit v1.2.1