Merge "Increase the unit test coverage of host_maintenance.py"

This commit is contained in:
Zuul 2018-12-07 03:03:38 +00:00 committed by Gerrit Code Review
commit bd71671572
3 changed files with 59 additions and 2 deletions

View File

@ -0,0 +1,9 @@
<ModelRoot>
<ComputeNode hostname="hostname_0" uuid="Node_0" id="0" state="up" human_id="" status="disabled" vcpus="40" disk="250" disk_capacity="250" disabled_reason='watcher_disabled' memory="64">
<Instance watcher_exclude="False" human_id="" state="active" uuid="INSTANCE_0" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
</ComputeNode>
<ComputeNode hostname="hostname_1" uuid="Node_1" id="1" state="up" human_id="" status="disabled" vcpus="40" disk="250" disk_capacity="250" disabled_reason='watcher_disabled' memory="64">
<Instance watcher_exclude="False" human_id="" state="active" uuid="INSTANCE_1" vcpus="10" disk="20" disk_capacity="20" memory="2" metadata='{"optimize": true,"top": "floor", "nested": {"x": "y"}}' project_id="91FFFE30-78A0-4152-ACD2-8310FF274DC9"/>
</ComputeNode>
</ModelRoot>

View File

@ -136,6 +136,9 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
def generate_scenario_1_with_1_node_unavailable(self):
return self.load_model('scenario_1_with_1_node_unavailable.xml')
def generate_scenario_1_with_all_nodes_disable(self):
return self.load_model('scenario_1_with_all_nodes_disable.xml')
def generate_scenario_1_with_all_instances_exclude(self):
return self.load_model('scenario_1_with_all_instances_exclude.xml')

View File

@ -20,6 +20,7 @@
import mock
from watcher.common import exception
from watcher.decision_engine.model import element
from watcher.decision_engine.model import model_root
from watcher.decision_engine.strategy import strategies
from watcher.tests import base
@ -60,6 +61,36 @@ class TestHostMaintenance(base.TestCase):
exception.ClusterStateNotDefined,
self.strategy.execute)
def test_get_instance_state_str(self):
mock_instance = mock.MagicMock(state="active")
self.assertEqual("active",
self.strategy.get_instance_state_str(mock_instance))
mock_instance.state = element.InstanceState("active")
self.assertEqual("active",
self.strategy.get_instance_state_str(mock_instance))
mock_instance.state = None
self.assertRaises(
exception.WatcherException,
self.strategy.get_instance_state_str,
mock_instance)
def test_get_node_status_str(self):
mock_node = mock.MagicMock(status="enabled")
self.assertEqual("enabled",
self.strategy.get_node_status_str(mock_node))
mock_node.status = element.ServiceState("enabled")
self.assertEqual("enabled",
self.strategy.get_node_status_str(mock_node))
mock_node.status = None
self.assertRaises(
exception.WatcherException,
self.strategy.get_node_status_str,
mock_node)
def test_get_node_capacity(self):
model = self.fake_cluster.generate_scenario_1()
self.m_model.return_value = model
@ -172,6 +203,11 @@ class TestHostMaintenance(base.TestCase):
self.assertFalse(self.strategy.safe_maintain(node_0))
self.assertFalse(self.strategy.safe_maintain(node_1))
model = self.fake_cluster.generate_scenario_1_with_all_nodes_disable()
self.m_model.return_value = model
node_0 = model.get_node_by_uuid('Node_0')
self.assertTrue(self.strategy.safe_maintain(node_0))
def test_try_maintain(self):
model = self.fake_cluster.generate_scenario_1()
self.m_model.return_value = model
@ -186,8 +222,14 @@ class TestHostMaintenance(base.TestCase):
node_2 = model.get_node_by_uuid('Node_2')
node_3 = model.get_node_by_uuid('Node_3')
instance_4 = model.get_instance_by_uuid("INSTANCE_4")
if not self.strategy.safe_maintain(node_2, node_3):
self.strategy.try_maintain(node_2)
result = self.strategy.pre_execute()
self.assertIsNone(result)
self.strategy.input_parameters = {"maintenance_node": 'Node_2',
"backup_node": 'Node_3'}
self.strategy.do_execute()
expected = [{'action_type': 'change_nova_service_state',
'input_parameters': {
'resource_id': 'Node_3',
@ -204,3 +246,6 @@ class TestHostMaintenance(base.TestCase):
'migration_type': 'live',
'resource_id': instance_4.uuid}}]
self.assertEqual(expected, self.strategy.solution.actions)
result = self.strategy.post_execute()
self.assertIsNone(result)