From 9e06ecebd1d576818526d62cbad7fc6ec4be644a Mon Sep 17 00:00:00 2001 From: Noorul Islam K M Date: Wed, 5 Feb 2014 18:03:59 +0530 Subject: [PATCH] Add more methods to Assembly manager Change-Id: I04abd2ce2d12a55c8b0bab03026a6472e61e68d9 --- solumclient/common/base.py | 33 +++++++++ solumclient/tests/v1/test_assembly.py | 102 ++++++++++++++++++++++++-- solumclient/v1/assembly.py | 10 +++ 3 files changed, 137 insertions(+), 8 deletions(-) diff --git a/solumclient/common/base.py b/solumclient/common/base.py index de407c4..518ba64 100644 --- a/solumclient/common/base.py +++ b/solumclient/common/base.py @@ -65,6 +65,28 @@ class ManagerMixin(): return [obj_class(self, res, loaded=True) for res in data if res] + def _post(self, url, json, response_key=None, return_raw=False): + """Create an object. + + :param url: a partial URL, e.g., '/servers' + :param json: data that will be encoded as JSON and passed in POST + request (GET will be sent by default) + :param response_key: the key to be looked up in response dictionary, + e.g., 'servers' + :param return_raw: flag to force returning raw JSON instead of + Python object of self.resource_class + """ + body = self.client.post(url, json=json).json() + + if response_key is None: + data = body + else: + data = body[response_key] + + if return_raw: + return data + return self.resource_class(self, data) + class BaseManager(ManagerMixin, base.BaseManager): pass @@ -83,3 +105,14 @@ class CrudManager(ManagerMixin, base.CrudManager): 'base_url': self.build_url(base_url=base_url, **kwargs), 'query': '?%s' % urlutils.urlencode(kwargs) if kwargs else '', }) + + def get(self, **kwargs): + kwargs = self._filter_kwargs(kwargs) + return self._get( + self.build_url(**kwargs)) + + def create(self, **kwargs): + kwargs = self._filter_kwargs(kwargs) + return self._post( + self.build_url(**kwargs), + {self.key: kwargs}) diff --git a/solumclient/tests/v1/test_assembly.py b/solumclient/tests/v1/test_assembly.py index 2fdd44b..520c8b9 100644 --- a/solumclient/tests/v1/test_assembly.py +++ b/solumclient/tests/v1/test_assembly.py @@ -48,7 +48,22 @@ assembly_list = [ } ] -fixtures = { +assembly_fixture = { + 'uri': 'http://example.com/v1/assemblies/x1', + 'name': 'database', + 'type': 'assembly', + 'description': 'A mysql database', + 'tags': ['small'], + 'project_id': '1dae5a09ef2b4d8cbf3594b0eb4f6b94', + 'user_id': '55f41cf46df74320b9486a35f5d28a11', + 'component_links': [{ + 'href': 'http://example.com:9777/v1/components/x1', + 'target_name': 'x1'}], + 'operations_uri': 'http://example.com:9777/v1/operations/o1', + 'sensors_uri': 'http://example.com:9777/v1/sensors/s1' +} + +fixtures_list = { '/v1/assemblies': { 'GET': ( {}, @@ -58,19 +73,90 @@ fixtures = { } +fixtures_get = { + '/v1/assemblies/x1': { + 'GET': ( + {}, + assembly_fixture + ), + } +} + + +fixtures_create = { + '/v1/assemblies': { + 'POST': ( + {}, + assembly_fixture + ), + } +} + +fixtures_put = { + '/v1/assemblies/x1': { + 'PUT': ( + {}, + assembly_fixture + ), + } +} + + class AssemblyManagerTest(base.TestCase): - def setUp(self): - super(AssemblyManagerTest, self).setUp() - fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures) - api_client = solumclient.Client(fake_http_client) - self.mgr = assembly.AssemblyManager(api_client) - def test_list_all(self): - assemblies = self.mgr.list() + fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_list) + api_client = solumclient.Client(fake_http_client) + mgr = assembly.AssemblyManager(api_client) + assemblies = mgr.list() self.assertEqual(len(assemblies), 2) self.assertIn('Assembly', repr(assemblies[0])) self.assertEqual(assemblies[0].uri, 'http://example.com/v1/assemblies/x1') self.assertEqual(assemblies[1].uri, 'http://example.com/v1/assemblies/x2') + + def test_create(self): + fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_create) + api_client = solumclient.Client(fake_http_client) + mgr = assembly.AssemblyManager(api_client) + assembly_obj = mgr.create() + self.assertIn('Assembly', repr(assembly_obj)) + self.assertEqual(assembly_obj.uri, + 'http://example.com/v1/assemblies/x1') + self.assertEqual(assembly_obj.type, + 'assembly') + self.assertEqual(assembly_obj.project_id, + '1dae5a09ef2b4d8cbf3594b0eb4f6b94') + self.assertEqual(assembly_obj.user_id, + '55f41cf46df74320b9486a35f5d28a11') + + def test_get(self): + fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_get) + api_client = solumclient.Client(fake_http_client) + mgr = assembly.AssemblyManager(api_client) + assembly_obj = mgr.get(assembly_id='x1') + self.assertIn('Assembly', repr(assembly_obj)) + self.assertEqual(assembly_obj.uri, + 'http://example.com/v1/assemblies/x1') + self.assertEqual(assembly_obj.type, + 'assembly') + self.assertEqual(assembly_obj.project_id, + '1dae5a09ef2b4d8cbf3594b0eb4f6b94') + self.assertEqual(assembly_obj.user_id, + '55f41cf46df74320b9486a35f5d28a11') + + def test_put(self): + fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_put) + api_client = solumclient.Client(fake_http_client) + mgr = assembly.AssemblyManager(api_client) + assembly_obj = mgr.put(assembly_id='x1') + self.assertIn('Assembly', repr(assembly_obj)) + self.assertEqual(assembly_obj.uri, + 'http://example.com/v1/assemblies/x1') + self.assertEqual(assembly_obj.type, + 'assembly') + self.assertEqual(assembly_obj.project_id, + '1dae5a09ef2b4d8cbf3594b0eb4f6b94') + self.assertEqual(assembly_obj.user_id, + '55f41cf46df74320b9486a35f5d28a11') diff --git a/solumclient/v1/assembly.py b/solumclient/v1/assembly.py index 522cdd7..d09ba74 100644 --- a/solumclient/v1/assembly.py +++ b/solumclient/v1/assembly.py @@ -24,6 +24,16 @@ class Assembly(apiclient_base.Resource): class AssemblyManager(solum_base.CrudManager): resource_class = Assembly collection_key = 'assemblies' + key = 'assembly' def list(self, **kwargs): return super(AssemblyManager, self).list(base_url="/v1", **kwargs) + + def create(self, **kwargs): + return super(AssemblyManager, self).create(base_url="/v1", **kwargs) + + def get(self, **kwargs): + return super(AssemblyManager, self).get(base_url="/v1", **kwargs) + + def put(self, **kwargs): + return super(AssemblyManager, self).put(base_url="/v1", **kwargs)