def test_login(self): TOKEN_ID = 1 form_data = { 'method': 'Login', 'password': self.PASSWORD, 'username': self.TEST_USER } self.mox.StubOutWithMock(api, 'token_create') aToken = self.mox.CreateMock(api.Token) aToken.id = TOKEN_ID aToken.serviceCatalog = {} api.token_create(IsA(http.HttpRequest), "", self.TEST_USER, self.PASSWORD).AndReturn(aToken) self.mox.StubOutWithMock(api, 'token_info') tokenInfo = { 'user': self.TEST_USER, 'tenant': self.TEST_TENANT, 'admin': False } api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo) self.mox.ReplayAll() res = self.client.post(reverse('auth_login'), form_data) self.assertRedirectsNoFollow(res, reverse('dash_overview')) self.mox.VerifyAll()
def test_login(self): TOKEN_ID = 1 form_data = {'method': 'Login', 'password': self.PASSWORD, 'username': self.TEST_USER} self.mox.StubOutWithMock(api, 'token_create') aToken = self.mox.CreateMock(api.Token) aToken.id = TOKEN_ID aToken.serviceCatalog = {} api.token_create(IsA(http.HttpRequest), "", self.TEST_USER, self.PASSWORD).AndReturn(aToken) self.mox.StubOutWithMock(api, 'token_info') tokenInfo = {'user': self.TEST_USER, 'tenant': self.TEST_TENANT, 'admin': False} api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo) self.mox.ReplayAll() res = self.client.post(reverse('auth_login'), form_data) self.assertRedirectsNoFollow(res, reverse('dash_overview')) self.mox.VerifyAll()
def test_switch_tenants(self): NEW_TENANT = 'newTenant' TOKEN_ID = 1 self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT, False, self.TEST_SERVICE_CATALOG) form_data = {'method': 'LoginWithTenant', 'password': self.PASSWORD, 'tenant': NEW_TENANT, 'username': self.TEST_USER} self.mox.StubOutWithMock(api, 'token_create') aToken = self.mox.CreateMock(api.Token) aToken.id = TOKEN_ID aToken.serviceCatalog = {} api.token_create(IsA(http.HttpRequest), NEW_TENANT, self.TEST_USER, self.PASSWORD).AndReturn(aToken) self.mox.StubOutWithMock(api, 'token_info') tokenInfo = {'user': self.TEST_USER, 'tenant': NEW_TENANT, 'admin': False} api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo) self.mox.ReplayAll() res = self.client.post(reverse('auth_switch', args=[NEW_TENANT]), form_data) self.assertRedirectsNoFollow(res, reverse('dash_overview')) self.assertEqual(self.client.session['tenant'], NEW_TENANT) self.mox.VerifyAll()
def handle(self, request, data): try: token = api.token_create(request, data.get('tenant', ''), data['username'], data['password']) info = api.token_info(request, token) request.session['token'] = token.id request.session['user'] = info['user'] request.session['tenant'] = data.get('tenant', info['tenant']) request.session['admin'] = info['admin'] request.session['serviceCatalog'] = token.serviceCatalog LOG.info('Login form for user "%s". Service Catalog data:\n%s' % (data['username'], token.serviceCatalog)) return shortcuts.redirect('dash_overview') except api_exceptions.Unauthorized as e: msg = 'Error authenticating: %s' % e.message LOG.error(msg, exc_info=True) messages.error(request, msg) except api_exceptions.ApiException as e: messages.error(request, 'Error authenticating with keystone: %s' % e.message)
def test_switch_tenants(self): NEW_TENANT = 'newTenant' TOKEN_ID = 1 self.setActiveUser(self.TEST_TOKEN, self.TEST_USER, self.TEST_TENANT, False, self.TEST_SERVICE_CATALOG) form_data = { 'method': 'LoginWithTenant', 'password': self.PASSWORD, 'tenant': NEW_TENANT, 'username': self.TEST_USER } self.mox.StubOutWithMock(api, 'token_create') aToken = self.mox.CreateMock(api.Token) aToken.id = TOKEN_ID aToken.serviceCatalog = {} api.token_create(IsA(http.HttpRequest), NEW_TENANT, self.TEST_USER, self.PASSWORD).AndReturn(aToken) self.mox.StubOutWithMock(api, 'token_info') tokenInfo = { 'user': self.TEST_USER, 'tenant': NEW_TENANT, 'admin': False } api.token_info(IsA(http.HttpRequest), aToken).AndReturn(tokenInfo) self.mox.ReplayAll() res = self.client.post(reverse('auth_switch', args=[NEW_TENANT]), form_data) self.assertRedirectsNoFollow(res, reverse('dash_overview')) self.assertEqual(self.client.session['tenant'], NEW_TENANT) self.mox.VerifyAll()
def handle(self, request, data): try: token = api.auth_api().tokens.create("", data['username'], data['password']) info = api.token_info(token) request.session['token'] = token.id request.session['user'] = info['user'] request.session['tenant'] = info['tenant'] request.session['admin'] = info['admin'] request.session['serviceCatalog'] = token.serviceCatalog logging.info(token.serviceCatalog) if request.session['admin']: return shortcuts.redirect('syspanel_overview') else: return shortcuts.redirect('dash_overview') except api_exceptions.Unauthorized as e: messages.error(request, 'Error authenticating: %s' % e.message)
def handle(self, request, data): try: token = api.token_create(request, data.get('tenant', ''), data['username'], data['password']) info = api.token_info(request, token) request.session['token'] = token.id request.session['user'] = info['user'] request.session['tenant'] = data.get('tenant', info['tenant']) request.session['admin'] = info['admin'] request.session['serviceCatalog'] = token.serviceCatalog LOG.info('Login form for user "%s". Service Catalog data:\n%s' % (data['username'], token.serviceCatalog)) return shortcuts.redirect('dash_overview') except api_exceptions.Unauthorized as e: msg = 'Error authenticating: %s' % e.message LOG.error(msg, exc_info=True) messages.error(request, msg) except api_exceptions.ApiException as e: messages.error( request, 'Error authenticating with keystone: %s' % e.message)
def test_token_info(self): """ This function uses the keystone api, but not through an api client, because there doesn't appear to be one for keystone """ GLANCE_URL = "http://glance/glance_api/" KEYSTONE_HOST = "keystonehost" KEYSTONE_PORT = 8080 KEYSTONE_URL = "http://%s:%d/keystone/" % (KEYSTONE_HOST, KEYSTONE_PORT) serviceCatalog = { "glance": [{"adminURL": GLANCE_URL + "admin", "internalURL": GLANCE_URL + "internal"}], "identity": [{"adminURL": KEYSTONE_URL + "admin", "internalURL": KEYSTONE_URL + "internal"}], } token = Token(TEST_TOKEN_ID, TEST_TENANT_ID, TEST_USERNAME, serviceCatalog) jsonData = { "auth": { "token": {"expires": "2011-07-02T02:01:19.382655", "id": "3c5748d5-bec6-4215-843a-f959d589f4b0"}, "user": {"username": "******", "roleRefs": [{"roleId": "Minion"}], "tenantId": u"1234"}, } } jsonDataAdmin = { "auth": { "token": {"expires": "2011-07-02T02:01:19.382655", "id": "3c5748d5-bec6-4215-843a-f959d589f4b0"}, "user": {"username": "******", "roleRefs": [{"roleId": "Admin"}], "tenantId": u"1234"}, } } # setup test where user is not admin self.mox.StubOutClassWithMocks(httplib, "HTTPConnection") conn = httplib.HTTPConnection(KEYSTONE_HOST, KEYSTONE_PORT) response = self.mox.CreateMock(httplib.HTTPResponse) conn.request(IsA(str), IsA(str), headers=IsA(dict)) conn.getresponse().AndReturn(response) response.read().AndReturn(json.dumps(jsonData)) expected_nonadmin_val = {"tenant": "1234", "user": "******", "admin": False} # setup test where user is admin conn = httplib.HTTPConnection(KEYSTONE_HOST, KEYSTONE_PORT) response = self.mox.CreateMock(httplib.HTTPResponse) conn.request(IsA(str), IsA(str), headers=IsA(dict)) conn.getresponse().AndReturn(response) response.read().AndReturn(json.dumps(jsonDataAdmin)) expected_admin_val = {"tenant": "1234", "user": "******", "admin": True} self.mox.ReplayAll() ret_val = api.token_info(None, token) self.assertDictEqual(ret_val, expected_nonadmin_val) ret_val = api.token_info(None, token) self.assertDictEqual(ret_val, expected_admin_val) self.mox.VerifyAll()
def test_token_info(self): """ This function uses the keystone api, but not through an api client, because there doesn't appear to be one for keystone """ GLANCE_URL = 'http://glance/glance_api/' KEYSTONE_HOST = 'keystonehost' KEYSTONE_PORT = 8080 KEYSTONE_URL = 'http://%s:%d/keystone/' % (KEYSTONE_HOST, KEYSTONE_PORT) serviceCatalog = { 'glance': [{'adminURL': GLANCE_URL + 'admin', 'internalURL': GLANCE_URL + 'internal'}, ], 'identity': [{'adminURL': KEYSTONE_URL + 'admin', 'internalURL': KEYSTONE_URL + 'internal'}, ], } token = Token(TEST_TOKEN_ID, TEST_TENANT_ID, TEST_USERNAME, serviceCatalog) jsonData = { 'auth': { 'token': { 'expires': '2011-07-02T02:01:19.382655', 'id': '3c5748d5-bec6-4215-843a-f959d589f4b0', }, 'user': { 'username': '******', 'roleRefs': [{'roleId': 'Minion'}], 'tenantId': u'1234' } } } jsonDataAdmin = { 'auth': { 'token': { 'expires': '2011-07-02T02:01:19.382655', 'id': '3c5748d5-bec6-4215-843a-f959d589f4b0', }, 'user': { 'username': '******', 'roleRefs': [{'roleId': 'Admin'}], 'tenantId': u'1234' } } } # setup test where user is not admin self.mox.StubOutClassWithMocks(httplib, 'HTTPConnection') conn = httplib.HTTPConnection(KEYSTONE_HOST, KEYSTONE_PORT) response = self.mox.CreateMock(httplib.HTTPResponse) conn.request(IsA(str), IsA(str), headers=IsA(dict)) conn.getresponse().AndReturn(response) response.read().AndReturn(json.dumps(jsonData)) expected_nonadmin_val = { 'tenant': '1234', 'user': '******', 'admin': False } # setup test where user is admin conn = httplib.HTTPConnection(KEYSTONE_HOST, KEYSTONE_PORT) response = self.mox.CreateMock(httplib.HTTPResponse) conn.request(IsA(str), IsA(str), headers=IsA(dict)) conn.getresponse().AndReturn(response) response.read().AndReturn(json.dumps(jsonDataAdmin)) expected_admin_val = { 'tenant': '1234', 'user': '******', 'admin': True } self.mox.ReplayAll() ret_val = api.token_info(None, token) self.assertDictEqual(ret_val, expected_nonadmin_val) ret_val = api.token_info(None, token) self.assertDictEqual(ret_val, expected_admin_val) self.mox.VerifyAll()