Fix temp file locking issues in tests

We were not properly mocking out the git initialization in the test so
this could cause issues in CI when multiple threads attempt to use the
same folder. This change mocks out the git initialization and adds
coverage for the git initialization function.

Change-Id: I5e6cd6cead12da8df8b366e4aa83d7c63d722369
Closes-Bug: #1796745
This commit is contained in:
Alex Schultz
2018-10-08 15:11:31 -06:00
parent 1d17a99925
commit 062f5e480f

View File

@@ -12,6 +12,7 @@
import datetime
import fixtures
import git
import mock
import os
import uuid
@@ -32,6 +33,7 @@ class TestConfig(base.TestCase):
def setUp(self):
super(TestConfig, self).setUp()
@patch.object(ooo_config.Config, 'initialize_git_repo')
@patch.object(ooo_config.shutil, 'copyfile')
@patch.object(ooo_config.Config, '_mkdir')
@patch.object(ooo_config.Config, '_open_file')
@@ -40,7 +42,8 @@ class TestConfig(base.TestCase):
mock_rmtree,
mock_open,
mock_mkdir,
mock_copyfile):
mock_copyfile,
mock_git_init):
config_type_list = ['config_settings', 'global_config_settings',
'logging_sources', 'monitoring_subscriptions',
'service_config_settings',
@@ -56,6 +59,7 @@ class TestConfig(base.TestCase):
self.config = ooo_config.Config(heat)
self.config.download_config('overcloud', '/tmp/tht', config_type_list)
mock_git_init.assert_called_once_with('/tmp/tht')
expected_mkdir_calls = [call('/tmp/tht/%s' % r) for r in fake_role]
mock_mkdir.assert_has_calls(expected_mkdir_calls, any_order=True)
expected_calls = []
@@ -71,6 +75,7 @@ class TestConfig(base.TestCase):
(role, config))]
mock_open.assert_has_calls(expected_calls, any_order=True)
@patch.object(ooo_config.Config, 'initialize_git_repo')
@patch.object(ooo_config.shutil, 'copyfile')
@patch.object(ooo_config.Config, '_mkdir')
@patch.object(ooo_config.Config, '_open_file')
@@ -79,7 +84,8 @@ class TestConfig(base.TestCase):
mock_rmtree,
mock_open,
mock_mkdir,
mock_copyfile):
mock_copyfile,
mock_git_init):
expected_config_type = 'config_settings'
fake_role = [role for role in
@@ -96,6 +102,7 @@ class TestConfig(base.TestCase):
for r in fake_role]
mock_mkdir.assert_has_calls(expected_mkdir_calls, any_order=True)
mock_open.assert_has_calls(expected_calls, any_order=True)
mock_git_init.assert_called_once_with('/tmp/tht')
@patch.object(ooo_config.git, 'Repo')
@mock.patch('os.mkdir')
@@ -239,9 +246,11 @@ class TestConfig(base.TestCase):
file_name)
return yaml.safe_load(open(file_path).read())
@patch.object(ooo_config.Config, 'initialize_git_repo')
@patch('tripleo_common.utils.config.Config.get_config_dict')
@patch('tripleo_common.utils.config.Config.get_deployment_data')
def test_config_download(self, mock_deployment_data, mock_config_dict):
def test_config_download(self, mock_deployment_data, mock_config_dict,
mock_git_init):
heat = mock.MagicMock()
self.config = ooo_config.Config(heat)
stack = mock.MagicMock()
@@ -286,6 +295,7 @@ class TestConfig(base.TestCase):
self.tmp_dir = self.useFixture(fixtures.TempDir()).path
tmp_path = self.config.download_config(stack, self.tmp_dir)
mock_git_init.assert_called_once_with(self.tmp_dir)
for f in ['Controller',
'Compute', ]:
@@ -344,10 +354,11 @@ class TestConfig(base.TestCase):
'overcloud-novacompute-2',
d)))
@patch.object(ooo_config.Config, 'initialize_git_repo')
@patch('tripleo_common.utils.config.Config.get_config_dict')
@patch('tripleo_common.utils.config.Config.get_deployment_data')
def test_config_download_os_apply_config(
self, mock_deployment_data, mock_config_dict):
self, mock_deployment_data, mock_config_dict, mock_git_init):
heat = mock.MagicMock()
self.config = ooo_config.Config(heat)
stack = mock.MagicMock()
@@ -411,12 +422,15 @@ class TestConfig(base.TestCase):
self.tmp_dir = self.useFixture(fixtures.TempDir()).path
with warnings.catch_warnings(record=True) as w:
self.config.download_config(stack, self.tmp_dir)
mock_git_init.assert_called_once_with(self.tmp_dir)
self.assertEqual(1, len(w))
assert issubclass(w[-1].category, DeprecationWarning)
assert "group:os-apply-config is deprecated" in str(w[-1].message)
@patch.object(ooo_config.Config, 'initialize_git_repo')
@patch('tripleo_common.utils.config.Config.get_deployment_data')
def test_config_download_no_deployment_name(self, mock_deployment_data):
def test_config_download_no_deployment_name(self, mock_deployment_data,
mock_git_init):
heat = mock.MagicMock()
self.config = ooo_config.Config(heat)
stack = mock.MagicMock()
@@ -433,7 +447,9 @@ class TestConfig(base.TestCase):
self.tmp_dir = self.useFixture(fixtures.TempDir()).path
self.assertRaises(ValueError,
self.config.download_config, stack, self.tmp_dir)
mock_git_init.assert_called_once_with(self.tmp_dir)
@patch.object(ooo_config.Config, 'initialize_git_repo')
@patch.object(ooo_config.git, 'Repo')
@patch.object(ooo_config.shutil, 'copyfile')
@patch.object(ooo_config.Config, '_mkdir')
@@ -446,7 +462,8 @@ class TestConfig(base.TestCase):
mock_open,
mock_mkdir,
mock_copyfile,
mock_repo):
mock_repo,
mock_git_init):
config_type_list = ['config_settings', 'global_config_settings',
'logging_sources', 'monitoring_subscriptions',
'service_config_settings',
@@ -464,6 +481,7 @@ class TestConfig(base.TestCase):
self.config.download_config('overcloud', '/tmp/tht', config_type_list,
False)
mock_git_init.assert_called_once_with('/tmp/tht')
expected_rmtree_calls = [call('/tmp/tht')]
mock_rmtree.assert_has_calls(expected_rmtree_calls)
@@ -493,6 +511,14 @@ class TestConfig(base.TestCase):
expected_rmtree_calls = [call('/tmp/tht')]
mock_rmtree.assert_has_calls(expected_rmtree_calls)
def test_initialize_git_repo(self):
heat = mock.MagicMock()
heat.stacks.get.return_value = fakes.create_tht_stack()
self.config = ooo_config.Config(heat)
self.tmp_dir = self.useFixture(fixtures.TempDir()).path
repo = self.config.initialize_git_repo(self.tmp_dir)
self.assertIsInstance(repo, git.Repo)
@patch('tripleo_common.utils.config.Config.get_config_dict')
@patch('tripleo_common.utils.config.Config.get_deployment_data')
def test_write_config(self, mock_deployment_data, mock_config_dict):