summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CheckUser/tests/phpunit/TokenManagerTest.php')
-rw-r--r--CheckUser/tests/phpunit/TokenManagerTest.php67
1 files changed, 67 insertions, 0 deletions
diff --git a/CheckUser/tests/phpunit/TokenManagerTest.php b/CheckUser/tests/phpunit/TokenManagerTest.php
new file mode 100644
index 00000000..a8ba2a55
--- /dev/null
+++ b/CheckUser/tests/phpunit/TokenManagerTest.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace MediaWiki\CheckUser\Tests;
+
+use Firebase\JWT\JWT;
+use MediaWiki\CheckUser\TokenManager;
+use MediaWiki\Session\SessionManager;
+use MediaWikiIntegrationTestCase;
+
+/**
+ * Test class for TokenManager class
+ *
+ * @group CheckUser
+ *
+ * @covers \MediaWiki\CheckUser\TokenManager
+ */
+class TokenManagerTest extends MediaWikiIntegrationTestCase {
+
+ public function setUp() : void {
+ parent::setUp();
+ \MWTimestamp::setFakeTime( 0 );
+ JWT::$timestamp = 60;
+ }
+
+ public function tearDown() : void {
+ parent::tearDown();
+ \MWTimestamp::setFakeTime( null );
+ JWT::$timestamp = null;
+ }
+
+ public function testEncodeDecode() {
+ $tokenManager = new TokenManager( 'abcdef' );
+ $targets = [ 'Example', '10.0.0.0/8' ];
+ $request = new \FauxRequest( [], false, [
+ 'CheckUserTokenKey' => base64_encode( 'test' ),
+ ] );
+
+ $encoded = $tokenManager->encode( $request->getSession(), [
+ 'targets' => $targets
+ ] );
+
+ $decoded = $tokenManager->decode( $request->getSession(), $encoded );
+ $this->assertIsArray( $decoded );
+ $this->assertCount( 1, $decoded );
+ $this->arrayHasKey( 'targets', $decoded );
+ $this->assertSame( $targets, $decoded['targets'] );
+ }
+
+ public function testDecodeSecretFailure() {
+ $this->expectExceptionMessage( 'Signature verification failed' );
+
+ $tokenManager = new TokenManager( 'abcdef' );
+ $session = SessionManager::singleton()->getEmptySession();
+ $encoded = $tokenManager->encode( $session, [] );
+
+ $tokenManager = new TokenManager( 'abcdef2' );
+ $decoded = $tokenManager->decode( $session, $encoded );
+ }
+
+ public function testDecodeSessionFailure() {
+ $this->expectExceptionMessage( 'Signature verification failed' );
+
+ $tokenManager = new TokenManager( 'abcdef' );
+ $encoded = $tokenManager->encode( SessionManager::singleton()->getEmptySession(), [] );
+ $decoded = $tokenManager->decode( SessionManager::singleton()->getEmptySession(), $encoded );
+ }
+}