def test_post_non_unique_port(self): mc = MinecraftDownload.create( '1.7.4', 'https://s3.amazonaws.com/Minecraft.Download/versions/1.7.4/minecraft_server.1.7.4.jar' ) self.server.key.delete() self.log_in_admin() self.assertEqual(0, Server.query().count()) self.assertEqual(0, Client.query().count()) response = self.post(params={ 'name': 'new server', 'version': mc.version, 'memory': '1G', 'motd': 'Welcome', 'white_list': True, 'server_port': 25565, 'idle_timeout': 10, 'eula_agree': True }) response = self.post(params={ 'name': 'new server', 'version': mc.version, 'memory': '1G', 'motd': 'Welcome', 'white_list': True, 'server_port': 25565, 'idle_timeout': 10, 'eula_agree': True }) self.assertEqual(1, Server.query().count()) self.assertEqual(1, Client.query().count()) self.assertOK(response)
def test_post_duplicate_client_id(self): params = { 'client_id': TEST_CLIENT_ID, 'redirect_uris': [TEST_REDIRECT_URI], 'client_name': TEST_CLIENT_NAME, 'client_uri': TEST_CLIENT_URI, 'logo_uri': TEST_LOGO_URI } response = self.post_json(self.url, params=params) self.assertCreated(response) self.assertEqual(Client.query().count(), 2) client = Client.query().get() self.assertTrue(client.active) body = json.loads(response.body) self.assertEqual(len(body), NUM_CLIENT_FIELDS) self.assertTrue(body['client_id'].startswith(TEST_CLIENT_ID + '-')) client = Client.get_by_client_id(body['client_id']) self.assertEqual(body['redirect_uris'], [TEST_REDIRECT_URI]) self.assertEqual(body['client_name'], TEST_CLIENT_NAME) self.assertEqual(body['client_uri'], TEST_CLIENT_URI) self.assertEqual(body['logo_uri'], TEST_LOGO_URI) self.assertEqual( body['registration_client_uri'], 'https://localhost:80/oauth/v1/clients/{0}'.format( client.client_id)) self.assertEqual(body['registration_access_token'], client.registration_access_token) self.assertEqual(body['client_secret'], client.secret) self.assertEqual(body['client_secret_expires_at'], client.secret_expires_at)
def test_post_duplicate_client_id(self): params = { 'client_id': TEST_CLIENT_ID, 'redirect_uris': [TEST_REDIRECT_URI], 'client_name': TEST_CLIENT_NAME, 'client_uri': TEST_CLIENT_URI, 'logo_uri': TEST_LOGO_URI } response = self.post_json(self.url, params=params) self.assertCreated(response) self.assertEqual(Client.query().count(), 2) client = Client.query().get() self.assertTrue(client.active) body = json.loads(response.body) self.assertEqual(len(body), NUM_CLIENT_FIELDS) self.assertTrue(body['client_id'].startswith(TEST_CLIENT_ID+'-')) client = Client.get_by_client_id(body['client_id']) self.assertEqual(body['redirect_uris'], [TEST_REDIRECT_URI]) self.assertEqual(body['client_name'], TEST_CLIENT_NAME) self.assertEqual(body['client_uri'], TEST_CLIENT_URI) self.assertEqual(body['logo_uri'], TEST_LOGO_URI) self.assertEqual(body['registration_client_uri'], 'https://localhost:80/oauth/v1/clients/{0}'.format(client.client_id)) self.assertEqual(body['registration_access_token'], client.registration_access_token) self.assertEqual(body['client_secret'], client.secret) self.assertEqual(body['client_secret_expires_at'], client.secret_expires_at)
def test_post_non_unique_port(self): mc = MinecraftDownload.create( '1.7.4', 'https://s3.amazonaws.com/Minecraft.Download/versions/1.7.4/minecraft_server.1.7.4.jar' ) self.server.key.delete() self.log_in_admin() self.assertEqual(0, Server.query().count()) self.assertEqual(0, Client.query().count()) response = self.post( params={ 'name': 'new server', 'version': mc.version, 'memory': '1G', 'motd': 'Welcome', 'white_list': True, 'server_port': 25565, 'idle_timeout': 10, 'eula_agree': True }) response = self.post( params={ 'name': 'new server', 'version': mc.version, 'memory': '1G', 'motd': 'Welcome', 'white_list': True, 'server_port': 25565, 'idle_timeout': 10, 'eula_agree': True }) self.assertEqual(1, Server.query().count()) self.assertEqual(1, Client.query().count()) self.assertOK(response)
def test_post_idle_timeout(self): mc = MinecraftDownload.create( '1.7.4', 'https://s3.amazonaws.com/Minecraft.Download/versions/1.7.4/minecraft_server.1.7.4.jar' ) self.server.key.delete() self.log_in_admin() self.assertEqual(0, Server.query().count()) self.assertEqual(0, Client.query().count()) response = self.post(params={ 'name': 'new server', 'version': mc.version, 'memory': '1G', 'motd': 'Welcome', 'white_list': True, 'server_port': 25565, 'idle_timeout': 0, 'eula_agree': True }) self.assertEqual(1, Server.query().count()) self.assertEqual(1, Client.query().count()) server = Server.query().get() self.assertEqual('new server', server.name) self.assertEqual(True, server.is_gce) self.assertEqual('1G', server.memory) self.assertEqual(0, server.idle_timeout) mc_properties = server.mc_properties self.assertEqual('Welcome', mc_properties.motd) self.assertEqual(True, mc_properties.white_list) self.assertEqual(25565, mc_properties.server_port) self.assertRedirects(response, '/servers/{0}'.format(server.key.urlsafe()))
def test_post_idle_timeout(self): mc = MinecraftDownload.create( '1.7.4', 'https://s3.amazonaws.com/Minecraft.Download/versions/1.7.4/minecraft_server.1.7.4.jar' ) self.server.key.delete() self.log_in_admin() self.assertEqual(0, Server.query().count()) self.assertEqual(0, Client.query().count()) response = self.post( params={ 'name': 'new server', 'version': mc.version, 'memory': '1G', 'motd': 'Welcome', 'white_list': True, 'server_port': 25565, 'idle_timeout': 0, 'eula_agree': True }) self.assertEqual(1, Server.query().count()) self.assertEqual(1, Client.query().count()) server = Server.query().get() self.assertEqual('new server', server.name) self.assertEqual(True, server.is_gce) self.assertEqual('1G', server.memory) self.assertEqual(0, server.idle_timeout) mc_properties = server.mc_properties self.assertEqual('Welcome', mc_properties.motd) self.assertEqual(True, mc_properties.white_list) self.assertEqual(25565, mc_properties.server_port) self.assertRedirects(response, '/servers/{0}'.format(server.key.urlsafe()))
def test_post(self): self.server.key.delete() self.log_in_admin() self.assertEqual(0, Server.query().count()) self.assertEqual(0, Client.query().count()) response = self.post(params={'name': 'new server'}) self.assertEqual(1, Server.query().count()) self.assertEqual(1, Client.query().count()) server = Server.query().get() self.assertEqual('new server', server.name) self.assertEqual(False, server.is_gce) self.assertRedirects(response, '/servers/{0}'.format(server.key.urlsafe()))
def test_post_deny_existing_client(self): Client.get_or_insert('test_client', client_id=TEST_CLIENT_ID, redirect_uris=[TEST_REDIRECT_URI]) url = self.url query_params = { 'client_id': TEST_CLIENT_ID, 'redirect_uri': TEST_REDIRECT_URI, 'response_type': 'code' } response = self.get(self.url, params=query_params) self.assertOK(response) csrf_string = 'name="csrf_token" type="hidden" value="' begin = response.body.find(csrf_string) + len(csrf_string) end = response.body.find('"', begin) csrf_token = response.body[begin:end] if query_params: query_params = urlencode(query_params, doseq=True) if '?' in url: url += '&' else: url += '?' url += query_params params = {'csrf_token': csrf_token, 'deny': 'Deny'} response = self.post(url, params) self.assertRedirects(response, to=TEST_REDIRECT_URI + "?error=access_denied") self.assertEqual(1, Client.query().count())
def test_post_authorize(self): url = self.url query_params = { 'client_id': TEST_CLIENT_ID, 'redirect_uri': TEST_REDIRECT_URI, 'response_type': 'code', 'scope': 'data' } response = self.get(self.url, params=query_params) self.assertOK(response) csrf_string = 'name="csrf_token" type="hidden" value="' begin = response.body.find(csrf_string) + len(csrf_string) end = response.body.find('"', begin) csrf_token = response.body[begin:end] if query_params: query_params = urlencode(query_params, doseq=True) if '?' in url: url += '&' else: url += '?' url += query_params params = {'csrf_token': csrf_token, 'grant': 'Grant'} response = self.post(url, params) self.assertRedirects(response) self.assertRegexpMatches(response.headers['Location'], ur"https://localhost/\?code=.+") self.assertEqual(1, Client.query().count())
def test_post_duplicate_none_port(self): self.server.mc_properties.server_port = 25565 self.server.mc_properties.put() self.log_in_admin() self.mc = MinecraftDownload.create( '1.7.4', 'https://s3.amazonaws.com/Minecraft.Download/versions/1.7.4/minecraft_server.1.7.4.jar' ) self.server.version = self.mc.version self.server.put() response = self.post( params={ 'name': self.server.name, 'version': self.server.version, 'memory': '1G', 'server_port': '', 'idle_timeout': 10, 'eula_agree': True } ) self.assertEqual(1, Server.query().count()) self.assertEqual(1, Client.query().count()) server = self.server.key.get() server = self.server.key.get() self.assertIsNone(server.mc_properties.server_port) self.assertRedirects(response, '/servers/{0}'.format(server.key.urlsafe()))
def test_post_deny_existing_client(self): Client.get_or_insert('test_client', client_id=TEST_CLIENT_ID, redirect_uris=[TEST_REDIRECT_URI]) url = self.url query_params = { 'client_id': TEST_CLIENT_ID, 'redirect_uri': TEST_REDIRECT_URI, 'response_type': 'code' } response = self.get(self.url, params=query_params) self.assertOK(response) csrf_string = 'name="csrf_token" type="hidden" value="' begin = response.body.find(csrf_string) + len(csrf_string) end = response.body.find('"', begin) csrf_token = response.body[begin:end] if query_params: query_params = urlencode(query_params, doseq=True) if '?' in url: url += '&' else: url += '?' url += query_params params = {'csrf_token': csrf_token, 'deny': 'Deny'} response = self.post(url, params) self.assertRedirects(response, to=TEST_REDIRECT_URI+"?error=access_denied") self.assertEqual(1, Client.query().count())
def test_post_duplicate_none_port(self): self.server.mc_properties.server_port = 25565 self.server.mc_properties.put() self.log_in_admin() self.mc = MinecraftDownload.create( '1.7.4', 'https://s3.amazonaws.com/Minecraft.Download/versions/1.7.4/minecraft_server.1.7.4.jar' ) self.server.version = self.mc.version self.server.put() response = self.post( params={ 'name': self.server.name, 'version': self.server.version, 'memory': '1G', 'server_port': '', 'idle_timeout': 10, 'eula_agree': True }) self.assertEqual(1, Server.query().count()) self.assertEqual(1, Client.query().count()) server = self.server.key.get() server = self.server.key.get() self.assertIsNone(server.mc_properties.server_port) self.assertRedirects(response, '/servers/{0}'.format(server.key.urlsafe()))
def test_post_minimum(self): self.client.key.delete() self.client = None params = { 'redirect_uris': [TEST_REDIRECT_URI] } response = self.post_json(self.url, params=params) self.assertCreated(response) self.assertEqual(Client.query().count(), 1) client = Client.query().get() self.assertTrue(client.active) body = json.loads(response.body) self.assertEqual(len(body), NUM_CLIENT_FIELDS-3) self.assertEqual(body['client_id'], client.client_id) self.assertEqual(body['redirect_uris'], [TEST_REDIRECT_URI]) self.assertEqual(body['registration_client_uri'], 'https://localhost:80/oauth/v1/clients/{0}'.format(client.client_id)) self.assertEqual(body['registration_access_token'], client.registration_access_token) self.assertEqual(body['client_secret'], client.secret) self.assertEqual(body['client_secret_expires_at'], client.secret_expires_at)
def test_post_minimum(self): self.client.key.delete() self.client = None params = {'redirect_uris': [TEST_REDIRECT_URI]} response = self.post_json(self.url, params=params) self.assertCreated(response) self.assertEqual(Client.query().count(), 1) client = Client.query().get() self.assertTrue(client.active) body = json.loads(response.body) self.assertEqual(len(body), NUM_CLIENT_FIELDS - 3) self.assertEqual(body['client_id'], client.client_id) self.assertEqual(body['redirect_uris'], [TEST_REDIRECT_URI]) self.assertEqual( body['registration_client_uri'], 'https://localhost:80/oauth/v1/clients/{0}'.format( client.client_id)) self.assertEqual(body['registration_access_token'], client.registration_access_token) self.assertEqual(body['client_secret'], client.secret) self.assertEqual(body['client_secret_expires_at'], client.secret_expires_at)
def test_delete(self): response = self.delete( self.url, bearer_token=self.client.registration_access_token) self.assertNoContent(response) self.assertEqual(Client.query().count(), 0)
def test_delete_no_auth(self): response = self.delete(self.url) self.assertUnauthorized(response) self.assertEqual(Client.query().count(), 1)
def test_delete_invalid_client_id(self): response = self.delete(self.URL.format('invalid_client_id'), bearer_token=self.client.registration_access_token) self.assertUnauthorized(response) self.assertEqual(Client.query().count(), 1)
def test_delete(self): response = self.delete(self.url, bearer_token=self.client.registration_access_token) self.assertNoContent(response) self.assertEqual(Client.query().count(), 0)
def test_delete_invalid_client_id(self): response = self.delete( self.URL.format('invalid_client_id'), bearer_token=self.client.registration_access_token) self.assertUnauthorized(response) self.assertEqual(Client.query().count(), 1)