fixes auth_ref initialization error
bug 1078589 * allow client values to be overridden, but use auth_ref if none available * added tests to match this flow * refactored tokens into test_fixtures.py file Change-Id: I771a2dee6dedf31d883417d9b4e6e64bbb620f14
This commit is contained in:
@@ -48,25 +48,40 @@ class HTTPClient(httplib2.Http):
|
||||
else:
|
||||
self.add_certificate(key=cert, cert=cert, domain='')
|
||||
self.version = 'v2.0'
|
||||
# set baseline defaults
|
||||
self.username = None
|
||||
self.tenant_id = None
|
||||
self.tenant_name = None
|
||||
self.auth_url = None
|
||||
self.token = None
|
||||
self.auth_token = None
|
||||
self.management_url = None
|
||||
# if loading from a dictionary passed in via auth_ref,
|
||||
# load values from AccessInfo parsing that dictionary
|
||||
self.auth_ref = access.AccessInfo(**auth_ref) if auth_ref else None
|
||||
if self.auth_ref:
|
||||
self.username = self.auth_ref.username
|
||||
self.tenant_id = self.auth_ref.tenant_id
|
||||
self.tenant_name = self.auth_ref.tenant_name
|
||||
self.auth_url = self.auth_ref.auth_url
|
||||
self.management_url = self.auth_ref.management_url
|
||||
self.auth_url = self.auth_ref.auth_url[0]
|
||||
self.management_url = self.auth_ref.management_url[0]
|
||||
self.auth_token = self.auth_ref.auth_token
|
||||
#NOTE(heckj): allow override of the auth_ref defaults from explicit
|
||||
# allow override of the auth_ref defaults from explicit
|
||||
# values provided to the client
|
||||
self.username = username
|
||||
self.tenant_id = tenant_id
|
||||
self.tenant_name = tenant_name
|
||||
if username:
|
||||
self.username = username
|
||||
if tenant_id:
|
||||
self.tenant_id = tenant_id
|
||||
if tenant_name:
|
||||
self.tenant_name = tenant_name
|
||||
if auth_url:
|
||||
self.auth_url = auth_url.rstrip('/')
|
||||
if token:
|
||||
self.auth_token = token
|
||||
if endpoint:
|
||||
self.management_url = endpoint.rstrip('/')
|
||||
self.password = password
|
||||
self.auth_url = auth_url.rstrip('/') if auth_url else None
|
||||
self.auth_token = token
|
||||
self.original_ip = original_ip
|
||||
|
||||
self.management_url = endpoint.rstrip('/') if endpoint else None
|
||||
self.region_name = region_name
|
||||
|
||||
# httplib2 overrides
|
||||
|
72
tests/client_fixtures.py
Normal file
72
tests/client_fixtures.py
Normal file
@@ -0,0 +1,72 @@
|
||||
UNSCOPED_TOKEN = {
|
||||
u'access': {u'serviceCatalog': {},
|
||||
u'token': {u'expires': u'2012-10-03T16:58:01Z',
|
||||
u'id': u'3e2813b7ba0b4006840c3825860b86ed'},
|
||||
u'user': {u'id': u'c4da488862bd435c9e6c0275a0d0e49a',
|
||||
u'name': u'exampleuser',
|
||||
u'roles': [],
|
||||
u'roles_links': [],
|
||||
u'username': u'exampleuser'}
|
||||
}
|
||||
}
|
||||
|
||||
PROJECT_SCOPED_TOKEN = {
|
||||
u'access': {
|
||||
u'serviceCatalog': [{
|
||||
u'endpoints': [{
|
||||
u'adminURL': u'http://admin:8776/v1/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'internalURL':
|
||||
u'http://internal:8776/v1/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'publicURL':
|
||||
u'http://public.com:8776/v1/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'region': u'RegionOne'
|
||||
}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'Volume Service',
|
||||
u'type': u'volume'},
|
||||
{u'endpoints': [{
|
||||
u'adminURL': u'http://admin:9292/v1',
|
||||
u'internalURL': u'http://internal:9292/v1',
|
||||
u'publicURL': u'http://public.com:9292/v1',
|
||||
u'region': u'RegionOne'}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'Image Service',
|
||||
u'type': u'image'},
|
||||
{u'endpoints': [{
|
||||
u'adminURL': u'http://admin:8774/v2/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'internalURL': u'http://internal:8774/v2/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'publicURL': u'http://public.com:8774/v2/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'region': u'RegionOne'}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'Compute Service',
|
||||
u'type': u'compute'},
|
||||
{u'endpoints': [{
|
||||
u'adminURL': u'http://admin:8773/services/Admin',
|
||||
u'internalURL': u'http://internal:8773/services/Cloud',
|
||||
u'publicURL': u'http://public.com:8773/services/Cloud',
|
||||
u'region': u'RegionOne'}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'EC2 Service',
|
||||
u'type': u'ec2'},
|
||||
{u'endpoints': [{
|
||||
u'adminURL': u'http://admin:35357/v2.0',
|
||||
u'internalURL': u'http://internal:5000/v2.0',
|
||||
u'publicURL': u'http://public.com:5000/v2.0',
|
||||
u'region': u'RegionOne'}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'Identity Service',
|
||||
u'type': u'identity'}],
|
||||
u'token': {u'expires': u'2012-10-03T16:53:36Z',
|
||||
u'id': u'04c7d5ffaeef485f9dc69c06db285bdb',
|
||||
u'tenant': {u'description': u'',
|
||||
u'enabled': True,
|
||||
u'id': u'225da22d3ce34b15877ea70b2a575f58',
|
||||
u'name': u'exampleproject'}},
|
||||
u'user': {u'id': u'c4da488862bd435c9e6c0275a0d0e49a',
|
||||
u'name': u'exampleuser',
|
||||
u'roles': [{u'id': u'edc12489faa74ee0aca0b8a0b4d74a74',
|
||||
u'name': u'Member'}],
|
||||
u'roles_links': [],
|
||||
u'username': u'exampleuser'}
|
||||
}
|
||||
}
|
@@ -1,78 +1,9 @@
|
||||
from keystoneclient import access
|
||||
from tests import utils
|
||||
from tests import client_fixtures
|
||||
|
||||
UNSCOPED_TOKEN = {
|
||||
u'access': {u'serviceCatalog': {},
|
||||
u'token': {u'expires': u'2012-10-03T16:58:01Z',
|
||||
u'id': u'3e2813b7ba0b4006840c3825860b86ed'},
|
||||
u'user': {u'id': u'c4da488862bd435c9e6c0275a0d0e49a',
|
||||
u'name': u'exampleuser',
|
||||
u'roles': [],
|
||||
u'roles_links': [],
|
||||
u'username': u'exampleuser'}
|
||||
}
|
||||
}
|
||||
|
||||
PROJECT_SCOPED_TOKEN = {
|
||||
u'access': {
|
||||
u'serviceCatalog': [{
|
||||
u'endpoints': [{
|
||||
u'adminURL': u'http://admin:8776/v1/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'internalURL':
|
||||
u'http://internal:8776/v1/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'publicURL':
|
||||
u'http://public.com:8776/v1/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'region': u'RegionOne'
|
||||
}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'Volume Service',
|
||||
u'type': u'volume'},
|
||||
{u'endpoints': [{
|
||||
u'adminURL': u'http://admin:9292/v1',
|
||||
u'internalURL': u'http://internal:9292/v1',
|
||||
u'publicURL': u'http://public.com:9292/v1',
|
||||
u'region': u'RegionOne'}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'Image Service',
|
||||
u'type': u'image'},
|
||||
{u'endpoints': [{
|
||||
u'adminURL': u'http://admin:8774/v2/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'internalURL': u'http://internal:8774/v2/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'publicURL': u'http://public.com:8774/v2/225da22d3ce34b15877ea70b2a575f58',
|
||||
u'region': u'RegionOne'}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'Compute Service',
|
||||
u'type': u'compute'},
|
||||
{u'endpoints': [{
|
||||
u'adminURL': u'http://admin:8773/services/Admin',
|
||||
u'internalURL': u'http://internal:8773/services/Cloud',
|
||||
u'publicURL': u'http://public.com:8773/services/Cloud',
|
||||
u'region': u'RegionOne'}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'EC2 Service',
|
||||
u'type': u'ec2'},
|
||||
{u'endpoints': [{
|
||||
u'adminURL': u'http://admin:35357/v2.0',
|
||||
u'internalURL': u'http://internal:5000/v2.0',
|
||||
u'publicURL': u'http://public.com:5000/v2.0',
|
||||
u'region': u'RegionOne'}],
|
||||
u'endpoints_links': [],
|
||||
u'name': u'Identity Service',
|
||||
u'type': u'identity'}],
|
||||
u'token': {u'expires': u'2012-10-03T16:53:36Z',
|
||||
u'id': u'04c7d5ffaeef485f9dc69c06db285bdb',
|
||||
u'tenant': {u'description': u'',
|
||||
u'enabled': True,
|
||||
u'id': u'225da22d3ce34b15877ea70b2a575f58',
|
||||
u'name': u'exampleproject'}},
|
||||
u'user': {u'id': u'c4da488862bd435c9e6c0275a0d0e49a',
|
||||
u'name': u'exampleuser',
|
||||
u'roles': [{u'id': u'edc12489faa74ee0aca0b8a0b4d74a74',
|
||||
u'name': u'Member'}],
|
||||
u'roles_links': [],
|
||||
u'username': u'exampleuser'}
|
||||
}
|
||||
}
|
||||
UNSCOPED_TOKEN = client_fixtures.UNSCOPED_TOKEN
|
||||
PROJECT_SCOPED_TOKEN = client_fixtures.PROJECT_SCOPED_TOKEN
|
||||
|
||||
|
||||
class AccessInfoTest(utils.TestCase):
|
||||
|
37
tests/test_client.py
Normal file
37
tests/test_client.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import httplib2
|
||||
import json
|
||||
import mock
|
||||
|
||||
from keystoneclient.v2_0 import client
|
||||
from tests import client_fixtures
|
||||
from tests import utils
|
||||
|
||||
|
||||
fake_response = httplib2.Response({"status": 200})
|
||||
fake_body = json.dumps(client_fixtures.PROJECT_SCOPED_TOKEN)
|
||||
mock_request = mock.Mock(return_value=(fake_response, fake_body))
|
||||
|
||||
|
||||
class KeystoneclientTest(utils.TestCase):
|
||||
|
||||
def test_scoped_init(self):
|
||||
with mock.patch.object(httplib2.Http, "request", mock_request):
|
||||
cl = client.Client(username='exampleuser',
|
||||
password='password',
|
||||
auth_url='http://somewhere/')
|
||||
self.assertIsNotNone(cl.auth_ref)
|
||||
self.assertTrue(cl.auth_ref.scoped)
|
||||
|
||||
def test_auth_ref_load(self):
|
||||
with mock.patch.object(httplib2.Http, "request", mock_request):
|
||||
cl = client.Client(username='exampleuser',
|
||||
password='password',
|
||||
auth_url='http://somewhere/')
|
||||
cache = json.dumps(cl.auth_ref)
|
||||
new_client = client.Client(auth_ref=json.loads(cache))
|
||||
self.assertIsNotNone(new_client.auth_ref)
|
||||
self.assertTrue(new_client.auth_ref.scoped)
|
||||
self.assertEquals(new_client.username, 'exampleuser')
|
||||
self.assertIsNone(new_client.password)
|
||||
self.assertEqual(new_client.management_url,
|
||||
'http://admin:35357/v2.0')
|
Reference in New Issue
Block a user