more pep8 cleanup

This commit is contained in:
Joe Heck
2011-11-10 17:23:48 -08:00
parent 0d228cfc7b
commit 5788d215e9
15 changed files with 209 additions and 186 deletions

View File

@@ -109,7 +109,9 @@ class HTTPClient(httplib2.Http):
request_kwargs['headers']['Content-Type'] = 'application/json' request_kwargs['headers']['Content-Type'] = 'application/json'
request_kwargs['body'] = json.dumps(kwargs['body']) request_kwargs['body'] = json.dumps(kwargs['body'])
resp, body = super(HTTPClient, self).request(url, method, **request_kwargs) resp, body = super(HTTPClient, self).request(url,
method,
**request_kwargs)
self.http_log((url, method,), request_kwargs, resp, body) self.http_log((url, method,), request_kwargs, resp, body)

View File

@@ -21,7 +21,6 @@ Command-line interface to the OpenStack Keystone API.
import argparse import argparse
import httplib2 import httplib2
import os import os
import prettytable
import sys import sys
from keystoneclient import exceptions as exc from keystoneclient import exceptions as exc
@@ -171,9 +170,11 @@ class OpenStackIdentityShell(object):
"via --url or via" "via --url or via"
"env[KEYSTONE_URL") "env[KEYSTONE_URL")
self.cs = self.get_api_class(options.version) \ self.cs = self.get_api_class(options.version)(user,
(user, apikey, projectid, url, apikey,
region_name=region_name) projectid,
url,
region_name=region_name)
try: try:
self.cs.authenticate() self.cs.authenticate()

View File

@@ -1,2 +1 @@
from keystoneclient.v2_0.client import Client from keystoneclient.v2_0.client import Client

View File

@@ -32,7 +32,9 @@ class ServiceManager(base.ManagerWithFind):
return self._get("/OS-KSADM/services/%s" % id, "OS-KSADM:service") return self._get("/OS-KSADM/services/%s" % id, "OS-KSADM:service")
def create(self, name, service_type, description): def create(self, name, service_type, description):
body = {"OS-KSADM:service": {'name': name, 'type':service_type, 'description': description}} body = {"OS-KSADM:service": {'name': name,
'type': service_type,
'description': description}}
return self._create("/OS-KSADM/services", body, "OS-KSADM:service") return self._create("/OS-KSADM/services", body, "OS-KSADM:service")
def delete(self, id): def delete(self, id):

View File

@@ -15,13 +15,6 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import getpass
import os
from keystoneclient import exceptions
from keystoneclient import utils
from keystoneclient.v2_0 import client from keystoneclient.v2_0 import client
CLIENT_CLASS = client.Client CLIENT_CLASS = client.Client

View File

@@ -55,11 +55,12 @@ class TenantManager(base.ManagerWithFind):
""" """
return self._list("/tenants", "tenants") return self._list("/tenants", "tenants")
def update(self, tenant_id, tenant_name=None, description=None, enabled=None): def update(self, tenant_id, tenant_name=None, description=None,
enabled=None):
""" """
update a tenant with a new name and description update a tenant with a new name and description
""" """
body = {"tenant": {'id': tenant_id }} body = {"tenant": {'id': tenant_id}}
if tenant_name is not None: if tenant_name is not None:
body['tenant']['name'] = tenant_name body['tenant']['name'] = tenant_name
if enabled is not None: if enabled is not None:

View File

@@ -1,5 +1,6 @@
from keystoneclient import base from keystoneclient import base
class Token(base.Resource): class Token(base.Resource):
def __repr__(self): def __repr__(self):
return "<Token %s>" % self._info return "<Token %s>" % self._info
@@ -16,6 +17,7 @@ class Token(base.Resource):
def tenant(self): def tenant(self):
return self._info['token'].get('tenant', None) return self._info['token'].get('tenant', None)
class TokenManager(base.ManagerWithFind): class TokenManager(base.ManagerWithFind):
resource_class = Token resource_class = Token

View File

@@ -2,7 +2,6 @@ import httplib2
import mock import mock
from keystoneclient import client from keystoneclient import client
from keystoneclient import exceptions
from tests import utils from tests import utils
@@ -37,7 +36,8 @@ class ClientTest(utils.TestCase):
"X-Auth-Project-Id": "project_id", "X-Auth-Project-Id": "project_id",
"User-Agent": cl.USER_AGENT, "User-Agent": cl.USER_AGENT,
} }
mock_request.assert_called_with("http://127.0.0.1:5000/hi?fresh=1234", mock_request.assert_called_with("http://127.0.0.1:5000/"
"hi?fresh=1234",
"GET", headers=headers) "GET", headers=headers)
# Automatic JSON parsing # Automatic JSON parsing
self.assertEqual(body, {"hi": "there"}) self.assertEqual(body, {"hi": "there"})
@@ -60,4 +60,3 @@ class ClientTest(utils.TestCase):
headers=headers, body='[1, 2, 3]') headers=headers, body='[1, 2, 3]')
test_post_call() test_post_call()

View File

@@ -7,87 +7,88 @@ from tests import utils
# Do not edit this structure. Instead, grab the latest from there. # Do not edit this structure. Instead, grab the latest from there.
SERVICE_CATALOG = { SERVICE_CATALOG = {
"access":{ "access": {
"token":{ "token": {
"id":"ab48a9efdfedb23ty3494", "id": "ab48a9efdfedb23ty3494",
"expires":"2010-11-01T03:32:15-05:00", "expires": "2010-11-01T03:32:15-05:00",
"tenant":{ "tenant": {
"id": "345", "id": "345",
"name": "My Project" "name": "My Project"
} }
}, },
"user":{ "user": {
"id":"123", "id": "123",
"name":"jqsmith", "name": "jqsmith",
"roles":[{ "roles": [{
"id":"234", "id": "234",
"name":"compute:admin" "name": "compute:admin"
}, },
{ {
"id":"235", "id": "235",
"name":"object-store:admin", "name": "object-store:admin",
"tenantId":"1" "tenantId": "1"
} }
], ],
"roles_links":[] "roles_links": []
}, },
"serviceCatalog":[{ "serviceCatalog": [{
"name":"Cloud Servers", "name": "Cloud Servers",
"type":"compute", "type": "compute",
"endpoints":[{ "endpoints": [{
"tenantId":"1", "tenantId": "1",
"publicURL":"https://compute.north.host/v1/1234", "publicURL": "https://compute.north.host/v1/1234",
"internalURL":"https://compute.north.host/v1/1234", "internalURL": "https://compute.north.host/v1/1234",
"region":"North", "region": "North",
"versionId":"1.0", "versionId": "1.0",
"versionInfo":"https://compute.north.host/v1.0/", "versionInfo": "https://compute.north.host/v1.0/",
"versionList":"https://compute.north.host/" "versionList": "https://compute.north.host/"
}, },
{ {
"tenantId":"2", "tenantId": "2",
"publicURL":"https://compute.north.host/v1.1/3456", "publicURL": "https://compute.north.host/v1.1/3456",
"internalURL":"https://compute.north.host/v1.1/3456", "internalURL": "https://compute.north.host/v1.1/3456",
"region":"North", "region": "North",
"versionId":"1.1", "versionId": "1.1",
"versionInfo":"https://compute.north.host/v1.1/", "versionInfo": "https://compute.north.host/v1.1/",
"versionList":"https://compute.north.host/" "versionList": "https://compute.north.host/"
} }
], ],
"endpoints_links":[] "endpoints_links": []
}, },
{ {
"name":"Cloud Files", "name": "Cloud Files",
"type":"object-store", "type": "object-store",
"endpoints":[{ "endpoints": [{
"tenantId":"11", "tenantId": "11",
"publicURL":"https://compute.north.host/v1/blah-blah", "publicURL": "https://compute.north.host/v1/blah-blah",
"internalURL":"https://compute.north.host/v1/blah-blah", "internalURL": "https://compute.north.host/v1/blah-blah",
"region":"South", "region": "South",
"versionId":"1.0", "versionId": "1.0",
"versionInfo":"uri", "versionInfo": "uri",
"versionList":"uri" "versionList": "uri"
}, },
{ {
"tenantId":"2", "tenantId": "2",
"publicURL":"https://compute.north.host/v1.1/blah-blah", "publicURL": "https://compute.north.host/v1.1/blah-blah",
"internalURL":"https://compute.north.host/v1.1/blah-blah", "internalURL": "https://compute.north.host/v1.1/blah-blah",
"region":"South", "region": "South",
"versionId":"1.1", "versionId": "1.1",
"versionInfo":"https://compute.north.host/v1.1/", "versionInfo": "https://compute.north.host/v1.1/",
"versionList":"https://compute.north.host/" "versionList": "https://compute.north.host/"
} }
], ],
"endpoints_links":[{ "endpoints_links":[{
"rel":"next", "rel":"next",
"href":"https://identity.north.host/v2.0/endpoints?marker=2" "href":"https://identity.north.host/v2.0/endpoints?marker=2"
} }
] ]
} }
], ],
"serviceCatalog_links":[{ "serviceCatalog_links": [{
"rel":"next", "rel": "next",
"href":"https://identity.host/v2.0/endpoints?session=2hfh8Ar&marker=2" "href": ("https://identity.host/v2.0/endpoints?"
} "session=2hfh8Ar&marker=2")
}
] ]
} }
} }

View File

@@ -45,7 +45,8 @@ class AuthenticateAgainstKeystoneTests(utils.TestCase):
} }
def test_authenticate_failure(self): def test_authenticate_failure(self):
self.TEST_REQUEST_BODY['auth']['passwordCredentials']['password'] = 'bad_key' self.TEST_REQUEST_BODY['auth']['passwordCredentials']['password'] = \
'bad_key'
self.TEST_REQUEST_HEADERS['X-Auth-Project-Id'] = '1' self.TEST_REQUEST_HEADERS['X-Auth-Project-Id'] = '1'
resp = httplib2.Response({ resp = httplib2.Response({
"status": 401, "status": 401,
@@ -72,7 +73,6 @@ class AuthenticateAgainstKeystoneTests(utils.TestCase):
project_id=self.TEST_TENANT, project_id=self.TEST_TENANT,
auth_url=self.TEST_URL) auth_url=self.TEST_URL)
def test_auth_redirect(self): def test_auth_redirect(self):
self.TEST_REQUEST_HEADERS['X-Auth-Project-Id'] = '1' self.TEST_REQUEST_HEADERS['X-Auth-Project-Id'] = '1'
correct_response = json.dumps(self.TEST_RESPONSE_DICT) correct_response = json.dumps(self.TEST_RESPONSE_DICT)
@@ -154,7 +154,7 @@ class AuthenticateAgainstKeystoneTests(utils.TestCase):
auth_url=self.TEST_URL) auth_url=self.TEST_URL)
self.assertEqual(cs.auth_token, self.assertEqual(cs.auth_token,
self.TEST_RESPONSE_DICT["access"]["token"]["id"]) self.TEST_RESPONSE_DICT["access"]["token"]["id"])
self.assertFalse(cs.service_catalog.catalog.has_key('serviceCatalog')) self.assertFalse('serviceCatalog' in cs.service_catalog.catalog)
def test_authenticate_success_token_scoped(self): def test_authenticate_success_token_scoped(self):
del self.TEST_REQUEST_BODY['auth']['passwordCredentials'] del self.TEST_REQUEST_BODY['auth']['passwordCredentials']
@@ -204,4 +204,4 @@ class AuthenticateAgainstKeystoneTests(utils.TestCase):
auth_url=self.TEST_URL) auth_url=self.TEST_URL)
self.assertEqual(cs.auth_token, self.assertEqual(cs.auth_token,
self.TEST_RESPONSE_DICT["access"]["token"]["id"]) self.TEST_RESPONSE_DICT["access"]["token"]["id"])
self.assertFalse(cs.service_catalog.catalog.has_key('serviceCatalog')) self.assertFalse('serviceCatalog' in cs.service_catalog.catalog)

View File

@@ -12,11 +12,11 @@ class RoleTests(utils.TestCase):
super(RoleTests, self).setUp() super(RoleTests, self).setUp()
self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1',
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
self.TEST_ROLES = { self.TEST_ROLES = {
"roles": { "roles": {
"values": [ "values": [
@@ -33,14 +33,15 @@ class RoleTests(utils.TestCase):
} }
def test_create(self): def test_create(self):
req_body = {"role": {"name": "sysadmin",}} req_body = {"role": {"name": "sysadmin"}}
resp_body = {"role": {"name": "sysadmin", "id": 3,}} resp_body = {"role": {"name": "sysadmin", "id": 3}}
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps(resp_body), "body": json.dumps(resp_body),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/OS-KSADM/roles'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/OS-KSADM/roles'),
'POST', 'POST',
body=json.dumps(req_body), body=json.dumps(req_body),
headers=self.TEST_POST_HEADERS) \ headers=self.TEST_POST_HEADERS) \
@@ -57,7 +58,8 @@ class RoleTests(utils.TestCase):
"status": 200, "status": 200,
"body": "" "body": ""
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/OS-KSADM/roles/1'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/OS-KSADM/roles/1'),
'DELETE', 'DELETE',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -68,9 +70,11 @@ class RoleTests(utils.TestCase):
def test_get(self): def test_get(self):
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps({'role':self.TEST_ROLES['roles']['values'][0]}), "body": json.dumps({'role':
self.TEST_ROLES['roles']['values'][0]}),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/OS-KSADM/roles/1?fresh=1234'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/OS-KSADM/roles/1?fresh=1234'),
'GET', 'GET',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -81,14 +85,14 @@ class RoleTests(utils.TestCase):
self.assertEqual(role.id, 1) self.assertEqual(role.id, 1)
self.assertEqual(role.name, 'admin') self.assertEqual(role.name, 'admin')
def test_list(self): def test_list(self):
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps(self.TEST_ROLES), "body": json.dumps(self.TEST_ROLES),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/OS-KSADM/roles?fresh=1234'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/OS-KSADM/roles?fresh=1234'),
'GET', 'GET',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -96,4 +100,3 @@ class RoleTests(utils.TestCase):
role_list = self.client.roles.list() role_list = self.client.roles.list()
[self.assertTrue(isinstance(r, roles.Role)) for r in role_list] [self.assertTrue(isinstance(r, roles.Role)) for r in role_list]

View File

@@ -12,34 +12,34 @@ class ServiceTests(utils.TestCase):
super(ServiceTests, self).setUp() super(ServiceTests, self).setUp()
self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1',
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
self.TEST_SERVICES = { self.TEST_SERVICES = {"OS-KSADM:services": {
"OS-KSADM:services": { "values": [
"values": [ {
{ "name": "nova",
"name": "nova", "type": "compute",
"type": "compute", "description": "Nova-compatible service.",
"description": "Nova-compatible service.", "id": 1
"id": 1 },
}, {
{ "name": "keystone",
"name": "keystone", "type": "identity",
"type": "identity", "description": ("Keystone-compatible "
"description": "Keystone-compatible service.", "service."),
"id": 2 "id": 2
} }
] ]
} }
} }
def test_create(self): def test_create(self):
req_body = {"OS-KSADM:service": {"name": "swift", req_body = {"OS-KSADM:service": {"name": "swift",
"type": "object-store", "type": "object-store",
"description": "Swift-compatible service.",}} "description": "Swift-compatible service."}}
resp_body = {"OS-KSADM:service": {"name": "swift", resp_body = {"OS-KSADM:service": {"name": "swift",
"type": "object-store", "type": "object-store",
"description": "Swift-compatible service.", "description": "Swift-compatible service.",
@@ -49,16 +49,18 @@ class ServiceTests(utils.TestCase):
"body": json.dumps(resp_body), "body": json.dumps(resp_body),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/OS-KSADM/services'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/OS-KSADM/services'),
'POST', 'POST',
body=json.dumps(req_body), body=json.dumps(req_body),
headers=self.TEST_POST_HEADERS) \ headers=self.TEST_POST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
self.mox.ReplayAll() self.mox.ReplayAll()
service = self.client.services.create(req_body['OS-KSADM:service']['name'], service = self.client.services.create(
req_body['OS-KSADM:service']['type'], req_body['OS-KSADM:service']['name'],
req_body['OS-KSADM:service']['description']) req_body['OS-KSADM:service']['type'],
req_body['OS-KSADM:service']['description'])
self.assertTrue(isinstance(service, services.Service)) self.assertTrue(isinstance(service, services.Service))
self.assertEqual(service.id, 3) self.assertEqual(service.id, 3)
self.assertEqual(service.name, req_body['OS-KSADM:service']['name']) self.assertEqual(service.name, req_body['OS-KSADM:service']['name'])
@@ -68,7 +70,8 @@ class ServiceTests(utils.TestCase):
"status": 200, "status": 200,
"body": "" "body": ""
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/OS-KSADM/services/1'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/OS-KSADM/services/1'),
'DELETE', 'DELETE',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -79,9 +82,11 @@ class ServiceTests(utils.TestCase):
def test_get(self): def test_get(self):
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps({'OS-KSADM:service':self.TEST_SERVICES['OS-KSADM:services']['values'][0]}), "body": json.dumps({'OS-KSADM:service':
self.TEST_SERVICES['OS-KSADM:services']['values'][0]}),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/OS-KSADM/services/1?fresh=1234'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/OS-KSADM/services/1?fresh=1234'),
'GET', 'GET',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -93,19 +98,19 @@ class ServiceTests(utils.TestCase):
self.assertEqual(service.name, 'nova') self.assertEqual(service.name, 'nova')
self.assertEqual(service.type, 'compute') self.assertEqual(service.type, 'compute')
def test_list(self): def test_list(self):
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps(self.TEST_SERVICES), "body": json.dumps(self.TEST_SERVICES),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/OS-KSADM/services?fresh=1234'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/OS-KSADM/services?fresh=1234'),
'GET', 'GET',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
self.mox.ReplayAll() self.mox.ReplayAll()
service_list = self.client.services.list() service_list = self.client.services.list()
[self.assertTrue(isinstance(r, services.Service)) for r in service_list] [self.assertTrue(isinstance(r, services.Service)) \
for r in service_list]

View File

@@ -12,45 +12,44 @@ class TenantTests(utils.TestCase):
super(TenantTests, self).setUp() super(TenantTests, self).setUp()
self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1',
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
self.TEST_TENANTS = { self.TEST_TENANTS = {"tenants": {
"tenants": { "values": [
"values": [ {
{ "enabled": True,
"enabled": True, "description": "A description change!",
"description": "A description change!", "name": "invisible_to_admin",
"name": "invisible_to_admin", "id": 3
"id": 3 },
}, {
{ "enabled": True,
"enabled": True, "description": "None",
"description": "None", "name": "demo",
"name": "demo", "id": 2
"id": 2 },
}, {
{ "enabled": True,
"enabled": True, "description": "None",
"description": "None", "name": "admin",
"name": "admin", "id": 1
"id": 1 }
} ],
], "links": []
"links": []
} }
} }
def test_create(self): def test_create(self):
req_body = {"tenant": {"name": "tenantX", req_body = {"tenant": {"name": "tenantX",
"description": "Like tenant 9, but better.", "description": "Like tenant 9, but better.",
"enabled": True,}} "enabled": True}}
resp_body = {"tenant": {"name": "tenantX", resp_body = {"tenant": {"name": "tenantX",
"enabled": True, "enabled": True,
"id": 4, "id": 4,
"description": "Like tenant 9, but better.",}} "description": "Like tenant 9, but better."}}
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps(resp_body), "body": json.dumps(resp_body),
@@ -76,7 +75,8 @@ class TenantTests(utils.TestCase):
"status": 200, "status": 200,
"body": "" "body": ""
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/tenants/1'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/tenants/1'),
'DELETE', 'DELETE',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -87,9 +87,11 @@ class TenantTests(utils.TestCase):
def test_get(self): def test_get(self):
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps({'tenant':self.TEST_TENANTS['tenants']['values'][2]}), "body": json.dumps({'tenant':
self.TEST_TENANTS['tenants']['values'][2]}),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/tenants/1?fresh=1234'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/tenants/1?fresh=1234'),
'GET', 'GET',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -100,14 +102,14 @@ class TenantTests(utils.TestCase):
self.assertEqual(t.id, 1) self.assertEqual(t.id, 1)
self.assertEqual(t.name, 'admin') self.assertEqual(t.name, 'admin')
def test_list(self): def test_list(self):
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps(self.TEST_TENANTS), "body": json.dumps(self.TEST_TENANTS),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/tenants?fresh=1234'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/tenants?fresh=1234'),
'GET', 'GET',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -116,22 +118,22 @@ class TenantTests(utils.TestCase):
tenant_list = self.client.tenants.list() tenant_list = self.client.tenants.list()
[self.assertTrue(isinstance(t, tenants.Tenant)) for t in tenant_list] [self.assertTrue(isinstance(t, tenants.Tenant)) for t in tenant_list]
def test_update(self): def test_update(self):
req_body = {"tenant": {"id": 4, req_body = {"tenant": {"id": 4,
"name": "tenantX", "name": "tenantX",
"description": "I changed you!", "description": "I changed you!",
"enabled": False,}} "enabled": False}}
resp_body = {"tenant": {"name": "tenantX", resp_body = {"tenant": {"name": "tenantX",
"enabled": False, "enabled": False,
"id": 4, "id": 4,
"description": "I changed you!",}} "description": "I changed you!"}}
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps(resp_body), "body": json.dumps(resp_body),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/tenants/4'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/tenants/4'),
'PUT', 'PUT',
body=json.dumps(req_body), body=json.dumps(req_body),
headers=self.TEST_POST_HEADERS) \ headers=self.TEST_POST_HEADERS) \

View File

@@ -1,27 +1,27 @@
import urlparse #import urlparse
import json #import json
import httplib2 #import httplib2
from keystoneclient.v2_0 import tokens #from keystoneclient.v2_0 import tokens
from tests import utils from tests import utils
class TokenTests(utils.TestCase): class TokenTests(utils.TestCase):
def setUp(self): def setUp(self):
super(ServiceTests, self).setUp() #super(ServiceTests, self).setUp()
self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1',
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
''' '''
def test_create(self): def test_create(self):
req_body = {"OS-KSADM:service": {"name": "swift", req_body = {"OS-KSADM:service": {"name": "swift",
"type": "object-store", "type": "object-store",
"description": "Swift-compatible service.",}} "description": "Swift-compatible service."}}
resp_body = {"OS-KSADM:service": {"name": "swift", resp_body = {"OS-KSADM:service": {"name": "swift",
"type": "object-store", "type": "object-store",
"description": "Swift-compatible service.", "description": "Swift-compatible service.",
@@ -31,16 +31,18 @@ class TokenTests(utils.TestCase):
"body": json.dumps(resp_body), "body": json.dumps(resp_body),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/OS-KSADM/services'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/OS-KSADM/services'),
'POST', 'POST',
body=json.dumps(req_body), body=json.dumps(req_body),
headers=self.TEST_POST_HEADERS) \ headers=self.TEST_POST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
self.mox.ReplayAll() self.mox.ReplayAll()
service = self.client.services.create(req_body['OS-KSADM:service']['name'], service = self.client.services.create(
req_body['OS-KSADM:service']['type'], req_body['OS-KSADM:service']['name'],
req_body['OS-KSADM:service']['description']) req_body['OS-KSADM:service']['type'],
req_body['OS-KSADM:service']['description'])
self.assertTrue(isinstance(service, services.Service)) self.assertTrue(isinstance(service, services.Service))
self.assertEqual(service.id, 3) self.assertEqual(service.id, 3)
self.assertEqual(service.name, req_body['OS-KSADM:service']['name']) self.assertEqual(service.name, req_body['OS-KSADM:service']['name'])

View File

@@ -12,11 +12,11 @@ class UserTests(utils.TestCase):
super(UserTests, self).setUp() super(UserTests, self).setUp()
self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_REQUEST_HEADERS = {'X-Auth-Project-Id': '1',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1', self.TEST_POST_HEADERS = {'X-Auth-Project-Id': '1',
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'X-Auth-Token': 'aToken', 'X-Auth-Token': 'aToken',
'User-Agent': 'python-keystoneclient',} 'User-Agent': 'python-keystoneclient'}
self.TEST_USERS = { self.TEST_USERS = {
"users": { "users": {
"values": [ "values": [
@@ -41,7 +41,7 @@ class UserTests(utils.TestCase):
"password": "test", "password": "test",
"tenantId": 2, "tenantId": 2,
"email": "test@example.com", "email": "test@example.com",
"enabled": True,}} "enabled": True}}
resp_body = {"user": {"name": "gabriel", resp_body = {"user": {"name": "gabriel",
"enabled": True, "enabled": True,
"tenantId": 2, "tenantId": 2,
@@ -69,6 +69,7 @@ class UserTests(utils.TestCase):
self.assertEqual(user.id, 3) self.assertEqual(user.id, 3)
self.assertEqual(user.name, "gabriel") self.assertEqual(user.name, "gabriel")
self.assertEqual(user.email, "test@example.com") self.assertEqual(user.email, "test@example.com")
self.mox.VerifyAll()
def test_delete(self): def test_delete(self):
resp = httplib2.Response({ resp = httplib2.Response({
@@ -82,13 +83,15 @@ class UserTests(utils.TestCase):
self.mox.ReplayAll() self.mox.ReplayAll()
self.client.users.delete(1) self.client.users.delete(1)
self.mox.VerifyAll()
def test_get(self): def test_get(self):
resp = httplib2.Response({ resp = httplib2.Response({
"status": 200, "status": 200,
"body": json.dumps({'user':self.TEST_USERS['users']['values'][0]}), "body": json.dumps({'user': self.TEST_USERS['users']['values'][0]})
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/users/1?fresh=1234'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/users/1?fresh=1234'),
'GET', 'GET',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -98,6 +101,7 @@ class UserTests(utils.TestCase):
self.assertTrue(isinstance(u, users.User)) self.assertTrue(isinstance(u, users.User))
self.assertEqual(u.id, 1) self.assertEqual(u.id, 1)
self.assertEqual(u.name, 'admin') self.assertEqual(u.name, 'admin')
self.mox.VerifyAll()
def test_list(self): def test_list(self):
resp = httplib2.Response({ resp = httplib2.Response({
@@ -105,7 +109,8 @@ class UserTests(utils.TestCase):
"body": json.dumps(self.TEST_USERS), "body": json.dumps(self.TEST_USERS),
}) })
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/users?fresh=1234'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/users?fresh=1234'),
'GET', 'GET',
headers=self.TEST_REQUEST_HEADERS) \ headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body'])) .AndReturn((resp, resp['body']))
@@ -113,6 +118,7 @@ class UserTests(utils.TestCase):
user_list = self.client.users.list() user_list = self.client.users.list()
[self.assertTrue(isinstance(u, users.User)) for u in user_list] [self.assertTrue(isinstance(u, users.User)) for u in user_list]
self.mox.VerifyAll()
def test_update(self): def test_update(self):
req_1 = {"user": {"password": "swordfish", "id": 2}} req_1 = {"user": {"password": "swordfish", "id": 2}}
@@ -120,12 +126,13 @@ class UserTests(utils.TestCase):
req_3 = {"user": {"tenantId": 1, "id": 2}} req_3 = {"user": {"tenantId": 1, "id": 2}}
req_4 = {"user": {"enabled": False, "id": 2}} req_4 = {"user": {"enabled": False, "id": 2}}
# Keystone basically echoes these back... including the password :-/ # Keystone basically echoes these back... including the password :-/
resp_1 = httplib2.Response({"status": 200, "body": json.dumps(req_1),}) resp_1 = httplib2.Response({"status": 200, "body": json.dumps(req_1)})
resp_2 = httplib2.Response({"status": 200, "body": json.dumps(req_2),}) resp_2 = httplib2.Response({"status": 200, "body": json.dumps(req_2)})
resp_3 = httplib2.Response({"status": 200, "body": json.dumps(req_3),}) resp_3 = httplib2.Response({"status": 200, "body": json.dumps(req_3)})
resp_4 = httplib2.Response({"status": 200, "body": json.dumps(req_3),}) resp_4 = httplib2.Response({"status": 200, "body": json.dumps(req_3)})
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/users/2/password'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/users/2/password'),
'PUT', 'PUT',
body=json.dumps(req_1), body=json.dumps(req_1),
headers=self.TEST_POST_HEADERS) \ headers=self.TEST_POST_HEADERS) \
@@ -135,12 +142,14 @@ class UserTests(utils.TestCase):
body=json.dumps(req_2), body=json.dumps(req_2),
headers=self.TEST_POST_HEADERS) \ headers=self.TEST_POST_HEADERS) \
.AndReturn((resp_2, resp_2['body'])) .AndReturn((resp_2, resp_2['body']))
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/users/2/tenant'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/users/2/tenant'),
'PUT', 'PUT',
body=json.dumps(req_3), body=json.dumps(req_3),
headers=self.TEST_POST_HEADERS) \ headers=self.TEST_POST_HEADERS) \
.AndReturn((resp_3, resp_3['body'])) .AndReturn((resp_3, resp_3['body']))
httplib2.Http.request(urlparse.urljoin(self.TEST_URL, 'v2.0/users/2/enabled'), httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/users/2/enabled'),
'PUT', 'PUT',
body=json.dumps(req_4), body=json.dumps(req_4),
headers=self.TEST_POST_HEADERS) \ headers=self.TEST_POST_HEADERS) \
@@ -151,3 +160,5 @@ class UserTests(utils.TestCase):
user = self.client.users.update_email(2, 'gabriel@example.com') user = self.client.users.update_email(2, 'gabriel@example.com')
user = self.client.users.update_tenant(2, 1) user = self.client.users.update_tenant(2, 1)
user = self.client.users.update_enabled(2, False) user = self.client.users.update_enabled(2, False)
self.mox.VerifyAll()