def test_instance_details_metadata(self): server = self.servers.first() api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) api.volume_instance_list(IsA(http.HttpRequest), server.id).AndReturn([]) api.flavor_get(IsA(http.HttpRequest), server.flavor['id']).AndReturn(self.flavors.first()) api.server_security_groups(IsA(http.HttpRequest), server.id).AndReturn( self.security_groups.list()) self.mox.ReplayAll() url = reverse('horizon:project:instances:detail', args=[server.id]) tg = InstanceDetailTabs(self.request, instance=server) qs = "?%s=%s" % (tg.param_name, tg.get_tab("overview").get_id()) res = self.client.get(url + qs) self.assertContains(res, "<dd>keyName</dd>", 1) self.assertContains(res, "<dt>someMetaLabel</dt>", 1) self.assertContains(res, "<dd>someMetaData</dd>", 1) self.assertContains(res, "<dt>some<b>html</b>label</dt>", 1) self.assertContains(res, "<dd><!--</dd>", 1) self.assertContains(res, "<dt>empty</dt>", 1) self.assertContains(res, "<dd><em>N/A</em></dd>", 1)
def test_ajax_loading_instances(self): server = self.servers.first() flavor = self.flavors.list()[0] tenant = self.tenants.list()[0] api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) api.flavor_get(IsA(http.HttpRequest), server.flavor['id']).AndReturn(flavor) api.keystone.tenant_get(IsA(http.HttpRequest), server.tenant_id, admin=True).AndReturn(tenant) self.mox.ReplayAll() url = reverse('horizon:admin:instances:index') + \ "?action=row_update&table=instances&obj_id=" + server.id res = self.client.get(url, {}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertTemplateUsed(res, "horizon/common/_data_table_row.html") self.assertContains(res, "test_tenant", 1, 200) self.assertContains(res, "instance-host", 1, 200) self.assertContains(res, "server_1", 1, 200) self.assertContains(res, "10.0.0.1", 1, 200) self.assertContains(res, "512MB RAM | 1 VCPU | 0 Disk", 1, 200) self.assertContains(res, "Active", 1, 200) self.assertContains(res, "Running", 1, 200)
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_instance_details_metadata(self): server = self.servers.first() api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) api.instance_volumes_list(IsA(http.HttpRequest), server.id).AndReturn([]) api.flavor_get(IsA(http.HttpRequest), server.flavor['id']).AndReturn(self.flavors.first()) api.server_security_groups(IsA(http.HttpRequest), server.id).AndReturn(self.security_groups.list()) self.mox.ReplayAll() url = reverse('horizon:project:instances:detail', args=[server.id]) tg = InstanceDetailTabs(self.request, instance=server) qs = "?%s=%s" % (tg.param_name, tg.get_tab("overview").get_id()) res = self.client.get(url + qs) self.assertContains(res, "<dd>keyName</dd>", 1) self.assertContains(res, "<dt>someMetaLabel</dt>", 1) self.assertContains(res, "<dd>someMetaData</dd>", 1) self.assertContains(res, "<dt>some<b>html</b>label</dt>", 1) self.assertContains(res, "<dd><!--</dd>", 1) self.assertContains(res, "<dt>empty</dt>", 1) self.assertContains(res, "<dd><em>N/A</em></dd>", 1)
def test_instance_details_volumes(self): server = self.servers.first() volumes = [self.volumes.list()[1]] api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) api.instance_volumes_list(IsA(http.HttpRequest), server.id).AndReturn(volumes) api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]).AndReturn(self.flavors.first()) api.server_security_groups(IsA(http.HttpRequest), server.id).AndReturn(self.security_groups.first()) self.mox.ReplayAll() url = reverse("horizon:project:instances:detail", args=[server.id]) res = self.client.get(url) self.assertItemsEqual(res.context["instance"].volumes, volumes)
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 test_instance_details_volumes(self): server = self.servers.first() volumes = [self.volumes.list()[1]] api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) api.volume_instance_list(IsA(http.HttpRequest), server.id).AndReturn(volumes) api.flavor_get(IsA(http.HttpRequest), server.flavor['id']).AndReturn(self.flavors.first()) api.server_security_groups(IsA(http.HttpRequest), server.id).AndReturn( self.security_groups.first()) self.mox.ReplayAll() url = reverse('horizon:project:instances:detail', args=[server.id]) res = self.client.get(url) self.assertItemsEqual(res.context['instance'].volumes, volumes)
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 handle(self, request, data): try: flavor_id = data['flavorid'] flavor = api.flavor_get(request, flavor_id) LOG.info('Deleting flavor with id "%s"' % flavor_id) api.flavor_delete(request, flavor_id, False) messages.info(request, 'Successfully deleted flavor: %s' % flavor.name) except api_exceptions.ApiException, e: messages.error(request, 'Unable to delete flavor: %s' % e.message)
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 test_instance_details_volume_sorting(self): server = self.servers.first() volumes = self.volumes.list()[1:3] api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) api.instance_volumes_list(IsA(http.HttpRequest), server.id).AndReturn(volumes) api.flavor_get(IsA(http.HttpRequest), server.flavor['id']).AndReturn(self.flavors.first()) api.server_security_groups(IsA(http.HttpRequest), server.id).AndReturn(self.security_groups.first()) self.mox.ReplayAll() url = reverse('horizon:project:instances:detail', args=[server.id]) res = self.client.get(url) self.assertItemsEqual(res.context['instance'].volumes, volumes) self.assertEquals(res.context['instance'].volumes[0].device, "/dev/hda") self.assertEquals(res.context['instance'].volumes[1].device, "/dev/hdk")
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_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())
def get_data(self): if not hasattr(self, "_instance"): try: instance_id = self.kwargs['instance_id'] instance = api.server_get(self.request, instance_id) instance.volumes = api.instance_volumes_list(self.request, instance_id) # Sort by device name instance.volumes.sort(key=lambda vol: vol.device) instance.full_flavor = api.flavor_get(self.request, instance.flavor["id"]) instance.security_groups = api.server_security_groups( self.request, instance_id) except: redirect = reverse('horizon:project:instances:index') exceptions.handle(self.request, _('Unable to retrieve details for ' 'instance "%s".') % instance_id, redirect=redirect) self._instance = instance return self._instance
def get_data(self): if not hasattr(self, "_instance"): try: instance_id = self.kwargs['instance_id'] instance = api.server_get(self.request, instance_id) #instance.volumes = api.volume_instance_list(self.request, # instance_id) # Sort by device name #instance.volumes.sort(key=lambda vol: vol.device) instance.full_flavor = api.flavor_get(self.request, instance.flavor["id"]) instance.security_groups = api.server_security_groups( self.request, instance_id) except: redirect = reverse('horizon:project:instances:index') exceptions.handle(self.request, _('Unable to retrieve details for ' 'instance "%s".') % instance_id, redirect=redirect) self._instance = instance return self._instance
def handle(self, request, data): image_id = data["image_id"] tenant_id = data["tenant_id"] try: image = api.image_get(request, image_id) flavor = api.flavor_get(request, data["flavor"]) api.server_create( request, data["name"], image, flavor, data.get("key_name"), data.get("user_data"), data.get("security_groups"), ) msg = "Instance was successfully launched" LOG.info(msg) messages.success(request, msg) return redirect(topbar + "/instances", tenant_id) except api_exceptions.ApiException, e: LOG.error('ApiException while creating instances of image "%s"' % image_id, exc_info=True) messages.error(request, "Unable to launch instance: %s" % e.message)
def get_data(self, request, instance_id): instance = api.server_get(request, instance_id) instance.full_flavor = api.flavor_get(request, instance.flavor["id"]) return instance