From 06e11327349b0e1a904ed67dacd63e98528d7ba9 Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Fri, 10 Jan 2014 16:18:23 +0800 Subject: [PATCH] Live Migration should not contain current host in the new host list Change-Id: I30af5aa4943284edc16dfbde1b1354951698c77c Closes-Bug: #1267733 --- .../dashboards/admin/instances/forms.py | 2 +- .../dashboards/admin/instances/tests.py | 21 ++++++++ .../test/test_data/nova_data.py | 51 +++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/openstack_dashboard/dashboards/admin/instances/forms.py b/openstack_dashboard/dashboards/admin/instances/forms.py index 1c0b724275..b13dce6d7c 100644 --- a/openstack_dashboard/dashboards/admin/instances/forms.py +++ b/openstack_dashboard/dashboards/admin/instances/forms.py @@ -53,7 +53,7 @@ class LiveMigrateForm(forms.SelfHandlingForm): host_list = [(host.hypervisor_hostname, host.hypervisor_hostname) for host in hosts - if host.hypervisor_hostname != current_host] + if host.service['host'] != current_host] if host_list: host_list.insert(0, ("", _("Select a new host"))) else: diff --git a/openstack_dashboard/dashboards/admin/instances/tests.py b/openstack_dashboard/dashboards/admin/instances/tests.py index 3b25ed9aa0..abb98af84c 100644 --- a/openstack_dashboard/dashboards/admin/instances/tests.py +++ b/openstack_dashboard/dashboards/admin/instances/tests.py @@ -268,6 +268,27 @@ class InstanceViewTest(test.BaseAdminViewTests): self.assertRedirectsNoFollow(res, INDEX_URL) + @test.create_stubs({api.nova: ('hypervisor_list', + 'server_get',)}) + def test_instance_live_migrate_list_hypervisor_without_current(self): + server = self.servers.first() + api.nova.server_get(IsA(http.HttpRequest), server.id) \ + .AndReturn(server) + api.nova.hypervisor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.hypervisors.list()) + + self.mox.ReplayAll() + + url = reverse('horizon:admin:instances:live_migrate', + args=[server.id]) + res = self.client.get(url) + self.assertNotContains( + res, "") + self.assertContains( + res, "") + self.assertContains( + res, "") + @test.create_stubs({api.nova: ('hypervisor_list', 'server_get', 'server_live_migrate',)}) diff --git a/openstack_dashboard/test/test_data/nova_data.py b/openstack_dashboard/test/test_data/nova_data.py index e15b28876d..ee70ab3ada 100644 --- a/openstack_dashboard/test/test_data/nova_data.py +++ b/openstack_dashboard/test/test_data/nova_data.py @@ -566,7 +566,58 @@ def data(TEST): "id": 1 } ) + + hypervisor_2 = hypervisors.Hypervisor(hypervisors.HypervisorManager(None), + { + "service": {"host": "devstack002", "id": 4}, + "vcpus_used": 1, + "hypervisor_type": "QEMU", + "local_gb_used": 20, + "hypervisor_hostname": "devstack002", + "memory_mb_used": 1500, + "memory_mb": 2000, + "current_workload": 0, + "vcpus": 1, + "cpu_info": '{"vendor": "Intel", "model": "core2duo",' + '"arch": "x86_64", "features": ["lahf_lm"' + ', "rdtscp"], "topology": {"cores": 1, "t' + 'hreads": 1, "sockets": 1}}', + "running_vms": 1, + "free_disk_gb": 9, + "hypervisor_version": 1002000, + "disk_available_least": 6, + "local_gb": 29, + "free_ram_mb": 500, + "id": 2 + } + ) + hypervisor_3 = hypervisors.Hypervisor(hypervisors.HypervisorManager(None), + { + "service": {"host": "instance-host", "id": 5}, + "vcpus_used": 1, + "hypervisor_type": "QEMU", + "local_gb_used": 20, + "hypervisor_hostname": "devstack003", + "memory_mb_used": 1500, + "memory_mb": 2000, + "current_workload": 0, + "vcpus": 1, + "cpu_info": '{"vendor": "Intel", "model": "core2duo",' + '"arch": "x86_64", "features": ["lahf_lm"' + ', "rdtscp"], "topology": {"cores": 1, "t' + 'hreads": 1, "sockets": 1}}', + "running_vms": 1, + "free_disk_gb": 9, + "hypervisor_version": 1002000, + "disk_available_least": 6, + "local_gb": 29, + "free_ram_mb": 500, + "id": 3 + } + ) TEST.hypervisors.add(hypervisor_1) + TEST.hypervisors.add(hypervisor_2) + TEST.hypervisors.add(hypervisor_3) TEST.hypervisors.stats = { "hypervisor_statistics": {