Fixing signature mismatch for spawn method
Nova was unable to spawn instances on compute nodes because of an argument not being passed. More specific, the 'spawn' method of the 'HyperVClusterDriver' class was called with 9 arguments, when the signature only had 8. This would raise an error as one of the arguments was receiving two values instead of one. The cluster driver public method signatures are now validated against the base Nova driver. This change fixes this issue. Change-Id: I086a5c6a859bc4fa2424e840cb390462d8cdff85
This commit is contained in:
parent
3ceacfdbbe
commit
38505fb1e8
|
@ -30,10 +30,11 @@ class HyperVClusterDriver(driver.HyperVDriver):
|
|||
self._clops.reclaim_failovered_instances()
|
||||
|
||||
def spawn(self, context, instance, image_meta, injected_files,
|
||||
admin_password, network_info=None, block_device_info=None):
|
||||
admin_password, allocations, network_info=None,
|
||||
block_device_info=None):
|
||||
super(HyperVClusterDriver, self).spawn(
|
||||
context, instance, image_meta, injected_files, admin_password,
|
||||
network_info, block_device_info)
|
||||
allocations, network_info, block_device_info)
|
||||
self._clops.add_to_cluster(instance)
|
||||
|
||||
def destroy(self, context, instance, network_info, block_device_info=None,
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
|
||||
import mock
|
||||
|
||||
from nova import safe_utils
|
||||
from nova.virt import driver as nova_base_driver
|
||||
|
||||
from compute_hyperv.nova.cluster import clusterops
|
||||
from compute_hyperv.nova.cluster import driver
|
||||
from compute_hyperv.nova import driver as base_driver
|
||||
|
@ -36,20 +39,37 @@ class HyperVClusterTestCase(test_base.HyperVBaseTestCase):
|
|||
self.driver = driver.HyperVClusterDriver(mock.sentinel.virtapi)
|
||||
self.driver._livemigrationops = mock.Mock()
|
||||
|
||||
def test_public_api_signatures(self):
|
||||
driver_methods = dict(driver.HyperVClusterDriver.__dict__,
|
||||
**base_driver.HyperVDriver.__dict__)
|
||||
|
||||
for attr in driver_methods:
|
||||
class_member = getattr(driver.HyperVClusterDriver, attr)
|
||||
if callable(class_member):
|
||||
mocked_method = mock.patch.object(
|
||||
driver.HyperVClusterDriver, attr,
|
||||
safe_utils.get_wrapped_function(class_member))
|
||||
mocked_method.start()
|
||||
self.addCleanup(mocked_method.stop)
|
||||
|
||||
self.assertPublicAPISignatures(nova_base_driver.ComputeDriver,
|
||||
driver.HyperVClusterDriver)
|
||||
|
||||
@mock.patch.object(base_driver.HyperVDriver, 'spawn')
|
||||
def test_spawn(self, mock_superclass_spawn):
|
||||
self.driver.spawn(self.context, mock.sentinel.fake_instance,
|
||||
mock.sentinel.image_meta,
|
||||
mock.sentinel.injected_files,
|
||||
mock.sentinel.admin_pass,
|
||||
mock.sentinel.allocations,
|
||||
mock.sentinel.network_info,
|
||||
mock.sentinel.block_dev_info)
|
||||
|
||||
mock_superclass_spawn.assert_called_once_with(
|
||||
self.context, mock.sentinel.fake_instance,
|
||||
mock.sentinel.image_meta, mock.sentinel.injected_files,
|
||||
mock.sentinel.admin_pass, mock.sentinel.network_info,
|
||||
mock.sentinel.block_dev_info)
|
||||
mock.sentinel.admin_pass, mock.sentinel.allocations,
|
||||
mock.sentinel.network_info, mock.sentinel.block_dev_info)
|
||||
self.driver._clops.add_to_cluster.assert_called_once_with(
|
||||
mock.sentinel.fake_instance)
|
||||
|
||||
|
|
Loading…
Reference in New Issue