enableBc(); $GLOBALS['server'] = 0; $this->object = new AuthenticationSignon(); } /** * tearDown for test cases * * @return void */ public function tearDown() { unset($this->object); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::auth * * @return void */ public function testAuth() { $GLOBALS['cfg']['Server']['SignonURL'] = ''; ob_start(); $this->object->auth(); $result = ob_get_clean(); $this->assertContains( 'You must set SignonURL!', $result ); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::auth * * @return void */ public function testAuthLogoutURL() { $restoreInstance = PMA\libraries\Response::getInstance(); $mockResponse = $this->getMockBuilder('PMA\libraries\Response') ->disableOriginalConstructor() ->setMethods(array('isAjax', 'headersSent', 'header')) ->getMock(); $mockResponse->expects($this->any()) ->method('headersSent') ->with() ->will($this->returnValue(false)); $mockResponse->expects($this->once()) ->method('header') ->with('Location: https://example.com/logoutURL'); $attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance'); $attrInstance->setAccessible(true); $attrInstance->setValue($mockResponse); $GLOBALS['cfg']['Server']['SignonURL'] = 'https://example.com/SignonURL'; $GLOBALS['cfg']['Server']['LogoutURL'] = 'https://example.com/logoutURL'; $this->object->logOut(); $attrInstance->setValue($restoreInstance); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::auth * * @return void */ public function testAuthLogout() { $restoreInstance = PMA\libraries\Response::getInstance(); $mockResponse = $this->getMockBuilder('PMA\libraries\Response') ->disableOriginalConstructor() ->setMethods(array('isAjax', 'headersSent', 'header')) ->getMock(); $mockResponse->expects($this->any()) ->method('headersSent') ->with() ->will($this->returnValue(false)); $mockResponse->expects($this->once()) ->method('header') ->with('Location: https://example.com/SignonURL'); $attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance'); $attrInstance->setAccessible(true); $attrInstance->setValue($mockResponse); $GLOBALS['header'] = array(); $GLOBALS['cfg']['Server']['SignonURL'] = 'https://example.com/SignonURL'; $GLOBALS['cfg']['Server']['LogoutURL'] = ''; $this->object->logOut(); $attrInstance->setValue($restoreInstance); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authCheck * * @return void */ public function testAuthCheckEmpty() { $GLOBALS['cfg']['Server']['SignonURL'] = 'https://example.com/SignonURL'; $_SESSION['LAST_SIGNON_URL'] = 'https://example.com/SignonDiffURL'; $this->assertFalse( $this->object->authCheck() ); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authCheck * * @return void */ public function testAuthCheckSession() { $GLOBALS['cfg']['Server']['SignonURL'] = 'https://example.com/SignonURL'; $_SESSION['LAST_SIGNON_URL'] = 'https://example.com/SignonURL'; $GLOBALS['cfg']['Server']['SignonScript'] = './examples/signon-script.php'; $GLOBALS['cfg']['Server']['SignonSession'] = 'session123'; $GLOBALS['cfg']['Server']['host'] = 'localhost'; $GLOBALS['cfg']['Server']['port'] = '80'; $GLOBALS['cfg']['Server']['user'] = 'user'; $this->assertTrue( $this->object->authCheck() ); $this->assertEquals( 'user', $GLOBALS['PHP_AUTH_USER'] ); $this->assertEquals( 'password', $GLOBALS['PHP_AUTH_PW'] ); $this->assertEquals( 'https://example.com/SignonURL', $_SESSION['LAST_SIGNON_URL'] ); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authCheck * * @return void */ public function testAuthCheckToken() { $restoreInstance = PMA\libraries\Response::getInstance(); $mockResponse = $this->getMockBuilder('PMA\libraries\Response') ->disableOriginalConstructor() ->setMethods(array('isAjax', 'headersSent', 'header')) ->getMock(); $mockResponse->expects($this->any()) ->method('headersSent') ->with() ->will($this->returnValue(false)); $mockResponse->expects($this->once()) ->method('header') ->with('Location: https://example.com/SignonURL'); $attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance'); $attrInstance->setAccessible(true); $attrInstance->setValue($mockResponse); $GLOBALS['cfg']['Server']['SignonURL'] = 'https://example.com/SignonURL'; $GLOBALS['cfg']['Server']['SignonSession'] = 'session123'; $GLOBALS['cfg']['Server']['host'] = 'localhost'; $GLOBALS['cfg']['Server']['port'] = '80'; $GLOBALS['cfg']['Server']['user'] = 'user'; $GLOBALS['cfg']['Server']['SignonScript'] = ''; $_COOKIE['session123'] = true; $_SESSION['PMA_single_signon_user'] = 'user123'; $_SESSION['PMA_single_signon_password'] = 'pass123'; $_SESSION['PMA_single_signon_host'] = 'local'; $_SESSION['PMA_single_signon_port'] = '12'; $_SESSION['PMA_single_signon_cfgupdate'] = array('foo' => 'bar'); $_SESSION['PMA_single_signon_token'] = 'pmaToken'; $sessionName = session_name(); $sessionID = session_id(); $this->object->logOut(); $this->assertEquals( array( 'SignonURL' => 'https://example.com/SignonURL', 'SignonScript' => '', 'SignonSession' => 'session123', 'host' => 'localhost', 'port' => '80', 'user' => 'user', ), $GLOBALS['cfg']['Server'] ); $this->assertEquals( $sessionName, session_name() ); $this->assertEquals( $sessionID, session_id() ); $this->assertFalse( isset($_SESSION['LAST_SIGNON_URL']) ); $attrInstance->setValue($restoreInstance); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authCheck * * @return void */ public function testAuthCheckKeep() { $GLOBALS['cfg']['Server']['SignonURL'] = 'https://example.com/SignonURL'; $GLOBALS['cfg']['Server']['SignonSession'] = 'session123'; $GLOBALS['cfg']['Server']['host'] = 'localhost'; $GLOBALS['cfg']['Server']['port'] = '80'; $GLOBALS['cfg']['Server']['user'] = 'user'; $GLOBALS['cfg']['Server']['SignonScript'] = ''; $_COOKIE['session123'] = true; $_REQUEST['old_usr'] = ''; $_SESSION['PMA_single_signon_user'] = 'user123'; $_SESSION['PMA_single_signon_password'] = 'pass123'; $_SESSION['PMA_single_signon_host'] = 'local'; $_SESSION['PMA_single_signon_port'] = '12'; $_SESSION['PMA_single_signon_cfgupdate'] = array('foo' => 'bar'); $_SESSION['PMA_single_signon_token'] = 'pmaToken'; $this->assertTrue( $this->object->authCheck() ); $this->assertEquals( 'user123', $GLOBALS['PHP_AUTH_USER'] ); $this->assertEquals( 'pass123', $GLOBALS['PHP_AUTH_PW'] ); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authSetUser * * @return void */ public function testAuthSetUser() { $GLOBALS['PHP_AUTH_USER'] = 'testUser123'; $GLOBALS['PHP_AUTH_PW'] = 'testPass123'; $this->assertTrue( $this->object->authSetUser() ); $this->assertEquals( 'testUser123', $GLOBALS['cfg']['Server']['user'] ); $this->assertEquals( 'testPass123', $GLOBALS['cfg']['Server']['password'] ); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authFails * * @return void */ public function testAuthFailsForbidden() { $GLOBALS['cfg']['Server']['SignonSession'] = 'newSession'; $_COOKIE['newSession'] = '42'; $this->object = $this->getMockBuilder('PMA\libraries\plugins\auth\AuthenticationSignon') ->disableOriginalConstructor() ->setMethods(array('auth')) ->getMock(); $this->object->expects($this->exactly(1)) ->method('auth'); $GLOBALS['login_without_password_is_forbidden'] = true; $this->object->authFails(); $this->assertEquals( 'Login without a password is forbidden by configuration ' . '(see AllowNoPassword)', $_SESSION['PMA_single_signon_error_message'] ); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authFails * * @return void */ public function testAuthFailsDeny() { $GLOBALS['cfg']['Server']['SignonSession'] = 'newSession'; $_COOKIE['newSession'] = '42'; $this->object = $this->getMockBuilder('PMA\libraries\plugins\auth\AuthenticationSignon') ->disableOriginalConstructor() ->setMethods(array('auth')) ->getMock(); $this->object->expects($this->exactly(1)) ->method('auth'); $GLOBALS['login_without_password_is_forbidden'] = null; $GLOBALS['allowDeny_forbidden'] = true; $this->object->authFails(); $this->assertEquals( 'Access denied!', $_SESSION['PMA_single_signon_error_message'] ); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authFails * * @return void */ public function testAuthFailsTimeout() { $GLOBALS['cfg']['Server']['SignonSession'] = 'newSession'; $_COOKIE['newSession'] = '42'; $this->object = $this->getMockBuilder('PMA\libraries\plugins\auth\AuthenticationSignon') ->disableOriginalConstructor() ->setMethods(array('auth')) ->getMock(); $this->object->expects($this->exactly(1)) ->method('auth'); $GLOBALS['allowDeny_forbidden'] = null; $GLOBALS['no_activity'] = true; $GLOBALS['cfg']['LoginCookieValidity'] = '1440'; $this->object->authFails(); $this->assertEquals( 'No activity within 1440 seconds; please log in again.', $_SESSION['PMA_single_signon_error_message'] ); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authFails * * @return void */ public function testAuthFailsMySQLError() { $GLOBALS['cfg']['Server']['SignonSession'] = 'newSession'; $_COOKIE['newSession'] = '42'; $this->object = $this->getMockBuilder('PMA\libraries\plugins\auth\AuthenticationSignon') ->disableOriginalConstructor() ->setMethods(array('auth')) ->getMock(); $this->object->expects($this->exactly(1)) ->method('auth'); $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface') ->disableOriginalConstructor() ->getMock(); $dbi->expects($this->at(0)) ->method('getError') ->will($this->returnValue('error<123>')); $GLOBALS['dbi'] = $dbi; $GLOBALS['no_activity'] = null; $this->object->authFails(); $this->assertEquals( 'error<123>', $_SESSION['PMA_single_signon_error_message'] ); } /** * Test for PMA\libraries\plugins\auth\AuthenticationSignon::authFails * * @return void */ public function testAuthFailsConnect() { $GLOBALS['cfg']['Server']['SignonSession'] = 'newSession'; $_COOKIE['newSession'] = '42'; $this->object = $this->getMockBuilder('PMA\libraries\plugins\auth\AuthenticationSignon') ->disableOriginalConstructor() ->setMethods(array('auth')) ->getMock(); $this->object->expects($this->exactly(1)) ->method('auth'); $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface') ->disableOriginalConstructor() ->getMock(); $dbi->expects($this->at(0)) ->method('getError') ->will($this->returnValue(null)); $GLOBALS['dbi'] = $dbi; $this->object->authFails(); $this->assertEquals( 'Cannot log in to the MySQL server', $_SESSION['PMA_single_signon_error_message'] ); } }