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:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user