Add missing config file read to tempest init
The update_local_conf() portion of tempest init was never reading the config file. In the case we prepopulate a tempest.conf from the global state /etc dir this would result in tempest init duplicating options and sections that already existed. This commit fixes the issue by simply reading the file before we do any operations. Also add test coverage to ensure existing settings are not overwritten. Co-authored-by: Augustina Ragwitz <auggy@cpan.org> Change-Id: Ie629df246fc40777f2017b78e4073ae833b64deb
This commit is contained in:
parent
2a472d8f25
commit
3c39bb6ef6
|
@ -89,18 +89,28 @@ class TempestInit(command.Command):
|
|||
with open(testr_conf_path, 'w+') as testr_conf_file:
|
||||
testr_conf_file.write(testr_conf)
|
||||
|
||||
def update_local_conf(self, conf_path, lock_dir, log_dir):
|
||||
def get_configparser(self, conf_path):
|
||||
config_parse = moves.configparser.SafeConfigParser()
|
||||
config_parse.optionxform = str
|
||||
with open(conf_path, 'a+') as conf_file:
|
||||
# Set local lock_dir in tempest conf
|
||||
if not config_parse.has_section('oslo_concurrency'):
|
||||
config_parse.add_section('oslo_concurrency')
|
||||
config_parse.set('oslo_concurrency', 'lock_path', lock_dir)
|
||||
# Set local log_dir in tempest conf
|
||||
config_parse.set('DEFAULT', 'log_dir', log_dir)
|
||||
# Set default log filename to tempest.log
|
||||
config_parse.set('DEFAULT', 'log_file', 'tempest.log')
|
||||
# get any existing values if a config file already exists
|
||||
if os.path.isfile(conf_path):
|
||||
# use read() for Python 2 and 3 compatibility
|
||||
config_parse.read(conf_path)
|
||||
return config_parse
|
||||
|
||||
def update_local_conf(self, conf_path, lock_dir, log_dir):
|
||||
config_parse = self.get_configparser(conf_path)
|
||||
# Set local lock_dir in tempest conf
|
||||
if not config_parse.has_section('oslo_concurrency'):
|
||||
config_parse.add_section('oslo_concurrency')
|
||||
config_parse.set('oslo_concurrency', 'lock_path', lock_dir)
|
||||
# Set local log_dir in tempest conf
|
||||
config_parse.set('DEFAULT', 'log_dir', log_dir)
|
||||
# Set default log filename to tempest.log
|
||||
config_parse.set('DEFAULT', 'log_file', 'tempest.log')
|
||||
|
||||
# write out a new file with the updated configurations
|
||||
with open(conf_path, 'w+') as conf_file:
|
||||
config_parse.write(conf_file)
|
||||
|
||||
def copy_config(self, etc_dir, config_dir):
|
||||
|
|
|
@ -45,6 +45,7 @@ class TestTempestInit(base.TestCase):
|
|||
init_cmd = init.TempestInit(None, None)
|
||||
local_sample_conf_file = os.path.join(etc_dir_path,
|
||||
'tempest.conf.sample')
|
||||
|
||||
# Verify no sample config file exist
|
||||
self.assertFalse(os.path.isfile(local_sample_conf_file))
|
||||
init_cmd.generate_sample_config(local_dir.path)
|
||||
|
@ -53,6 +54,52 @@ class TestTempestInit(base.TestCase):
|
|||
self.assertTrue(os.path.isfile(local_sample_conf_file))
|
||||
self.assertGreater(os.path.getsize(local_sample_conf_file), 0)
|
||||
|
||||
def test_update_local_conf(self):
|
||||
local_dir = self.useFixture(fixtures.TempDir())
|
||||
etc_dir_path = os.path.join(local_dir.path, 'etc/')
|
||||
os.mkdir(etc_dir_path)
|
||||
lock_dir = os.path.join(local_dir.path, 'tempest_lock')
|
||||
config_path = os.path.join(etc_dir_path, 'tempest.conf')
|
||||
log_dir = os.path.join(local_dir.path, 'logs')
|
||||
|
||||
init_cmd = init.TempestInit(None, None)
|
||||
|
||||
# Generate the config file
|
||||
init_cmd.generate_sample_config(local_dir.path)
|
||||
|
||||
# Create a conf file with populated values
|
||||
config_parser_pre = init_cmd.get_configparser(config_path)
|
||||
with open(config_path, 'w+') as conf_file:
|
||||
# create the same section init will check for and add values to
|
||||
config_parser_pre.add_section('oslo_concurrency')
|
||||
config_parser_pre.set('oslo_concurrency', 'TEST', local_dir.path)
|
||||
# create a new section
|
||||
config_parser_pre.add_section('TEST')
|
||||
config_parser_pre.set('TEST', 'foo', "bar")
|
||||
config_parser_pre.write(conf_file)
|
||||
|
||||
# Update the config file the same way tempest init does
|
||||
init_cmd.update_local_conf(config_path, lock_dir, log_dir)
|
||||
|
||||
# parse the new config file to verify it
|
||||
config_parser_post = init_cmd.get_configparser(config_path)
|
||||
|
||||
# check that our value in oslo_concurrency wasn't overwritten
|
||||
self.assertTrue(config_parser_post.has_section('oslo_concurrency'))
|
||||
self.assertEqual(config_parser_post.get('oslo_concurrency', 'TEST'),
|
||||
local_dir.path)
|
||||
# check that the lock directory was set correctly
|
||||
self.assertEqual(config_parser_post.get('oslo_concurrency',
|
||||
'lock_path'), lock_dir)
|
||||
|
||||
# check that our new section still exists and wasn't modified
|
||||
self.assertTrue(config_parser_post.has_section('TEST'))
|
||||
self.assertEqual(config_parser_post.get('TEST', 'foo'), 'bar')
|
||||
|
||||
# check that the DEFAULT values are correct
|
||||
# NOTE(auggy): has_section ignores DEFAULT
|
||||
self.assertEqual(config_parser_post.get('DEFAULT', 'log_dir'), log_dir)
|
||||
|
||||
def test_create_working_dir_with_existing_local_dir_non_empty(self):
|
||||
fake_local_dir = self.useFixture(fixtures.TempDir())
|
||||
fake_local_conf_dir = self.useFixture(fixtures.TempDir())
|
||||
|
|
Loading…
Reference in New Issue