Example #1
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, 'project/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)
Example #2
0
    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)
Example #3
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, 'project/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)
Example #4
0
    def test_delete_volume_snapshot(self):
        vol_snapshots = self.volume_snapshots.list()
        snapshot = self.volume_snapshots.first()

        api.image_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn(([], False))
        api.snapshot_list_detailed(IsA(http.HttpRequest),
                                   marker=None).AndReturn(([], False))
        api.volume_snapshot_list(IsA(http.HttpRequest)). \
                                 AndReturn(vol_snapshots)
        api.volume_snapshot_delete(IsA(http.HttpRequest), snapshot.id)
        api.image_list_detailed(IsA(http.HttpRequest),
                                marker=None).AndReturn(([], False))
        api.snapshot_list_detailed(IsA(http.HttpRequest),
                                   marker=None).AndReturn(([], False))
        api.volume_snapshot_list(IsA(http.HttpRequest)). \
                                 AndReturn([])
        self.mox.ReplayAll()

        formData = {'action':
                    'volume_snapshots__delete__%s' % snapshot.id}
        res = self.client.post(INDEX_URL, formData, follow=True)

        self.assertIn("Scheduled deletion of Volume Snapshot: test snapshot",
                      [m.message for m in res.context['messages']])
Example #5
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, 'project/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>")
Example #6
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, 'project/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>")
Example #7
0
    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)
Example #8
0
 def get_snapshots_data(self):
     req = self.request
     marker = req.GET.get(SnapshotsTable._meta.pagination_param, None)
     try:
         snaps, self._more_snapshots = api.snapshot_list_detailed(req, marker=marker)
     except:
         snaps = []
         exceptions.handle(req, _("Unable to retrieve snapshots."))
     return snaps
Example #9
0
 def get_snapshots_data(self):
     req = self.request
     marker = req.GET.get(SnapshotsTable._meta.pagination_param, None)
     try:
         snaps, self._more_snapshots = api.snapshot_list_detailed(
             req, marker=marker)
     except:
         snaps = []
         exceptions.handle(req, _("Unable to retrieve snapshots."))
     return snaps
Example #10
0
 def get_usersnapshots_data(self):
     req = self.request
     marker = req.GET.get(UserSnapshotsTable._meta.pagination_param, None)
     try:
         usersnaps, self._more_snapshots = api.snapshot_list_detailed(
             req,
             marker=marker,
             extra_filters={"owner": req.user.tenant_id})
     except:
         usersnaps = []
         exceptions.handle(req,
                           _("Unable to retrieve user-owned snapshots."))
     return usersnaps
Example #11
0
 def get_usersnapshots_data(self):
     req = self.request
     marker = req.GET.get(UserSnapshotsTable._meta.pagination_param, None)
     try:
         usersnaps, self._more_snapshots = api.snapshot_list_detailed(
                                                            req,
                                                            marker = marker,
                                                            extra_filters = {"owner" : req.user.tenant_id}
                                                            )
     except:
         usersnaps = []
         exceptions.handle(req, _("Unable to retrieve user-owned snapshots."))
     return usersnaps
Example #12
0
    def test_index_no_images(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).AndReturn([(), False])
        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, 'project/images_and_snapshots/index.html')
Example #13
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, 'project/images_and_snapshots/index.html')
Example #14
0
 def get_othersnapshots_data(self):  
     req = self.request
     marker = req.GET.get(OtherSnapshotsTable._meta.pagination_param, None)
     try:
         othersnaps, self._more_snapshots = api.snapshot_list_detailed(
                                                             req,
                                                             marker = marker
                                                             )
         othersnaps = [im for im in othersnaps
             if im.container_format not in ['aki', 'ari'] and im.properties.get("image_type") == 'snapshot']
     except:
         othersnaps = []
         exceptions.handle(req, _("Unable to retrieve list of all snapshots."))
     return othersnaps
Example #15
0
    def test_delete_volume_snapshot(self):
        vol_snapshots = self.volume_snapshots.list()
        snapshot = self.volume_snapshots.first()

        api.image_list_detailed(IsA(http.HttpRequest), marker=None).AndReturn(
            ([], False))
        api.snapshot_list_detailed(IsA(http.HttpRequest),
                                   marker=None).AndReturn(([], False))
        api.volume_snapshot_list(IsA(http.HttpRequest)). \
                                 AndReturn(vol_snapshots)
        api.volume_snapshot_delete(IsA(http.HttpRequest), snapshot.id)
        api.image_list_detailed(IsA(http.HttpRequest), marker=None).AndReturn(
            ([], False))
        api.snapshot_list_detailed(IsA(http.HttpRequest),
                                   marker=None).AndReturn(([], False))
        api.volume_snapshot_list(IsA(http.HttpRequest)). \
                                 AndReturn([])
        self.mox.ReplayAll()

        formData = {'action': 'volume_snapshots__delete__%s' % snapshot.id}
        res = self.client.post(INDEX_URL, formData, follow=True)

        self.assertIn("Scheduled deletion of Volume Snapshot: test snapshot",
                      [m.message for m in res.context['messages']])
Example #16
0
 def get_othersnapshots_data(self):
     req = self.request
     marker = req.GET.get(OtherSnapshotsTable._meta.pagination_param, None)
     try:
         othersnaps, self._more_snapshots = api.snapshot_list_detailed(
             req, marker=marker)
         othersnaps = [
             im for im in othersnaps
             if im.container_format not in ['aki', 'ari']
             and im.properties.get("image_type") == 'snapshot'
         ]
     except:
         othersnaps = []
         exceptions.handle(req,
                           _("Unable to retrieve list of all snapshots."))
     return othersnaps