def test_list_images_caches_deleted_status(self): self.use_glance() deleted_image_id = self.getUniqueString() deleted_image = fakes.make_fake_image( image_id=deleted_image_id, status='deleted') active_image_id = self.getUniqueString() active_image = fakes.make_fake_image(image_id=active_image_id) list_return = {'images': [active_image, deleted_image]} self.register_uris([ dict(method='GET', uri='https://image.example.com/v2/images', json=list_return), ]) self.assertEqual( [self.cloud._normalize_image(active_image)], self.cloud.list_images()) self.assertEqual( [self.cloud._normalize_image(active_image)], self.cloud.list_images()) # We should only have one call self.assert_calls()
def test_cache_no_cloud_name(self): self.use_glance() self.cloud.name = None fi = fakes.make_fake_image(image_id=self.getUniqueString()) fi2 = fakes.make_fake_image(image_id=self.getUniqueString()) self.register_uris([ dict(method='GET', uri='https://image.example.com/v2/images', json={'images': [fi]}), dict(method='GET', uri='https://image.example.com/v2/images', json={'images': [fi, fi2]}), ]) self.assertEqual( self._munch_images(fi), self.cloud.list_images()) # Now test that the list was cached self.assertEqual( self._munch_images(fi), self.cloud.list_images()) # Invalidation too self.cloud.list_images.invalidate(self.cloud) self.assertEqual( [ self.cloud._normalize_image(fi), self.cloud._normalize_image(fi2) ], self.cloud.list_images())
def test_create_image_snapshot_wait_active(self): snapshot_name = 'test-snapshot' pending_image = fakes.make_fake_image(self.image_id, status='pending') fake_image = fakes.make_fake_image(self.image_id) self.register_uris([ dict(method='POST', uri='{endpoint}/servers/{server_id}/action'.format( endpoint=fakes.COMPUTE_ENDPOINT, server_id=self.server_id), headers=dict(Location='{endpoint}/images/{image_id}'.format( endpoint='https://images.example.com', image_id=self.image_id)), validate=dict(json={ "createImage": { "name": snapshot_name, "metadata": {}, } })), self.get_glance_discovery_mock_dict(), dict(method='GET', uri='https://image.example.com/v2/images', json=dict(images=[pending_image])), dict(method='GET', uri='https://image.example.com/v2/images', json=dict(images=[fake_image])), ]) image = self.cloud.create_image_snapshot('test-snapshot', dict(id=self.server_id), wait=True, timeout=2) self.assertEqual(image['id'], self.image_id) self.assert_calls()
def test_create_image_snapshot_wait_active(self): snapshot_name = 'test-snapshot' pending_image = fakes.make_fake_image(self.image_id, status='pending') fake_image = fakes.make_fake_image(self.image_id) self.register_uris([ dict( method='POST', uri='{endpoint}/servers/{server_id}/action'.format( endpoint=fakes.COMPUTE_ENDPOINT, server_id=self.server_id), headers=dict( Location='{endpoint}/images/{image_id}'.format( endpoint='https://images.example.com', image_id=self.image_id)), validate=dict( json={ "createImage": { "name": snapshot_name, "metadata": {}, }})), self.get_glance_discovery_mock_dict(), dict( method='GET', uri='https://image.example.com/v2/images', json=dict(images=[pending_image])), dict( method='GET', uri='https://image.example.com/v2/images', json=dict(images=[fake_image])), ]) image = self.cloud.create_image_snapshot( 'test-snapshot', dict(id=self.server_id), wait=True, timeout=2) self.assertEqual(image['id'], self.image_id) self.assert_calls()
def setUp(self): super(TestCacheIgnoresQueuedStatus, self).setUp( cloud_config_fixture='clouds_cache.yaml') self.use_glance() active_image_id = self.getUniqueString() self.active_image = fakes.make_fake_image( image_id=active_image_id, status=self.status) self.active_list_return = {'images': [self.active_image]} steady_image_id = self.getUniqueString() self.steady_image = fakes.make_fake_image(image_id=steady_image_id) self.steady_list_return = { 'images': [self.active_image, self.steady_image]}
def test_create_image_snapshot_wait_until_active_never_active(self): snapshot_name = 'test-snapshot' fake_image = fakes.make_fake_image(self.image_id, status='pending') self.register_uris([ dict( method='POST', uri='{endpoint}/servers/{server_id}/action'.format( endpoint=fakes.COMPUTE_ENDPOINT, server_id=self.server_id), headers=dict( Location='{endpoint}/images/{image_id}'.format( endpoint='https://images.example.com', image_id=self.image_id)), validate=dict( json={ "createImage": { "name": snapshot_name, "metadata": {}, }})), self.get_glance_discovery_mock_dict(), dict( method='GET', uri='https://image.example.com/v2/images', json=dict(images=[fake_image])), ]) self.assertRaises( exc.OpenStackCloudTimeout, self.cloud.create_image_snapshot, snapshot_name, dict(id=self.server_id), wait=True, timeout=0.01) # After the fifth call, we just keep polling get images for status. # Due to mocking sleep, we have no clue how many times we'll call it. self.assert_calls(stop_after=5, do_count=False)
def test_list_images(self): self.use_glance() fake_image = fakes.make_fake_image(image_id='42') self.register_uris([ dict(method='GET', uri=self.get_mock_url('image', 'public', append=['v2', 'images']), json={'images': []}), dict(method='GET', uri=self.get_mock_url('image', 'public', append=['v2', 'images']), json={'images': [fake_image]}), ]) self.assertEqual([], self.cloud.list_images()) self.assertEqual([], self.cloud.list_images()) self.cloud.list_images.invalidate(self.cloud) self.assertEqual(self._munch_images(fake_image), self.cloud.list_images()) self.assert_calls()
def test_create_image_snapshot_wait_until_active_never_active(self): snapshot_name = 'test-snapshot' fake_image = fakes.make_fake_image(self.image_id, status='pending') self.register_uris([ dict(method='POST', uri='{endpoint}/servers/{server_id}/action'.format( endpoint=fakes.COMPUTE_ENDPOINT, server_id=self.server_id), headers=dict(Location='{endpoint}/images/{image_id}'.format( endpoint='https://images.example.com', image_id=self.image_id)), validate=dict(json={ "createImage": { "name": snapshot_name, "metadata": {}, } })), self.get_glance_discovery_mock_dict(), dict(method='GET', uri='https://image.example.com/v2/images', json=dict(images=[fake_image])), ]) self.assertRaises(exc.OpenStackCloudTimeout, self.cloud.create_image_snapshot, snapshot_name, dict(id=self.server_id), wait=True, timeout=0.01) # After the fifth call, we just keep polling get images for status. # Due to mocking sleep, we have no clue how many times we'll call it. self.assert_calls(stop_after=5, do_count=False)
def setUp(self): super(BaseTestImage, self).setUp() self.image_id = str(uuid.uuid4()) self.imagefile = tempfile.NamedTemporaryFile(delete=False) self.imagefile.write(b'\0') self.imagefile.close() self.fake_image_dict = fakes.make_fake_image(image_id=self.image_id) self.fake_search_return = {'images': [self.fake_image_dict]} self.output = uuid.uuid4().bytes
def test_create_server_get_flavor_image(self): self.use_glance() image_id = str(uuid.uuid4()) fake_image_dict = fakes.make_fake_image(image_id=image_id) fake_image_search_return = {'images': [fake_image_dict]} build_server = fakes.make_fake_server('1234', '', 'BUILD') active_server = fakes.make_fake_server('1234', '', 'BUILD') self.register_uris([ dict(method='GET', uri='https://image.example.com/v2/images', json=fake_image_search_return), dict(method='GET', uri=self.get_mock_url('compute', 'public', append=['flavors', 'detail'], qs_elements=['is_public=None']), json={'flavors': fakes.FAKE_FLAVOR_LIST}), dict(method='POST', uri=self.get_mock_url('compute', 'public', append=['servers']), json={'server': build_server}, validate=dict( json={ 'server': { u'flavorRef': fakes.FLAVOR_ID, u'imageRef': image_id, u'max_count': 1, u'min_count': 1, u'networks': [{ u'uuid': u'some-network' }], u'name': u'server-name' } })), dict(method='GET', uri=self.get_mock_url('compute', 'public', append=['servers', '1234']), json={'server': active_server}), dict(method='GET', uri=self.get_mock_url('network', 'public', append=['v2.0', 'networks.json']), json={'networks': []}), ]) self.cloud.create_server('server-name', image_id, 'vanilla', nics=[{ 'net-id': 'some-network' }], wait=False) self.assert_calls()
def test_create_server_get_flavor_image(self): self.use_glance() image_id = str(uuid.uuid4()) fake_image_dict = fakes.make_fake_image(image_id=image_id) fake_image_search_return = {'images': [fake_image_dict]} build_server = fakes.make_fake_server('1234', '', 'BUILD') active_server = fakes.make_fake_server('1234', '', 'BUILD') self.register_uris([ dict(method='GET', uri='https://image.example.com/v2/images', json=fake_image_search_return), dict(method='GET', uri=self.get_mock_url( 'compute', 'public', append=['flavors', 'detail'], qs_elements=['is_public=None']), json={'flavors': fakes.FAKE_FLAVOR_LIST}), dict(method='POST', uri=self.get_mock_url( 'compute', 'public', append=['servers']), json={'server': build_server}, validate=dict( json={'server': { u'flavorRef': fakes.FLAVOR_ID, u'imageRef': image_id, u'max_count': 1, u'min_count': 1, u'networks': [{u'uuid': u'some-network'}], u'name': u'server-name'}})), dict(method='GET', uri=self.get_mock_url( 'compute', 'public', append=['servers', '1234']), json={'server': active_server}), dict(method='GET', uri=self.get_mock_url( 'network', 'public', append=['v2.0', 'networks.json']), json={'networks': []}), ]) self.cloud.create_server( 'server-name', image_id, 'vanilla', nics=[{'net-id': 'some-network'}], wait=False) self.assert_calls()
def test_get_image_id(self): self.use_glance() image_id = self.getUniqueString() fake_image = fakes.make_fake_image(image_id=image_id) list_return = {'images': [fake_image]} self.register_uris([ dict(method='GET', uri='https://image.example.com/v2/images', json=list_return), dict(method='GET', uri='https://image.example.com/v2/images', json=list_return), ]) self.assertEqual(image_id, self.op_cloud.get_image_id(image_id)) self.assertEqual(image_id, self.op_cloud.get_image_id('fake_image')) self.assert_calls()
def test_list_images(self): self.use_glance() fake_image = fakes.make_fake_image(image_id='42') self.register_uris([ dict(method='GET', uri=self.get_mock_url('image', 'public', append=['v2', 'images']), json={'images': []}), dict(method='GET', uri=self.get_mock_url('image', 'public', append=['v2', 'images']), json={'images': [fake_image]}), ]) self.assertEqual([], self.cloud.list_images()) self.assertEqual([], self.cloud.list_images()) self.cloud.list_images.invalidate(self.cloud) self.assertEqual( self._munch_images(fake_image), self.cloud.list_images()) self.assert_calls()