From 01afc061d7edd7bc535a590934b124aedc4e64d0 Mon Sep 17 00:00:00 2001 From: Inverle Date: Wed, 30 Sep 2026 21:34:27 +0200 Subject: [PATCH] Slightly more robust SessionTest and cleanup (#9376) * Slightly more robust SessionTest and cleanup Improvement of #9311 I noticed that my `/tmp` directory got filled up with random `sess_*` files and empty `frss_test_sessions_*` directories after repeatedly running PHPUnit, which means there was no proper cleanup being done in the tests. See the first commit for changes, since I also moved the test to a more appropriate directory name (alongside `tests/lib/Minz`, `tests/app/Minz` was newly added in #9311). Before the PR: * Check output of `ls -lah /tmp/{frss_test_sessions_*,sess_*}; rm -r /tmp/{frss_test_sessions_*,sess_*}` to confirm there are initially no temporary files existing. * Run `composer run phpunit`. * Check output of the previous command again to confirm there is a new `sess_*` file and an empty `frss_test_sessions_*` directory. After the PR: * Check output of `ls -lah /tmp/{frss_test_sessions_*,sess_*}; rm -r /tmp/{frss_test_sessions_*,sess_*}` to confirm that no temporary files exist initially. * Run `composer run phpunit`. * Check output of the previous command again to confirm there are no temporary files, since they are now being cleaned up correctly. * Move SessionTest from tests/app/Minz to tests/lib/Minz --- tests/app/Minz/SessionTest.php | 38 --------------------------- tests/lib/Minz/SessionTest.php | 47 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 38 deletions(-) delete mode 100644 tests/app/Minz/SessionTest.php create mode 100644 tests/lib/Minz/SessionTest.php diff --git a/tests/app/Minz/SessionTest.php b/tests/app/Minz/SessionTest.php deleted file mode 100644 index e405e1057..000000000 --- a/tests/app/Minz/SessionTest.php +++ /dev/null @@ -1,38 +0,0 @@ -originalSavePath = (string)ini_get('session.save_path'); - } - - #[\Override] - protected function tearDown(): void { - ini_set('session.save_path', $this->originalSavePath); - } - - public function testRegenerateIDOnHealthyStorage(): void { - $previous = $_SESSION ?? []; - - Minz_Session::regenerateID('FreshRSS'); - - $_SESSION['probe'] = 'ok'; - self::assertSame('ok', $_SESSION['probe']); - $_SESSION = $previous; - session_write_close(); - } - - public function testRegenerateIDOnBrokenStorage(): void { - $save_path = sys_get_temp_dir() . '/frss_test_sessions_' . bin2hex(random_bytes(4)); - self::assertNotFalse(mkdir($save_path, 0700)); - $broken_path = $save_path . '/missing_subdir'; - ini_set('session.save_path', $broken_path); - - $this->expectException(RuntimeException::class); - Minz_Session::regenerateID('FreshRSS'); - } -} diff --git a/tests/lib/Minz/SessionTest.php b/tests/lib/Minz/SessionTest.php new file mode 100644 index 000000000..a2c8b217f --- /dev/null +++ b/tests/lib/Minz/SessionTest.php @@ -0,0 +1,47 @@ +originalSavePath = (string)ini_get('session.save_path'); + } + + #[\Override] + protected function tearDown(): void { + if (is_dir($this->testSavePath)) { + rmdir($this->testSavePath); + } + + ini_set('session.save_path', $this->originalSavePath); + } + + public function testRegenerateIDOnHealthyStorage(): void { + $save_path = session_save_path() ?: sys_get_temp_dir(); + Minz_Session::init('FreshRSS', volatile: false); + self::assertTrue(file_exists($save_path . '/sess_' . session_id())); + $previous_id = session_id(); + Minz_Session::_param('probe', 'ok'); + Minz_Session::regenerateID('FreshRSS'); + self::assertNotSame($previous_id, session_id()); + self::assertFalse(file_exists($save_path . '/sess_' . $previous_id)); + self::assertTrue(file_exists($save_path . '/sess_' . session_id())); + self::assertSame('ok', Minz_Session::paramString('probe')); + session_unset(); + session_write_close(); + unlink($save_path . '/sess_' . session_id()); + } + + public function testRegenerateIDOnBrokenStorage(): void { + $this->testSavePath = sys_get_temp_dir() . '/frss_test_sessions_' . bin2hex(random_bytes(4)); + self::assertNotFalse(mkdir($this->testSavePath, 0700)); + ini_set('session.save_path', $this->testSavePath . '/missing_subdir'); + + $this->expectException(RuntimeException::class); + Minz_Session::regenerateID('FreshRSS'); + } +}