def test_index_flavor_get_exception(self): servers = self.servers.list() flavors = self.flavors.list() # UUIDs generated using indexes are unlikely to match # any of existing flavor ids and are guaranteed to be deterministic. for i, server in enumerate(servers): server.flavor["id"] = str(uuid.UUID(int=i)) api.server_list(IsA(http.HttpRequest)).AndReturn(servers) api.flavor_list(IsA(http.HttpRequest)).AndReturn(flavors) for server in servers: api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]).AndRaise(self.exceptions.nova) api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True).MultipleTimes().AndReturn( self.limits["absolute"] ) self.mox.ReplayAll() res = self.client.get(reverse("horizon:project:instances:index")) instances = res.context["instances_table"].data self.assertTemplateUsed(res, "project/instances/index.html") self.assertMessageCount(res, error=len(servers)) self.assertItemsEqual(instances, self.servers.list())
def test_index(self): api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) self.mox.ReplayAll() res = self.client.get(reverse('horizon:project:instances:index')) self.assertTemplateUsed(res, 'project/instances/index.html') instances = res.context['instances_table'].data self.assertItemsEqual(instances, self.servers.list())
def test_suspend_instance(self): server = self.servers.first() api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.server_suspend(IsA(http.HttpRequest), unicode(server.id)) self.mox.ReplayAll() formData = {'action': 'instances__suspend__%s' % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_reboot_instance_exception(self): server = self.servers.first() api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.server_reboot(IsA(http.HttpRequest), server.id).AndRaise(self.exceptions.nova) self.mox.ReplayAll() formData = {"action": "instances__reboot__%s" % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_terminate_instance(self): server = self.servers.first() api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.flavor_list(IgnoreArg()).AndReturn(self.flavors.list()) api.server_delete(IsA(http.HttpRequest), server.id) self.mox.ReplayAll() formData = {'action': 'instances__terminate__%s' % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_unpause_instance(self): server = self.servers.first() server.status = "PAUSED" api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.server_unpause(IsA(http.HttpRequest), server.id) self.mox.ReplayAll() formData = {'action': 'instances__pause__%s' % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_reboot_instance_exception(self): server = self.servers.first() api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.server_reboot(IsA(http.HttpRequest), server.id) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() formData = {'action': 'instances__reboot__%s' % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_resume_instance(self): server = self.servers.first() server.status = "SUSPENDED" api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.server_resume(IsA(http.HttpRequest), unicode(server.id)) self.mox.ReplayAll() formData = {"action": "instances__suspend__%s" % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_index(self): api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) self.mox.ReplayAll() res = self.client.get( reverse('horizon:project:instances:index')) self.assertTemplateUsed(res, 'project/instances/index.html') instances = res.context['instances_table'].data self.assertItemsEqual(instances, self.servers.list())
def test_index_options_after_migrate(self): server = self.servers.first() server.status = "VERIFY_RESIZE" api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True).MultipleTimes().AndReturn( self.limits["absolute"] ) self.mox.ReplayAll() res = self.client.get(INDEX_URL) self.assertContains(res, "instances__confirm") self.assertContains(res, "instances__revert")
def test_resume_instance_exception(self): server = self.servers.first() server.status = "SUSPENDED" api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.server_resume(IsA(http.HttpRequest), unicode(server.id)).AndRaise(self.exceptions.nova) self.mox.ReplayAll() formData = {'action': 'instances__suspend__%s' % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_index(self): api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True).MultipleTimes().AndReturn( self.limits["absolute"] ) self.mox.ReplayAll() res = self.client.get(reverse("horizon:project:instances:index")) self.assertTemplateUsed(res, "project/instances/index.html") instances = res.context["instances_table"].data self.assertItemsEqual(instances, self.servers.list())
def get_data(self): # Gather our instances try: instances = api.server_list(self.request) except: instances = [] exceptions.handle(self.request, _('Unable to retrieve instances.')) # Gather our flavors and correlate our instances to them if instances: try: flavors = api.flavor_list(self.request) except: flavors = [] exceptions.handle(self.request, ignore=True) full_flavors = SortedDict([(str(flavor.id), flavor) for flavor in flavors]) # Loop through instances to get flavor info. for instance in instances: try: flavor_id = instance.flavor["id"] if flavor_id in full_flavors: instance.full_flavor = full_flavors[flavor_id] else: # If the flavor_id is not in full_flavors list, # get it via nova api. instance.full_flavor = api.flavor_get( self.request, flavor_id) except: msg = _('Unable to retrieve instance size information.') exceptions.handle(self.request, msg) return instances
def get_data(self): # Gather our instances try: instances = api.server_list(self.request) except: instances = [] exceptions.handle(self.request, _('Unable to retrieve instances.')) # Gather our flavors and correlate our instances to them if instances: try: flavors = api.flavor_list(self.request) except: flavors = [] exceptions.handle(self.request, ignore=True) full_flavors = SortedDict([(str(flavor.id), flavor) for flavor in flavors]) # Loop through instances to get flavor info. for instance in instances: try: flavor_id = instance.flavor["id"] if flavor_id in full_flavors: instance.full_flavor = full_flavors[flavor_id] else: # If the flavor_id is not in full_flavors list, # get it via nova api. instance.full_flavor = api.flavor_get(self.request, flavor_id) except: msg = _('Unable to retrieve instance size information.') exceptions.handle(self.request, msg) return instances
def get_data(self): request = self.request flavors = [] try: flavors = api.flavor_list(request) except: exceptions.handle(request, _('Unable to retrieve flavor list.')) # Sort flavors by size flavors.sort(key=lambda f: (f.vcpus, f.ram, f.disk)) return flavors
def test_index_flavor_list_exception(self): servers = self.servers.list() flavors = self.flavors.list() full_flavors = SortedDict([(f.id, f) for f in flavors]) api.server_list(IsA(http.HttpRequest)).AndReturn(servers) api.flavor_list(IsA(http.HttpRequest)).AndRaise(self.exceptions.nova) for server in servers: api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \ AndReturn(full_flavors[server.flavor["id"]]) self.mox.ReplayAll() res = self.client.get(reverse('horizon:project:instances:index')) self.assertTemplateUsed(res, 'project/instances/index.html') instances = res.context['instances_table'].data self.assertItemsEqual(instances, self.servers.list())
def flavorlist(): try: fl = api.flavor_list(request) # TODO add vcpu count to flavors sel = [(f.id, "%s (%svcpu / %sGB Disk / %sMB Ram )" % (f.name, f.vcpus, f.disk, f.ram)) for f in fl] return sorted(sel) except api_exceptions.ApiException: LOG.error("Unable to retrieve list of instance types", exc_info=True) return [(1, "m1.tiny")]
def test_index_flavor_list_exception(self): servers = self.servers.list() flavors = self.flavors.list() full_flavors = SortedDict([(f.id, f) for f in flavors]) api.server_list(IsA(http.HttpRequest)).AndReturn(servers) api.flavor_list(IsA(http.HttpRequest)).AndRaise(self.exceptions.nova) for server in servers: api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]).AndReturn(full_flavors[server.flavor["id"]]) api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True).MultipleTimes().AndReturn( self.limits["absolute"] ) self.mox.ReplayAll() res = self.client.get(reverse("horizon:project:instances:index")) self.assertTemplateUsed(res, "project/instances/index.html") instances = res.context["instances_table"].data self.assertItemsEqual(instances, self.servers.list())
def index(request): for f in (DeleteFlavor,): _, handled = f.maybe_handle(request) if handled: return handled delete_form = DeleteFlavor() flavors = [] try: flavors = api.flavor_list(request) except api_exceptions.ApiException, e: LOG.error('ApiException while fetching usage info', exc_info=True) messages.error(request, 'Unable to get usage info: %s' % e.message)
def test_index_flavor_get_exception(self): servers = self.servers.list() flavors = self.flavors.list() max_id = max([int(flavor.id) for flavor in flavors]) for server in servers: max_id += 1 server.flavor["id"] = max_id api.server_list(IsA(http.HttpRequest)).AndReturn(servers) api.flavor_list(IsA(http.HttpRequest)).AndReturn(flavors) for server in servers: api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \ AndRaise(self.exceptions.nova) self.mox.ReplayAll() res = self.client.get(reverse('horizon:project:instances:index')) instances = res.context['instances_table'].data self.assertTemplateUsed(res, 'project/instances/index.html') self.assertMessageCount(res, error=len(servers)) self.assertItemsEqual(instances, self.servers.list())
def test_launch_button_disabled_when_quota_exceeded(self): limits = self.limits["absolute"] limits["totalInstancesUsed"] = limits["maxTotalInstances"] api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True).MultipleTimes().AndReturn(limits) self.mox.ReplayAll() launch = LaunchLink() url = launch.get_link_url() classes = list(launch.get_default_classes()) + list(launch.classes) link_name = "%s (%s)" % (unicode(launch.verbose_name), "Quota exceeded") res = self.client.get(INDEX_URL) self.assertContains( res, "<a href='%s' id='instances__action_launch'" " class='%s disabled'>%s</a>" % (url, " ".join(classes), link_name), html=True, msg_prefix="The launch button is not disabled", )
def test_index_flavor_get_exception(self): servers = self.servers.list() flavors = self.flavors.list() # UUIDs generated using indexes are unlikely to match # any of existing flavor ids and are guaranteed to be deterministic. for i, server in enumerate(servers): server.flavor['id'] = str(uuid.UUID(int=i)) api.server_list(IsA(http.HttpRequest)).AndReturn(servers) api.flavor_list(IsA(http.HttpRequest)).AndReturn(flavors) for server in servers: api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \ AndRaise(self.exceptions.nova) self.mox.ReplayAll() res = self.client.get(reverse('horizon:project:instances:index')) instances = res.context['instances_table'].data self.assertTemplateUsed(res, 'project/instances/index.html') self.assertMessageCount(res, error=len(servers)) self.assertItemsEqual(instances, self.servers.list())