~ubuntu-branches/ubuntu/utopic/horizon/utopic-updates

« back to all changes in this revision

Viewing changes to openstack_dashboard/dashboards/project/volumes/volumes/tests.py

  • Committer: Package Import Robot
  • Author(s): James Page, Chris Johnston, James Page
  • Date: 2014-10-03 17:54:18 UTC
  • mfrom: (0.4.1) (1.1.44) (70.1.2 utopic)
  • Revision ID: package-import@ubuntu.com-20141003175418-1jomx0azdvnl5fxz
Tags: 1:2014.2~rc1-0ubuntu1
[ Chris Johnston ]
* d/theme/css/ubuntu.css: Fix Ubuntu theme for Instances "more" dropdown
  (LP: #1308651).

[ James Page ]
* New upstream release candidate:
  - d/p/*: Refresh.
* d/watch: Use tarballs.openstack.org for upstream releases. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
570
570
                        api.glance: ('image_get',
571
571
                                     'image_list_detailed'),
572
572
                        quotas: ('tenant_limit_usages',)})
 
573
    def _test_create_volume_from_image_under_image_min_disk_size(self, image):
 
574
        usage_limit = {'maxTotalVolumeGigabytes': 100,
 
575
                       'gigabytesUsed': 20,
 
576
                       'volumesUsed': len(self.cinder_volumes.list()),
 
577
                       'maxTotalVolumes': 6}
 
578
        formData = {'name': u'A Volume I Am Making',
 
579
                    'description': u'This is a volume I am making for a test.',
 
580
                    'method': u'CreateForm',
 
581
                    'size': 5, 'image_source': image.id}
 
582
 
 
583
        cinder.volume_type_list(IsA(http.HttpRequest)).\
 
584
                                AndReturn(self.volume_types.list())
 
585
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
 
586
                                AndReturn(usage_limit)
 
587
        api.glance.image_get(IsA(http.HttpRequest),
 
588
                             str(image.id)).AndReturn(image)
 
589
        cinder.extension_supported(IsA(http.HttpRequest), 'AvailabilityZones')\
 
590
            .AndReturn(True)
 
591
        cinder.availability_zone_list(IsA(http.HttpRequest)).AndReturn(
 
592
            self.cinder_availability_zones.list())
 
593
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
 
594
                                AndReturn(usage_limit)
 
595
 
 
596
        self.mox.ReplayAll()
 
597
 
 
598
        url = reverse('horizon:project:volumes:volumes:create')
 
599
        res = self.client.post("?".join([url,
 
600
                                         "image_id=" + str(image.id)]),
 
601
                               formData, follow=True)
 
602
        self.assertEqual(res.redirect_chain, [])
 
603
        self.assertFormError(res, 'form', None,
 
604
                             "The volume size cannot be less than the "
 
605
                             "image minimum disk size (30GB)")
 
606
 
573
607
    def test_create_volume_from_image_under_image_min_disk_size(self):
574
 
        usage_limit = {'maxTotalVolumeGigabytes': 100,
575
 
                       'gigabytesUsed': 20,
576
 
                       'volumesUsed': len(self.cinder_volumes.list()),
577
 
                       'maxTotalVolumes': 6}
578
608
        image = self.images.get(name="protected_images")
579
609
        image.min_disk = 30
580
 
        formData = {'name': u'A Volume I Am Making',
581
 
                    'description': u'This is a volume I am making for a test.',
582
 
                    'method': u'CreateForm',
583
 
                    'size': 5, 'image_source': image.id}
584
 
 
585
 
        cinder.volume_type_list(IsA(http.HttpRequest)).\
586
 
                                AndReturn(self.volume_types.list())
587
 
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
588
 
                                AndReturn(usage_limit)
589
 
        api.glance.image_get(IsA(http.HttpRequest),
590
 
                             str(image.id)).AndReturn(image)
591
 
        cinder.extension_supported(IsA(http.HttpRequest), 'AvailabilityZones')\
592
 
            .AndReturn(True)
593
 
        cinder.availability_zone_list(IsA(http.HttpRequest)).AndReturn(
594
 
            self.cinder_availability_zones.list())
595
 
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
596
 
                                AndReturn(usage_limit)
597
 
 
598
 
        self.mox.ReplayAll()
599
 
 
600
 
        url = reverse('horizon:project:volumes:volumes:create')
601
 
        res = self.client.post("?".join([url,
602
 
                                         "image_id=" + str(image.id)]),
603
 
                               formData, follow=True)
604
 
        self.assertEqual(res.redirect_chain, [])
605
 
        self.assertFormError(res, 'form', None,
606
 
                             "The volume size cannot be less than the "
607
 
                             "image minimum disk size (30GB)")
 
610
        self._test_create_volume_from_image_under_image_min_disk_size(image)
 
611
 
 
612
    def test_create_volume_from_image_under_image_property_min_disk_size(self):
 
613
        image = self.images.get(name="protected_images")
 
614
        image.min_disk = 0
 
615
        image.properties['min_disk'] = 30
 
616
        self._test_create_volume_from_image_under_image_min_disk_size(image)
608
617
 
609
618
    @test.create_stubs({cinder: ('volume_snapshot_list',
610
619
                                 'volume_type_list',
878
887
        self.assertEqual(res.status_code, 200)
879
888
 
880
889
    @test.create_stubs({cinder: ('tenant_absolute_limits',
 
890
                                 'volume_get',)})
 
891
    def test_create_snapshot_button_disabled_when_quota_exceeded(self):
 
892
        limits = {'maxTotalSnapshots': 1}
 
893
        limits['totalSnapshotsUsed'] = limits['maxTotalSnapshots']
 
894
        volume = self.cinder_volumes.first()
 
895
 
 
896
        cinder.volume_get(IsA(http.HttpRequest), volume.id).AndReturn(volume)
 
897
        cinder.tenant_absolute_limits(IsA(http.HttpRequest)).AndReturn(limits)
 
898
        self.mox.ReplayAll()
 
899
 
 
900
        create_link = tables.CreateSnapshot()
 
901
        url = reverse(create_link.get_link_url(), args=[volume.id])
 
902
        res_url = VOLUME_INDEX_URL + \
 
903
                "?action=row_update&table=volumes&obj_id=" + volume.id
 
904
 
 
905
        res = self.client.get(res_url, {},
 
906
                               HTTP_X_REQUESTED_WITH='XMLHttpRequest')
 
907
 
 
908
        classes = list(create_link.get_default_classes())\
 
909
                    + list(create_link.classes)
 
910
        link_name = "%s (%s)" % (unicode(create_link.verbose_name),
 
911
                                 "Quota exceeded")
 
912
        expected_string = "<a href='%s' class=\"%s disabled\" "\
 
913
            "id=\"volumes__row_%s__action_snapshots\">%s</a>" \
 
914
            % (url, " ".join(classes), volume.id, link_name)
 
915
 
 
916
        self.assertContains(res, expected_string, html=True,
 
917
                msg_prefix="The create snapshot button is not disabled")
 
918
 
 
919
    @test.create_stubs({cinder: ('tenant_absolute_limits',
881
920
                                 'volume_list',
882
921
                                 'volume_backup_supported',),
883
922
                        api.nova: ('server_list',)})
947
986
 
948
987
        self.assertNoMessages()
949
988
 
950
 
    @test.create_stubs({cinder: ('volume_get',)})
 
989
    @test.create_stubs({cinder: ('tenant_absolute_limits',
 
990
                                 'volume_get',)})
951
991
    def test_get_data(self):
952
992
        volume = self.cinder_volumes.get(name='v2_volume')
953
993
        volume._apiresource.name = ""
954
994
 
955
995
        cinder.volume_get(IsA(http.HttpRequest), volume.id).AndReturn(volume)
956
996
 
 
997
        cinder.tenant_absolute_limits(IsA(http.HttpRequest))\
 
998
            .MultipleTimes().AndReturn(self.cinder_limits['absolute'])
 
999
 
957
1000
        self.mox.ReplayAll()
958
1001
 
959
1002
        url = VOLUME_INDEX_URL + \
1047
1090
        self.assertRedirectsNoFollow(res, redirect_url)
1048
1091
 
1049
1092
    @test.create_stubs({cinder: ('volume_get',
1050
 
                                 'volume_extend')})
 
1093
                                 'volume_extend'),
 
1094
                        quotas: ('tenant_limit_usages',)})
1051
1095
    def test_extend_volume(self):
1052
1096
        volume = self.cinder_volumes.first()
 
1097
        usage_limit = {'maxTotalVolumeGigabytes': 100,
 
1098
                       'gigabytesUsed': 20,
 
1099
                       'volumesUsed': len(self.volumes.list()),
 
1100
                       'maxTotalVolumes': 6}
1053
1101
        formData = {'name': u'A Volume I Am Making',
1054
1102
                    'orig_size': volume.size,
1055
 
                    'new_size': 100}
 
1103
                    'new_size': 120}
1056
1104
 
1057
1105
        cinder.volume_get(IsA(http.HttpRequest), volume.id).\
1058
 
                          AndReturn(self.cinder_volumes.first())
1059
 
 
 
1106
            AndReturn(self.cinder_volumes.first())
 
1107
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
 
1108
            AndReturn(usage_limit)
1060
1109
        cinder.volume_extend(IsA(http.HttpRequest),
1061
1110
                             volume.id,
1062
1111
                             formData['new_size']).AndReturn(volume)
1097
1146
                             "current size.")
1098
1147
 
1099
1148
    @test.create_stubs({cinder: ('volume_get',
1100
 
                                 'retype_supported'),
 
1149
                                 'retype_supported',
 
1150
                                 'tenant_absolute_limits'),
1101
1151
                        api.nova: ('server_get',)})
1102
1152
    def test_retype_volume_not_supported_no_action_item(self):
1103
1153
        volume = self.cinder_volumes.get(name='my_volume')
 
1154
        limits = self.cinder_limits['absolute']
1104
1155
        server = self.servers.first()
1105
1156
 
1106
1157
        cinder.volume_get(IsA(http.HttpRequest), volume.id).AndReturn(volume)
1107
1158
        cinder.retype_supported().AndReturn(False)
 
1159
        cinder.tenant_absolute_limits(IsA(http.HttpRequest))\
 
1160
            .MultipleTimes('limits').AndReturn(limits)
1108
1161
        api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server)
1109
1162
 
1110
1163
        self.mox.ReplayAll()
1120
1173
        self.assertNotContains(res, 'retype')
1121
1174
 
1122
1175
    @test.create_stubs({cinder: ('volume_get',
1123
 
                                 'retype_supported')})
 
1176
                                 'retype_supported',
 
1177
                                 'tenant_absolute_limits')})
1124
1178
    def test_retype_volume_supported_action_item(self):
1125
1179
        volume = self.cinder_volumes.get(name='v2_volume')
 
1180
        limits = self.cinder_limits['absolute']
1126
1181
 
1127
1182
        cinder.volume_get(IsA(http.HttpRequest), volume.id).AndReturn(volume)
1128
1183
        cinder.retype_supported().AndReturn(True)
 
1184
        cinder.tenant_absolute_limits(IsA(http.HttpRequest))\
 
1185
            .MultipleTimes('limits').AndReturn(limits)
1129
1186
 
1130
1187
        self.mox.ReplayAll()
1131
1188
 
1240
1297
 
1241
1298
        for row in rows:
1242
1299
            self.assertEqual(row.cells['encryption'].data, column_value)
 
1300
 
 
1301
    @test.create_stubs({cinder: ('volume_get',),
 
1302
                        quotas: ('tenant_limit_usages',)})
 
1303
    def test_extend_volume_with_size_out_of_quota(self):
 
1304
        volume = self.volumes.first()
 
1305
        usage_limit = {'maxTotalVolumeGigabytes': 100,
 
1306
                       'gigabytesUsed': 20,
 
1307
                       'volumesUsed': len(self.volumes.list()),
 
1308
                       'maxTotalVolumes': 6}
 
1309
        formData = {'name': u'A Volume I Am Making',
 
1310
                    'orig_size': volume.size,
 
1311
                    'new_size': 1000}
 
1312
 
 
1313
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
 
1314
            AndReturn(usage_limit)
 
1315
        cinder.volume_get(IsA(http.HttpRequest), volume.id).\
 
1316
            AndReturn(self.volumes.first())
 
1317
        quotas.tenant_limit_usages(IsA(http.HttpRequest)).\
 
1318
            AndReturn(usage_limit)
 
1319
 
 
1320
        self.mox.ReplayAll()
 
1321
 
 
1322
        url = reverse('horizon:project:volumes:volumes:extend',
 
1323
                      args=[volume.id])
 
1324
        res = self.client.post(url, formData)
 
1325
        self.assertFormError(res, "form", "new_size",
 
1326
                             "Volume cannot be extended to 1000GB as you only "
 
1327
                             "have 80GB of your quota available.")