Exemplo n.º 1
0
    def test_list_image_communication_error_public_image_list(self):
        public_images = [
            image for image in self.images.list()
            if image.status == 'active' and image.is_public
        ]
        private_images = [
            image for image in self.images.list()
            if (image.status == 'active' and not image.is_public)
        ]
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'is_public': True, 'status': 'active'}) \
            .AndRaise(glance_exec.CommunicationError)
        # Make sure the exception is handled with the correct
        # error message. If the exception cannot be handled,
        # the error message will be different.
        messages.error(IsA(http.HttpRequest),
                       "Unable to retrieve public images.")
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'property-owner_id': self.tenant.id,
                     'status': 'active'}) \
            .AndReturn([private_images, False, False])
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'is_public': True, 'status': 'active'}) \
            .AndReturn([public_images, False, False])

        self.mox.ReplayAll()

        images_cache = {}
        ret = utils.get_available_images(self.request, self.tenant.id,
                                         images_cache)

        expected_images = [
            image for image in private_images
            if image.container_format not in ('ami', 'aki')
        ]
        self.assertEqual(len(expected_images), len(ret))
        self.assertNotIn('public_images', images_cache)
        self.assertEqual(1, len(images_cache['images_by_project']))
        self.assertEqual(
            len(private_images),
            len(images_cache['images_by_project'][self.tenant.id]))

        ret = utils.get_available_images(self.request, self.tenant.id,
                                         images_cache)

        expected_images = [
            image for image in self.images.list()
            if image.container_format not in ('ami', 'aki')
        ]
        self.assertEqual(len(expected_images), len(ret))
        self.assertEqual(len(public_images),
                         len(images_cache['public_images']))
        self.assertEqual(1, len(images_cache['images_by_project']))
        self.assertEqual(
            len(private_images),
            len(images_cache['images_by_project'][self.tenant.id]))
Exemplo n.º 2
0
    def test_list_image_using_cache(self):
        public_images = [
            image for image in self.images.list()
            if image.status == 'active' and image.is_public
        ]
        private_images = [
            image for image in self.images.list()
            if (image.status == 'active' and not image.is_public)
        ]
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'is_public': True, 'status': 'active'}) \
            .AndReturn([public_images, False, False])
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'property-owner_id': self.tenant.id,
                     'status': 'active'}) \
            .AndReturn([private_images, False, False])
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'property-owner_id': 'other-tenant',
                     'status': 'active'}) \
            .AndReturn([private_images, False, False])

        self.mox.ReplayAll()

        expected_images = [
            image for image in self.images.list()
            if (image.status == 'active' and image.container_format not in (
                'ari', 'aki'))
        ]

        images_cache = {}
        ret = utils.get_available_images(self.request, self.tenant.id,
                                         images_cache)
        self.assertEqual(len(expected_images), len(ret))
        self.assertEqual(len(public_images),
                         len(images_cache['public_images']))
        self.assertEqual(1, len(images_cache['images_by_project']))
        self.assertEqual(
            len(private_images),
            len(images_cache['images_by_project'][self.tenant.id]))

        ret = utils.get_available_images(self.request, self.tenant.id,
                                         images_cache)
        self.assertEqual(len(expected_images), len(ret))

        # image list for other-tenant
        ret = utils.get_available_images(self.request, 'other-tenant',
                                         images_cache)
        self.assertEqual(len(expected_images), len(ret))
        self.assertEqual(len(public_images),
                         len(images_cache['public_images']))
        self.assertEqual(2, len(images_cache['images_by_project']))
        self.assertEqual(
            len(private_images),
            len(images_cache['images_by_project']['other-tenant']))
Exemplo n.º 3
0
    def test_list_image_error_private_image_list(self):
        public_images = [
            image for image in self.images.list()
            if image.status == 'active' and image.is_public
        ]
        private_images = [
            image for image in self.images.list()
            if (image.status == 'active' and not image.is_public)
        ]
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'is_public': True, 'status': 'active'}) \
            .AndReturn([public_images, False, False])
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'property-owner_id': self.tenant.id,
                     'status': 'active'}) \
            .AndRaise(self.exceptions.glance)
        exceptions.handle(
            IsA(http.HttpRequest),
            "Unable to retrieve images for the current project.")
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'property-owner_id': self.tenant.id,
                     'status': 'active'}) \
            .AndReturn([private_images, False, False])

        self.mox.ReplayAll()

        images_cache = {}
        ret = utils.get_available_images(self.request, self.tenant.id,
                                         images_cache)

        expected_images = [
            image for image in public_images
            if image.container_format not in ('ami', 'aki')
        ]
        self.assertEqual(len(expected_images), len(ret))
        self.assertEqual(len(public_images),
                         len(images_cache['public_images']))
        self.assertFalse(len(images_cache['images_by_project']))

        ret = utils.get_available_images(self.request, self.tenant.id,
                                         images_cache)

        expected_images = [
            image for image in self.images.list()
            if image.container_format not in ('ami', 'aki')
        ]
        self.assertEqual(len(expected_images), len(ret))
        self.assertEqual(len(public_images),
                         len(images_cache['public_images']))
        self.assertEqual(1, len(images_cache['images_by_project']))
        self.assertEqual(
            len(private_images),
            len(images_cache['images_by_project'][self.tenant.id]))
Exemplo n.º 4
0
    def test_list_image(self):
        public_images = [
            image for image in self.images.list()
            if image.status == 'active' and image.is_public
        ]
        private_images = [
            image for image in self.images.list()
            if (image.status == 'active' and not image.is_public)
        ]
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'is_public': True, 'status': 'active'}) \
            .AndReturn([public_images, False, False])
        api.glance.image_list_detailed(
            IsA(http.HttpRequest),
            filters={'property-owner_id': self.tenant.id,
                     'status': 'active'}) \
            .AndReturn([private_images, False, False])

        self.mox.ReplayAll()

        ret = utils.get_available_images(self.request, self.tenant.id)

        expected_images = [
            image for image in self.images.list()
            if (image.status == 'active' and image.container_format not in (
                'ami', 'aki'))
        ]
        self.assertEqual(len(expected_images), len(ret))