python-tempestconf/config_tempest/tests/test_tempest_conf.py
Martin Kopec 3a4c6c7f6f Add argument which allows users to add extensions
--append argument appends a value or values to the specified
section.key pair. It may be helpful in cases when a user wants
to add custom extensions to tempest.conf in an automated job.

Change-Id: I116f4456823913f21b5f8f01ff2b14d42ec67dc2
Story: 2004429
Task: 28088
2018-12-17 16:43:05 +00:00

166 lines
7.1 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2018 Red Hat, Inc.
# All Rights Reserved.
#
# 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
from config_tempest import tempest_conf
from config_tempest.tests.base import BaseConfigTempestTest
class TestTempestConf(BaseConfigTempestTest):
def setUp(self):
super(TestTempestConf, self).setUp()
self.conf = tempest_conf.TempestConf()
def test_set_value(self):
conf = self._get_conf("v2.0", "v3")
resp = conf.set("section", "key", "value")
self.assertTrue(resp)
self.assertEqual(conf.get("section", "key"), "value")
self.assertEqual(conf.get_defaulted("section", "key"), "value")
def test_set_value_overwrite(self):
conf = self._get_conf("v2.0", "v3")
# set value without priority (default: priority=False)
resp = conf.set("section", "key", "value")
self.assertTrue(resp)
self.assertEqual(conf.get("section", "key"), "value")
# value should be overwritten, because it wasn't set with priority
resp = conf.set("section", "key", "new_value")
self.assertTrue(resp)
self.assertEqual(conf.get("section", "key"), "new_value")
def test_set_value_overwrite_priority(self):
conf = self._get_conf("v2.0", "v3")
resp = conf.set("sectionPriority", "key", "value", priority=True)
resp = conf.set("sectionPriority", "key", "new_value")
self.assertFalse(resp)
self.assertEqual(conf.get("sectionPriority", "key"), "value")
def test_set_value_overwrite_by_priority(self):
conf = self._get_conf("v2.0", "v3")
resp = conf.set("section", "key", "value")
self.assertTrue(resp)
self.assertEqual(conf.get("section", "key"), "value")
resp = conf.set("section", "key", "new_value", priority=True)
self.assertTrue(resp)
self.assertEqual(conf.get("section", "key"), "new_value")
def test_set_value_overwrite_priority_by_priority(self):
conf = self._get_conf("v2.0", "v3")
resp = conf.set("sectionPriority", "key", "value", priority=True)
self.assertTrue(resp)
self.assertEqual(conf.get("sectionPriority", "key"), "value")
resp = conf.set("sectionPriority", "key", "new_value", priority=True)
self.assertTrue(resp)
self.assertEqual(conf.get("sectionPriority", "key"), "new_value")
def test_get_bool_value(self):
self.assertTrue(self.conf.get_bool_value("True"))
self.assertFalse(self.conf.get_bool_value("False"))
self.assertRaises(ValueError, self.conf.get_bool_value, "no")
def test_remove_values(self):
api_exts = "router_availability_zone,rbac-policies,pagination,sorting,"
api_exts += "standard-attr-description,router,binding,metering,"
api_exts += "allowed-address-pairs,project-id,dvr,l3-flavors,tag-ext"
remove_exts = ["router", "project-id", "dvr"]
remove = {
"identity.username": ["demo"],
"identity.project_name": ["project"],
"compute.image_ssh_user": ["rhel", "cirros"],
"network-feature-enabled.api_extensions": remove_exts
}
conf = self._get_conf("v2.0", "v3")
conf.set("compute", "image_ssh_user", "cirros")
conf.set("network-feature-enabled", "api_extensions", api_exts)
conf.remove_values(remove)
self.assertFalse(conf.has_option("identity", "username"))
self.assertTrue(conf.has_option("identity", "project_name"))
self.assertFalse(conf.has_option("compute", "image_ssh_user"))
conf_exts = conf.get("network-feature-enabled", "api_extensions")
conf_exts = conf_exts.split(',')
for ext in api_exts.split(','):
if ext in remove_exts:
self.assertFalse(ext in conf_exts)
else:
self.assertTrue(ext in conf_exts)
def test_remove_values_having_hyphen(self):
api_exts = "dvr,l3-flavors,rbac-policies,project-id"
remove_exts = ["dvr", "project-id"]
remove = {
"network-feature-enabled.api_extensions": remove_exts
}
conf = self._get_conf("v2.0", "v3")
conf.set("network-feature-enabled", "api_extensions", api_exts)
conf.remove_values(remove)
conf_exts = conf.get("network-feature-enabled", "api_extensions")
conf_exts = conf_exts.split(',')
for ext in api_exts.split(','):
if ext in remove_exts:
self.assertFalse(ext in conf_exts)
else:
self.assertTrue(ext in conf_exts)
@mock.patch('config_tempest.tempest_conf.C.LOG')
def test_remove_not_defined_values(self, mock_logging):
self.conf.remove_values({"notExistSection.key": []})
# check if LOG.error was called
self.assertTrue(mock_logging.error.called)
self.conf.remove_values({"section.notExistKey": []})
# check if LOG.error was called
self.assertTrue(mock_logging.error.called)
def test_append_values(self):
api_exts = "dvr,l3-flavors,rbac-policies"
add_exts = ["dvr", "project-id"]
add = {
"compute-feature-enabled.api_extensions": add_exts
}
self.conf = self._get_conf("v2.0", "v3")
self.conf.set("compute-feature-enabled", "api_extensions", api_exts)
self.conf.append_values(add)
conf_exts = self.conf.get("compute-feature-enabled", "api_extensions")
conf_exts = conf_exts.split(',')
self.assertEqual(len(conf_exts), 4)
self.assertTrue("project-id" in conf_exts)
def test_append_values_with_overrides(self):
# Test if --add option can override an option which was
# passed to python-tempestconf as an override, it shouldn't
api_exts = "dvr,l3-flavors,rbac-policies"
add_exts = ["dvr", "project-id"]
add = {
"compute-feature-enabled.api_extensions": add_exts
}
self.conf = self._get_conf("v2.0", "v3")
# let's simulate a situation when the following apis were set
# via overrides => they are set with the priority
self.conf.set("compute-feature-enabled", "api_extensions",
api_exts, priority=True)
self.conf.append_values(add)
conf_exts = self.conf.get("compute-feature-enabled", "api_extensions")
conf_exts = conf_exts.split(',')
# if there are still 3 extensions, no new was added
self.assertEqual(len(conf_exts), 3)
# option added via --add shouldn't be there
self.assertFalse("project-id" in conf_exts)
self.assertTrue("dvr" in conf_exts)
self.assertTrue("l3-flavors" in conf_exts)
self.assertTrue("rbac-policies" in conf_exts)