Exemplo n.º 1
0
    def test_age_cached_images(self):
        def fake_get_ds_browser(ds_ref):
            return 'fake-ds-browser'

        def fake_get_timestamp(ds_browser, ds_path):
            self._get_timestamp_called += 1
            path = str(ds_path)
            if path == '[fake-ds] fake-path/fake-image-1':
                # No time stamp exists
                return
            if path == '[fake-ds] fake-path/fake-image-2':
                # Timestamp that will be valid => no deletion
                return 'ts-2012-11-22-10-00-00'
            if path == '[fake-ds] fake-path/fake-image-3':
                # Timestamp that will be invalid => deletion
                return 'ts-2012-11-20-12-00-00'
            self.fail()

        def fake_mkdir(session, ts_path, dc_ref):
            self.assertEqual(
                '[fake-ds] fake-path/fake-image-1/ts-2012-11-22-12-00-00',
                str(ts_path))

        def fake_file_delete(session, ds_path, dc_ref):
            self.assertEqual('[fake-ds] fake-path/fake-image-3', str(ds_path))

        def fake_timestamp_cleanup(dc_ref, ds_browser, ds_path):
            self.assertEqual('[fake-ds] fake-path/fake-image-4', str(ds_path))

        with test.nested(
                mock.patch.object(self._imagecache, '_get_ds_browser',
                                  fake_get_ds_browser),
                mock.patch.object(self._imagecache, '_get_timestamp',
                                  fake_get_timestamp),
                mock.patch.object(ds_util, 'mkdir', fake_mkdir),
                mock.patch.object(ds_util, 'file_delete', fake_file_delete),
                mock.patch.object(self._imagecache, 'timestamp_cleanup',
                                  fake_timestamp_cleanup),
        ) as (_get_ds_browser, _get_timestamp, _mkdir, _file_delete,
              _timestamp_cleanup):
            self.useFixture(utils_fixture.TimeFixture(self._time))
            datastore = ds_obj.Datastore(name='ds', ref='fake-ds-ref')
            dc_info = ds_util.DcInfo(ref='dc_ref',
                                     name='name',
                                     vmFolder='vmFolder')
            self._get_timestamp_called = 0
            self._imagecache.originals = set([
                'fake-image-1', 'fake-image-2', 'fake-image-3', 'fake-image-4'
            ])
            self._imagecache.used_images = set(['fake-image-4'])
            self._imagecache._age_cached_images(
                'fake-context', datastore, dc_info,
                ds_obj.DatastorePath('fake-ds', 'fake-path'))
            self.assertEqual(3, self._get_timestamp_called)
Exemplo n.º 2
0
    def test_update(self, mock_bdms_by_inst):
        def fake_list_datastore_images(ds_path, datastore):
            return {'unexplained_images': [], 'originals': self.images}

        def fake_age_cached_images(context, datastore, dc_info, ds_path):
            self.assertEqual('[ds] fake-base-folder', str(ds_path))
            self.assertEqual(self.images, self._imagecache.used_images)
            self.assertEqual(self.images, self._imagecache.originals)

        with test.nested(
                mock.patch.object(self._imagecache, '_list_datastore_images',
                                  fake_list_datastore_images),
                mock.patch.object(
                    self._imagecache, '_age_cached_images',
                    fake_age_cached_images)) as (_list_base, _age_and_verify):
            instances = [{
                'image_ref': '1',
                'host': CONF.host,
                'name': 'inst-1',
                'uuid': uuidsentinel.foo,
                'vm_state': '',
                'task_state': ''
            }, {
                'image_ref': '2',
                'host': CONF.host,
                'name': 'inst-2',
                'uuid': uuidsentinel.bar,
                'vm_state': '',
                'task_state': ''
            }]
            all_instances = [
                fake_instance.fake_instance_obj(None, **instance)
                for instance in instances
            ]
            self.images = set(['1', '2'])
            datastore = ds_obj.Datastore(name='ds', ref='fake-ds-ref')
            dc_info = ds_util.DcInfo(ref='dc_ref',
                                     name='name',
                                     vmFolder='vmFolder')
            datastores_info = [(datastore, dc_info)]
            self._imagecache.update('context', all_instances, datastores_info)