diff options
Diffstat (limited to 'nova/tests/virt/vmwareapi')
-rw-r--r-- | nova/tests/virt/vmwareapi/db_fakes.py | 2 | ||||
-rw-r--r-- | nova/tests/virt/vmwareapi/test_vmwareapi.py | 79 | ||||
-rw-r--r-- | nova/tests/virt/vmwareapi/test_vmwareapi_vm_util.py | 96 |
3 files changed, 173 insertions, 4 deletions
diff --git a/nova/tests/virt/vmwareapi/db_fakes.py b/nova/tests/virt/vmwareapi/db_fakes.py index 93fcf6e13..87c3dde67 100644 --- a/nova/tests/virt/vmwareapi/db_fakes.py +++ b/nova/tests/virt/vmwareapi/db_fakes.py @@ -1,5 +1,6 @@ # vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. # Copyright (c) 2011 Citrix Systems, Inc. # Copyright 2011 OpenStack Foundation # @@ -74,6 +75,7 @@ def stub_out_db_instance_api(stubs): 'vcpus': type_data['vcpus'], 'mac_addresses': [{'address': values['mac_address']}], 'root_gb': type_data['root_gb'], + 'node': values['node'], } return FakeModel(base_options) diff --git a/nova/tests/virt/vmwareapi/test_vmwareapi.py b/nova/tests/virt/vmwareapi/test_vmwareapi.py index 69a9ffab8..afda26b0d 100644 --- a/nova/tests/virt/vmwareapi/test_vmwareapi.py +++ b/nova/tests/virt/vmwareapi/test_vmwareapi.py @@ -1,5 +1,6 @@ # vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. # Copyright (c) 2012 VMware, Inc. # Copyright (c) 2011 Citrix Systems, Inc. # Copyright 2011 OpenStack Foundation @@ -111,6 +112,7 @@ class VMwareAPIVMTestCase(test.TestCase): use_linked_clone=False) self.user_id = 'fake' self.project_id = 'fake' + self.node_name = 'test_url' self.context = context.RequestContext(self.user_id, self.project_id) vmwareapi_fake.reset() db_fakes.stub_out_db_instance_api(self.stubs) @@ -143,6 +145,7 @@ class VMwareAPIVMTestCase(test.TestCase): 'ramdisk_id': "1", 'mac_address': "de:ad:be:ef:be:ef", 'instance_type': 'm1.large', + 'node': self.node_name, } self.instance = db.instance_create(None, values) @@ -332,14 +335,14 @@ class VMwareAPIVMTestCase(test.TestCase): self.conn.power_off(self.instance) info = self.conn.get_info({'uuid': 'fake-uuid'}) self._check_vm_info(info, power_state.SHUTDOWN) - self.conn.power_on(self.instance) + self.conn.power_on(self.context, self.instance, self.network_info) info = self.conn.get_info({'uuid': 'fake-uuid'}) self._check_vm_info(info, power_state.RUNNING) def test_power_on_non_existent(self): self._create_instance_in_the_db() self.assertRaises(exception.InstanceNotFound, self.conn.power_on, - self.instance) + self.context, self.instance, self.network_info) def test_power_off(self): self._create_vm() @@ -424,7 +427,7 @@ class VMwareAPIVMTestCase(test.TestCase): self.assertEquals(4, step) self.assertEqual(vmops.RESIZE_TOTAL_STEPS, total_steps) - self.stubs.Set(self.conn._vmops, "power_on", fake_power_on) + self.stubs.Set(self.conn._vmops, "_power_on", fake_power_on) self.stubs.Set(self.conn._vmops, "_update_instance_progress", fake_vmops_update_instance_progress) @@ -436,6 +439,7 @@ class VMwareAPIVMTestCase(test.TestCase): instance=self.instance, disk_info=None, network_info=None, + block_device_info=None, image_meta=None, power_on=power_on) # verify the results @@ -472,15 +476,20 @@ class VMwareAPIVMTestCase(test.TestCase): self.assertEquals(self.vm_name, vm_name) return vmwareapi_fake._get_objects("VirtualMachine")[0] + def fake_get_vm_ref_from_uuid(session, vm_uuid): + return vmwareapi_fake._get_objects("VirtualMachine")[0] + def fake_call_method(*args, **kwargs): pass def fake_wait_for_task(*args, **kwargs): pass - self.stubs.Set(self.conn._vmops, "power_on", fake_power_on) + self.stubs.Set(self.conn._vmops, "_power_on", fake_power_on) self.stubs.Set(self.conn._vmops, "_get_orig_vm_name_label", fake_get_orig_vm_name_label) + self.stubs.Set(vm_util, "get_vm_ref_from_uuid", + fake_get_vm_ref_from_uuid) self.stubs.Set(vm_util, "get_vm_ref_from_name", fake_get_vm_ref_from_name) self.stubs.Set(self.conn._session, "_call_method", fake_call_method) @@ -500,6 +509,41 @@ class VMwareAPIVMTestCase(test.TestCase): def test_finish_revert_migration_power_off(self): self._test_finish_revert_migration(power_on=False) + def test_diagnostics_non_existent_vm(self): + self._create_instance_in_the_db() + self.assertRaises(exception.InstanceNotFound, + self.conn.get_diagnostics, + self.instance) + + def test_get_console_pool_info(self): + info = self.conn.get_console_pool_info("console_type") + self.assertEquals(info['address'], 'test_url') + self.assertEquals(info['username'], 'test_username') + self.assertEquals(info['password'], 'test_pass') + + def test_get_vnc_console_non_existent(self): + self._create_instance_in_the_db() + self.assertRaises(exception.InstanceNotFound, + self.conn.get_vnc_console, + self.instance) + + def test_get_vnc_console(self): + self._create_instance_in_the_db() + self._create_vm() + vnc_dict = self.conn.get_vnc_console(self.instance) + self.assertEquals(vnc_dict['host'], "ha-host") + self.assertEquals(vnc_dict['port'], 5910) + + def test_host_ip_addr(self): + self.assertEquals(self.conn.get_host_ip_addr(), "test_url") + + def test_get_volume_connector(self): + self._create_instance_in_the_db() + connector_dict = self.conn.get_volume_connector(self.instance) + self.assertEquals(connector_dict['ip'], "test_url") + self.assertEquals(connector_dict['initiator'], "iscsi-name") + self.assertEquals(connector_dict['host'], "test_url") + class VMwareAPIHostTestCase(test.TestCase): """Unit tests for Vmware API host calls.""" @@ -547,3 +591,30 @@ class VMwareAPIHostTestCase(test.TestCase): def test_host_maintenance_off(self): self._test_host_action(self.conn.host_maintenance_mode, False) + + +class VMwareAPIVCDriverTestCase(VMwareAPIVMTestCase): + + def setUp(self): + super(VMwareAPIVCDriverTestCase, self).setUp() + self.flags( + vmwareapi_cluster_name='test_cluster', + vmwareapi_task_poll_interval=10, + vnc_enabled=False + ) + self.conn = driver.VMwareVCDriver(None, False) + + def tearDown(self): + super(VMwareAPIVCDriverTestCase, self).tearDown() + vmwareapi_fake.cleanup() + + def test_get_available_resource(self): + stats = self.conn.get_available_resource(self.node_name) + self.assertEquals(stats['vcpus'], 16) + self.assertEquals(stats['local_gb'], 1024) + self.assertEquals(stats['local_gb_used'], 1024 - 500) + self.assertEquals(stats['memory_mb'], 1024) + self.assertEquals(stats['memory_mb_used'], 1024 - 524) + self.assertEquals(stats['hypervisor_type'], 'VMware ESXi') + self.assertEquals(stats['hypervisor_version'], '5.0.0') + self.assertEquals(stats['hypervisor_hostname'], 'test_url') diff --git a/nova/tests/virt/vmwareapi/test_vmwareapi_vm_util.py b/nova/tests/virt/vmwareapi/test_vmwareapi_vm_util.py index 123a314c1..0456dfece 100644 --- a/nova/tests/virt/vmwareapi/test_vmwareapi_vm_util.py +++ b/nova/tests/virt/vmwareapi/test_vmwareapi_vm_util.py @@ -16,6 +16,8 @@ # License for the specific language governing permissions and limitations # under the License. +from collections import namedtuple + from nova import exception from nova import test from nova.virt.vmwareapi import fake @@ -33,9 +35,11 @@ class fake_session(object): class VMwareVMUtilTestCase(test.TestCase): def setUp(self): super(VMwareVMUtilTestCase, self).setUp() + fake.reset() def tearDown(self): super(VMwareVMUtilTestCase, self).tearDown() + fake.reset() def test_get_datastore_ref_and_name(self): result = vm_util.get_datastore_ref_and_name( @@ -54,3 +58,95 @@ class VMwareVMUtilTestCase(test.TestCase): self.assertRaises(exception.DatastoreNotFound, vm_util.get_datastore_ref_and_name, fake_session(), cluster="fake-cluster") + + def test_get_host_ref_from_id(self): + + fake_host_sys = fake.HostSystem( + fake.ManagedObjectReference("HostSystem", "host-123")) + + fake_host_id = fake_host_sys.obj.value + fake_host_name = "ha-host" + + ref = vm_util.get_host_ref_from_id( + fake_session([fake_host_sys]), fake_host_id, ['name']) + + self.assertIsInstance(ref, fake.HostSystem) + self.assertEqual(fake_host_id, ref.obj.value) + + host_name = vm_util.get_host_name_from_host_ref(ref) + + self.assertEquals(fake_host_name, host_name) + + def test_get_host_name_for_vm(self): + + fake_vm = fake.ManagedObject( + "VirtualMachine", fake.ManagedObjectReference( + "vm-123", "VirtualMachine")) + fake_vm.propSet.append( + fake.Property('name', 'vm-123')) + + vm_ref = vm_util.get_vm_ref_from_name( + fake_session([fake_vm]), 'vm-123') + + self.assertIsNotNone(vm_ref) + + fake_results = [ + fake.ObjectContent( + None, [ + fake.Property('runtime.host', + fake.ManagedObjectReference( + 'host-123', 'HostSystem')) + ])] + + host_id = vm_util.get_host_id_from_vm_ref( + fake_session(fake_results), vm_ref) + + self.assertEqual('host-123', host_id) + + def test_property_from_property_set(self): + + ObjectContent = namedtuple('ObjectContent', ['propSet']) + DynamicProperty = namedtuple('Property', ['name', 'val']) + MoRef = namedtuple('Val', ['value']) + + results_good = [ + ObjectContent(propSet=[ + DynamicProperty(name='name', val=MoRef(value='vm-123'))]), + ObjectContent(propSet=[ + DynamicProperty(name='foo', val=MoRef(value='bar1')), + DynamicProperty( + name='runtime.host', val=MoRef(value='host-123')), + DynamicProperty(name='foo', val=MoRef(value='bar2')), + ]), + ObjectContent(propSet=[ + DynamicProperty( + name='something', val=MoRef(value='thing'))]), ] + + results_bad = [ + ObjectContent(propSet=[ + DynamicProperty(name='name', val=MoRef(value='vm-123'))]), + ObjectContent(propSet=[ + DynamicProperty(name='foo', val='bar1'), + DynamicProperty(name='foo', val='bar2'), ]), + ObjectContent(propSet=[ + DynamicProperty( + name='something', val=MoRef(value='thing'))]), ] + + prop = vm_util.property_from_property_set( + 'runtime.host', results_good) + self.assertIsNotNone(prop) + value = prop.val.value + self.assertEqual('host-123', value) + + prop2 = vm_util.property_from_property_set( + 'runtime.host', results_bad) + self.assertIsNone(prop2) + + prop3 = vm_util.property_from_property_set('foo', results_good) + self.assertIsNotNone(prop3) + val3 = prop3.val.value + self.assertEqual('bar1', val3) + + prop4 = vm_util.property_from_property_set('foo', results_bad) + self.assertIsNotNone(prop4) + self.assertEqual('bar1', prop4.val) |