Exemplo n.º 1
0
    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())
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
    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())
Exemplo n.º 5
0
    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([
            self.get_nova_discovery_mock_dict(),
            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()
Exemplo n.º 6
0
    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()
Exemplo n.º 7
0
 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]}
Exemplo n.º 8
0
 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]}
Exemplo n.º 9
0
    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()
Exemplo n.º 10
0
    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([
            self.get_nova_discovery_mock_dict(),
            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)
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
    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),
            self.get_nova_discovery_mock_dict(),
            dict(method='GET',
                 uri=self.get_mock_url('compute',
                                       'public',
                                       append=['flavors', 'vanilla'],
                                       qs_elements=[]),
                 json=fakes.FAKE_FLAVOR),
            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()
Exemplo n.º 13
0
 def setUp(self):
     super(BaseTestImage, self).setUp()
     self.image_id = str(uuid.uuid4())
     self.image_name = self.getUniqueString('image')
     self.object_name = u'images/{name}'.format(name=self.image_name)
     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, image_name=self.image_name)
     self.fake_search_return = {'images': [self.fake_image_dict]}
     self.output = uuid.uuid4().bytes
     self.container_name = self.getUniqueString('container')
Exemplo n.º 14
0
 def setUp(self):
     super(BaseTestImage, self).setUp()
     self.image_id = str(uuid.uuid4())
     self.image_name = self.getUniqueString('image')
     self.object_name = u'images/{name}'.format(name=self.image_name)
     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, image_name=self.image_name)
     self.fake_search_return = {'images': [self.fake_image_dict]}
     self.output = uuid.uuid4().bytes
     self.container_name = self.getUniqueString('container')
    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()
Exemplo n.º 16
0
    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.cloud.get_image_id(image_id))
        self.assertEqual(image_id, self.cloud.get_image_id('fake_image'))

        self.assert_calls()
Exemplo n.º 17
0
    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()