def test_correct_state(self): vm = VirtualMachineFactory() vm.operstate = 'foo' self.assertEqual(utils.get_rsapi_state(vm), "UNKNOWN") vm.operstate = "STARTED" vm.deleted = True self.assertEqual(utils.get_rsapi_state(vm), "DELETED") vm.deleted = False vm.backendopcode = "OP_INSTANCE_REBOOT" vm.backendjobstatus = "waiting" self.assertEqual(utils.get_rsapi_state(vm), "REBOOT")
def test_create_volume(self, mrapi): vm = VirtualMachineFactory( operstate="ACTIVE", flavor__volume_type__disk_template="ext_vlmc") vt = VolumeTypeFactory(disk_template="ext_vlmc") user = vm.userid _data = {"display_name": "test_vol", "size": 2, "volume_type": vt.id} # Test standalone create success mrapi().ModifyInstance.return_value = 42 with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": _data}), "json") self.assertSuccess(r) # Test create and attach success _data["server_id"] = vm.id mrapi().ModifyInstance.return_value = 42 with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": _data}), "json") self.assertSuccess(r) # Test create without size, name and server for attr in ["display_name", "size", "server_id"]: data = deepcopy(_data) del data["size"] with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test invalid size data = deepcopy(_data) data["size"] = -2 with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test deleted server or invalid state data = deepcopy(_data) vm.deleted = True vm.save() with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) vm.deleted = False vm.operstate = "ERROR" vm.save() with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) vm.operstate = "ACTIVE" vm.save() # Test volume type different from VM's flavor or invalid vype data = deepcopy(_data) for disk_type in ["file", "plain", "drbd", "rbd"]: vtype = VolumeTypeFactory(disk_template=disk_type) data["volume_type"] = vtype.id with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) for vtype in [434132421243, "foo"]: data["volume_type"] = vtype with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test source for invalid disk template for disk_type in ["file", "plain", "drbd", "rbd"]: temp_vm = VirtualMachineFactory( operstate="ACTIVE", flavor__volume_type__disk_template=disk_type) for attr in ["snapshot_id", "imageRef"]: data = deepcopy(_data) data["server_id"] = temp_vm.id data[attr] = "3214231-413242134123-431242" with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test snapshot and image together data = deepcopy(_data) data["snapshot_id"] = "3214231-413242134123-431242" data["imageRef"] = "3214231-413242134123-431242" with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test with Snapshot source # Test unknwon snapshot data = deepcopy(_data) data["snapshot_id"] = "94321904321-432142134214-23142314" with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) vm.task = None vm.action = None vm.save() # Test success snapshot = Mock() snapshot.return_value = {'location': 'pithos://foo', 'mapfile': '1234', 'id': 1, 'name': 'test_image', 'size': 1024, 'is_snapshot': True, 'is_public': True, 'version': 42, 'owner': 'user', 'status': 'AVAILABLE', 'disk_format': 'diskdump'} data["snapshot_id"] = 1 with patch("synnefo.volume.util.get_snapshot", snapshot): with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertSuccess(r) # Test with Snapshot source # Test unknwon snapshot data = deepcopy(_data) data["imageRef"] = "94321904321-432142134214-23142314" with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) vm.task = None vm.action = None vm.save() data["server_id"] = vm.id # Test success image = Mock() image.return_value = {'location': 'pithos://foo', 'mapfile': '1234', 'id': 2, 'name': 'test_image', 'size': 1024, 'is_snapshot': False, 'is_image': False, 'is_public': True, 'owner': 'user', 'version': 42, 'status': 'AVAILABLE', 'disk_format': 'diskdump'} data["imageRef"] = 2 with patch("synnefo.api.util.get_image", image): with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertSuccess(r)
def test_create_volume(self, mrapi): vm = VirtualMachineFactory( operstate="ACTIVE", flavor__volume_type__disk_template="ext_vlmc") user = vm.userid _data = {"display_name": "test_vol", "size": 2, "server_id": vm.id} # Test Success mrapi().ModifyInstance.return_value = 42 with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": _data}), "json") self.assertSuccess(r) # Test create without size, name and server for attr in ["display_name", "size", "server_id"]: data = deepcopy(_data) del data["size"] with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test invalid size data = deepcopy(_data) data["size"] = -2 with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test deleted server or invalid state data = deepcopy(_data) vm.deleted = True vm.save() with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) vm.deleted = False vm.operstate = "ERROR" vm.save() with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) vm.operstate = "ACTIVE" vm.save() # Test volume type different from VM's flavor or invalid vype data = deepcopy(_data) for disk_type in ["file", "plain", "drbd", "rbd"]: vtype = VolumeTypeFactory(disk_template=disk_type) data["volume_type"] = vtype.id with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) for vtype in [434132421243, "foo"]: data["volume_type"] = vtype with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test source for invalid disk template for disk_type in ["file", "plain", "drbd", "rbd"]: temp_vm = VirtualMachineFactory( operstate="ACTIVE", flavor__volume_type__disk_template=disk_type) for attr in ["snapshot_id", "imageRef"]: data = deepcopy(_data) data["server_id"] = temp_vm.id data[attr] = "3214231-413242134123-431242" with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test snapshot and image together data = deepcopy(_data) data["snapshot_id"] = "3214231-413242134123-431242" data["imageRef"] = "3214231-413242134123-431242" with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) # Test with Snapshot source # Test unknwon snapshot data = deepcopy(_data) data["snapshot_id"] = "94321904321-432142134214-23142314" with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) vm.task = None vm.action = None vm.save() # Test success snapshot = Mock() snapshot.return_value = { 'location': 'pithos://foo', 'mapfile': '1234', 'id': 1, 'name': 'test_image', 'size': 1024, 'is_snapshot': True, 'is_public': True, 'version': 42, 'owner': 'user', 'status': 'AVAILABLE', 'disk_format': 'diskdump' } data["snapshot_id"] = 1 with patch("synnefo.volume.util.get_snapshot", snapshot): with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertSuccess(r) # Test with Snapshot source # Test unknwon snapshot data = deepcopy(_data) data["imageRef"] = "94321904321-432142134214-23142314" with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertBadRequest(r) vm.task = None vm.action = None vm.save() data["server_id"] = vm.id # Test success image = Mock() image.return_value = { 'location': 'pithos://foo', 'mapfile': '1234', 'id': 2, 'name': 'test_image', 'size': 1024, 'is_snapshot': False, 'is_image': False, 'is_public': True, 'owner': 'user', 'version': 42, 'status': 'AVAILABLE', 'disk_format': 'diskdump' } data["imageRef"] = 2 with patch("synnefo.api.util.get_image", image): with mocked_quotaholder(): r = self.post(VOLUMES_URL, user, json.dumps({"volume": data}), "json") self.assertSuccess(r)