def test_delete_multiple_bay_by_name(self): obj_utils.create_test_bay(self.context, name="test_bay", uuid=utils.generate_uuid()) obj_utils.create_test_bay(self.context, name="test_bay", uuid=utils.generate_uuid()) response = self.delete("/bays/test_bay", expect_errors=True) self.assertEqual(409, response.status_int) self.assertEqual("application/json", response.content_type) self.assertTrue(response.json["error_message"])
def setUp(self): super(TestPatch, self).setUp() obj_utils.create_test_bay(self.context) self.rc = obj_utils.create_test_rc(self.context, images=['rc_example_A_image']) self.another_bay = obj_utils.create_test_bay( self.context, uuid=utils.generate_uuid())
def setUp(self): super(TestPost, self).setUp() obj_utils.create_test_bay(self.context) p = mock.patch.object(rpcapi.API, 'pod_create') self.mock_pod_create = p.start() self.mock_pod_create.side_effect = self._simulate_rpc_pod_create self.addCleanup(p.stop)
def setUp(self): super(TestPatch, self).setUp() obj_utils.create_test_bay(self.context) self.rc = obj_utils.create_test_rc(self.context, images=['rc_example_A_image']) self.another_bay = obj_utils.create_test_bay(self.context, uuid=utils.generate_uuid())
def setUp(self): super(TestPatch, self).setUp() self.bay = obj_utils.create_test_bay(self.context, uuid=utils.generate_uuid()) self.bay2 = obj_utils.create_test_bay(self.context, uuid=utils.generate_uuid()) self.service = obj_utils.create_test_service(self.context, bay_uuid=self.bay.uuid)
def setUp(self): super(TestDelete, self).setUp() obj_utils.create_test_bay(self.context) self.rc = obj_utils.create_test_rc(self.context) p = mock.patch.object(rpcapi.API, 'rc_delete') self.mock_rc_delete = p.start() self.mock_rc_delete.side_effect = self._simulate_rpc_rc_delete self.addCleanup(p.stop)
def test_collection_links(self): for id_ in range(5): obj_utils.create_test_bay(self.context, id=id_, uuid=utils.generate_uuid()) response = self.get_json("/bays/?limit=3") self.assertEqual(3, len(response["bays"])) next_marker = response["bays"][-1]["uuid"] self.assertIn(next_marker, response["next"])
def test_delete_baymodel_with_bay(self): baymodel = obj_utils.create_test_baymodel(self.context) obj_utils.create_test_bay(self.context, baymodel_id=baymodel.uuid) response = self.delete("/baymodels/%s" % baymodel.uuid, expect_errors=True) self.assertEqual(400, response.status_int) self.assertEqual("application/json", response.content_type) self.assertTrue(response.json["error_message"]) self.assertIn(baymodel.uuid, response.json["error_message"])
def test_collection_links_default_limit(self): cfg.CONF.set_override("max_limit", 3, "api") for id_ in range(5): obj_utils.create_test_bay(self.context, id=id_, uuid=utils.generate_uuid()) response = self.get_json("/bays") self.assertEqual(3, len(response["bays"])) next_marker = response["bays"][-1]["uuid"] self.assertIn(next_marker, response["next"])
def test_delete_multiple_bay_by_name(self): obj_utils.create_test_bay(self.context, name='test_bay', uuid=uuidutils.generate_uuid()) obj_utils.create_test_bay(self.context, name='test_bay', uuid=uuidutils.generate_uuid()) response = self.delete('/bays/test_bay', expect_errors=True) self.assertEqual(409, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['errors'])
def test_delete_baymodel_with_bay(self): baymodel = obj_utils.create_test_baymodel(self.context) obj_utils.create_test_bay(self.context, baymodel_id=baymodel.uuid) response = self.delete('/baymodels/%s' % baymodel.uuid, expect_errors=True) self.assertEqual(400, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['errors']) self.assertIn(baymodel.uuid, response.json['errors'][0]['detail'])
def test_update_baymodel_with_bay_not_allow_update(self): baymodel = obj_utils.create_test_baymodel(self.context) obj_utils.create_test_bay(self.context, baymodel_id=baymodel.uuid) response = self.patch_json('/baymodels/%s' % baymodel.uuid, [{'path': '/name', 'value': 'new_name', 'op': 'replace'}], expect_errors=True) self.assertEqual(400, response.status_code)
def test_collection_links(self): for id_ in range(5): obj_utils.create_test_bay(self.context, id=id_, uuid=utils.generate_uuid()) response = self.get_json('/bays/?limit=3') self.assertEqual(3, len(response['bays'])) next_marker = response['bays'][-1]['uuid'] self.assertIn(next_marker, response['next'])
def test_collection_links(self): for id_ in range(5): obj_utils.create_test_bay(self.context, id=id_, uuid=uuidutils.generate_uuid()) response = self.get_json('/bays/?limit=3') self.assertEqual(3, len(response['bays'])) next_marker = response['bays'][-1]['uuid'] self.assertIn(next_marker, response['next'])
def test_delete_baymodel_with_bay(self): baymodel = obj_utils.create_test_baymodel(self.context) obj_utils.create_test_bay(self.context, baymodel_id=baymodel.uuid) response = self.delete('/baymodels/%s' % baymodel.uuid, expect_errors=True) self.assertEqual(400, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['error_message']) self.assertIn(baymodel.uuid, response.json['error_message'])
def test_get_one_by_name_multiple_bay(self): obj_utils.create_test_bay(self.context, name='test_bay', uuid=utils.generate_uuid()) obj_utils.create_test_bay(self.context, name='test_bay', uuid=utils.generate_uuid()) response = self.get_json('/bays/test_bay', expect_errors=True) self.assertEqual(409, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['error_message'])
def test_collection_links_default_limit(self): cfg.CONF.set_override('max_limit', 3, 'api') for id_ in range(5): obj_utils.create_test_bay(self.context, id=id_, uuid=uuidutils.generate_uuid()) response = self.get_json('/bays') self.assertEqual(3, len(response['bays'])) next_marker = response['bays'][-1]['uuid'] self.assertIn(next_marker, response['next'])
def test_links(self): uuid = utils.generate_uuid() obj_utils.create_test_bay(self.context, id=1, uuid=uuid) response = self.get_json("/bays/%s" % uuid) self.assertIn("links", response.keys()) self.assertEqual(2, len(response["links"])) self.assertIn(uuid, response["links"][0]["href"]) for l in response["links"]: bookmark = l["rel"] == "bookmark" self.assertTrue(self.validate_link(l["href"], bookmark=bookmark))
def test_collection_links_default_limit(self): cfg.CONF.set_override('max_limit', 3, 'api') for id_ in range(5): obj_utils.create_test_bay(self.context, id=id_, uuid=utils.generate_uuid()) response = self.get_json('/bays') self.assertEqual(3, len(response['bays'])) next_marker = response['bays'][-1]['uuid'] self.assertIn(next_marker, response['next'])
def test_links(self): uuid = uuidutils.generate_uuid() obj_utils.create_test_bay(self.context, id=1, uuid=uuid) response = self.get_json('/bays/%s' % uuid) self.assertIn('links', response.keys()) self.assertEqual(2, len(response['links'])) self.assertIn(uuid, response['links'][0]['href']) for l in response['links']: bookmark = l['rel'] == 'bookmark' self.assertTrue(self.validate_link(l['href'], bookmark=bookmark))
def test_update_baymodel_with_bay_allow_update(self): baymodel = obj_utils.create_test_baymodel(self.context) obj_utils.create_test_bay(self.context, baymodel_id=baymodel.uuid) response = self.patch_json('/baymodels/%s' % baymodel.uuid, [{'path': '/public', 'value': True, 'op': 'replace'}], expect_errors=True) self.assertEqual(200, response.status_int) response = self.get_json('/baymodels/%s' % self.baymodel.uuid) self.assertEqual(response['public'], True)
def setUp(self): super(TestPost, self).setUp() obj_utils.create_test_bay(self.context) p = mock.patch.object(rpcapi.API, 'pod_create') self.mock_pod_create = p.start() self.mock_pod_create.side_effect = self._simulate_rpc_pod_create self.addCleanup(p.stop) p = mock.patch('magnum.objects.BayModel.get_by_uuid') self.mock_baymodel_get_by_uuid = p.start() self.mock_baymodel_get_by_uuid.return_value.coe = 'kubernetes' self.addCleanup(p.stop)
def test_replace_ok_by_name_multiple_bay(self, mock_utcnow): test_time = datetime.datetime(2000, 1, 1, 0, 0) mock_utcnow.return_value = test_time obj_utils.create_test_bay(self.context, name="test_bay", uuid=utils.generate_uuid()) obj_utils.create_test_bay(self.context, name="test_bay", uuid=utils.generate_uuid()) response = self.patch_json( "/bays/test_bay", [{"path": "/name", "value": "test_bay", "op": "replace"}], expect_errors=True ) self.assertEqual("application/json", response.content_type) self.assertEqual(409, response.status_code)
def test_get_one_by_name_multiple_bay(self): obj_utils.create_test_bay(self.context, name='test_bay', uuid=utils.generate_uuid()) obj_utils.create_test_bay(self.context, name='test_bay', uuid=utils.generate_uuid()) response = self.get_json('/certificates/test_bay', expect_errors=True) self.assertEqual(409, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['error_message'])
def setUp(self): super(TestPost, self).setUp() obj_utils.create_test_bay(self.context) self.rc_obj = obj_utils.create_test_rc(self.context) p = mock.patch.object(rpcapi.API, 'rc_create') self.mock_rc_create = p.start() self.mock_rc_create.return_value = self.rc_obj self.addCleanup(p.stop) p = mock.patch('magnum.objects.BayModel.get_by_uuid') self.mock_baymodel_get_by_uuid = p.start() self.mock_baymodel_get_by_uuid.return_value.coe = 'kubernetes' self.addCleanup(p.stop)
def test_update_baymodel_with_bay(self): baymodel = obj_utils.create_test_baymodel(self.context) obj_utils.create_test_bay(self.context, baymodel_id=baymodel.uuid) response = self.patch_json( "/baymodels/%s" % baymodel.uuid, [{"path": "/name", "value": "bay_model_example_B", "op": "replace"}], expect_errors=True, ) self.assertEqual(400, response.status_int) self.assertEqual("application/json", response.content_type) self.assertTrue(response.json["error_message"]) self.assertIn(baymodel.uuid, response.json["error_message"])
def test_update_baymodel_with_bay(self): baymodel = obj_utils.create_test_baymodel(self.context) obj_utils.create_test_bay(self.context, baymodel_id=baymodel.uuid) response = self.patch_json('/baymodels/%s' % baymodel.uuid, [{'path': '/name', 'value': 'bay_model_example_B', 'op': 'replace'}], expect_errors=True) self.assertEqual(400, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['error_message']) self.assertIn(baymodel.uuid, response.json['error_message'])
def setUp(self): super(TestPost, self).setUp() obj_utils.create_test_bay(self.context) self.service_obj = obj_utils.create_test_service(self.context) p = mock.patch.object(rpcapi.API, "service_create") self.mock_service_create = p.start() self.mock_service_create.return_value = self.service_obj self.mock_service_create.side_effect = self._simulate_rpc_service_create self.addCleanup(p.stop) p = mock.patch("magnum.objects.BayModel.get_by_uuid") self.mock_baymodel_get_by_uuid = p.start() self.mock_baymodel_get_by_uuid.return_value.coe = "kubernetes" self.addCleanup(p.stop)
def test_update_baymodel_with_bay(self): baymodel = obj_utils.create_test_baymodel(self.context) obj_utils.create_test_bay(self.context, baymodel_id=baymodel.uuid) response = self.patch_json('/baymodels/%s' % baymodel.uuid, [{'path': '/name', 'value': 'bay_model_example_B', 'op': 'replace'}], expect_errors=True) self.assertEqual(400, response.status_int) self.assertEqual('application/json', response.content_type) self.assertTrue(response.json['errors']) self.assertIn(baymodel.uuid, response.json['errors'][0]['detail'])
def test_replace_ok_by_name_multiple_bay(self, mock_utcnow): test_time = datetime.datetime(2000, 1, 1, 0, 0) mock_utcnow.return_value = test_time obj_utils.create_test_bay(self.context, name='test_bay', uuid=uuidutils.generate_uuid()) obj_utils.create_test_bay(self.context, name='test_bay', uuid=uuidutils.generate_uuid()) response = self.patch_json('/bays/test_bay', [{'path': '/name', 'value': 'test_bay', 'op': 'replace'}], expect_errors=True) self.assertEqual('application/json', response.content_type) self.assertEqual(409, response.status_code)
def test_replace_ok_by_name_multiple_bay(self, mock_utcnow): test_time = datetime.datetime(2000, 1, 1, 0, 0) mock_utcnow.return_value = test_time obj_utils.create_test_bay(self.context, name='test_bay', uuid=utils.generate_uuid()) obj_utils.create_test_bay(self.context, name='test_bay', uuid=utils.generate_uuid()) response = self.patch_json('/bays/test_bay', [{'path': '/name', 'value': 'test_bay', 'op': 'replace'}], expect_errors=True) self.assertEqual('application/json', response.content_type) self.assertEqual(409, response.status_code)
def test_create_container_without_memory(self, mock_container_create, mock_container_show): mock_container_create.side_effect = lambda x: x bay = obj_utils.create_test_bay(self.context) # Create a container with a command params = ('{"name": "My Docker", "image": "ubuntu",' '"command": "env",' '"bay_uuid": "%s",' '"environment": {"key1": "val1", "key2": "val2"}}' % bay.uuid) response = self.app.post('/v1/containers', params=params, content_type='application/json') self.assertEqual(201, response.status_int) # get all containers container = objects.Container.list(self.context)[0] container.status = 'Stopped' mock_container_show.return_value = container response = self.app.get('/v1/containers') self.assertEqual(200, response.status_int) self.assertEqual(1, len(response.json)) c = response.json['containers'][0] self.assertIsNotNone(c.get('uuid')) self.assertEqual('My Docker', c.get('name')) self.assertEqual('env', c.get('command')) self.assertEqual('Stopped', c.get('status')) self.assertIsNone(c.get('memory')) self.assertEqual({"key1": "val1", "key2": "val2"}, c.get('environment'))
def test_get_one_by_name(self): bay = obj_utils.create_test_bay(self.context) response = self.get_json('/bays/%s' % bay['name']) self.assertEqual(bay.uuid, response['uuid']) self.assertIn('name', response) self.assertIn('baymodel_id', response) self.assertIn('node_count', response)
def test_one(self): bay = obj_utils.create_test_bay(self.context) response = self.get_json('/bays') self.assertEqual(bay.uuid, response['bays'][0]["uuid"]) for key in ("name", "baymodel_id", "node_count", "status", "master_count"): self.assertIn(key, response['bays'][0])
def test_get_one_by_name(self): bay = obj_utils.create_test_bay(self.context) response = self.get_json('/bays/%s' % bay['name']) self.assertEqual(bay.uuid, response['uuid']) for key in ("name", "baymodel_id", "node_count", "status", "api_address", "discovery_url", "node_addresses"): self.assertIn(key, response)
def test_policy_disallow_update(self): self.bay = obj_utils.create_test_bay(self.context, name='bay_example_A', node_count=3) self._common_policy_check( "bay:update", self.patch_json, '/bays/%s' % self.bay.name, [{'path': '/name', 'value': "new_name", 'op': 'replace'}])
def test_get_one_by_name(self): bay = obj_utils.create_test_bay(self.context) response = self.get_json('/bays/%s' % bay['name']) self.assertEqual(bay.uuid, response['uuid']) for key in ("name", "baymodel_id", "node_count", "status", "api_address", "discovery_url", "node_addresses", "master_count"): self.assertIn(key, response)
def test_policy_disallow_delete(self): bay = obj_utils.create_test_bay(self.context) container = obj_utils.create_test_container(self.context, bay_uuid=bay.uuid) self._common_policy_check( 'container:delete', self.app.delete, '/v1/containers/%s' % container.uuid, expect_errors=True)
def test_policy_disallow_create(self): bay = obj_utils.create_test_bay(self.context) pdict = apiutils.service_post_data(bay_uuid=bay.uuid) self._common_policy_check('service:create', self.post_json, '/services', pdict, expect_errors=True)
def test_detail(self): bay = obj_utils.create_test_bay(self.context) response = self.get_json('/bays/detail') self.assertEqual(bay.uuid, response['bays'][0]["uuid"]) self.assertIn('name', response['bays'][0]) self.assertIn('baymodel_id', response['bays'][0]) self.assertIn('node_count', response['bays'][0]) self.assertIn('status', response['bays'][0])
def setUp(self): super(TestDelete, self).setUp() self.baymodel = obj_utils.create_test_baymodel(self.context) self.bay = obj_utils.create_test_bay(self.context) p = mock.patch.object(rpcapi.API, "bay_delete") self.mock_bay_delete = p.start() self.mock_bay_delete.side_effect = self._simulate_rpc_bay_delete self.addCleanup(p.stop)
def setUp(self): super(TestPatch, self).setUp() self.baymodel = obj_utils.create_test_baymodel(self.context) self.bay = obj_utils.create_test_bay(self.context, name="bay_example_A", node_count=3) p = mock.patch.object(rpcapi.API, "bay_update") self.mock_bay_update = p.start() self.mock_bay_update.side_effect = self._simulate_rpc_bay_update self.addCleanup(p.stop)
def test_policy_disallow_create(self): bay = obj_utils.create_test_bay(self.context) cert = api_utils.cert_post_data(bay_uuid=bay.uuid) self._common_policy_check("certificate:create", self.post_json, '/certificates', cert, expect_errors=True)
def setUp(self): super(TestGetCertificate, self).setUp() self.bay = obj_utils.create_test_bay(self.context) conductor_api_patcher = mock.patch('magnum.conductor.api.API') self.conductor_api_class = conductor_api_patcher.start() self.conductor_api = mock.MagicMock() self.conductor_api_class.return_value = self.conductor_api self.addCleanup(conductor_api_patcher.stop)
def setUp(self): super(TestDelete, self).setUp() self.cluster_template = obj_utils.create_test_cluster_template( self.context) self.bay = obj_utils.create_test_bay(self.context) p = mock.patch.object(rpcapi.API, 'bay_delete') self.mock_bay_delete = p.start() self.mock_bay_delete.side_effect = self._simulate_rpc_bay_delete self.addCleanup(p.stop)
def test_one(self): bay = obj_utils.create_test_bay(self.context) response = self.get_json('/bays') self.assertEqual(bay.uuid, response['bays'][0]["uuid"]) self._verify_attrs(self._bay_attrs, response['bays'][0]) # Verify atts that should not appear from bay's get_all response none_attrs = set(self._expand_bay_attrs) - set(self._bay_attrs) self._verify_attrs(none_attrs, response['bays'][0], positive=False)
def setUp(self): super(TestDelete, self).setUp() self.bay = obj_utils.create_test_bay(self.context) self.x509keypair = obj_utils.create_test_x509keypair(self.context) p = mock.patch.object(rpcapi.API, 'x509keypair_delete') self.mock_x509keypair_delete = p.start() self.mock_x509keypair_delete.side_effect = \ self._simulate_rpc_x509keypair_delete self.addCleanup(p.stop)
def test_policy_only_owner_update(self): bay = obj_utils.create_test_bay(self.context, user_id='another') self._owner_check("bay:update", self.patch_json, '/bays/%s' % bay.uuid, [{ 'path': '/name', 'value': "new_name", 'op': 'replace' }], expect_errors=True)
def test_policy_disallow_delete(self): p = mock.patch.object(rpcapi.API, 'bay_delete') self.mock_bay_delete = p.start() self.mock_bay_delete.side_effect = self._simulate_rpc_bay_delete self.addCleanup(p.stop) self.bay = obj_utils.create_test_bay(self.context) self._common_policy_check("bay:delete", self.delete, '/bays/%s' % self.bay.uuid, expect_errors=True)