diff options
Diffstat (limited to 'dovetail/tests/unit/utils')
-rw-r--r-- | dovetail/tests/unit/utils/test_dovetail_config.py | 2 | ||||
-rw-r--r-- | dovetail/tests/unit/utils/test_dovetail_logger.py | 8 | ||||
-rw-r--r-- | dovetail/tests/unit/utils/test_dovetail_utils.py | 219 |
3 files changed, 137 insertions, 92 deletions
diff --git a/dovetail/tests/unit/utils/test_dovetail_config.py b/dovetail/tests/unit/utils/test_dovetail_config.py index c7ac5b96..8e835f49 100644 --- a/dovetail/tests/unit/utils/test_dovetail_config.py +++ b/dovetail/tests/unit/utils/test_dovetail_config.py @@ -39,7 +39,7 @@ class DovetailConfigTesting(unittest.TestCase): dovetail_cfg.set_leaf_dict(dict_to_test, ['aa', 'bb', 'cc'], 'val') - self.assertEquals({'aa': {'bb': {'cc': 'val'}}}, dict_to_test) + self.assertEqual({'aa': {'bb': {'cc': 'val'}}}, dict_to_test) @patch.object(DovetailConfig, 'set_leaf_dict') @patch.object(DovetailConfig, 'dovetail_config') diff --git a/dovetail/tests/unit/utils/test_dovetail_logger.py b/dovetail/tests/unit/utils/test_dovetail_logger.py index a8867890..a70c0503 100644 --- a/dovetail/tests/unit/utils/test_dovetail_logger.py +++ b/dovetail/tests/unit/utils/test_dovetail_logger.py @@ -49,7 +49,7 @@ class DovetailLoggerTesting(unittest.TestCase): logger_name = 'name' dovetail_logger = Logger(logger_name) mock_logging.getLogger.assert_called_once_with(logger_name) - self.assertEquals(dovetail_logger.logger.propagate, 0) + self.assertEqual(dovetail_logger.logger.propagate, 0) logger.setLevel.assert_called_once_with(level_const_debug) mock_os.path.exists.assert_called_once_with(file_path) # mock_os.makedirs.assert_called_once_with(file_path) @@ -60,7 +60,7 @@ class DovetailLoggerTesting(unittest.TestCase): file_handler_obj.setLevel.assert_called_once_with(level_const_info) logger.addHandler.assert_has_calls([ call(stream_handler_obj), call(file_handler_obj)]) - self.assertEquals(dovetail_logger.getLogger(), logger) + self.assertEqual(dovetail_logger.getLogger(), logger) @patch('sys.stdout') @patch('dovetail.utils.dovetail_logger.os') @@ -84,7 +84,7 @@ class DovetailLoggerTesting(unittest.TestCase): logger_name = 'name' dovetail_logger = Logger(logger_name) mock_logging.getLogger.assert_called_once_with(logger_name) - self.assertEquals(dovetail_logger.logger.propagate, 0) + self.assertEqual(dovetail_logger.logger.propagate, 0) logger.setLevel.assert_called_once_with(level_const_debug) mock_os.path.exists.assert_called_once_with(file_path) # mock_os.makedirs.assert_called_once_with(file_path) @@ -95,4 +95,4 @@ class DovetailLoggerTesting(unittest.TestCase): file_handler_obj.setLevel.assert_called_once_with(level_const_debug) logger.addHandler.assert_has_calls([ call(stream_handler_obj), call(file_handler_obj)]) - self.assertEquals(dovetail_logger.getLogger(), logger) + self.assertEqual(dovetail_logger.getLogger(), logger) diff --git a/dovetail/tests/unit/utils/test_dovetail_utils.py b/dovetail/tests/unit/utils/test_dovetail_utils.py index 0f0e14f3..7d1fddc1 100644 --- a/dovetail/tests/unit/utils/test_dovetail_utils.py +++ b/dovetail/tests/unit/utils/test_dovetail_utils.py @@ -27,7 +27,7 @@ class DovetailUtilsTesting(unittest.TestCase): pass @patch('sys.stdout') - @patch('__builtin__.print') + @patch('builtins.print') def test_exec_log_no_verbose(self, mock_print, mock_stdout): dovetail_utils.exec_log(verbose=False, logger=None, msg='', level='info', flush=True) @@ -36,7 +36,7 @@ class DovetailUtilsTesting(unittest.TestCase): mock_stdout.flush.assert_not_called() @patch('sys.stdout') - @patch('__builtin__.print') + @patch('builtins.print') def test_exec_log_no_logger_flush(self, mock_print, mock_stdout): message = 'message' @@ -47,7 +47,7 @@ class DovetailUtilsTesting(unittest.TestCase): mock_stdout.flush.assert_called_once() @patch('sys.stdout') - @patch('__builtin__.print') + @patch('builtins.print') def test_exec_log_no_logger_no_flush(self, mock_print, mock_stdout): message = 'message' @@ -134,7 +134,7 @@ class DovetailUtilsTesting(unittest.TestCase): .format(file_path)) self.assertEqual(expected, result) - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path', autospec=True) def test_read_plain_file(self, mock_path, mock_open): file_path = 'known_file' @@ -149,7 +149,7 @@ class DovetailUtilsTesting(unittest.TestCase): mock_open.assert_called_once_with(file_path, 'r') self.assertEqual(expected, result) - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path', autospec=True) def test_read_plain_file_raised_exception(self, mock_path, mock_open): logger = Mock() @@ -182,7 +182,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('yaml.safe_load') - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path', autospec=True) def test_read_yaml_file(self, mock_path, mock_open, mock_load): file_obj = Mock() @@ -200,7 +200,7 @@ class DovetailUtilsTesting(unittest.TestCase): mock_load.assert_called_once_with(file_obj) self.assertEqual(expected, result) - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path', autospec=True) def test_read_yaml_file_raised_exception(self, mock_path, mock_open): logger = Mock() @@ -227,7 +227,7 @@ class DovetailUtilsTesting(unittest.TestCase): mock_path.isfile.return_value = False logger = Mock() - expected = '' + expected = {} result = dovetail_utils.get_hosts_info(logger) mock_path.join.assert_called_once_with(file_path, 'hosts.yaml') @@ -235,7 +235,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('yaml.safe_load') - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path', autospec=True) def test_get_hosts_info_not_yaml(self, mock_path, mock_open, mock_load): file_path = 'file_path' @@ -248,7 +248,7 @@ class DovetailUtilsTesting(unittest.TestCase): mock_load.return_value = None logger = Mock() - expected = '' + expected = {} result = dovetail_utils.get_hosts_info(logger) mock_path.join.assert_called_once_with(file_path, 'hosts.yaml') @@ -260,7 +260,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('yaml.safe_load') - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path', autospec=True) def test_get_hosts_info_no_hosts_info(self, mock_path, mock_open, mock_load): @@ -274,7 +274,7 @@ class DovetailUtilsTesting(unittest.TestCase): mock_load.return_value = {'a': 'b'} logger = Mock() - expected = '' + expected = {} result = dovetail_utils.get_hosts_info(logger) mock_path.join.assert_called_once_with(file_path, 'hosts.yaml') @@ -287,7 +287,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('yaml.safe_load') - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path', autospec=True) def test_get_hosts_info_no_hostname(self, mock_path, mock_open, mock_load): file_path = 'file_path' @@ -299,7 +299,7 @@ class DovetailUtilsTesting(unittest.TestCase): mock_open.return_value.__enter__.return_value = file_obj mock_load.return_value = {'hosts_info': {'127.0.0.1': []}} - expected = '' + expected = {} result = dovetail_utils.get_hosts_info() mock_path.join.assert_called_once_with(file_path, 'hosts.yaml') @@ -310,7 +310,7 @@ class DovetailUtilsTesting(unittest.TestCase): @patch('dovetail.utils.dovetail_utils.add_hosts_info') @patch('yaml.safe_load') - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path', autospec=True) def test_get_hosts_info_no_valid_hostname(self, mock_path, mock_open, mock_load, mock_fn): @@ -324,20 +324,20 @@ class DovetailUtilsTesting(unittest.TestCase): hosts_info = {'127.0.0.1': [None]} mock_load.return_value = {'hosts_info': hosts_info} - expected = '' + expected = {} result = dovetail_utils.get_hosts_info() mock_path.join.assert_called_once_with(file_path, 'hosts.yaml') mock_path.isfile.assert_called_once_with(file_complete_name) mock_open.assert_called_once_with(file_complete_name) mock_load.assert_called_once_with(file_obj) - mock_fn.assert_called_once_with(hosts_info.keys()[0], - hosts_info.values()[0]) + mock_fn.assert_called_once_with(list(hosts_info.keys())[0], + list(hosts_info.values())[0]) self.assertEqual(expected, result) @patch('dovetail.utils.dovetail_utils.add_hosts_info') @patch('yaml.safe_load') - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path', autospec=True) def test_get_hosts_info(self, mock_path, mock_open, mock_load, mock_fn): file_path = 'file_path' @@ -353,7 +353,7 @@ class DovetailUtilsTesting(unittest.TestCase): logger = Mock() names_str = ' '.join(hostnames) - expected = ' --add-host=\'{}\':{} '.format(names_str, hosts_ip) + expected = {names_str: hosts_ip} result = dovetail_utils.get_hosts_info(logger) mock_path.join.assert_called_once_with(file_path, 'hosts.yaml') @@ -430,7 +430,7 @@ class DovetailUtilsTesting(unittest.TestCase): date = '2018-08-10 05:12:27' logger = Mock() - expected = '0m0s' + expected = '0.0m0s' result = dovetail_utils.get_duration(date, date, logger) self.assertEqual(expected, result) @@ -510,15 +510,12 @@ class DovetailUtilsTesting(unittest.TestCase): hosts_obj.add.assert_called_once_with([entry_obj]) hosts_obj.write.assert_called_once() - @patch('dovetail.utils.dovetail_utils.objwalk') - def test_get_obj_by_path(self, mock_walk): - path = dist_path = 'path' - obj = 'obj' - mock_walk.return_value = [(path, obj)] - - expected = obj - result = dovetail_utils.get_obj_by_path(obj, dist_path) + def test_get_obj_by_path(self): + obj = {'list': ['a', 'b'], 'name': 'name'} + dst_path = ('name',) + expected = 'name' + result = dovetail_utils.get_obj_by_path(obj, dst_path) self.assertEqual(expected, result) @patch('dovetail.utils.dovetail_utils.objwalk') @@ -533,7 +530,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.environ') def test_source_env(self, mock_env, mock_open): file_path = 'file_path' @@ -547,68 +544,47 @@ class DovetailUtilsTesting(unittest.TestCase): mock_open.assert_called_once_with(file_path, 'r') mock_env.update.assert_called_once_with({env_name: env_value}) - @patch('dovetail.utils.dovetail_utils.exec_cmd') - def test_check_docker_version(self, mock_exec): - server_version = client_version = '1.12.3' - server_ret = client_ret = 0 - mock_exec.side_effect = [(server_ret, server_version), - (client_ret, client_version)] + @patch('dovetail.utils.dovetail_utils.docker') + def test_check_docker_version(self, mock_docker): + server_version = '1.12.3' + client_obj = Mock() + mock_docker.from_env.return_value = client_obj + client_obj.version.return_value = {'Version': server_version} logger = Mock() dovetail_utils.check_docker_version(logger) - mock_exec.assert_has_calls( - [call("sudo docker version -f'{{.Server.Version}}'", - logger=logger), - call("sudo docker version -f'{{.Client.Version}}'", - logger=logger)]) logger.debug.assert_has_calls( - [call('docker server version: {}'.format(server_version)), - call('docker client version: {}'.format(client_version))]) + [call('Docker server version: {}'.format(server_version))]) - @patch('dovetail.utils.dovetail_utils.exec_cmd') - def test_check_docker_version_error(self, mock_exec): - server_version = client_version = '1.12.3' - server_ret = client_ret = 1 - mock_exec.side_effect = [(server_ret, server_version), - (client_ret, client_version)] + @patch('dovetail.utils.dovetail_utils.docker') + def test_check_docker_version_error(self, mock_docker): + client_obj = Mock() + mock_docker.from_env.return_value = client_obj + client_obj.version.return_value = {} logger = Mock() dovetail_utils.check_docker_version(logger) - mock_exec.assert_has_calls( - [call("sudo docker version -f'{{.Server.Version}}'", - logger=logger), - call("sudo docker version -f'{{.Client.Version}}'", - logger=logger)]) logger.error.assert_has_calls( [call("Don't support this Docker server version. " - "Docker server should be updated to at least 1.12.3."), - call("Don't support this Docker client version. " - "Docker client should be updated to at least 1.12.3.")]) - - @patch('dovetail.utils.dovetail_utils.exec_cmd') - def test_check_docker_version_less_than(self, mock_exec): - server_version = client_version = '1.12.1' - server_ret = client_ret = 0 - mock_exec.side_effect = [(server_ret, server_version), - (client_ret, client_version)] + "Docker server should be updated to at least 1.12.3.")]) + + @patch('dovetail.utils.dovetail_utils.docker') + def test_check_docker_version_less_than(self, mock_docker): + server_version = '1.12.1' + client_obj = Mock() + mock_docker.from_env.return_value = client_obj + client_obj.version.return_value = {'Version': server_version} logger = Mock() dovetail_utils.check_docker_version(logger) - mock_exec.assert_has_calls( - [call("sudo docker version -f'{{.Server.Version}}'", - logger=logger), - call("sudo docker version -f'{{.Client.Version}}'", - logger=logger)]) logger.error.assert_has_calls( [call("Don't support this Docker server version. " - "Docker server should be updated to at least 1.12.3."), - call("Don't support this Docker client version. " - "Docker client should be updated to at least 1.12.3.")]) + "Docker server should be updated to at least 1.12.3.")]) - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path') @patch('os.listdir') @patch('json.load') @@ -640,7 +616,7 @@ class DovetailUtilsTesting(unittest.TestCase): file_obj.write.assert_called_once_with(file_content_str) self.assertEqual(expected, result) - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path') @patch('os.listdir') def test_combine_files_read_exception(self, mock_listdir, mock_path, @@ -663,7 +639,7 @@ class DovetailUtilsTesting(unittest.TestCase): 'Failed to read file {}.'.format(file_complete_name)) self.assertEqual(expected, result) - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path') @patch('os.listdir') @patch('json.load') @@ -699,7 +675,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('json.dump') - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path') @patch('dovetail.utils.dovetail_utils.check_https_enabled') @patch('os.getenv') @@ -818,7 +794,7 @@ class DovetailUtilsTesting(unittest.TestCase): .format(services_exception_msg)) self.assertEqual(expected, result) - @patch('__builtin__.open') + @patch('builtins.open') @patch('os.path') @patch('dovetail.utils.dovetail_utils.check_https_enabled') @patch('os.getenv') @@ -1050,7 +1026,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('os.path') - @patch('__builtin__.open') + @patch('builtins.open') @patch('yaml.safe_load') def test_get_inventory_password(self, mock_load, mock_open, mock_path): name = 'name' @@ -1089,7 +1065,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('os.path') - @patch('__builtin__.open') + @patch('builtins.open') @patch('yaml.safe_load') def test_get_inventory_key_filename(self, mock_load, mock_open, mock_path): name = 'name' @@ -1133,7 +1109,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('os.path') - @patch('__builtin__.open') + @patch('builtins.open') @patch('yaml.safe_load') def test_get_inventory_other(self, mock_load, mock_open, mock_path): name = 'name' @@ -1166,7 +1142,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('os.path') - @patch('__builtin__.open') + @patch('builtins.open') @patch('yaml.safe_load') def test_get_inventory_keyerror(self, mock_load, mock_open, mock_path): name = 'name' @@ -1197,7 +1173,7 @@ class DovetailUtilsTesting(unittest.TestCase): self.assertEqual(expected, result) @patch('os.path') - @patch('__builtin__.open') + @patch('builtins.open') def test_get_inventory_exception(self, mock_open, mock_path): inventory_file_name = 'inventory' pod_file_name = 'pod' @@ -1254,9 +1230,9 @@ class DovetailUtilsTesting(unittest.TestCase): subp_stdout = Mock() subprocess_obj.stdout = subp_stdout subprocess_obj.wait.return_value = 0 - subp_stdout.readline.side_effect = [cmd_output, ''] + subp_stdout.readline.side_effect = [cmd_output.encode()] - expected = (0, 'line') + expected = (0, "b'line'") result = dovetail_utils.exec_cmd( cmd, logger=logger, exit_on_error=True, info=False, exec_msg_on=True, err_msg='', verbose=verbose, @@ -1272,7 +1248,7 @@ class DovetailUtilsTesting(unittest.TestCase): subp_stdout.close.assert_called_once_with() subprocess_obj.wait.assert_called_once_with() mock_getenv.assert_called_once_with('DEBUG') - mock_bar.assert_called_once_with(1) + # mock_bar.assert_called_once_with(1) self.assertEqual(expected, result) @patch('sys.exit') @@ -1297,7 +1273,7 @@ class DovetailUtilsTesting(unittest.TestCase): subp_stdout = Mock() subprocess_obj.stdout = subp_stdout subprocess_obj.wait.return_value = 1 - subp_stdout.readline.side_effect = [cmd_output, ''] + subp_stdout.readline.side_effect = [cmd_output.encode()] dovetail_utils.exec_cmd( cmd, logger=logger, exit_on_error=True, info=False, @@ -1315,7 +1291,7 @@ class DovetailUtilsTesting(unittest.TestCase): subp_stdout.close.assert_called_once_with() subprocess_obj.wait.assert_called_once_with() mock_getenv.assert_called_once_with('DEBUG') - mock_bar.assert_called_once_with(1) + # mock_bar.assert_called_once_with(1) mock_exit.assert_called_once_with(1) @patch('os.path', autospec=True) @@ -1355,3 +1331,72 @@ class DovetailUtilsTesting(unittest.TestCase): mock_host.assert_called_once() mock_endpoint.assert_called_once() mock_hardware.assert_called_once() + + @patch('json.dumps') + @patch('dovetail.utils.dovetail_utils.requests') + @patch('os.getenv') + def test_push_results_to_db(self, mock_getenv, mock_requests, mock_dumps): + logger = Mock() + case_name = 'case_name' + details = {'criteria': 'PASS'} + start_date = 'start_date' + stop_date = 'stop_date' + mock_getenv.side_effect = [ + 'url', 'installer', 'scenario', 'pod_name', 'build_tag', 'version'] + post_req = Mock() + post_req.raise_for_status.return_value = None + mock_requests.post.return_value = post_req + mock_dumps.return_value = {"project_name": "dovetail"} + + dovetail_utils.push_results_to_db( + case_name, details, start_date, stop_date, logger) + + mock_requests.post.assert_called_once_with( + 'url', + data={"project_name": "dovetail"}, + headers={"Content-Type": "application/json"}) + logger.debug.assert_called_once_with( + "The results were successfully pushed to DB.") + + @patch('json.dumps') + @patch('dovetail.utils.dovetail_utils.requests') + @patch('os.getenv') + def test_push_results_to_db_exception(self, mock_getenv, mock_requests, + mock_dumps): + logger = Mock() + case_name = 'case_name' + details = {'criteria': 'PASS'} + start_date = 'start_date' + stop_date = 'stop_date' + mock_getenv.side_effect = [ + 'url', 'installer', 'scenario', 'pod_name', 'build_tag', 'version'] + post_req = Mock() + post_req.raise_for_status.side_effect = Exception() + mock_requests.post.return_value = post_req + mock_dumps.return_value = {"project_name": "dovetail"} + dovetail_utils.push_results_to_db( + case_name, details, start_date, stop_date, logger) + + logger.debug.assert_not_called() + logger.exception.assert_called_once_with( + "The results cannot be pushed to DB.") + + def test_get_mount_list_error_mount(self): + project_cfg = {'mounts': ['aaa']} + res, msg = dovetail_utils.get_mount_list(project_cfg) + self.assertEqual(None, res) + self.assertEqual('Error mount aaa.', msg) + + def test_get_mount_list_keyerror_exception(self): + project_cfg = {'mounts': ['aaa=a,bbb=b', '']} + res, msg = dovetail_utils.get_mount_list(project_cfg) + self.assertEqual(None, res) + self.assertEqual("'target'", str(msg)) + + def test_get_mount_list(self): + project_cfg = {'mounts': ['target=a,source=b', '']} + res, msg = dovetail_utils.get_mount_list(project_cfg) + expected = [{'Source': 'b', 'Type': 'bind', 'ReadOnly': False, + 'Target': 'a'}] + self.assertEqual(expected, res) + self.assertEqual('Successfully to get mount list.', msg) |