def test_create_resource_for_sanity(self): ''' Put two resource and one link... ''' headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE) } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/1') self.assertTrue('/compute/1' in self.registry.get_resource_keys()) headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(NETWORK) } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/network/1') self.assertTrue('/network/1' in self.registry.get_resource_keys()) headers = {'Content-Type': 'text/occi', 'Category': parser.get_category_str(NETWORKINTERFACE), 'X-Occi-Attribute': 'occi.core.source="/compute/1",' \ ' occi.core.target="/network/1"'} request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/network/link/1') self.assertTrue('/network/link/1' in self.registry.get_resource_keys()) compute = self.registry.get_resource('/compute/1') self.assertTrue(len(compute.links) == 1) heads, body = handler.get_output() self.assertTrue('/network/link/1' in heads['Location'])
def test_trigger_action_for_failure(self): ''' Trigger an action... ''' headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE) } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/3') self.assertTrue('/compute/3' in self.registry.get_resource_keys()) headers = {'Content-Type': 'text/occi', 'Category': 'blabla'} request = create_request('POST', headers, '', '/compute/3?action=' \ 'start') handler = ResourceWrapper(self.app, request) self.assertRaises(HTTPError, handler.post, '/compute/3') headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(START) } request = create_request('POST', headers, '', '/compute/3?action=' \ 'start') handler = ResourceWrapper(self.app, request) self.assertRaises(HTTPError, handler.post, '/bla"')
def test_replace_for_sanity(self): ''' test update... ''' headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE), 'X-Occi-Attribute': 'occi.compute.memory="2.0"' } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/1') self.assertTrue('/compute/1' in self.registry.get_resource_keys()) headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE), 'X-Occi-Attribute': 'occi.compute.cores="2"' } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/1') compute = self.registry.get_resource('/compute/1') self.assertTrue('occi.compute.memory' not in compute.attributes.keys()) self.assertTrue('occi.compute.cores' in compute.attributes.keys()) heads, body = handler.get_output()
def test_partial_update_for_failure(self): ''' test update... ''' headers = { 'Content-Type': 'text/occi', 'X-Occi-Attribute': 'occi.compute.cores="2"' } request = create_request('POST', headers, '') handler = ResourceWrapper(self.app, request) self.assertRaises(HTTPError, handler.post, '/bla') headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE) } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/1') self.assertTrue('/compute/1' in self.registry.get_resource_keys()) headers = {'Content-Type': 'text/occi', 'X-Occi-Attribute': 'garbage'} request = create_request('POST', headers, '') handler = ResourceWrapper(self.app, request) self.assertRaises(HTTPError, handler.post, '/compute/1')
def test_inline_creation_for_sanity(self): ''' Test creation of compute with a link to network (inline)... ''' headers = {'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE), 'Link': '</network/1>;' \ 'rel="http://schemas.ogf.org/occi/infrastructure#' \ 'network";' \ 'category="http://schemas.ogf.org/occi/infrastructure#' \ 'networkinterface";' \ 'occi.networkinterface.interface="eth0";' \ 'occi.networkinterface.mac="00:11:22:33:44:55";'} request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/2') self.assertTrue('/compute/2' in self.registry.get_resource_keys()) self.assertTrue(len(self.registry.get_resources()) == 4) compute = self.registry.get_resource('/compute/2') self.assertTrue(len(compute.links) == 1) request = create_request('GET', {}, '') handler = ResourceWrapper(self.app, request) handler.get('/compute/2') heads, body = handler.get_output() self.assertTrue('Link: ' in body) self.assertTrue('self=' in body)
def test_get_category_for_sanity(self): ''' Simple sanity check... ''' res = parser.get_category(parser.get_category_str(self.compute), self.registry.get_categories()) self.assertEqual(res, self.compute)
def _from_entity(entity): """ Create a HTTP data object from an entity. entity -- The entity to render. """ data = HTTPData() # categories cat_str_list = [] cat_str_list.append(parser.get_category_str(entity.kind)) for category in entity.mixins: cat_str_list.append(parser.get_category_str(category)) data.categories = cat_str_list attributes = [] entity.attributes["occi.core.id"] = entity.identifier link_str_list = [] # actions for action in entity.actions: act = "<" + entity.identifier + "?action=" + action.term + ">" act = act + '; rel="' + str(action) + '"' link_str_list.append(act) # links if isinstance(entity, Resource): # links for link in entity.links: link_str_list.append(parser.get_link_str(link)) elif isinstance(entity, Link): entity.attributes["occi.core.source"] = entity.source.identifier entity.attributes["occi.core.target"] = entity.target.identifier data.links = link_str_list # attributes for attr in entity.attributes: attributes.append(attr + '="' + entity.attributes[attr] + '"') data.attributes = attributes return data
def _from_entity(entity): ''' Create a HTTP data object from an entity. entity -- The entity to render. ''' data = HTTPData() # categories cat_str_list = [] cat_str_list.append(parser.get_category_str(entity.kind)) for category in entity.mixins: cat_str_list.append(parser.get_category_str(category)) data.categories = cat_str_list attributes = [] entity.attributes['occi.core.id'] = entity.identifier link_str_list = [] # actions for action in entity.actions: act = '<' + entity.identifier + '?action=' + action.term + '>' act = act + '; rel="' + str(action) + '"' link_str_list.append(act) # links if isinstance(entity, Resource): # links for link in entity.links: link_str_list.append(parser.get_link_str(link)) elif isinstance(entity, Link): entity.attributes['occi.core.source'] = entity.source.identifier entity.attributes['occi.core.target'] = entity.target.identifier data.links = link_str_list # attributes for attr in entity.attributes: attributes.append(attr + '="' + entity.attributes[attr] + '"') data.attributes = attributes return data
def test_create_entity_for_failure(self): ''' Simple test - more complex one in TestResourceHandler... ''' headers = { 'Content-Type': 'text/xml', 'Categories': parser.get_category_str(COMPUTE) } request = create_request('POST', headers, '') handler = CollectionWrapper(self.app, request) self.assertRaises(HTTPError, handler.post, '/compute') headers = { 'Content-Type': 'text/occi', 'Categories': parser.get_category_str(COMPUTE) } request = create_request('POST', headers, '') handler = CollectionWrapper(self.app, request) self.assertRaises(HTTPError, handler.post, '/compute')
def _from_categories(categories): ''' Create a HTTP data object from a set of categories. categories -- list of categories. ''' data = HTTPData() for cat in categories: data.categories.append(parser.get_category_str(cat)) return data
def _from_categories(categories): """ Create a HTTP data object from a set of categories. categories -- list of categories. """ data = HTTPData() for cat in categories: data.categories.append(parser.get_category_str(cat)) return data
def test_create_entity_for_sanity(self): ''' Simple test - more complex one in TestResourceHandler... ''' headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE) } request = create_request('POST', headers, '') handler = CollectionWrapper(self.app, request) handler.post('/compute/') self.assertTrue(len(self.registry.get_resources()) == 4)
def test_action_for_sanity(self): ''' Tests if actions can be triggered on a resource set. ''' headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(START) } request = create_request('POST', headers, '', '/compute/?action=start') handler = CollectionWrapper(self.app, request) handler.post('/compute/') self.assertTrue( self.compute.attributes['occi.compute.state'] == 'active')
def test_trigger_action_for_sanity(self): ''' Trigger an action... ''' headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE) } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/3') self.assertTrue('/compute/3' in self.registry.get_resource_keys()) headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(START) } request = create_request('POST', headers, '', '/compute/3?action' \ '=start') handler = ResourceWrapper(self.app, request) handler.post('/compute/3') compute = self.registry.get_resource('/compute/3') self.assertTrue(compute.attributes['occi.compute.state'] == 'active')
def test_delete_for_sanity(self): ''' Test delete... ''' headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE), 'X-Occi-Attribute': 'occi.compute.memory="2.0"' } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/1') self.assertTrue('/compute/1' in self.registry.get_resource_keys()) request = create_request('DELETE', {}, '') handler = ResourceWrapper(self.app, request) handler.delete('/compute/1') self.assertTrue('/compute/1' not in self.registry.get_resource_keys())
def test_retrieve_resource_for_sanity(self): ''' test retrieval... ''' headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE) } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/1') self.assertTrue('/compute/1' in self.registry.get_resource_keys()) headers = {'Accept': 'text/occi'} request = create_request('GET', headers, '') handler = ResourceWrapper(self.app, request) handler.get('/compute/1') heads, body = handler.get_output() self.assertTrue('"/compute/1"' in heads['X-OCCI-Attribute']) self.assertTrue('compute' in heads['Category']) self.assertTrue('text/occi' in heads['Content-Type'])
def test_delete_for_failure(self): ''' Test delete... ''' request = create_request('DELETE', {}, '') handler = ResourceWrapper(self.app, request) self.assertRaises(HTTPError, handler.delete, '/compute/2') headers = { 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE), 'X-Occi-Attribute': 'undeletable="true"' } request = create_request('PUT', headers, '') handler = ResourceWrapper(self.app, request) handler.put('/compute/1') self.assertTrue('/compute/1' in self.registry.get_resource_keys()) request = create_request('DELETE', {}, '') handler = ResourceWrapper(self.app, request) self.assertRaises(HTTPError, handler.delete, '/compute/1')
def test_link_creation_for_sanity(self): ''' Test creation for sanity... ''' headers = {'Content-Type': 'text/plain'} body = 'Category: ' + parser.get_category_str(NETWORKINTERFACE) + '\n' body += 'X-OCCI-Attribute: occi.core.source="/compute/1"\n' body += 'X-OCCI-Attribute: occi.core.target="/network/1"' request = create_request('PUT', headers, body) handler = ResourceWrapper(self.app, request) handler.put('/link/2') self.assertTrue('/link/2' in self.registry.get_resource_keys()) link = self.registry.get_resource('/link/2') self.assertTrue(link in link.source.links) request = create_request('GET', {}, '') handler = ResourceWrapper(self.app, request) handler.get('/link/2') heads, body = handler.get_output() self.assertTrue('occi.core.target' in body) self.assertTrue('occi.core.source' in body)
def test_retrieve_for_sanity(self): ''' Test GET with uri-list ''' headers = {'Accept': 'text/occi'} request = create_request('GET', headers, '') handler = CollectionWrapper(self.app, request) handler.get('/compute/') headers, body = handler.get_output() self.assertTrue(headers['Content-Type'] == 'text/occi') self.assertTrue(self.compute.identifier in headers['X-OCCI-Location']) # filter on category headers = { 'Accept': 'text/occi', 'Content-Type': 'text/occi', 'Category': parser.get_category_str(self.compute.kind) } request = create_request('GET', headers, '') handler = CollectionWrapper(self.app, request) handler.get('/') headers, body = handler.get_output() self.assertTrue(headers['Content-Type'] == 'text/occi') self.assertTrue(self.compute.identifier in headers['X-OCCI-Location']) self.assertFalse(self.network.identifier in headers['X-OCCI-Location']) # filter on attr... headers = { 'Accept': 'text/occi', 'Content-Type': 'text/occi', 'X-Occi-Attribute': 'foo2="bar2"' } request = create_request('GET', headers, '') handler = CollectionWrapper(self.app, request) handler.get('/') headers, body = handler.get_output() self.assertTrue(headers['Content-Type'] == 'text/occi') self.assertTrue(self.compute.identifier in headers['X-OCCI-Location']) self.assertFalse(self.network.identifier in headers['X-OCCI-Location'])
def test_retrieval_for_sanity(self): ''' Test HTTP GET on QI. ''' # tests if all 3 kinds can be retrieved. headers = {'Accept': 'text/occi'} request = create_request('GET', headers, '') handler = QueryWrapper(self.app, request) handler.get() headers, body = handler.get_output() self.assertTrue(len(headers['Category'].split(',')) == 3) # test the filtering... headers = { 'Accept': 'text/occi', 'Content-Type': 'text/occi', 'Category': parser.get_category_str(COMPUTE) } request = create_request('GET', headers, '') handler = QueryWrapper(self.app, request) handler.get() headers, body = handler.get_output() self.assertTrue(len(headers['Category'].split(',')) == 1)