Add integration test for devstack cloud management driver

Change-Id: Ia69a3e28d65289c561d240476514cf0536c39868
This commit is contained in:
Ilya Shakhat 2019-01-02 16:50:13 +01:00
parent ff78b92048
commit 51de6802f1
7 changed files with 65 additions and 6 deletions

View File

@ -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)

View File

@ -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',

View File

@ -0,0 +1,8 @@
cloud_management:
driver: devstack
args:
address: localhost
auth:
username: stack
private_key_file: os_faults_key
iface: lo

View File

@ -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)

View File

@ -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')

View File

@ -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())

View File

@ -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='')],