예제 #1
0
    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())
예제 #2
0
    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
 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")
예제 #7
0
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
예제 #8
0
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