From 8d64aee671e5eba4c78f289ea2d8231fa1911d61 Mon Sep 17 00:00:00 2001 From: Artom Lifshitz Date: Tue, 22 Jan 2019 14:47:50 -0500 Subject: [PATCH] Add NovaConfigClient to read nova.conf Adds a client that can read nova.conf files from the deployment and return config values. Change-Id: Ib7d8f92b0dc54c42e22654ac5e811c52afb30c3c --- whitebox_tempest_plugin/services/clients.py | 17 ++++++++++ whitebox_tempest_plugin/tests/test_clients.py | 32 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 whitebox_tempest_plugin/tests/test_clients.py diff --git a/whitebox_tempest_plugin/services/clients.py b/whitebox_tempest_plugin/services/clients.py index 2a27d87b..875c0fbd 100644 --- a/whitebox_tempest_plugin/services/clients.py +++ b/whitebox_tempest_plugin/services/clients.py @@ -13,6 +13,9 @@ # License for the specific language governing permissions and limitations # under the License. +import six.moves.configparser as configparser +from six import StringIO + from oslo_log import log as logging from tempest import config from tempest.lib.common import ssh @@ -57,3 +60,17 @@ class VirshXMLClient(SSHClient): def capabilities(self): command = sudo(in_container('nova_libvirt', 'virsh capabilities')) return self.execute(command) + + +class NovaConfigClient(SSHClient): + """A client to obtain config values from nova.conf.""" + + def _read_nova_conf(self): + command = sudo(in_container('nova_libvirt', + 'cat /etc/nova/nova.conf')) + return self.execute(command) + + def getopt(self, section, option): + config = configparser.ConfigParser() + config.readfp(StringIO(self._read_nova_conf())) + return config.get(section, option) diff --git a/whitebox_tempest_plugin/tests/test_clients.py b/whitebox_tempest_plugin/tests/test_clients.py new file mode 100644 index 00000000..d2ca8420 --- /dev/null +++ b/whitebox_tempest_plugin/tests/test_clients.py @@ -0,0 +1,32 @@ +# Copyright 2018 Red Hat +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import mock +import textwrap + +from whitebox_tempest_plugin.services import clients +from whitebox_tempest_plugin.tests import base + + +class ConfigClientTestCase(base.WhiteboxPluginTestCase): + + def test_getopt(self): + config_client = clients.NovaConfigClient('fake-host') + fake_config = textwrap.dedent(""" + [default] + fake-key = fake-value""").strip() + with mock.patch.object(config_client, '_read_nova_conf', + return_value=fake_config): + self.assertEqual(config_client.getopt('default', 'fake-key'), + 'fake-value')