From 51de6802f1a425067f813651cc98161ad6e5cc63 Mon Sep 17 00:00:00 2001 From: Ilya Shakhat Date: Wed, 2 Jan 2019 16:50:13 +0100 Subject: [PATCH] Add integration test for devstack cloud management driver Change-Id: Ia69a3e28d65289c561d240476514cf0536c39868 --- os_faults/api/node_collection.py | 3 ++ os_faults/drivers/cloud/devstack.py | 4 +- .../tests/devstack/os-faults-devstack.yaml | 8 ++++ os_faults/tests/devstack/test_lib.py | 44 ++++++++++++++++++- .../tests/devstack/test_os_inject_fault.py | 5 +++ .../tests/unit/api/test_node_collection.py | 3 ++ .../tests/unit/drivers/cloud/test_devstack.py | 4 +- 7 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 os_faults/tests/devstack/os-faults-devstack.yaml diff --git a/os_faults/api/node_collection.py b/os_faults/api/node_collection.py index e7350e7..6dc9ad7 100644 --- a/os_faults/api/node_collection.py +++ b/os_faults/api/node_collection.py @@ -85,6 +85,9 @@ class NodeCollection(utils.ReprMixin): for host in self.hosts: yield host + def __getitem__(self, item): + return self.hosts[item] + def _make_instance(self, hosts): return self.__class__(cloud_management=self.cloud_management, hosts=hosts) diff --git a/os_faults/drivers/cloud/devstack.py b/os_faults/drivers/cloud/devstack.py index cd182b2..2cf9cf8 100644 --- a/os_faults/drivers/cloud/devstack.py +++ b/os_faults/drivers/cloud/devstack.py @@ -22,7 +22,7 @@ from os_faults.drivers import shared_schemas LOG = logging.getLogger(__name__) -class DevStackNode(node_collection.NodeCollection): +class DevStackNodeCollection(node_collection.NodeCollection): def connect(self, network_name): raise NotImplementedError @@ -62,7 +62,7 @@ class DevStackCloudManagement(cloud_management.CloudManagement, NAME = 'devstack' DESCRIPTION = 'DevStack driver' - NODE_CLS = DevStackNode + NODE_CLS = DevStackNodeCollection SERVICES = { 'cinder-api': { 'driver': 'system_service', diff --git a/os_faults/tests/devstack/os-faults-devstack.yaml b/os_faults/tests/devstack/os-faults-devstack.yaml new file mode 100644 index 0000000..51ff5ae --- /dev/null +++ b/os_faults/tests/devstack/os-faults-devstack.yaml @@ -0,0 +1,8 @@ +cloud_management: + driver: devstack + args: + address: localhost + auth: + username: stack + private_key_file: os_faults_key + iface: lo diff --git a/os_faults/tests/devstack/test_lib.py b/os_faults/tests/devstack/test_lib.py index 3ba962a..4df189c 100644 --- a/os_faults/tests/devstack/test_lib.py +++ b/os_faults/tests/devstack/test_lib.py @@ -16,11 +16,10 @@ from oslotest import base import os_faults - LOG = logging.getLogger(__name__) -class TestOSFaultsLibrary(base.BaseTestCase): +class TestOSFaultsUniversalDriverLibrary(base.BaseTestCase): def test_connection_stack_user(self): cloud_config = { 'cloud_management': { @@ -46,3 +45,44 @@ class TestOSFaultsLibrary(base.BaseTestCase): LOG.info('# Verify connection to the cloud') cloud_management.verify() + + +class TestOSFaultsDevstackDriverLibrary(base.BaseTestCase): + def test_connection_stack_user(self): + address = 'localhost' + cloud_config = { + 'cloud_management': { + 'driver': 'devstack', + 'args': + { + 'address': address, + 'iface': 'lo', + 'auth': { + 'username': 'stack', + 'private_key_file': 'os_faults_key' + } + } + } + } + + LOG.info('# Create connection to the cloud') + cloud_management = os_faults.connect(cloud_config) + self.assertIsNotNone(cloud_management) + + LOG.info('# Verify connection to the cloud') + cloud_management.verify() + + nodes = cloud_management.get_nodes() + self.assertEqual(1, len(nodes)) + self.assertEqual(address, nodes[0].ip) + + service = cloud_management.get_service('etcd') + self.assertIsNotNone(service) + nodes = service.get_nodes() + self.assertEqual(1, len(nodes)) + self.assertEqual(address, nodes[0].ip) + + selection = nodes.pick() + self.assertIsNotNone(selection) + self.assertEqual(1, len(selection)) + self.assertEqual(address, selection[0].ip) diff --git a/os_faults/tests/devstack/test_os_inject_fault.py b/os_faults/tests/devstack/test_os_inject_fault.py index 52a42a0..16038c7 100644 --- a/os_faults/tests/devstack/test_os_inject_fault.py +++ b/os_faults/tests/devstack/test_os_inject_fault.py @@ -46,3 +46,8 @@ class TestOSInjectFaultUniversalDriver(test.TestCase): print('stderr', command_stderr) success = re.search('successfully', command_stderr) self.assertTrue(success) + + +class TestOSInjectFaultDevstackDriver(TestOSInjectFaultUniversalDriver): + CONFIG_FILE = os.path.join(os.path.dirname(__file__), + 'os-faults-devstack.yaml') diff --git a/os_faults/tests/unit/api/test_node_collection.py b/os_faults/tests/unit/api/test_node_collection.py index ba9d157..0cfc86c 100644 --- a/os_faults/tests/unit/api/test_node_collection.py +++ b/os_faults/tests/unit/api/test_node_collection.py @@ -122,6 +122,9 @@ class NodeCollectionTestCase(test.TestCase): def test_iter(self): self.assertEqual(self.hosts, list(self.node_collection)) + def test_getitem(self): + self.assertEqual(self.hosts[0], self.node_collection[0]) + def test_get_ips(self): self.assertEqual(['10.0.0.2', '10.0.0.3', '10.0.0.4', '10.0.0.5'], self.node_collection.get_ips()) diff --git a/os_faults/tests/unit/drivers/cloud/test_devstack.py b/os_faults/tests/unit/drivers/cloud/test_devstack.py index 047ce63..6aa0b92 100644 --- a/os_faults/tests/unit/drivers/cloud/test_devstack.py +++ b/os_faults/tests/unit/drivers/cloud/test_devstack.py @@ -30,7 +30,7 @@ class DevStackNodeTestCase(test.TestCase): self.host = node_collection.Host( ip='10.0.0.2', mac='09:7b:74:90:63:c1', fqdn='') - self.node_collection = devstack.DevStackNode( + self.node_collection = devstack.DevStackNodeCollection( cloud_management=self.mock_cloud_management, hosts=[copy.deepcopy(self.host)]) @@ -97,7 +97,7 @@ class DevStackManagementTestCase(test.TestCase): ansible_runner_inst.execute.assert_called_once_with( [self.host], {'command': 'cat /sys/class/net/eth0/address'}) - self.assertIsInstance(nodes, devstack.DevStackNode) + self.assertIsInstance(nodes, devstack.DevStackNodeCollection) self.assertEqual( [node_collection.Host(ip='10.0.0.2', mac='09:7b:74:90:63:c1', fqdn='')],