Adding identity api v2.0 tests
Change-Id: I955392bd462957208a9b7ce58efa5da7e1a2db47
diff --git a/kong/tests/test_auth.py b/kong/tests/test_auth.py
new file mode 100644
index 0000000..bc040a8
--- /dev/null
+++ b/kong/tests/test_auth.py
@@ -0,0 +1,183 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack, LLC
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Functional test case against the OpenStack Nova API server"""
+
+import httplib2
+import json
+import os
+import time
+import uuid
+
+from kong import keystone
+from kong import tests
+
+
+class TestKeystoneAuth(tests.FunctionalTest):
+
+ def setUp(self):
+ super(TestKeystoneAuth, self).setUp()
+
+ api_version = self.keystone['apiver']
+ if api_version != 'v2.0':
+ raise ValueError("Must use Identity API v2.0")
+
+ args = (self.keystone['service_host'],
+ self.keystone['service_port'],
+ api_version)
+
+ self.base_url = "http://%s:%s/%s/tokens" % args
+
+ self.user = self.keystone['user']
+ self.password = self.keystone['password']
+ self.tenant_id = self.keystone['tenant_id']
+
+ def test_can_get_token(self):
+ headers = {'content-type': 'application/json'}
+
+ body = {
+ "auth": {
+ "passwordCredentials":{
+ "username": self.user,
+ "password": self.password,
+ },
+ "tenantId": self.tenant_id,
+ },
+ }
+
+ http = httplib2.Http()
+ response, content = http.request(self.base_url, 'POST',
+ headers=headers,
+ body=json.dumps(body))
+
+ self.assertEqual(response.status, 200)
+ res_body = json.loads(content)
+ self.assertTrue(res_body['access']['token']['id'])
+ test_can_get_token.tags = ['auth']
+
+ def test_bad_user(self):
+ headers = {'content-type': 'application/json'}
+
+ body = {
+ "auth": {
+ "passwordCredentials": {
+ "username": str(uuid.uuid4()),
+ "password": self.password,
+ },
+ "tenantId": self.tenant_id,
+ },
+ }
+
+ http = httplib2.Http()
+ response, content = http.request(self.base_url, 'POST',
+ headers=headers,
+ body=json.dumps(body))
+
+ self.assertEqual(response.status, 401)
+ test_bad_user.tags = ['auth']
+
+ def test_bad_password(self):
+ headers = {'content-type': 'application/json'}
+
+ body = {
+ "auth": {
+ "passwordCredentials": {
+ "username": self.user,
+ "password": str(uuid.uuid4()),
+ },
+ "tenantId": self.tenant_id,
+ },
+ }
+
+ http = httplib2.Http()
+ response, content = http.request(self.base_url, 'POST',
+ headers=headers,
+ body=json.dumps(body))
+
+ self.assertEqual(response.status, 401)
+ test_bad_password.tags = ['auth']
+
+ def test_bad_tenant_id(self):
+ headers = {'content-type': 'application/json'}
+
+ body = {
+ "auth": {
+ "passwordCredentials": {
+ "username": self.user,
+ "password": self.password,
+ },
+ "tenantId": str(uuid.uuid4()),
+ },
+ }
+
+ http = httplib2.Http()
+ response, content = http.request(self.base_url, 'POST',
+ headers=headers,
+ body=json.dumps(body))
+
+ self.assertEqual(response.status, 401)
+ test_bad_tenant_id.tags = ['auth']
+
+
+
+class TestKeystoneAuthWithNova(tests.FunctionalTest):
+
+ def setUp(self):
+ super(TestKeystoneAuthWithNova, self).setUp()
+ args = (self.nova['host'], self.nova['port'],
+ self.nova['ver'], self.nova['project'])
+ self.base_url = "http://%s:%s/%s/%s" % args
+
+ self.keystone_api = keystone.API(self.keystone['service_host'],
+ self.keystone['service_port'])
+
+ def _get_token(self):
+ user = self.keystone['user']
+ password = self.keystone['password']
+ tenant_id = self.keystone['tenant_id']
+ return self.keystone_api.get_token(user, password, tenant_id)
+
+ def test_good_token(self):
+ http = httplib2.Http()
+ url = '%s/flavors' % self.base_url
+ headers = {'x-auth-token': self._get_token()}
+ response, content = http.request(url, 'GET', headers=headers)
+ self.assertEqual(response.status, 200)
+ test_good_token.tags = ['nova', 'auth']
+
+ def test_bad_token(self):
+ http = httplib2.Http()
+ url = '%s/flavors' % self.base_url
+ headers = {'x-auth-token': str(uuid.uuid4())}
+ response, content = http.request(url, 'GET', headers=headers)
+ self.assertEqual(response.status, 401)
+ test_bad_token.tags = ['nova', 'auth']
+
+ def test_no_token(self):
+ http = httplib2.Http()
+ url = '%s/flavors' % self.base_url
+ headers = {'x-auth-token': str(uuid.uuid4())}
+ response, content = http.request(url, 'GET', headers=headers)
+ self.assertEqual(response.status, 401)
+ test_no_token.tags = ['nova', 'auth']
+
+ def test_no_header(self):
+ http = httplib2.Http()
+ url = '%s/flavors' % self.base_url
+ response, content = http.request(url, 'GET')
+ self.assertEqual(response.status, 401)
+ test_no_header.tags = ['nova', 'auth']