예제 #1
0
    def test_index(self):
        self.mox.StubOutWithMock(api, "image_list_detailed")
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(self.images)

        self.mox.StubOutWithMock(api, "snapshot_list_detailed")
        api.snapshot_list_detailed(IsA(http.HttpRequest)).AndReturn(self.snapshots)

        self.mox.StubOutWithMock(api, "flavor_list")
        api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)
        api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)

        self.mox.StubOutWithMock(api, "security_group_list")
        api.security_group_list(IsA(http.HttpRequest)).AndReturn(self.security_groups)
        api.security_group_list(IsA(http.HttpRequest)).AndReturn(self.security_groups)

        self.mox.StubOutWithMock(api, "keypair_list")
        api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs)

        self.mox.StubOutWithMock(api, "tenant_quota_get")
        api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT).AndReturn({})

        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)

        self.assertTemplateUsed(res, "nova/images_and_snapshots/index.html")

        self.assertIn("images", res.context)
        images = res.context["images"]
        self.assertEqual(len(images), 1)
        self.assertEqual(images[0].name, "visibleImage")
    def test_queued_snapshot_actions(self):
        images = self.images.list()
        snapshots = self.snapshots.list()
        snapshot1 = deepcopy(snapshots[0])
        snapshot1.status = 'active'
        snapshot2 = deepcopy(snapshots[0])
        snapshot2.id = 4
        snapshot2.name = "snap2"
        snapshot2.status = "queued"
        snapshot2.owner = '1'
        new_snapshots = [snapshot1, snapshot2]
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(images)
        api.snapshot_list_detailed(IsA(http.HttpRequest)).\
                AndReturn(new_snapshots)
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
        self.assertIn('snapshots_table', res.context)
        snaps = res.context['snapshots_table']
        self.assertEqual(len(snaps.get_rows()), 2)

        row_actions = snaps.get_row_actions(snaps.data[0])

        #first instance - status active, not owned
        self.assertEqual(row_actions[0].verbose_name, u"Launch")
        self.assertEqual(len(row_actions), 1)

        row_actions = snaps.get_row_actions(snaps.data[1])
        #first instance - status queued, but editable
        self.assertEqual(row_actions[0].verbose_name, u"Edit")
        self.assertEqual(str(row_actions[1]), "<DeleteSnapshot: delete>")
        self.assertEqual(len(row_actions), 2)
예제 #3
0
    def test_index_no_images(self):
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        api.snapshot_list_detailed(IsA(http.HttpRequest)).\
                                   AndReturn(self.snapshots)

        self.mox.StubOutWithMock(api, 'flavor_list')
        api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)

        self.mox.StubOutWithMock(api, 'security_group_list')
        api.security_group_list(IsA(http.HttpRequest)).\
                                AndReturn(self.security_groups)

        self.mox.StubOutWithMock(api, 'keypair_list')
        api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs)

        self.mox.StubOutWithMock(api, 'image_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn([])

        self.mox.StubOutWithMock(api, 'tenant_quota_get')
        api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT) \
                .AndReturn({})

        self.mox.StubOutWithMock(messages, 'info')
        messages.info(IsA(http.HttpRequest), IsA(basestring))

        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)

        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
예제 #4
0
    def test_create_instance_snapshot(self):
        server = self.servers.first()
        snapshot_server = deepcopy(server)
        setattr(snapshot_server, 'OS-EXT-STS:task_state',
                "IMAGE_SNAPSHOT")

        api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
        api.snapshot_create(IsA(http.HttpRequest),
                            server.id,
                            "snapshot1")
        api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
        api.snapshot_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn([[], False])
        api.image_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn([[], False])
        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([])
        api.server_list(IsA(http.HttpRequest)).AndReturn([snapshot_server])
        api.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())

        self.mox.ReplayAll()

        formData = {'instance_id': server.id,
                    'method': 'CreateSnapshot',
                    'tenant_id': server.tenant_id,
                    'name': 'snapshot1'}
        url = reverse('horizon:nova:images_and_snapshots:snapshots:create',
                      args=[server.id])
        redir_url = reverse('horizon:nova:images_and_snapshots:index')
        res = self.client.post(url, formData)
        self.assertRedirects(res, redir_url)

        res = self.client.get(INDEX_URL)
        self.assertContains(res, '<td class="status_unknown sortable">'
                                 'Snapshotting</td>', 1)
예제 #5
0
    def test_index_no_images(self):
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        api.snapshot_list_detailed(IsA(http.HttpRequest)).\
                                   AndReturn(self.snapshots)

        self.mox.StubOutWithMock(api, 'flavor_list')
        api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)

        self.mox.StubOutWithMock(api, 'security_group_list')
        api.security_group_list(IsA(http.HttpRequest)).\
                                AndReturn(self.security_groups)

        self.mox.StubOutWithMock(api, 'keypair_list')
        api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs)

        self.mox.StubOutWithMock(api, 'image_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn([])

        self.mox.StubOutWithMock(api, 'tenant_quota_get')
        api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT) \
                .AndReturn({})

        self.mox.StubOutWithMock(messages, 'info')
        messages.info(IsA(http.HttpRequest), IsA(basestring))

        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)

        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
예제 #6
0
    def test_create_instance_snapshot(self):
        server = self.servers.first()
        snapshot_server = deepcopy(server)
        setattr(snapshot_server, 'OS-EXT-STS:task_state',
                "IMAGE_SNAPSHOT")

        api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
        api.snapshot_create(IsA(http.HttpRequest),
                            server.id,
                            "snapshot1")
        api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
        api.snapshot_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn([[], False])
        api.image_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn([[], False])
        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([])
        api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list())
        api.server_list(IsA(http.HttpRequest)).AndReturn([snapshot_server])
        api.flavor_list(IgnoreArg()).AndReturn(self.flavors.list())

        self.mox.ReplayAll()

        formData = {'instance_id': server.id,
                    'method': 'CreateSnapshot',
                    'tenant_id': server.tenant_id,
                    'name': 'snapshot1'}
        url = reverse('horizon:nova:images_and_snapshots:snapshots:create',
                      args=[server.id])
        redir_url = reverse('horizon:nova:images_and_snapshots:index')
        res = self.client.post(url, formData)
        self.assertRedirects(res, redir_url)

        res = self.client.get(INDEX_URL)
        self.assertContains(res, '<td class="status_unknown sortable">'
                                 'Snapshotting</td>', 1)
예제 #7
0
    def test_index(self):
        images = self.images.list()
        snapshots = self.snapshots.list()
        volumes = self.volumes.list()

        for volume in volumes:
            volume.volume_id = volume.id
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
                          .AndReturn(volume)
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
                          .AndReturn(volume)
            api.volume_get(IsA(http.HttpRequest), volume.volume_id)

        api.volume_snapshot_list(IsA(http.HttpRequest)) \
                                .AndReturn(volumes)
        api.image_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn([images, False])
        api.snapshot_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn([snapshots, False])
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
        self.assertIn('images_table', res.context)
        images = res.context['images_table'].data
        filter_func = lambda im: im.container_format not in ['aki', 'ari']
        filtered_images = filter(filter_func, images)
        self.assertItemsEqual(images, filtered_images)
예제 #8
0
    def test_index(self):
        images = self.images.list()
        snapshots = self.snapshots.list()
        volumes = self.volumes.list()

        for volume in volumes:
            volume.volume_id = volume.id
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id).AndReturn(volume)
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id).AndReturn(volume)
            api.volume_get(IsA(http.HttpRequest), volume.volume_id)

        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn(volumes)
        api.image_list_detailed(IsA(http.HttpRequest), marker=None).AndReturn([images, False])
        api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None).AndReturn([snapshots, False])
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, "nova/images_and_snapshots/index.html")
        self.assertIn("images_table", res.context)
        images = res.context["images_table"].data
        filter_func = lambda im: im.container_format not in ["aki", "ari"]
        filtered_images = filter(filter_func, images)
        self.assertItemsEqual(images, filtered_images)
예제 #9
0
파일: tests.py 프로젝트: termie/horizon
    def test_index(self):
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(self.images)

        self.mox.StubOutWithMock(api, 'tenant_quota_get')
        api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT) \
                .AndReturn({})

        self.mox.StubOutWithMock(api, 'flavor_list')
        api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)

        self.mox.StubOutWithMock(api, 'keypair_list')
        api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs)

        self.mox.StubOutWithMock(api, 'security_group_list')
        api.security_group_list(IsA(http.HttpRequest)).AndReturn(
                                    self.security_groups)

        self.mox.ReplayAll()

        res = self.client.get(IMAGES_INDEX_URL)

        self.assertTemplateUsed(res, 'nova/images/index.html')

        self.assertIn('images', res.context)
        images = res.context['images']
        self.assertEqual(len(images), 1)
        self.assertEqual(images[0].name, 'visibleImage')
    def test_queued_snapshot_actions(self):
        images = self.images.list()
        snapshots = self.snapshots.list()
        snapshot1 = deepcopy(snapshots[0])
        snapshot1.status = 'active'
        snapshot2 = deepcopy(snapshots[0])
        snapshot2.id = 4
        snapshot2.name = "snap2"
        snapshot2.status = "queued"
        snapshot2.owner = '1'
        new_snapshots = [snapshot1, snapshot2]
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(images)
        api.snapshot_list_detailed(IsA(http.HttpRequest)).\
                AndReturn(new_snapshots)
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
        self.assertIn('snapshots_table', res.context)
        snaps = res.context['snapshots_table']
        self.assertEqual(len(snaps.get_rows()), 2)

        row_actions = snaps.get_row_actions(snaps.data[0])

        #first instance - status active, not owned
        self.assertEqual(row_actions[0].verbose_name, u"Launch")
        self.assertEqual(len(row_actions), 1)

        row_actions = snaps.get_row_actions(snaps.data[1])
        #first instance - status queued, but editable
        self.assertEqual(row_actions[0].verbose_name, u"Edit")
        self.assertEqual(str(row_actions[1]), "<DeleteSnapshot: delete>")
        self.assertEqual(len(row_actions), 2)
    def test_index_no_images(self):
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn([])
        api.snapshot_list_detailed(IsA(http.HttpRequest)) \
                                   .AndReturn(self.snapshots.list())
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
    def test_index_no_images(self):
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn([])
        api.snapshot_list_detailed(IsA(http.HttpRequest)) \
                                   .AndReturn(self.snapshots.list())
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
예제 #13
0
    def test_images_list(self):
        api.image_list_detailed(IsA(http.HttpRequest),
                                       marker=None) \
                                       .AndReturn([self.images.list(),
                                                   False])
        self.mox.ReplayAll()

        res = self.client.get(reverse('horizon:admin:images:index'))
        self.assertTemplateUsed(res, 'admin/images/index.html')
        self.assertEqual(len(res.context['images_table'].data),
                         len(self.images.list()))
    def test_index_client_conn_error(self):
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        exc = glance_exception.ClientConnectionError('clientConnError')
        api.image_list_detailed(IsA(http.HttpRequest)).AndRaise(exc)
        api.snapshot_list_detailed(IsA(http.HttpRequest)) \
                                   .AndReturn(self.snapshots.list())
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
    def test_index_client_conn_error(self):
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        exc = glance_exception.ClientConnectionError('clientConnError')
        api.image_list_detailed(IsA(http.HttpRequest)).AndRaise(exc)
        api.snapshot_list_detailed(IsA(http.HttpRequest)) \
                                   .AndReturn(self.snapshots.list())
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
예제 #16
0
파일: tests.py 프로젝트: hagix9/horizon
    def test_index_error(self):
        self.mox.StubOutWithMock(api, "image_list_detailed")
        self.mox.StubOutWithMock(api, "snapshot_list_detailed")
        self.mox.StubOutWithMock(api, "volume_snapshot_list")
        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list())
        api.image_list_detailed(IsA(http.HttpRequest)).AndRaise(self.exceptions.glance)
        api.snapshot_list_detailed(IsA(http.HttpRequest)).AndReturn(self.snapshots.list())
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, "nova/images_and_snapshots/index.html")
예제 #17
0
    def test_images_list(self):
        api.image_list_detailed(IsA(http.HttpRequest),
                                       marker=None) \
                                       .AndReturn([self.images.list(),
                                                   False])
        self.mox.ReplayAll()

        res = self.client.get(
                reverse('horizon:syspanel:images:index'))
        self.assertTemplateUsed(res, 'syspanel/images/index.html')
        self.assertEqual(len(res.context['images_table'].data),
                         len(self.images.list()))
    def test_glance_exception_wrapping_for_generic_http_errors(self):
        """
        Verify that generic "Exception" classed exceptions from the glance
        client's HTTP errors get converted to ClientConnectionError's.
        """
        # TODO(johnp): Remove once Bug 952618 is fixed in the glance client.
        glanceclient = self.stub_glanceclient()
        glanceclient.get_images_detailed().AndRaise(
            Exception("Unknown error occurred! 503 Service Unavailable"))
        self.mox.ReplayAll()

        with self.assertRaises(glance_exception.ClientConnectionError):
            api.image_list_detailed(self.request)
    def test_glance_exception_wrapping_for_generic_http_errors(self):
        """
        Verify that generic "Exception" classed exceptions from the glance
        client's HTTP errors get converted to ClientConnectionError's.
        """
        # TODO(johnp): Remove once Bug 952618 is fixed in the glance client.
        glanceclient = self.stub_glanceclient()
        glanceclient.get_images_detailed().AndRaise(
                Exception("Unknown error occurred! 503 Service Unavailable"))
        self.mox.ReplayAll()

        with self.assertRaises(glance_exception.ClientConnectionError):
            api.image_list_detailed(self.request)
예제 #20
0
    def test_glance_exception_wrapping_for_internal_server_errors(self):
        """
        Verify that generic "Exception" classed exceptions from the glance
        client's HTTP Internal Service Errors get converted to
        ClientConnectionError's.
        """
        # TODO(johnp): Remove once Bug 952618 is fixed in the glance client.
        glanceclient = self.stub_glanceclient()
        glanceclient.get_images_detailed(filters={}, limit=1001, marker=None) \
                    .AndRaise(Exception("Internal Server error: "))
        self.mox.ReplayAll()

        with self.assertRaises(glance_exception.ClientConnectionError):
            api.image_list_detailed(self.request)
예제 #21
0
파일: tests.py 프로젝트: mshabdiz/horizon
    def test_index_error(self):
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        self.mox.StubOutWithMock(api, 'volume_snapshot_list')
        api.volume_snapshot_list(IsA(http.HttpRequest)) \
                                .AndReturn(self.volumes.list())
        api.image_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndRaise(self.exceptions.glance)
        api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
                                .AndReturn([self.snapshots.list(), False])
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
예제 #22
0
    def test_glance_exception_wrapping_for_internal_server_errors(self):
        """
        Verify that generic "Exception" classed exceptions from the glance
        client's HTTP Internal Service Errors get converted to
        ClientConnectionError's.
        """
        # TODO(johnp): Remove once Bug 952618 is fixed in the glance client.
        glanceclient = self.stub_glanceclient()
        glanceclient.get_images_detailed(filters={}, limit=1001, marker=None) \
                    .AndRaise(Exception("Internal Server error: "))
        self.mox.ReplayAll()

        with self.assertRaises(glance_exception.ClientConnectionError):
            api.image_list_detailed(self.request)
예제 #23
0
    def test_images_list_get_pagination(self):
        api.image_list_detailed(IsA(http.HttpRequest),
                                    marker=None) \
                                .AndReturn([self.images.list(),
                                           True])
        api.image_list_detailed(IsA(http.HttpRequest),
                                    marker=None) \
                                .AndReturn([self.images.list()[:2],
                                           True])
        api.image_list_detailed(IsA(http.HttpRequest),
                                    marker=self.images.list()[2].id) \
                                .AndReturn([self.images.list()[2:4],
                                           True])
        api.image_list_detailed(IsA(http.HttpRequest),
                                    marker=self.images.list()[4].id) \
                                .AndReturn([self.images.list()[4:],
                                           True])
        self.mox.ReplayAll()

        url = reverse('horizon:admin:images:index')
        res = self.client.get(url)
        # get all
        self.assertEqual(len(res.context['images_table'].data),
                         len(self.images.list()))
        self.assertTemplateUsed(res, 'admin/images/index.html')

        page_size = getattr(settings, "API_RESULT_PAGE_SIZE", None)
        settings.API_RESULT_PAGE_SIZE = 2

        res = self.client.get(url)
        # get first page with 2 items
        self.assertEqual(len(res.context['images_table'].data),
                         settings.API_RESULT_PAGE_SIZE)

        url = "?".join([
            reverse('horizon:admin:images:index'), "=".join([
                AdminImagesTable._meta.pagination_param,
                self.images.list()[2].id
            ])
        ])
        res = self.client.get(url)
        # get second page (items 2-4)
        self.assertEqual(len(res.context['images_table'].data),
                         settings.API_RESULT_PAGE_SIZE)

        url = "?".join([
            reverse('horizon:admin:images:index'), "=".join([
                AdminImagesTable._meta.pagination_param,
                self.images.list()[4].id
            ])
        ])
        res = self.client.get(url)
        # get third page (item 5)
        self.assertEqual(len(res.context['images_table'].data), 1)

        # restore API_RESULT_PAGE_SIZE
        if page_size:
            settings.API_RESULT_PAGE_SIZE = page_size
        else:
            del settings.API_RESULT_PAGE_SIZE
예제 #24
0
    def test_queued_snapshot_actions(self):
        images = self.images.list()
        snapshots = self.snapshots.list()
        volumes = self.volumes.list()

        for volume in volumes:
            volume.volume_id = volume.id
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
                          .AndReturn(volume)
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
                          .AndReturn(volume)
            api.volume_get(IsA(http.HttpRequest), volume.volume_id)

        api.volume_snapshot_list(IsA(http.HttpRequest)) \
                                .AndReturn(volumes)
        api.image_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn([images, False])
        api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
                                .AndReturn([snapshots, False])
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
        self.assertIn('snapshots_table', res.context)
        snaps = res.context['snapshots_table']
        self.assertEqual(len(snaps.get_rows()), 3)

        row_actions = snaps.get_row_actions(snaps.data[0])

        # first instance - status active, owned
        self.assertEqual(len(row_actions), 3)
        self.assertEqual(row_actions[0].verbose_name, u"Launch")
        self.assertEqual(row_actions[1].verbose_name, u"Edit")
        self.assertEqual(row_actions[2].verbose_name, u"Delete Snapshot")

        row_actions = snaps.get_row_actions(snaps.data[1])

        # second instance - status active, not owned
        self.assertEqual(len(row_actions), 1)
        self.assertEqual(row_actions[0].verbose_name, u"Launch")

        row_actions = snaps.get_row_actions(snaps.data[2])
        # third instance - status queued, only delete is available
        self.assertEqual(len(row_actions), 1)
        self.assertEqual(unicode(row_actions[0].verbose_name),
                         u"Delete Snapshot")
        self.assertEqual(str(row_actions[0]), "<DeleteSnapshot: delete>")
예제 #25
0
파일: tests.py 프로젝트: termie/horizon
    def test_index_no_images(self):
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn([])

        self.mox.StubOutWithMock(api, 'tenant_quota_get')
        api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT) \
                .AndReturn({})

        self.mox.StubOutWithMock(messages, 'info')
        messages.info(IsA(http.HttpRequest), IsA(basestring))

        self.mox.ReplayAll()

        res = self.client.get(IMAGES_INDEX_URL)

        self.assertTemplateUsed(res, 'nova/images/index.html')
    def test_index(self):
        images = self.images.list()
        snapshots = self.snapshots.list()
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(images)
        api.snapshot_list_detailed(IsA(http.HttpRequest)).AndReturn(snapshots)
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
        self.assertIn('images_table', res.context)
        images = res.context['images_table'].data
        filter_func = lambda im: im.container_format not in ['aki', 'ari']
        filtered_images = filter(filter_func, images)
        self.assertItemsEqual(images, filtered_images)
    def test_index(self):
        images = self.images.list()
        snapshots = self.snapshots.list()
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(images)
        api.snapshot_list_detailed(IsA(http.HttpRequest)).AndReturn(snapshots)
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
        self.assertIn('images_table', res.context)
        images = res.context['images_table'].data
        filter_func = lambda im: im.container_format not in ['aki', 'ari']
        filtered_images = filter(filter_func, images)
        self.assertItemsEqual(images, filtered_images)
예제 #28
0
    def test_index_client_conn_error(self):

        self.mox.StubOutWithMock(api, "image_list_detailed")
        exception = glance_exception.ClientConnectionError("clientConnError")
        api.image_list_detailed(IsA(http.HttpRequest)).AndRaise(exception)

        self.mox.StubOutWithMock(api, "tenant_quota_get")
        api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT).AndReturn({})

        self.mox.StubOutWithMock(messages, "error")
        messages.error(IsA(http.HttpRequest), IsA(basestring))

        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)

        self.assertTemplateUsed(res, "nova/images_and_snapshots/index.html")
 def get_data(self):
     images = []
     try:
         images = api.image_list_detailed(self.request)
     except:
         msg = _('Unable to retrieve image list.')
         exceptions.handle(self.request, msg)
     return images
예제 #30
0
 def get_data(self):
     images = []
     try:
         images = api.image_list_detailed(self.request)
     except:
         msg = _('Unable to retrieve image list.')
         exceptions.handle(self.request, msg)
     return images
예제 #31
0
파일: tests.py 프로젝트: termie/horizon
    def test_index_glance_error(self):
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        exception = glance_exception.Error('glanceError')
        api.image_list_detailed(IsA(http.HttpRequest)).AndRaise(exception)

        self.mox.StubOutWithMock(api, 'tenant_quota_get')
        api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT) \
                .AndReturn({})

        self.mox.StubOutWithMock(messages, 'error')
        messages.error(IsA(http.HttpRequest), IsA(basestring))

        self.mox.ReplayAll()

        res = self.client.get(IMAGES_INDEX_URL)

        self.assertTemplateUsed(res, 'nova/images/index.html')
예제 #32
0
파일: tests.py 프로젝트: hien/horizon
    def test_create_instance_snapshot(self):
        server = self.servers.first()

        api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
        api.snapshot_create(IsA(http.HttpRequest), server.id, "snapshot1").AndReturn(self.snapshots.first())

        api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None).AndReturn([[], False])
        api.image_list_detailed(IsA(http.HttpRequest), marker=None).AndReturn([[], False])
        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([])

        self.mox.ReplayAll()

        formData = {"instance_id": server.id, "method": "CreateSnapshot", "name": "snapshot1"}
        url = reverse("horizon:project:images_and_snapshots:snapshots:create", args=[server.id])
        redir_url = reverse("horizon:project:images_and_snapshots:index")
        res = self.client.post(url, formData)
        self.assertRedirects(res, redir_url)
예제 #33
0
    def test_images_list_get_pagination(self):
        api.image_list_detailed(IsA(http.HttpRequest),
                                    marker=None) \
                                .AndReturn([self.images.list(),
                                           True])
        api.image_list_detailed(IsA(http.HttpRequest),
                                    marker=None) \
                                .AndReturn([self.images.list()[:2],
                                           True])
        api.image_list_detailed(IsA(http.HttpRequest),
                                    marker=self.images.list()[2].id) \
                                .AndReturn([self.images.list()[2:4],
                                           True])
        api.image_list_detailed(IsA(http.HttpRequest),
                                    marker=self.images.list()[4].id) \
                                .AndReturn([self.images.list()[4:],
                                           True])
        self.mox.ReplayAll()

        url = reverse('horizon:syspanel:images:index')
        res = self.client.get(url)
        # get all
        self.assertEqual(len(res.context['images_table'].data),
                         len(self.images.list()))
        self.assertTemplateUsed(res, 'syspanel/images/index.html')

        page_size = getattr(settings, "API_RESULT_PAGE_SIZE", None)
        settings.API_RESULT_PAGE_SIZE = 2

        res = self.client.get(url)
        # get first page with 2 items
        self.assertEqual(len(res.context['images_table'].data),
                         settings.API_RESULT_PAGE_SIZE)

        url = "?".join([reverse('horizon:syspanel:images:index'),
                        "=".join([AdminImagesTable._meta.pagination_param,
                                  self.images.list()[2].id])])
        res = self.client.get(url)
        # get second page (items 2-4)
        self.assertEqual(len(res.context['images_table'].data),
                         settings.API_RESULT_PAGE_SIZE)

        url = "?".join([reverse('horizon:syspanel:images:index'),
                        "=".join([AdminImagesTable._meta.pagination_param,
                                  self.images.list()[4].id])])
        res = self.client.get(url)
        # get third page (item 5)
        self.assertEqual(len(res.context['images_table'].data),
                         1)

        # restore API_RESULT_PAGE_SIZE
        if page_size:
            settings.API_RESULT_PAGE_SIZE = page_size
        else:
            del settings.API_RESULT_PAGE_SIZE
예제 #34
0
파일: tests.py 프로젝트: hagix9/horizon
    def test_index(self):
        images = self.images.list()
        snapshots = self.snapshots.list()
        self.mox.StubOutWithMock(api, "image_list_detailed")
        self.mox.StubOutWithMock(api, "snapshot_list_detailed")
        self.mox.StubOutWithMock(api, "volume_snapshot_list")
        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list())
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(images)
        api.snapshot_list_detailed(IsA(http.HttpRequest)).AndReturn(snapshots)
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, "nova/images_and_snapshots/index.html")
        self.assertIn("images_table", res.context)
        images = res.context["images_table"].data
        filter_func = lambda im: im.container_format not in ["aki", "ari"]
        filtered_images = filter(filter_func, images)
        self.assertItemsEqual(images, filtered_images)
예제 #35
0
    def test_index_error(self):
        volumes = self.volumes.list()

        for volume in volumes:
            volume.volume_id = volume.id
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id).AndReturn(volume)
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id).AndReturn(volume)
            api.volume_get(IsA(http.HttpRequest), volume.volume_id)

        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn(volumes)
        api.image_list_detailed(IsA(http.HttpRequest), marker=None).AndRaise(self.exceptions.glance)
        api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None).AndReturn([self.snapshots.list(), False])
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, "nova/images_and_snapshots/index.html")
예제 #36
0
    def test_index(self):
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(self.images)

        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        api.snapshot_list_detailed(IsA(http.HttpRequest)).AndReturn(
            self.snapshots)

        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)

        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')

        self.assertIn('images_table', res.context)
        images = res.context['images_table'].data
        self.assertEqual(len(images), 1)
        self.assertEqual(images[0].name, 'visibleImage')
예제 #37
0
파일: tests.py 프로젝트: ttrifonov/horizon
    def test_index(self):
        self.mox.StubOutWithMock(api, 'image_list_detailed')
        api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(self.images)

        self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
        api.snapshot_list_detailed(IsA(http.HttpRequest)).AndReturn(
                self.snapshots)

        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)

        self.assertTemplateUsed(res,
                                'nova/images_and_snapshots/index.html')

        self.assertIn('images_table', res.context)
        images = res.context['images_table'].data
        self.assertEqual(len(images), 1)
        self.assertEqual(images[0].name, 'visibleImage')
예제 #38
0
 def get_data(self):
     images = []
     marker = self.request.GET.get(AdminImagesTable._meta.pagination_param, None)
     try:
         images, self._more = api.image_list_detailed(self.request, marker=marker)
     except:
         self._more = False
         msg = _("Unable to retrieve image list.")
         exceptions.handle(self.request, msg)
     return images
예제 #39
0
 def get_images_data(self):
     try:
         all_images = api.image_list_detailed(self.request)
         images = [im for im in all_images
                   if im['container_format'] not in ['aki', 'ari'] and
                   getattr(im.properties, "image_type", '') != "snapshot"]
     except:
         images = []
         exceptions.handle(self.request, _("Unable to retrieve images."))
     return images
예제 #40
0
    def test_image_list_detailed(self):
        """ Verify "list" returns our custom Image class. """
        images = self.images.list()
        glanceclient = self.stub_glanceclient()
        glanceclient.get_images_detailed(filters={}, limit=1001, marker=None) \
                    .AndReturn([images, False])
        self.mox.ReplayAll()

        ret_val, _more = api.image_list_detailed(self.request)
        for image in ret_val:
            self.assertIsInstance(image, api.glance.Image)
예제 #41
0
    def test_image_list_detailed(self):
        """ Verify "list" returns our custom Image class. """
        images = self.images.list()
        glanceclient = self.stub_glanceclient()
        glanceclient.get_images_detailed(filters={}, limit=1001, marker=None) \
                    .AndReturn([images, False])
        self.mox.ReplayAll()

        ret_val, _more = api.image_list_detailed(self.request)
        for image in ret_val:
            self.assertIsInstance(image, api.glance.Image)
예제 #42
0
	def image_list(self):
		try:
			all_images = api.image_list_detailed(self.request)
			images = [(image.id,image.name)for image in all_images]

		except:
			images = []
			exceptions.handle(self.request, _("Unable to retrieve images."))
		
		
		return images
예제 #43
0
    def test_image_list_detailed(self):
        """ Verify "list" returns our custom Image class. """
        images = self.images.list()

        glanceclient = self.stub_glanceclient()
        glanceclient.get_images_detailed().AndReturn(images)
        self.mox.ReplayAll()

        ret_val = api.image_list_detailed(self.request)
        for image in ret_val:
            self.assertIsInstance(image, api.glance.Image)
            self.assertIn(image._apidict, images)
    def test_image_list_detailed(self):
        """ Verify "list" returns our custom Image class. """
        images = self.images.list()

        glanceclient = self.stub_glanceclient()
        glanceclient.get_images_detailed().AndReturn(images)
        self.mox.ReplayAll()

        ret_val = api.image_list_detailed(self.request)
        for image in ret_val:
            self.assertIsInstance(image, api.glance.Image)
            self.assertIn(image._apidict, images)
예제 #45
0
 def get_data(self):
     images = []
     marker = self.request.GET.get(AdminImagesTable._meta.pagination_param,
                                   None)
     try:
         images, self._more = api.image_list_detailed(self.request,
                                                      marker=marker)
     except:
         self._more = False
         msg = _('Unable to retrieve image list.')
         exceptions.handle(self.request, msg)
     return images
예제 #46
0
 def get_images_data(self):
     try:
         all_images = api.image_list_detailed(self.request)
         images = [
             im for im in all_images
             if im['container_format'] not in ['aki', 'ari']
             and getattr(im.properties, "image_type", '') != "snapshot"
         ]
     except:
         images = []
         exceptions.handle(self.request, _("Unable to retrieve images."))
     return images
예제 #47
0
파일: views.py 프로젝트: ehazlett/horizon
def index(request):
    for f in (DeleteImage, ):
        unused, handled = f.maybe_handle(request)
        if handled:
            return handled
    all_images = []
    try:
        all_images = api.image_list_detailed(request)
        if not all_images:
            messages.info(request, _("There are currently no images."))
    except glance_exception.ClientConnectionError, e:
        LOG.exception("Error connecting to glance")
        messages.error(request, _("Error connecting to glance: %s") % str(e))
예제 #48
0
파일: views.py 프로젝트: termie/horizon
def index(request):
    for f in (DeleteImage, ):
        unused, handled = f.maybe_handle(request)
        if handled:
            return handled
    all_images = []
    try:
        all_images = api.image_list_detailed(request)
        if not all_images:
            messages.info(request, _("There are currently no images."))
    except glance_exception.ClientConnectionError, e:
        LOG.exception("Error connecting to glance")
        messages.error(request, _("Error connecting to glance: %s") % str(e))
예제 #49
0
    def test_index_error(self):
        volumes = self.volumes.list()

        for volume in volumes:
            volume.volume_id = volume.id
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
                          .AndReturn(volume)
        for volume in volumes:
            api.volume_get(IsA(http.HttpRequest), volume.volume_id) \
                          .AndReturn(volume)
            api.volume_get(IsA(http.HttpRequest), volume.volume_id)

        api.volume_snapshot_list(IsA(http.HttpRequest)) \
                                .AndReturn(volumes)
        api.image_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndRaise(self.exceptions.glance)
        api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \
                                .AndReturn([self.snapshots.list(), False])
        self.mox.ReplayAll()

        res = self.client.get(INDEX_URL)
        self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
예제 #50
0
파일: tests.py 프로젝트: zhang-hua/horizon
    def test_create_instance_snapshot(self):
        server = self.servers.first()

        api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
        api.snapshot_create(IsA(http.HttpRequest),
                            server.id,
                            "snapshot1").AndReturn(self.snapshots.first())

        api.snapshot_list_detailed(IsA(http.HttpRequest),
                                   marker=None).AndReturn([[], False])
        api.image_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn([[], False])
        api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([])

        self.mox.ReplayAll()

        formData = {'instance_id': server.id,
                    'method': 'CreateSnapshot',
                    'name': 'snapshot1'}
        url = reverse('horizon:nova:images_and_snapshots:snapshots:create',
                      args=[server.id])
        redir_url = reverse('horizon:nova:images_and_snapshots:index')
        res = self.client.post(url, formData)
        self.assertRedirects(res, redir_url)
예제 #51
0
 def get_images_data(self):
     marker = self.request.GET.get(ImagesTable._meta.pagination_param, None)
     try:
         # FIXME(gabriel): The paging is going to be strange here due to
         # our filtering after the fact.
         all_images, _more_images = api.image_list_detailed(self.request,
                                                            marker=marker)
         images = [
             im for im in all_images
             if im['container_format'] not in ['aki', 'ari']
             and getattr(im.properties, "image_type", '') != "snapshot"
         ]
     except:
         images = []
         exceptions.handle(self.request, _("Unable to retrieve images."))
     return images
예제 #52
0
def index(request):
    for f in (DeleteImage, ToggleImage):
        form, handled = f.maybe_handle(request)
        if handled:
            return handled

    # We don't have any way of showing errors for these, so don't bother
    # trying to reuse the forms from above
    delete_form = DeleteImage()
    toggle_form = ToggleImage()

    images = []
    try:
        images = api.image_list_detailed(request)
        if not images:
            messages.info(request, _("There are currently no images."))
    except glance_exception.ClientConnectionError, e:
        LOG.exception("Error connecting to glance")
        messages.error(request,
                       _("Error connecting to glance: %s") % e.message)