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)
def test_associate_post_with_exception(self): floating_ip = self.floating_ips.first() server = self.servers.first() self.mox.StubOutWithMock(api, 'server_list') self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api.nova, 'keypair_list') self.mox.StubOutWithMock(api, 'server_add_floating_ip') self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.tenant_floating_ip_list(IsA(http.HttpRequest)) \ .AndReturn(self.floating_ips.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) api.nova.keypair_list(IsA(http.HttpRequest)) \ .AndReturn(self.keypairs.list()) exc = novaclient_exceptions.ClientException('ClientException') api.server_add_floating_ip(IsA(http.HttpRequest), server.id, floating_ip.id).AndRaise(exc) api.tenant_floating_ip_get(IsA(http.HttpRequest), floating_ip.id).AndReturn(floating_ip) self.mox.ReplayAll() url = reverse('%s:associate' % NAMESPACE, args=[floating_ip.id]) res = self.client.post(url, {'instance_id': 1, 'floating_ip_id': floating_ip.id, 'floating_ip': floating_ip.ip, 'method': 'FloatingIpAssociate'}) self.assertRaises(novaclient_exceptions.ClientException) self.assertRedirects(res, INDEX_URL)
def test_index_flavor_get_exception(self): servers = self.servers.list() flavors = self.flavors.list() volumes = self.volumes.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) api.volume_list(IsA(http.HttpRequest)).AndReturn(volumes) self.mox.ReplayAll() res = self.client.get( reverse('horizon:nova:instances_and_volumes:index')) instances = res.context['instances_table'].data volumes = res.context['volumes_table'].data self.assertTemplateUsed(res, 'nova/instances_and_volumes/index.html') self.assertMessageCount(res, error=len(servers)) self.assertItemsEqual(instances, self.servers.list()) self.assertItemsEqual(volumes, self.volumes.list())
def test_associate_post(self): server = self.server self.mox.StubOutWithMock(api, 'server_list') api.server_list = self.mox.CreateMockAnything() api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers) self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') api.tenant_floating_ip_list(IsA(http.HttpRequest)).\ AndReturn(self.floating_ips) self.mox.StubOutWithMock(api, 'server_add_floating_ip') api.server_add_floating_ip = self.mox.CreateMockAnything() api.server_add_floating_ip(IsA(http.HttpRequest), IsA(unicode), IsA(unicode)).\ AndReturn(None) self.mox.StubOutWithMock(messages, 'info') messages.info(IsA(http.HttpRequest), IsA(unicode)) self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') api.tenant_floating_ip_get = self.mox.CreateMockAnything() api.tenant_floating_ip_get(IsA(http.HttpRequest), str(1)).\ AndReturn(self.floating_ip) self.mox.ReplayAll() res = self.client.post(reverse('horizon:nova:floating_ips:associate', args=[1]), {'instance_id': 1, 'floating_ip_id': self.floating_ip.id, 'floating_ip': self.floating_ip.ip, 'method': 'FloatingIpAssociate'}) self.assertRedirects(res, FLOATING_IPS_INDEX) self.mox.VerifyAll()
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)
def test_attached_volume(self): api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.volume_list(IsA(http.HttpRequest)) \ .AndReturn(self.volumes.list()[1:3]) self.mox.ReplayAll() res = self.client.get( reverse('horizon:nova:instances_and_volumes:index')) self.assertTemplateUsed(res, 'nova/instances_and_volumes/index.html') instances = res.context['instances_table'].data resp_volumes = res.context['volumes_table'].data self.assertItemsEqual(instances, self.servers.list()) self.assertItemsEqual(resp_volumes, self.volumes.list()[1:3]) self.assertContains(res, ">My Volume<", 1, 200) self.assertContains(res, ">30GB<", 1, 200) self.assertContains(res, ">3b189ac8-9166-ac7f-90c9-16c8bf9e01ac<", 1, 200) self.assertContains(res, ">10GB<", 1, 200) self.assertContains(res, ">In-Use<", 2, 200) self.assertContains(res, "on /dev/hda", 1, 200) self.assertContains(res, "on /dev/hdk", 1, 200)
def test_association(self): floating_ip = self.floating_ips.first() servers = self.servers.list() # Add duplicate instance name to test instance name with [IP] # change id and private IP server3 = api.nova.Server(self.servers.first(), self.request) server3.id = 101 server3.addresses = deepcopy(server3.addresses) server3.addresses['private'][0]['addr'] = "10.0.0.5" self.servers.add(server3) self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') self.mox.StubOutWithMock(api, 'server_list') api.tenant_floating_ip_get(IsA(http.HttpRequest), floating_ip.id).AndReturn(floating_ip) api.server_list(IsA(http.HttpRequest)).AndReturn(servers) self.mox.ReplayAll() res = self.client.get( reverse( "horizon:nova:access_and_security:" "floating_ips:associate", args=[floating_ip.id])) self.assertTemplateUsed( res, 'nova/access_and_security/' 'floating_ips/associate.html') self.assertContains(res, '<option value="1">server_1 [1]' '</option>') self.assertContains(res, '<option value="101">server_1 [101]' '</option>') self.assertContains(res, '<option value="2">server_2</option>')
def test_index_flavor_list_exception(self): servers = self.servers.list() flavors = self.flavors.list() volumes = self.volumes.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.volume_list(IsA(http.HttpRequest)).AndReturn(volumes) self.mox.ReplayAll() res = self.client.get( reverse('horizon:nova:instances_and_volumes:index')) self.assertTemplateUsed(res, 'nova/instances_and_volumes/index.html') instances = res.context['instances_table'].data volumes = res.context['volumes_table'].data self.assertItemsEqual(instances, self.servers.list()) self.assertItemsEqual(volumes, self.volumes.list())
def test_associate_post(self): floating_ip = self.floating_ips.first() server = self.servers.first() self.mox.StubOutWithMock(api, 'server_list') self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') self.mox.StubOutWithMock(api, 'server_add_floating_ip') self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.tenant_floating_ip_list(IsA(http.HttpRequest)) \ .AndReturn(self.floating_ips.list()) api.server_add_floating_ip(IsA(http.HttpRequest), server.id, floating_ip.id) api.tenant_floating_ip_get(IsA(http.HttpRequest), floating_ip.id).AndReturn(floating_ip) self.mox.ReplayAll() form_data = { 'instance_id': server.id, 'floating_ip_id': floating_ip.id, 'floating_ip': floating_ip.ip, 'method': 'FloatingIpAssociate' } url = reverse('%s:associate' % NAMESPACE, args=[floating_ip.id]) res = self.client.post(url, form_data) self.assertRedirects(res, INDEX_URL)
def test_associate_post_with_exception(self): floating_ip = self.floating_ips.first() server = self.servers.first() self.mox.StubOutWithMock(api, 'server_list') self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api.nova, 'keypair_list') self.mox.StubOutWithMock(api, 'server_add_floating_ip') self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.tenant_floating_ip_list(IsA(http.HttpRequest)) \ .AndReturn(self.floating_ips.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) api.nova.keypair_list(IsA(http.HttpRequest)) \ .AndReturn(self.keypairs.list()) exc = novaclient_exceptions.ClientException('ClientException') api.server_add_floating_ip(IsA(http.HttpRequest), server.id, floating_ip.id).AndRaise(exc) api.tenant_floating_ip_get(IsA(http.HttpRequest), floating_ip.id).AndReturn(floating_ip) self.mox.ReplayAll() url = reverse('%s:associate' % NAMESPACE, args=[floating_ip.id]) res = self.client.post( url, { 'instance_id': 1, 'floating_ip_id': floating_ip.id, 'floating_ip': floating_ip.ip, 'method': 'FloatingIpAssociate' }) self.assertRaises(novaclient_exceptions.ClientException) self.assertRedirects(res, INDEX_URL)
def test_delete_volume_error_existing_snapshot(self): volume = self.volumes.first() formData = {'action': 'volumes__delete__%s' % volume.id} exc = self.exceptions.cinder.__class__(400, "error: dependent snapshots") api.volume_list(IsA(http.HttpRequest), search_opts=None).\ AndReturn(self.volumes.list()) api.volume_delete(IsA(http.HttpRequest), volume.id). \ AndRaise(exc) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.volume_list(IsA(http.HttpRequest), search_opts=None).\ AndReturn(self.volumes.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) self.mox.ReplayAll() url = reverse('horizon:nova:volumes:index') res = self.client.post(url, formData, follow=True) self.assertMessageCount(res, error=1) self.assertEqual(list(res.context['messages'])[0].message, u'Unable to delete volume "%s". ' u'One or more snapshots depend on it.' % volume.display_name)
def test_association(self): floating_ip = self.floating_ips.first() servers = self.servers.list() # Add duplicate instance name to test instance name with [IP] # change id and private IP server3 = api.nova.Server(self.servers.first(), self.request) server3.id = 101 server3.addresses = deepcopy(server3.addresses) server3.addresses['private'][0]['addr'] = "10.0.0.5" self.servers.add(server3) self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') self.mox.StubOutWithMock(api, 'server_list') api.tenant_floating_ip_get(IsA(http.HttpRequest), floating_ip.id).AndReturn(floating_ip) api.server_list(IsA(http.HttpRequest)).AndReturn(servers) self.mox.ReplayAll() res = self.client.get( reverse("horizon:nova:access_and_security:" "floating_ips:associate", args=[floating_ip.id])) self.assertTemplateUsed(res, 'nova/access_and_security/' 'floating_ips/associate.html') self.assertContains(res, '<option value="1">server_1 [1]' '</option>') self.assertContains(res, '<option value="101">server_1 [101]' '</option>') self.assertContains(res, '<option value="2">server_2</option>')
def test_associate_post(self): self.mox.StubOutWithMock(api, 'server_list') api.server_list = self.mox.CreateMockAnything() api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers) self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') api.tenant_floating_ip_list(IsA(http.HttpRequest)).\ AndReturn(self.floating_ips) self.mox.StubOutWithMock(api, 'server_add_floating_ip') api.server_add_floating_ip = self.mox.CreateMockAnything() api.server_add_floating_ip(IsA(http.HttpRequest), IsA(unicode), IsA(unicode)).\ AndReturn(None) self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') api.tenant_floating_ip_get = self.mox.CreateMockAnything() api.tenant_floating_ip_get(IsA(http.HttpRequest), str(1)).\ AndReturn(self.floating_ip) self.mox.ReplayAll() res = self.client.post( reverse('horizon:nova:access_and_security:floating_ips:associate', args=[1]), { 'instance_id': 1, 'floating_ip_id': self.floating_ip.id, 'floating_ip': self.floating_ip.ip, 'method': 'FloatingIpAssociate' }) self.assertRedirects(res, INDEX_URL)
def _get_instances(self): if not hasattr(self, "_instances_list"): #self._instances_list = api.server_list(self.request) # jt if self.request.user.is_admin(): self._instances_list = api.server_list(self.request, all_tenants=True) else: self._instances_list = api.server_list(self.request) return self._instances_list
def test_index_server_list_exception(self): api.server_list(IsA(http.HttpRequest)).AndRaise(self.exceptions.nova) self.mox.ReplayAll() res = self.client.get(reverse('horizon:nova:instances:index')) self.assertTemplateUsed(res, 'nova/instances/index.html') self.assertEqual(len(res.context['instances_table'].data), 0) self.assertMessageCount(res, error=1)
def test_pause_instance(self): server = self.servers.first() self.mox.StubOutWithMock(api, 'server_pause') self.mox.StubOutWithMock(api, 'server_list') api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.server_pause(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_index(self): self.mox.StubOutWithMock(api, 'server_list') api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers) self.mox.ReplayAll() res = self.client.get(reverse('horizon:nova:instances:index')) self.assertTemplateUsed(res, 'nova/instances/index.html') self.assertItemsEqual(res.context['instances'], self.servers)
def test_index_server_list_exception(self): self.mox.StubOutWithMock(api, 'server_list') exception = api_exceptions.ApiException('apiException') api.server_list(IsA(http.HttpRequest)).AndRaise(exception) self.mox.ReplayAll() res = self.client.get(reverse('horizon:nova:instances:index')) self.assertTemplateUsed(res, 'nova/instances/index.html') self.assertEqual(len(res.context['instances']), 0)
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(self): api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) self.mox.ReplayAll() res = self.client.get(reverse('horizon:syspanel:volumes:index')) self.assertTemplateUsed(res, 'syspanel/volumes/index.html') volumes = res.context['volumes_table'].data self.assertItemsEqual(volumes, self.volumes.list())
def test_index(self): api.volume_list(IsA(http.HttpRequest), search_opts={"all_tenants": 1}).AndReturn(self.volumes.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) self.mox.ReplayAll() res = self.client.get(reverse("horizon:admin:volumes:index")) self.assertTemplateUsed(res, "admin/volumes/index.html") volumes = res.context["volumes_table"].data self.assertItemsEqual(volumes, self.volumes.list())
def test_reboot_instance(self): self.mox.StubOutWithMock(api, 'server_reboot') self.mox.StubOutWithMock(api, 'server_list') api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers) api.server_reboot(IsA(http.HttpRequest), unicode(self.servers[0].id)) self.mox.ReplayAll() formData = {'action': 'instances__reboot__%s' % self.servers[0].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" self.mox.StubOutWithMock(api, 'server_resume') self.mox.StubOutWithMock(api, 'server_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_reboot_instance_exception(self): server = self.servers.first() self.mox.StubOutWithMock(api, 'server_reboot') self.mox.StubOutWithMock(api, 'server_list') api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) exc = nova_exceptions.ClientException(500) api.server_reboot(IsA(http.HttpRequest), server.id).AndRaise(exc) self.mox.ReplayAll() formData = {'action': 'instances__reboot__%s' % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_associate(self): floating_ip = self.floating_ips.first() self.mox.StubOutWithMock(api, 'server_list') self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.tenant_floating_ip_get(IsA(http.HttpRequest), floating_ip.id).AndReturn(floating_ip) self.mox.ReplayAll() url = reverse('%s:associate' % NAMESPACE, args=[floating_ip.id]) res = self.client.get(url) self.assertTemplateUsed( res, 'nova/access_and_security/floating_ips/associate.html')
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_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_associate(self): floating_ip = self.floating_ips.first() self.mox.StubOutWithMock(api, 'server_list') self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.tenant_floating_ip_get(IsA(http.HttpRequest), floating_ip.id).AndReturn(floating_ip) self.mox.ReplayAll() url = reverse('%s:associate' % NAMESPACE, args=[floating_ip.id]) res = self.client.get(url) self.assertTemplateUsed(res, 'nova/access_and_security/floating_ips/associate.html')
def test_index_server_list_exception(self): self.mox.StubOutWithMock(api, 'server_list') self.mox.StubOutWithMock(api, 'volume_list') exception = novaclient_exceptions.ClientException('apiException') api.server_list(IsA(http.HttpRequest)).AndRaise(exception) api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes) self.mox.ReplayAll() res = self.client.get( reverse('horizon:nova:instances_and_volumes:index')) self.assertTemplateUsed(res, 'nova/instances_and_volumes/index.html') self.assertEqual(len(res.context['instances_table'].data), 0)
def test_associate(self): self.mox.StubOutWithMock(api, 'server_list') api.server_list = self.mox.CreateMockAnything() api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers) self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') api.tenant_floating_ip_get = self.mox.CreateMockAnything() api.tenant_floating_ip_get(IsA(http.HttpRequest), str(1)).\ AndReturn(self.floating_ip) self.mox.ReplayAll() res = self.client.get(reverse('horizon:nova:floating_ips:associate', args=[1])) self.assertTemplateUsed(res, 'nova/floating_ips/associate.html')
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.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': 1 }).AndReturn(self.volumes.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) self.mox.ReplayAll() res = self.client.get(reverse('horizon:admin:volumes:index')) self.assertTemplateUsed(res, 'admin/volumes/index.html') volumes = res.context['volumes_table'].data self.assertItemsEqual(volumes, self.volumes.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:nova:instances:index')) self.assertTemplateUsed(res, 'nova/instances/index.html') instances = res.context['instances_table'].data self.assertItemsEqual(instances, self.servers.list())
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_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_pause_instance_exception(self): server = self.servers.first() api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.server_pause(IsA(http.HttpRequest), server.id) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() formData = {'action': 'instances__pause__%s' % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def test_pause_instance(self): server = self.servers.first() self.mox.StubOutWithMock(api, "server_pause") self.mox.StubOutWithMock(api, "server_list") self.mox.StubOutWithMock(api, "volume_list") self.mox.StubOutWithMock(api, "flavor_list") api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) api.server_pause(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_index_server_list_exception(self): self.mox.StubOutWithMock(api, 'server_list') self.mox.StubOutWithMock(api, 'volume_list') api.server_list(IsA(http.HttpRequest)).AndRaise(self.exceptions.nova) api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) self.mox.ReplayAll() res = self.client.get( reverse('horizon:nova:instances_and_volumes:index')) self.assertTemplateUsed(res, 'nova/instances_and_volumes/index.html') self.assertEqual(len(res.context['instances_table'].data), 0)
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 index(request): tenant_id = request.user.tenant_id for f in (TerminateInstance, RebootInstance): form, handled = f.maybe_handle(request) if handled: return handled instances = [] try: instances = api.server_list(request) except api_exceptions.ApiException as e: LOG.exception(_('Exception in instance index')) messages.error(request, _('Unable to get instance list: %s') % e.message) # We don't have any way of showing errors for these, so don't bother # trying to reuse the forms from above terminate_form = TerminateInstance() reboot_form = RebootInstance() return shortcuts.render( request, 'nova/instances/index.html', { 'instances': instances, 'terminate_form': terminate_form, 'reboot_form': reboot_form })
def index(request): tenant_id = request.user.tenant_id for f in (TerminateInstance, RebootInstance): form, handled = f.maybe_handle(request) if handled: return handled instances = [] try: instances = api.server_list(request) except Exception as e: LOG.exception(_('Exception in instance index')) if not hasattr(e, 'message'): e.message = str(e) messages.error(request, _('Unable to get instance list: %s') % e.message) # Gather our flavors and correlate our instances to them try: flavors = api.flavor_list(request) full_flavors = SortedDict([(str(flavor.id), flavor) for \ flavor in flavors]) for instance in instances: instance.full_flavor = full_flavors[instance.flavor["id"]] except api_exceptions.Unauthorized, e: LOG.exception('Unauthorized attempt to access flavor list.') messages.error(request, _('Unauthorized.'))
def test_terminate_instance_exception(self): server = self.servers.first() self.mox.StubOutWithMock(api, 'server_list') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'server_delete') self.mox.StubOutWithMock(api, 'volume_list') api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) 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) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() formData = {'action': 'instances__terminate__%s' % server.id} res = self.client.post(INDEX_URL, formData) self.assertRedirectsNoFollow(res, INDEX_URL)
def get_initial(self): try: servers = api.server_list(self.request) except: redirect = reverse('horizon:nova:access_and_security:index') exceptions.handle(self.request, _('Unable to retrieve instance list.'), redirect=redirect) instances = [] for server in servers: # FIXME(ttrifonov): show IP in case of non-unique names # to be removed when nova can support unique names server_name = server.name if any(s.id != server.id and s.name == server.name for s in servers): # duplicate instance name server_name = "%s [%s]" % (server.name, server.id) instances.append((server.id, server_name)) # Sort instances for easy browsing instances = sorted(instances, key=lambda x: x[1]) return { 'floating_ip_id': self.object.id, 'floating_ip': self.object.ip, 'instances': instances }