From 56bff6380e9c9af8e7b97dbe240779950a3a88c6 Mon Sep 17 00:00:00 2001 From: rxu Date: Tue, 5 Nov 2019 00:14:29 +0700 Subject: [ticket/15294] Add session_gc() tests PHPBB3-15294 --- tests/session/fixtures/sessions_garbage.xml | 45 +++++++++++++++ tests/session/garbage_collection_test.php | 72 ++++++++++++++++++++++++ tests/test_framework/phpbb_session_test_case.php | 24 +++++++- 3 files changed, 140 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/session/fixtures/sessions_garbage.xml b/tests/session/fixtures/sessions_garbage.xml index 5eace839d0..59a2dc2ebe 100644 --- a/tests/session/fixtures/sessions_garbage.xml +++ b/tests/session/fixtures/sessions_garbage.xml @@ -5,11 +5,23 @@ username_clean user_permissions user_sig + user_lastpage + user_lastvisit 4 bar + oldpage_user_bar.php + 1400000000 + + + 5 + foo + + + oldpage_user_foo.php + 1400000000 @@ -18,12 +30,16 @@ session_ipsession_browsersession_admin + session_page + session_time anon_session00000000000000000000 1 127.0.0.1 anonymous user agent 0 + + 1500000005 bar_session000000000000000000000 @@ -31,6 +47,35 @@ 127.0.0.1 user agent 1 + newpage_user_bar.php + 1500000000 + + + bar_session000000000000000000002 + 4 + 127.0.0.1 + user agent + 1 + oldpage_user_bar.php + 1400000000 + + + foo_session000000000000000000000 + 5 + 127.0.0.1 + user agent + 0 + newpage_user_foo.php + 1500000000 + + + foo_session000000000000000000002 + 5 + 127.0.0.1 + user agent + 0 + oldpage_user_foo.php + 1400000000
diff --git a/tests/session/garbage_collection_test.php b/tests/session/garbage_collection_test.php index d361e022da..8eeffec2c0 100644 --- a/tests/session/garbage_collection_test.php +++ b/tests/session/garbage_collection_test.php @@ -41,6 +41,66 @@ class phpbb_session_garbage_collection_test extends phpbb_session_test_case ); } + public function test_session_gc() + { + global $config; + $config['session_length'] = 3600; + + $this->check_expired_sessions_recent( + array( + array( + 'session_user_id' => 4, + 'recent_time' => 1500000000, + ), + array( + 'session_user_id' => 5, + 'recent_time' => 1500000000, + ), + ), + 'Before test, should get recent expired sessions only.' + ); + + $this->check_user_session_data( + array( + array( + 'username_clean' => 'bar', + 'user_lastvisit' => 1400000000, + 'user_lastpage' => 'oldpage_user_bar.php', + ), + array( + 'username_clean' => 'foo', + 'user_lastvisit' => 1400000000, + 'user_lastpage' => 'oldpage_user_foo.php', + ), + ), + 'Before test, users session data is not updated yet.' + ); + + // There is an error unless the captcha plugin is set + $config['captcha_plugin'] = 'core.captcha.plugins.nogd'; + $this->session->session_gc(); + $this->check_expired_sessions_recent( + array(), + 'After garbage collection, all expired sessions should be removed.' + ); + + $this->check_user_session_data( + array( + array( + 'username_clean' => 'bar', + 'user_lastvisit' => '1500000000', + 'user_lastpage' => 'newpage_user_bar.php', + ), + array( + 'username_clean' => 'foo', + 'user_lastvisit' => '1500000000', + 'user_lastpage' => 'newpage_user_foo.php', + ), + ), + 'After garbage collection, users session data should be updated to the recent expired sessions data.' + ); + } + public function test_cleanup_all() { $this->check_sessions_equals( @@ -53,6 +113,18 @@ class phpbb_session_garbage_collection_test extends phpbb_session_test_case 'session_id' => 'bar_session000000000000000000000', 'session_user_id' => 4, ), + array( + 'session_id' => 'bar_session000000000000000000002', + 'session_user_id' => 4, + ), + array( + 'session_id' => 'foo_session000000000000000000000', + 'session_user_id' => 5, + ), + array( + 'session_id' => 'foo_session000000000000000000002', + 'session_user_id' => 5, + ), ), 'Before test, should have some sessions.' ); diff --git a/tests/test_framework/phpbb_session_test_case.php b/tests/test_framework/phpbb_session_test_case.php index 02722c473e..3746a15280 100644 --- a/tests/test_framework/phpbb_session_test_case.php +++ b/tests/test_framework/phpbb_session_test_case.php @@ -48,11 +48,33 @@ abstract class phpbb_session_test_case extends phpbb_database_test_case new phpbb_session_testable_facade($this->db, $this->session_factory); } + protected function check_user_session_data($expected_session_data, $message) + { + $sql= 'SELECT username_clean, user_lastvisit, user_lastpage + FROM ' . USERS_TABLE . ' + ORDER BY user_id'; + + $this->assertSqlResultEquals($expected_session_data, $sql, $message); + } + + protected function check_expired_sessions_recent($expected_sessions, $message) + { + global $config; + $time_now = time(); + $sql= 'SELECT session_user_id, MAX(session_time) AS recent_time + FROM ' . SESSIONS_TABLE . ' + WHERE session_time < ' . ($time_now - (int) $config['session_length']) . ' + AND session_user_id <> ' . ANONYMOUS . ' + GROUP BY session_user_id'; + + $this->assertSqlResultEquals($expected_sessions, $sql, $message); + } + protected function check_sessions_equals($expected_sessions, $message) { $sql = 'SELECT session_id, session_user_id FROM phpbb_sessions - ORDER BY session_user_id'; + ORDER BY session_user_id, session_id'; $this->assertSqlResultEquals($expected_sessions, $sql, $message); } -- cgit v1.2.1 From 7ea063100e23234bf0d6a79fd0411e956a1b6668 Mon Sep 17 00:00:00 2001 From: rxu Date: Tue, 5 Nov 2019 20:42:59 +0700 Subject: [ticket/15294] Minor code adjusting PHPBB3-15294 --- tests/session/garbage_collection_test.php | 64 ++++++++++++------------ tests/test_framework/phpbb_session_test_case.php | 2 +- 2 files changed, 33 insertions(+), 33 deletions(-) (limited to 'tests') diff --git a/tests/session/garbage_collection_test.php b/tests/session/garbage_collection_test.php index 8eeffec2c0..ec248b2904 100644 --- a/tests/session/garbage_collection_test.php +++ b/tests/session/garbage_collection_test.php @@ -47,32 +47,32 @@ class phpbb_session_garbage_collection_test extends phpbb_session_test_case $config['session_length'] = 3600; $this->check_expired_sessions_recent( - array( - array( + [ + [ 'session_user_id' => 4, 'recent_time' => 1500000000, - ), - array( + ], + [ 'session_user_id' => 5, 'recent_time' => 1500000000, - ), - ), + ], + ], 'Before test, should get recent expired sessions only.' ); $this->check_user_session_data( - array( - array( + [ + [ 'username_clean' => 'bar', 'user_lastvisit' => 1400000000, 'user_lastpage' => 'oldpage_user_bar.php', - ), - array( + ], + [ 'username_clean' => 'foo', 'user_lastvisit' => 1400000000, 'user_lastpage' => 'oldpage_user_foo.php', - ), - ), + ], + ], 'Before test, users session data is not updated yet.' ); @@ -80,23 +80,23 @@ class phpbb_session_garbage_collection_test extends phpbb_session_test_case $config['captcha_plugin'] = 'core.captcha.plugins.nogd'; $this->session->session_gc(); $this->check_expired_sessions_recent( - array(), + [], 'After garbage collection, all expired sessions should be removed.' ); $this->check_user_session_data( - array( - array( + [ + [ 'username_clean' => 'bar', 'user_lastvisit' => '1500000000', 'user_lastpage' => 'newpage_user_bar.php', - ), - array( + ], + [ 'username_clean' => 'foo', 'user_lastvisit' => '1500000000', 'user_lastpage' => 'newpage_user_foo.php', - ), - ), + ], + ], 'After garbage collection, users session data should be updated to the recent expired sessions data.' ); } @@ -104,28 +104,28 @@ class phpbb_session_garbage_collection_test extends phpbb_session_test_case public function test_cleanup_all() { $this->check_sessions_equals( - array( - array( + [ + [ 'session_id' => 'anon_session00000000000000000000', 'session_user_id' => 1, - ), - array( + ], + [ 'session_id' => 'bar_session000000000000000000000', 'session_user_id' => 4, - ), - array( + ], + [ 'session_id' => 'bar_session000000000000000000002', 'session_user_id' => 4, - ), - array( + ], + [ 'session_id' => 'foo_session000000000000000000000', 'session_user_id' => 5, - ), - array( + ], + [ 'session_id' => 'foo_session000000000000000000002', 'session_user_id' => 5, - ), - ), + ], + ], 'Before test, should have some sessions.' ); // Set session length so it clears all @@ -135,7 +135,7 @@ class phpbb_session_garbage_collection_test extends phpbb_session_test_case $config['captcha_plugin'] = 'core.captcha.plugins.nogd'; $this->session->session_gc(); $this->check_sessions_equals( - array(), + [], 'After setting session time to 0, should remove all.' ); } diff --git a/tests/test_framework/phpbb_session_test_case.php b/tests/test_framework/phpbb_session_test_case.php index 3746a15280..530d8c6b48 100644 --- a/tests/test_framework/phpbb_session_test_case.php +++ b/tests/test_framework/phpbb_session_test_case.php @@ -61,7 +61,7 @@ abstract class phpbb_session_test_case extends phpbb_database_test_case { global $config; $time_now = time(); - $sql= 'SELECT session_user_id, MAX(session_time) AS recent_time + $sql = 'SELECT session_user_id, MAX(session_time) AS recent_time FROM ' . SESSIONS_TABLE . ' WHERE session_time < ' . ($time_now - (int) $config['session_length']) . ' AND session_user_id <> ' . ANONYMOUS . ' -- cgit v1.2.1