diff options
Diffstat (limited to 'tests/auth')
-rw-r--r-- | tests/auth/fixtures/oauth_tokens.xml | 10 | ||||
-rw-r--r-- | tests/auth/provider_apache_test.php | 16 | ||||
-rw-r--r-- | tests/auth/provider_db_test.php | 8 | ||||
-rw-r--r-- | tests/auth/provider_oauth_token_storage_test.php | 207 |
4 files changed, 229 insertions, 12 deletions
diff --git a/tests/auth/fixtures/oauth_tokens.xml b/tests/auth/fixtures/oauth_tokens.xml new file mode 100644 index 0000000000..9bfb5a4422 --- /dev/null +++ b/tests/auth/fixtures/oauth_tokens.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<dataset> + <table name="phpbb_oauth_tokens"> + <column>user_id</column> + <column>session_id</column> + <column>provider</column> + <column>oauth_token</column> + </table> +</dataset> + diff --git a/tests/auth/provider_apache_test.php b/tests/auth/provider_apache_test.php index 0ca6ef763e..e135a1f002 100644 --- a/tests/auth/provider_apache_test.php +++ b/tests/auth/provider_apache_test.php @@ -22,11 +22,11 @@ class phpbb_auth_provider_apache_test extends phpbb_database_test_case global $phpbb_root_path, $phpEx; $db = $this->new_dbal(); - $config = new phpbb_config(array()); - $this->request = $this->getMock('phpbb_request'); - $this->user = $this->getMock('phpbb_user'); + $config = new \phpbb\config\config(array()); + $this->request = $this->getMock('\phpbb\request\request'); + $this->user = $this->getMock('\phpbb\user'); - $this->provider = new phpbb_auth_provider_apache($db, $config, $this->request, $this->user, $phpbb_root_path, $phpEx); + $this->provider = new \phpbb\auth\provider\apache($db, $config, $this->request, $this->user, $phpbb_root_path, $phpEx); } public function getDataSet() @@ -43,7 +43,7 @@ class phpbb_auth_provider_apache_test extends phpbb_database_test_case $this->request->expects($this->once()) ->method('is_set') ->with('PHP_AUTH_USER', - phpbb_request_interface::SERVER) + \phpbb\request\request_interface::SERVER) ->will($this->returnValue(true)); $this->request->expects($this->once()) ->method('server') @@ -61,7 +61,7 @@ class phpbb_auth_provider_apache_test extends phpbb_database_test_case $this->request->expects($this->once()) ->method('is_set') ->with('PHP_AUTH_USER', - phpbb_request_interface::SERVER) + \phpbb\request\request_interface::SERVER) ->will($this->returnValue(true)); $this->request->expects($this->at(1)) ->method('server') @@ -93,7 +93,7 @@ class phpbb_auth_provider_apache_test extends phpbb_database_test_case $this->request->expects($this->once()) ->method('is_set') ->with('PHP_AUTH_USER', - phpbb_request_interface::SERVER) + \phpbb\request\request_interface::SERVER) ->will($this->returnValue(true)); $this->request->expects($this->at(1)) ->method('server') @@ -194,7 +194,7 @@ class phpbb_auth_provider_apache_test extends phpbb_database_test_case $this->request->expects($this->once()) ->method('is_set') ->with('PHP_AUTH_USER', - phpbb_request_interface::SERVER) + \phpbb\request\request_interface::SERVER) ->will($this->returnValue(true)); $this->request->expects($this->once()) ->method('server') diff --git a/tests/auth/provider_db_test.php b/tests/auth/provider_db_test.php index d876683f84..140a28cd3d 100644 --- a/tests/auth/provider_db_test.php +++ b/tests/auth/provider_db_test.php @@ -21,14 +21,14 @@ class phpbb_auth_provider_db_test extends phpbb_database_test_case global $phpbb_root_path, $phpEx; $db = $this->new_dbal(); - $config = new phpbb_config(array( + $config = new \phpbb\config\config(array( 'ip_login_limit_max' => 0, 'ip_login_limit_use_forwarded' => 0, 'max_login_attempts' => 0, )); - $request = $this->getMock('phpbb_request'); - $user = $this->getMock('phpbb_user'); - $provider = new phpbb_auth_provider_db($db, $config, $request, $user, $phpbb_root_path, $phpEx); + $request = $this->getMock('\phpbb\request\request'); + $user = $this->getMock('\phpbb\user'); + $provider = new \phpbb\auth\provider\db($db, $config, $request, $user, $phpbb_root_path, $phpEx); $expected = array( 'status' => LOGIN_SUCCESS, diff --git a/tests/auth/provider_oauth_token_storage_test.php b/tests/auth/provider_oauth_token_storage_test.php new file mode 100644 index 0000000000..fdc08833a3 --- /dev/null +++ b/tests/auth/provider_oauth_token_storage_test.php @@ -0,0 +1,207 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +use OAuth\OAuth2\Token\StdOAuth2Token; + +class phpbb_auth_provider_oauth_token_storage_test extends phpbb_database_test_case +{ + protected $db; + protected $service_name; + protected $session_id; + protected $token_storage; + protected $token_storage_table; + protected $user; + + protected function setup() + { + parent::setUp(); + + global $phpbb_root_path, $phpEx; + + $this->db = $this->new_dbal(); + $this->user = $this->getMock('\phpbb\user'); + $this->service_name = 'auth.provider.oauth.service.testing'; + $this->token_storage_table = 'phpbb_oauth_tokens'; + + // Give the user a session_id that we will remember + $this->session_id = '12345'; + $this->user->data['session_id'] = $this->session_id; + + // Set the user id to anonymous + $this->user->data['user_id'] = ANONYMOUS; + + $this->token_storage = new \phpbb\auth\provider\oauth\token_storage($this->db, $this->user, $this->token_storage_table); + } + + public function getDataSet() + { + return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/oauth_tokens.xml'); + } + + public static function retrieveAccessToken_data() + { + return array( + array(new StdOAuth2Token('access', 'refresh', StdOAuth2Token::EOL_NEVER_EXPIRES, array('extra' => 'param')), null), + array(null, 'OAuth\Common\Storage\Exception\TokenNotFoundException'), + ); + } + + /** + * @dataProvider retrieveAccessToken_data + */ + public function test_retrieveAccessToken($cache_token, $exception) + { + if ($cache_token) + { + $this->token_storage->storeAccessToken($this->service_name, $cache_token); + $token = $cache_token; + } + + $this->setExpectedException($exception); + + $stored_token = $this->token_storage->retrieveAccessToken($this->service_name); + $this->assertEquals($token, $stored_token); + } + + public function test_retrieveAccessToken_from_db() + { + $expected_token = new StdOAuth2Token('access', 'refresh', StdOAuth2Token::EOL_NEVER_EXPIRES); + + // Store a token in the database + $temp_storage = new \phpbb\auth\provider\oauth\token_storage($this->db, $this->user, $this->token_storage_table); + $temp_storage->storeAccessToken($this->service_name, $expected_token); + unset($temp_storage); + + // Test to see if the token can be retrieved + $stored_token = $this->token_storage->retrieveAccessToken($this->service_name); + $this->assertEquals($expected_token, $stored_token); + } + + /** + * @dataProvider retrieveAccessToken_data + */ + public function test_retrieve_access_token_by_session($cache_token, $exception) + { + if ($cache_token) + { + $this->token_storage->storeAccessToken($this->service_name, $cache_token); + $token = $cache_token; + } + + $this->setExpectedException($exception); + + $stored_token = $this->token_storage->retrieve_access_token_by_session($this->service_name); + $this->assertEquals($token, $stored_token); + } + + public function test_retrieve_access_token_by_session_from_db() + { + $expected_token = new StdOAuth2Token('access', 'refresh', StdOAuth2Token::EOL_NEVER_EXPIRES); + + // Store a token in the database + $temp_storage = new \phpbb\auth\provider\oauth\token_storage($this->db, $this->user, $this->token_storage_table); + $temp_storage->storeAccessToken($this->service_name, $expected_token); + unset($temp_storage); + + // Test to see if the token can be retrieved + $stored_token = $this->token_storage->retrieve_access_token_by_session($this->service_name); + $this->assertEquals($expected_token, $stored_token); + } + + public function test_storeAccessToken() + { + $token = new StdOAuth2Token('access', 'refresh', StdOAuth2Token::EOL_NEVER_EXPIRES, array('extra' => 'param') ); + $this->token_storage->storeAccessToken($this->service_name, $token); + + // Confirm that the token is cached + $extraParams = $this->token_storage->retrieveAccessToken($this->service_name)->getExtraParams(); + $this->assertEquals( 'param', $extraParams['extra'] ); + $this->assertEquals( 'access', $this->token_storage->retrieveAccessToken($this->service_name)->getAccessToken() ); + + $row = $this->get_token_row_by_session_id($this->session_id); + + // The token is serialized before stored in the database + $this->assertEquals($this->token_storage->json_encode_token($token), $row['oauth_token']); + } + + public static function hasAccessToken_data() + { + return array( + array(null, false), + array(new StdOAuth2Token('access', 'refresh', StdOAuth2Token::EOL_NEVER_EXPIRES, array('extra' => 'param') ), true), + ); + } + + /** + * @dataProvider hasAccessToken_data + */ + public function test_hasAccessToken($token, $expected) + { + if ($token) + { + $this->token_storage->storeAccessToken($this->service_name, $token); + } + + $has_access_token = $this->token_storage->hasAccessToken($this->service_name); + $this->assertEquals($expected, $has_access_token); + } + + /** + * @dataProvider hasAccessToken_data + */ + public function test_has_access_token_by_session($token, $expected) + { + if ($token) + { + $this->token_storage->storeAccessToken($this->service_name, $token); + } + + $has_access_token = $this->token_storage->has_access_token_by_session($this->service_name); + $this->assertEquals($expected, $has_access_token); + } + + public function test_clearToken() + { + $token = new StdOAuth2Token('access', 'refresh', StdOAuth2Token::EOL_NEVER_EXPIRES, array('extra' => 'param') ); + $this->token_storage->storeAccessToken($this->service_name, $token); + + $this->token_storage->clearToken($this->service_name); + + // Check that the database has been cleared + $row = $this->get_token_row_by_session_id($this->session_id); + $this->assertFalse($row); + + // Check that the token is no longer in memory + $this->assertFalse($this->token_storage->hasAccessToken($this->service_name)); + } + + public function test_set_user_id() + { + $token = new StdOAuth2Token('access', 'refresh', StdOAuth2Token::EOL_NEVER_EXPIRES, array('extra' => 'param') ); + $this->token_storage->storeAccessToken($this->service_name, $token); + + $new_user_id = ANONYMOUS + 1; + $this->token_storage->set_user_id($new_user_id); + + $row = $this->get_token_row_by_session_id($this->session_id); + $this->assertEquals($new_user_id, $row['user_id']); + } + + protected function get_token_row_by_session_id($session_id) + { + // Test that the token is stored in the database + $sql = 'SELECT * FROM phpbb_oauth_tokens + WHERE session_id = \'' . $this->db->sql_escape($session_id) . '\''; + $result = $this->db->sql_query($sql); + $row = $this->db->sql_fetchrow($result); + $this->db->sql_freeresult($result); + + return $row; + } +} |