anchor/tests/auth/test_keystone.py

144 lines
5.4 KiB
Python

# -*- coding:utf-8 -*-
#
# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# 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.
import unittest
import uuid
import mock
import requests
import requests_mock
from anchor.auth import keystone
from anchor.auth import results
class AuthKeystoneTests(unittest.TestCase):
def setUp(self):
self.config = "anchor.jsonloader.conf._config"
self.data = {'auth': {'keystone': {'url': 'http://localhost:35357'}}}
self.json_response = {
"token": {
"audit_ids": [
"TPDsHuK_QCaKwvkVlAer8A"
],
"catalog": [
{
"endpoints": [
{
"id": "1390df96096d4bd19add44811db34397",
"interface": "public",
"region": "RegionOne",
"region_id": "RegionOne",
"url": "http://10.0.2.15:5000/v2.0"
},
{
"id": "534bcae735614781a03069d637b21570",
"interface": "internal",
"region": "RegionOne",
"region_id": "RegionOne",
"url": "http://10.0.2.15:5000/v2.0"
},
{
"id": "cc7e879d691e4e4b9f4afecb1a3ce8f0",
"interface": "admin",
"region": "RegionOne",
"region_id": "RegionOne",
"url": "http://10.0.2.15:35357/v2.0"
}
],
"id": "3010a0c9af684db28659f0e9e08ee863",
"name": "keystone",
"type": "identity"
}
],
"expires_at": "2015-07-27T02:38:09.000000Z",
"extras": {},
"issued_at": "2015-07-27T01:38:09.409616",
"methods": [
"password",
"token"
],
"project": {
"domain": {
"id": "default",
"name": "Default"
},
"id": "5b2e7bd5d5954fdaa2d931285df8a132",
"name": "demo"
},
"roles": [
{
"id": "35a1d29b54f64c969aa9be288ec9d39a",
"name": "anotherrole"
},
{
"id": "9f64371fcbd64c669ab1a24686a1a367",
"name": "Member"
}
],
"user": {
"domain": {
"id": "default",
"name": "Default"
},
"id": "b2016b9338214cda926d5631c1fbc40c",
"name": "demo"
}
}
}
self.user = self.json_response['token']['user']['name']
self.roles = [role['name']
for role in self.json_response['token']['roles']]
self.user_id = self.json_response['token']['user']['id']
self.project_id = self.json_response['token']['project']['id']
self.expected = results.AuthDetails(
username=self.user, groups=self.roles,
user_id=self.user_id, project_id=self.project_id)
self.keystone_url = self.data['auth'][
'keystone']['url'] + '/v3/auth/tokens'
self.keystone_token = uuid.uuid4().hex
super(AuthKeystoneTests, self).setUp()
def tearDown(self):
pass
def test_parse_keystone_valid_response(self):
with mock.patch.dict(self.config, self.data):
with requests_mock.mock() as m:
m.get(self.keystone_url, json=self.json_response,
status_code=200)
requests.get(self.keystone_url)
self.assertEqual(keystone.login(
None, self.keystone_token), self.expected)
def test_parse_keystone_auth_fail(self):
with mock.patch.dict(self.config, self.data):
with requests_mock.mock() as m:
m.get(self.keystone_url, status_code=401)
self.assertEqual(keystone.login(
None, self.keystone_token), None)
def test_parse_keystone_ok_but_malformed_response(self):
with mock.patch.dict(self.config, self.data):
with requests_mock.mock() as m:
m.get(self.keystone_url, json={}, status_code=200)
self.assertEqual(keystone.login(
None, self.keystone_token), None)