def __init__(self, agent_config): self.logger = logging.getLogger(__name__) prefix = socket.gethostname() suffix = str(agent_config.host_port) self._uuid = str(uuid.uuid5(uuid.NAMESPACE_DNS, prefix + suffix)) tempdir = mkdtemp(prefix='disk', delete=True) self.disk_manager = FakeDiskManager(self, os.path.join(tempdir, 'disk')) self.vm_manager = FakeVmManager(self) self.network_manager = FakeNetworkManager(self, agent_config.networks) self.system = FakeSystem(self) datastores = agent_config.datastores # For fake hypervisor, we assume there is always one image datastore. if agent_config.image_datastores: image_datastore = list(agent_config.image_datastores)[0]["name"] else: image_datastore = None self.datastore_manager = FakeDatastoreManager(self.system, datastores, image_datastore) self.image_manager = FakeImageManager(self, image_datastore) self.image_manager.copy_to_datastores( "ttylinux", self.datastore_manager.get_datastore_ids())
def __init__(self, agent_config): self.logger = logging.getLogger(__name__) self._multi_agent_id = agent_config.multi_agent_id prefix = socket.gethostname() suffix = str(agent_config.host_port) self._uuid = str(uuid.uuid5(uuid.NAMESPACE_DNS, prefix + suffix)) tempdir = mkdtemp(prefix='disk', delete=True) self.disk_manager = FakeDiskManager(self, os.path.join(tempdir, 'disk')) self.vm_manager = FakeVmManager(self) self.network_manager = FakeNetworkManager(self, agent_config.networks) self.system = FakeSystem(self) datastores = agent_config.datastores # For fake hypervisor, we assume there is always one image datastore. if agent_config.image_datastores: image_datastore = list(agent_config.image_datastores)[0]["name"] else: image_datastore = None self.datastore_manager = FakeDatastoreManager(self.system, datastores, image_datastore) self.image_manager = FakeImageManager(self, image_datastore) self.image_manager.copy_to_datastores( "ttylinux", self.datastore_manager.get_datastore_ids())
def setUp(self): self.hypervisor = MagicMock() self.datastore_id = "ds_id_1" self.datastore_name = "ds_name_1" self.hypervisor.datastore_manager.get_datastore_ids.return_value = \ [self.datastore_id] self.hypervisor.datastore_manager.datastore_name.return_value = \ self.datastore_name self.im = Fim(self.hypervisor, "ds_id_1", mkdtemp(delete=True)) self.hypervisor.image_manager = self.im
class TestFakeImageManager(unittest.TestCase): """Fake placement manager tests.""" def setUp(self): self.hypervisor = MagicMock() self.datastore_id = "ds_id_1" self.datastore_name = "ds_name_1" self.hypervisor.datastore_manager.get_datastore_ids.return_value = \ [self.datastore_id] self.hypervisor.datastore_manager.datastore_name.return_value = \ self.datastore_name self.im = Fim(self.hypervisor, "ds_id_1", mkdtemp(delete=True)) self.hypervisor.image_manager = self.im @parameterized.expand([ ([None], None), ([None, "ds1"], "ds1"), (["ds1", None], "ds1"), ]) def test_get_image_ids_from_disks(self, disk_ids, expected): disks = [] for disk_id in disk_ids: disk = MagicMock() disk.image.id = disk_id disks.append(disk) assert_that(self.im.get_image_id_from_disks(disks), is_(expected)) @parameterized.expand([("image_id", ["datastore_id_1"], ["datastore_id_1"], ["datastore_id_1"]), ("image_id", ["datastore_id_2"], ["datastore_id_1", "datastore_id_2"], ["datastore_id_2"]), ("image_id", ["datastore_id_1"], ["datastore_id_2", "datastore_id_3"], [])]) def test_datastores_with_images(self, image_id, ds_ids_with_image, ds_ids_to_search, expected): for ds_id in ds_ids_with_image: self.im.deploy_image("ignored", image_id, ds_id) result = self.im.datastores_with_image(image_id, ds_ids_to_search) assert_that(result, is_(expected)) @parameterized.expand([ ("ds1", "disk1", "ds2", "disk2"), ("ds1", "disk1", "ds2", "disk1"), ]) def test_deploy_copy_delete_image(self, src_ds, src_id, dst_ds, dst_id): self.im.deploy_image("ignored", src_id, src_ds) assert_that(self.im.check_image(src_id, src_ds), is_(True)) self.im.copy_image(src_ds, src_id, dst_ds, dst_id) assert_that(self.im.check_image(dst_id, dst_ds), is_(True)) self.im.delete_image(src_ds, src_id, True, DatastoreType.EXT3) assert_that(self.im.check_image(src_id, src_ds), is_(False)) self.im.delete_image(dst_ds, dst_id, True, DatastoreType.EXT3) assert_that(self.im.check_image(dst_id, dst_ds), is_(False)) def test_image_path(self): ds = "ds" image = "image" image_path = self.im.image_file(ds, image) assert_that(self.im.get_datastore_id_from_path(image_path), is_(ds)) assert_that(self.im.get_image_id_from_path(image_path), is_(image)) @parameterized.expand([ (["disk1", "disk2"], ["disk3", "disk4"]), ]) def test_get_images(self, deployed_images, copied_images): assert_that(self.im.get_images(self.datastore_id), is_([])) deployed_images = sorted(deployed_images) for image_id in deployed_images: self.im.deploy_image("ignored", image_id, self.datastore_id) for image_id in copied_images: self.im.copy_image(self.datastore_id, deployed_images[0], self.datastore_id, image_id) expected_images = sorted(deployed_images + copied_images) assert_that(sorted(self.im.get_images(self.datastore_id)), is_(expected_images)) @raises(DatastoreNotFoundException) def test_get_images_datastore_notfound(self): self.im.get_images("ds_not_found")
class TestFakeImageManager(unittest.TestCase): """Fake placement manager tests.""" def setUp(self): self.hypervisor = MagicMock() self.datastore_id = "ds_id_1" self.datastore_name = "ds_name_1" self.hypervisor.datastore_manager.get_datastore_ids.return_value = \ [self.datastore_id] self.hypervisor.datastore_manager.datastore_name.return_value = \ self.datastore_name self.im = Fim(self.hypervisor, "ds_id_1", mkdtemp(delete=True)) self.hypervisor.image_manager = self.im @parameterized.expand([ ([None], None), ([None, "ds1"], "ds1"), (["ds1", None], "ds1"), ]) def test_get_image_ids_from_disks(self, disk_ids, expected): disks = [] for disk_id in disk_ids: disk = MagicMock() disk.image.id = disk_id disks.append(disk) assert_that(self.im.get_image_id_from_disks(disks), is_(expected)) @parameterized.expand([ ("image_id", ["datastore_id_1"], ["datastore_id_1"], ["datastore_id_1"]), ("image_id", ["datastore_id_2"], ["datastore_id_1", "datastore_id_2"], ["datastore_id_2"]), ("image_id", ["datastore_id_1"], ["datastore_id_2", "datastore_id_3"], []) ]) def test_datastores_with_images(self, image_id, ds_ids_with_image, ds_ids_to_search, expected): for ds_id in ds_ids_with_image: self.im.deploy_image("ignored", image_id, ds_id) result = self.im.datastores_with_image(image_id, ds_ids_to_search) assert_that(result, is_(expected)) @parameterized.expand([ ("ds1", "disk1", "ds2", "disk2"), ("ds1", "disk1", "ds2", "disk1"), ]) def test_deploy_copy_delete_image(self, src_ds, src_id, dst_ds, dst_id): self.im.deploy_image("ignored", src_id, src_ds) assert_that(self.im.check_image(src_id, src_ds), is_(True)) self.im.copy_image(src_ds, src_id, dst_ds, dst_id) assert_that(self.im.check_image(dst_id, dst_ds), is_(True)) self.im.delete_image(src_ds, src_id, True, DatastoreType.EXT3) assert_that(self.im.check_image(src_id, src_ds), is_(False)) self.im.delete_image(dst_ds, dst_id, True, DatastoreType.EXT3) assert_that(self.im.check_image(dst_id, dst_ds), is_(False)) def test_image_path(self): ds = "ds" image = "image" image_path = self.im.image_file(ds, image) assert_that(self.im.get_datastore_id_from_path(image_path), is_(ds)) assert_that(self.im.get_image_id_from_path(image_path), is_(image)) @parameterized.expand([ (["disk1", "disk2"], ["disk3", "disk4"]), ]) def test_get_images(self, deployed_images, copied_images): assert_that(self.im.get_images(self.datastore_id), is_([])) deployed_images = sorted(deployed_images) for image_id in deployed_images: self.im.deploy_image("ignored", image_id, self.datastore_id) for image_id in copied_images: self.im.copy_image(self.datastore_id, deployed_images[0], self.datastore_id, image_id) expected_images = sorted(deployed_images + copied_images) assert_that(sorted(self.im.get_images(self.datastore_id)), is_(expected_images)) @raises(DatastoreNotFoundException) def test_get_images_datastore_notfound(self): self.im.get_images("ds_not_found")
class FakeHypervisor(object): """Manage Fake Hypervisor.""" def __init__(self, agent_config): self.logger = logging.getLogger(__name__) prefix = socket.gethostname() suffix = str(agent_config.host_port) self._uuid = str(uuid.uuid5(uuid.NAMESPACE_DNS, prefix + suffix)) tempdir = mkdtemp(prefix='disk', delete=True) self.disk_manager = FakeDiskManager(self, os.path.join(tempdir, 'disk')) self.vm_manager = FakeVmManager(self) self.network_manager = FakeNetworkManager(self, agent_config.networks) self.system = FakeSystem(self) datastores = agent_config.datastores # For fake hypervisor, we assume there is always one image datastore. if agent_config.image_datastores: image_datastore = list(agent_config.image_datastores)[0]["name"] else: image_datastore = None self.datastore_manager = FakeDatastoreManager(self.system, datastores, image_datastore) self.image_manager = FakeImageManager(self, image_datastore) self.image_manager.copy_to_datastores( "ttylinux", self.datastore_manager.get_datastore_ids()) @property def uuid(self): return self._uuid def check_image(self, image_id, datastore_id): return self.image_manager.\ check_image(image_id, datastore_id) @staticmethod def datastore_id(name): return str(uuid.uuid5(uuid.NAMESPACE_DNS, str(name))) def acquire_vim_ticket(self): return 'cst-526d7e8f-b126-1686-9b49-bde6f34f0be8--tp-71-18-5C-87' + \ '-F9-DB-C1-B9-D7-92-7A-19-99-1E-45-56-73-D6-CC-99' def acquire_cgi_ticket(self, url, op): return '52524918-2252-f24d-3a2b-2609c0fe795e' def add_update_listener(self, listener): # Only triggers VM update listener self.vm_manager.add_update_listener(listener) def remove_update_listener(self, listener): self.vm_manager.remove_update_listener(listener) def transfer_image(self, source_image_id, source_datastore, destination_image_id, destination_datastore, host, port): return "" def receive_image(self, image_id, datastore, imported_vm_name, metadata, manifest): pass def set_memory_overcommit(self, memory_overcommit): pass
class FakeHypervisor(object): """Manage Fake Hypervisor.""" def __init__(self, agent_config): self.logger = logging.getLogger(__name__) self._multi_agent_id = agent_config.multi_agent_id prefix = socket.gethostname() suffix = str(agent_config.host_port) self._uuid = str(uuid.uuid5(uuid.NAMESPACE_DNS, prefix + suffix)) tempdir = mkdtemp(prefix='disk', delete=True) self.disk_manager = FakeDiskManager(self, os.path.join(tempdir, 'disk')) self.vm_manager = FakeVmManager(self) self.network_manager = FakeNetworkManager(self, agent_config.networks) self.system = FakeSystem(self) datastores = agent_config.datastores # For fake hypervisor, we assume there is always one image datastore. if agent_config.image_datastores: image_datastore = list(agent_config.image_datastores)[0]["name"] else: image_datastore = None self.datastore_manager = FakeDatastoreManager(self.system, datastores, image_datastore) self.image_manager = FakeImageManager(self, image_datastore) self.image_manager.copy_to_datastores( "ttylinux", self.datastore_manager.get_datastore_ids()) @property def uuid(self): return self._uuid @property def config(self): config = gen.hypervisor.fake.ttypes.FakeConfig() config.fake_id = "value" return TSerialization.serialize(config) @property def multi_agent_id(self): return self._config.multi_agent_id def normalized_load(self): return 42 def check_image(self, image_id, datastore_id): return self.image_manager.\ check_image(image_id, datastore_id) @staticmethod def datastore_id(name): return str(uuid.uuid5(uuid.NAMESPACE_DNS, str(name))) def acquire_vim_ticket(self): return 'cst-526d7e8f-b126-1686-9b49-bde6f34f0be8--tp-71-18-5C-87' + \ '-F9-DB-C1-B9-D7-92-7A-19-99-1E-45-56-73-D6-CC-99' def acquire_cgi_ticket(self, url, op): return '52524918-2252-f24d-3a2b-2609c0fe795e' def add_update_listener(self, listener): # Only triggers VM update listener self.vm_manager.add_update_listener(listener) def remove_update_listener(self, listener): self.vm_manager.remove_update_listener(listener) def transfer_image(self, source_image_id, source_datastore, destination_image_id, destination_datastore, host, port): return "" def receive_image(self, image_id, datastore, imported_vm_name): pass