summaryrefslogtreecommitdiffstats
path: root/dovetail
diff options
context:
space:
mode:
Diffstat (limited to 'dovetail')
-rw-r--r--dovetail/testcase.py3
-rw-r--r--dovetail/tests/unit/test_testcase.py660
2 files changed, 661 insertions, 2 deletions
diff --git a/dovetail/testcase.py b/dovetail/testcase.py
index 33f14a97..ada5df82 100644
--- a/dovetail/testcase.py
+++ b/dovetail/testcase.py
@@ -42,7 +42,6 @@ class Testcase(object):
cmd_lines = Parser.parse_cmd(cmd, self)
if not cmd_lines:
return False
- # self.logger.debug('cmd_lines:%s', cmd_lines)
self.cmds.append(cmd_lines)
self.logger.debug('cmds: {}'.format(self.cmds))
return True
@@ -193,7 +192,7 @@ class Testcase(object):
@classmethod
def load(cls):
abs_testcase_path = constants.TESTCASE_PATH
- for root, dirs, files in os.walk(abs_testcase_path):
+ for root, _, files in os.walk(abs_testcase_path):
for testcase_file in files:
with open(os.path.join(root, testcase_file)) as f:
testcase_yaml = yaml.safe_load(f)
diff --git a/dovetail/tests/unit/test_testcase.py b/dovetail/tests/unit/test_testcase.py
new file mode 100644
index 00000000..5dbb9cb1
--- /dev/null
+++ b/dovetail/tests/unit/test_testcase.py
@@ -0,0 +1,660 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2018 mokats@intracom-telecom.com and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##
+
+import os
+import unittest
+import yaml
+from mock import patch, call, Mock
+
+import dovetail.testcase as tcase
+
+__author__ = 'Stamatis Katsaounis <mokats@intracom-telecom.com>'
+
+
+class TestcaseTesting(unittest.TestCase):
+
+ def setUp(self):
+ test_path = os.path.dirname(os.path.realpath(__file__))
+ with open(os.path.join(test_path, 'test_testcase.yaml')) as f:
+ self.testcase_yaml = yaml.safe_load(f)
+
+ def tearDown(self):
+ pass
+
+ def teardown_method(self, method):
+ tcase.Testcase.logger = None
+ tcase.Testcase.validate_testcase_list = {}
+ tcase.Testcase.testcase_list = {}
+ tcase.Testsuite.testsuite_list = {}
+
+ @patch('dovetail.testcase.dt_logger')
+ def test_create_log(self, mock_logger):
+ getlogger_obj = Mock()
+ logger_obj = Mock()
+ logger_obj.getLogger.return_value = getlogger_obj
+ mock_logger.Logger.return_value = logger_obj
+
+ tcase.Testcase.create_log()
+
+ self.assertEquals(getlogger_obj, tcase.Testcase.logger)
+
+ @patch('dovetail.testcase.Parser')
+ def test_parse_cmd_no_lines(self, mock_parser):
+ testcase = tcase.YardstickTestcase(self.testcase_yaml)
+ cmds_list = ['cmd']
+ mock_parser.parse_cmd.return_value = None
+
+ result = testcase.parse_cmd(cmds_list)
+
+ mock_parser.parse_cmd.assert_called_once_with(
+ 'cmd', testcase)
+ self.assertEquals(False, result)
+
+ @patch('dovetail.testcase.Parser')
+ def test_parse_cmd(self, mock_parser):
+ testcase = tcase.BottlenecksTestcase(self.testcase_yaml)
+ logger_obj = Mock()
+ testcase.logger = logger_obj
+ cmds_list = ['cmd']
+ mock_parser.parse_cmd.return_value = 'cmd_lines'
+
+ result = testcase.parse_cmd(cmds_list)
+
+ mock_parser.parse_cmd.assert_called_once_with(
+ 'cmd', testcase)
+ logger_obj.debug.assert_called_once_with("cmds: ['cmd_lines']")
+ self.assertEquals(['cmd_lines'], testcase.cmds)
+ self.assertEquals(True, result)
+
+ @patch('dovetail.testcase.dt_cfg')
+ def test_prepare_cmd_no_cmds(self, mock_config):
+ testcase = tcase.ShellTestcase(self.testcase_yaml)
+ logger_obj = Mock()
+ testcase.logger = logger_obj
+ mock_config.dovetail_config = {}
+
+ result = testcase.prepare_cmd('type')
+
+ logger_obj.error.assert_called_once_with(
+ 'Test case {} has no cmds.'.format(testcase.name()))
+ self.assertEquals(False, result)
+
+ @patch('dovetail.testcase.dt_cfg')
+ @patch.object(tcase.Testcase, 'parse_cmd')
+ def test_prepare_cmd_testcase_cmd(self, mock_parse, mock_config):
+ testcase = tcase.VnftestTestcase(self.testcase_yaml)
+ testcase.testcase['validate']['cmds'] = ['cmd']
+ mock_config.dovetail_config = {}
+ mock_parse.return_value = True
+
+ result = testcase.prepare_cmd('type')
+
+ mock_parse.assert_called_once_with(['cmd'])
+ self.assertEquals(True, result)
+
+ @patch('dovetail.testcase.dt_cfg')
+ @patch.object(tcase.Testcase, 'parse_cmd')
+ def test_prepare_cmd_config_cmd(self, mock_parse, mock_config):
+ testcase = tcase.TestcaseFactory.create('yardstick',
+ self.testcase_yaml)
+ mock_config.dovetail_config = {'type': {'cmds': ['cmd']}}
+ mock_parse.return_value = True
+
+ result = testcase.prepare_cmd('type')
+
+ mock_parse.assert_called_once_with(['cmd'])
+ self.assertEquals(True, result)
+
+ def test_str(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+
+ result = testcase.__str__()
+
+ self.assertEquals(testcase.testcase, result)
+
+ def test_objective(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ testcase.testcase['objective'] = 'objective'
+
+ result = testcase.objective()
+
+ self.assertEquals('objective', result)
+
+ @patch('dovetail.testcase.dt_utils')
+ def test_sub_testcase(self, mock_utils):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ mock_utils.get_value_from_dict.return_value = 'value'
+
+ result = testcase.sub_testcase()
+
+ mock_utils.get_value_from_dict.assert_called_once_with(
+ 'report.sub_testcase_list', testcase.testcase)
+ self.assertEquals('value', result)
+
+ def test_sub_testcase_passed(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ logger_obj = Mock()
+ testcase.logger = logger_obj
+
+ result = testcase.sub_testcase_passed('name', 'passed')
+
+ logger_obj.debug.assert_called_once_with(
+ 'sub_testcase_passed: name passed')
+ self.assertEquals('passed', result)
+
+ def test_validate_type(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+
+ result = testcase.validate_type()
+
+ self.assertEquals('functest', result)
+
+ def test_validate_testcase(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+
+ result = testcase.validate_testcase()
+
+ self.assertEquals('tempest_smoke_serial', result)
+
+ def test_passed(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+
+ result = testcase.passed('passed')
+
+ self.assertEquals('passed', result)
+
+ def test_set_get_results(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+
+ testcase.set_results('results')
+
+ self.assertEquals('results', testcase.get_results())
+
+ def test_pre_condition_exists(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ testcase.testcase['validate']['pre_condition'] = 'pre_condition'
+
+ result = testcase.pre_condition()
+
+ self.assertEquals('pre_condition', result)
+
+ @patch.object(tcase.Testcase, 'pre_condition_cls')
+ def test_pre_condition_not_exists(self, mock_pre_condition):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ logger_obj = Mock()
+ testcase.logger = logger_obj
+ mock_pre_condition.return_value = False
+
+ result = testcase.pre_condition()
+
+ mock_pre_condition.assert_called_once_with('functest')
+ logger_obj.debug.assert_called_once_with(
+ 'Test case: {} pre_condition is empty.'.format(testcase.name()))
+ self.assertEquals(False, result)
+
+ def test_pre_copy_path(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ testcase.testcase['validate']['pre_copy'] = {'key': 'value'}
+
+ result = testcase.pre_copy_path('key')
+
+ self.assertEquals('value', result)
+
+ def test_pre_copy_path_error(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+
+ result = testcase.pre_copy_path('key')
+
+ self.assertEquals(None, result)
+
+ def test_post_condition_exists(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ testcase.testcase['validate']['post_condition'] = 'post_condition'
+
+ result = testcase.post_condition()
+
+ self.assertEquals('post_condition', result)
+
+ @patch.object(tcase.Testcase, 'post_condition_cls')
+ def test_post_condition_not_exists(self, mock_post_condition):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ logger_obj = Mock()
+ testcase.logger = logger_obj
+ mock_post_condition.return_value = False
+
+ result = testcase.post_condition()
+
+ mock_post_condition.assert_called_once_with('functest')
+ logger_obj.debug.assert_called_once_with(
+ 'Test case: {} post_condition is empty.'.format(testcase.name()))
+ self.assertEquals(False, result)
+
+ @patch('__builtin__.open')
+ @patch('dovetail.testcase.os.path')
+ @patch('dovetail.testcase.dt_cfg')
+ @patch.object(tcase.Testcase, 'pre_copy_path')
+ @patch.object(tcase.Testcase, 'sub_testcase')
+ def test_mk_src_file(self, mock_sub_testcase, mock_pre_copy, mock_config,
+ mock_path, mock_open):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ logger_obj = Mock()
+ testcase.logger = logger_obj
+ mock_config.dovetail_config = {'result_dir': 'value'}
+ sub_test = 'sub_test'
+ file_path = 'file_path'
+ testcase_src_file = 'testcase_src_file'
+ mock_pre_copy.return_value = testcase_src_file
+ mock_path.join.return_value = file_path
+ mock_sub_testcase.return_value = [sub_test]
+ file_obj = Mock()
+ mock_open.return_value.__enter__.return_value = file_obj
+
+ result = testcase.mk_src_file()
+
+ mock_pre_copy.assert_called_once_with('src_file')
+ mock_path.join.assert_called_once_with('value', testcase_src_file)
+ mock_open.assert_called_once_with(file_path, 'w+')
+ file_obj.write.assert_called_once_with(sub_test + '\n')
+ logger_obj.debug.assert_has_calls([
+ call('Save test cases {}'.format(sub_test)),
+ call('Save test cases to {}'.format(file_path))])
+ self.assertEquals(file_path, result)
+
+ @patch('__builtin__.open')
+ @patch('dovetail.testcase.os.path')
+ @patch('dovetail.testcase.dt_cfg')
+ @patch.object(tcase.Testcase, 'pre_copy_path')
+ @patch.object(tcase.Testcase, 'sub_testcase')
+ def test_mk_src_file_exception(self, mock_sub_testcase, mock_pre_copy,
+ mock_config, mock_path, mock_open):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ logger_obj = Mock()
+ testcase.logger = logger_obj
+ mock_config.dovetail_config = {'result_dir': 'value'}
+ sub_test = 'sub_test'
+ file_path = 'file_path'
+ testcase_src_file = 'testcase_src_file'
+ mock_pre_copy.return_value = testcase_src_file
+ mock_path.join.return_value = file_path
+ mock_sub_testcase.return_value = [sub_test]
+ mock_open.return_value.__enter__.side_effect = Exception()
+
+ result = testcase.mk_src_file()
+
+ mock_pre_copy.assert_called_once_with('src_file')
+ mock_path.join.assert_called_once_with('value', testcase_src_file)
+ mock_open.assert_called_once_with(file_path, 'w+')
+ logger_obj.exception('Failed to save: {}'.format(file_path))
+ self.assertEquals(None, result)
+
+ @patch('dovetail.testcase.TestRunnerFactory')
+ def test_run(self, mock_factory):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ logger_obj = Mock()
+ testcase.logger = logger_obj
+ runner_obj = Mock()
+ mock_factory.create.return_value = runner_obj
+ error_msg = 'An error happened!'
+ runner_obj.archive_logs.side_effect = AttributeError(error_msg)
+
+ testcase.run()
+
+ runner_obj.run.assert_called_once_with()
+ runner_obj.archive_logs.assert_called_once_with()
+ logger_obj.exception.assert_called_once_with(
+ 'Test case: {} Exception: {}'.format(testcase.name, error_msg))
+
+ @patch('dovetail.testcase.dt_cfg')
+ def test_pre_condition_cls(self, mock_config):
+ mock_config.dovetail_config = {'type': {'pre_condition': 'value'}}
+
+ result = tcase.Testcase.pre_condition_cls('type')
+ self.assertEquals('value', result)
+
+ @patch('dovetail.testcase.dt_cfg')
+ def test_pre_condition_cls_key_error(self, mock_config):
+ mock_config.dovetail_config = {}
+
+ result = tcase.Testcase.pre_condition_cls('type')
+ self.assertEquals(None, result)
+
+ @patch('dovetail.testcase.dt_cfg')
+ def test_post_condition_cls(self, mock_config):
+ mock_config.dovetail_config = {'type': {'post_condition': 'value'}}
+
+ result = tcase.Testcase.post_condition_cls('type')
+ self.assertEquals('value', result)
+
+ @patch('dovetail.testcase.dt_cfg')
+ def test_post_condition_cls_key_error(self, mock_config):
+ mock_config.dovetail_config = {}
+
+ result = tcase.Testcase.post_condition_cls('type')
+ self.assertEquals(None, result)
+
+ def test_increase_retry(self):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ tcase.Testcase.validate_testcase_list[
+ 'tempest_smoke_serial'] = {'retry': 0}
+
+ for _ in range(0, 42):
+ result = testcase.increase_retry()
+ self.assertEquals(42, result)
+
+ @patch('__builtin__.open')
+ @patch('dovetail.testcase.yaml')
+ @patch('dovetail.testcase.os')
+ @patch('dovetail.testcase.TestcaseFactory')
+ @patch('dovetail.testcase.constants')
+ def test_load(self, mock_constants, mock_factory, mock_os, mock_yaml,
+ mock_open):
+ testcase = tcase.Testcase(self.testcase_yaml)
+ mock_constants.TESTCASE_PATH = 'abs_path'
+ mock_os.walk.return_value = [('root', ['dir'], ['file'])]
+ mock_os.path.join.return_value = 'testcase_path'
+ file_obj = Mock()
+ mock_open.return_value.__enter__.return_value = file_obj
+ yaml_dict = {'key': {'validate': {'type': 'value'}}}
+ mock_yaml.safe_load.return_value = yaml_dict
+ runner_obj = Mock()
+ mock_factory.create.return_value = runner_obj
+
+ testcase.load()
+
+ mock_os.walk.assert_called_once_with('abs_path')
+ mock_os.path.join.assert_called_with('root', 'file')
+ mock_open.assert_called_once_with('testcase_path')
+ mock_yaml.safe_load.assert_called_once_with(file_obj)
+ mock_factory.create.assert_called_once_with('value', yaml_dict)
+ self.assertEquals(runner_obj, tcase.Testcase.get('key'))
+
+ @patch('__builtin__.open')
+ @patch('dovetail.testcase.yaml')
+ @patch('dovetail.testcase.os')
+ @patch('dovetail.testcase.TestcaseFactory')
+ @patch('dovetail.testcase.constants')
+ def test_load_no_testcase(self, mock_constants, mock_factory, mock_os,
+ mock_yaml, mock_open):
+ logger_obj = Mock()
+ tcase.Testcase.logger = logger_obj
+ mock_constants.TESTCASE_PATH = 'abs_path'
+ mock_os.walk.return_value = [('root', ['dir'], ['file'])]
+ mock_os.path.join.return_value = 'testcase_path'
+ file_obj = Mock()
+ mock_open.return_value.__enter__.return_value = file_obj
+ yaml_dict = {'key': {'validate': {'type': 'value'}}}
+ mock_yaml.safe_load.return_value = yaml_dict
+ mock_factory.create.return_value = None
+
+ tcase.Testcase.load()
+
+ mock_os.walk.assert_called_once_with('abs_path')
+ mock_os.path.join.assert_called_with('root', 'file')
+ mock_open.assert_called_once_with('testcase_path')
+ mock_yaml.safe_load.assert_called_once_with(file_obj)
+ mock_factory.create.assert_called_once_with('value', yaml_dict)
+ logger_obj.error.assert_called_once_with(
+ 'Failed to create test case: file')
+
+ def test_get_none(self):
+ self.assertEquals(None, tcase.Testcase.get('unknown'))
+
+ def test_check_testarea_none(self):
+ self.assertEquals((True, ['full']),
+ tcase.Testcase.check_testarea(None))
+
+ @patch('dovetail.testcase.dt_cfg')
+ def test_check_testarea_not_in_config(self, mock_config):
+ mock_config.dovetail_config = {'testarea_supported': []}
+ self.assertEquals((False, None),
+ tcase.Testcase.check_testarea(['area']))
+
+ @patch('dovetail.testcase.dt_cfg')
+ def test_check_testarea_full(self, mock_config):
+ mock_config.dovetail_config = {'testarea_supported': ['full']}
+ self.assertEquals((True, ['full']),
+ tcase.Testcase.check_testarea(['full']))
+
+ @patch('dovetail.testcase.dt_cfg')
+ def test_check_testarea(self, mock_config):
+ mock_config.dovetail_config = {'testarea_supported': ['area']}
+ self.assertEquals((True, ['area']),
+ tcase.Testcase.check_testarea(['area']))
+
+ def test_check_testcase_area(self):
+ self.assertEquals(False,
+ tcase.Testcase.check_testcase_area(None, None))
+
+ def test_check_testcase_area_full_or_in_testcase(self):
+ self.assertEquals(True,
+ tcase.Testcase.check_testcase_area(['full'], 'full'))
+
+ def test_check_testcase_area_not_in_testcase_or_full(self):
+ self.assertEquals(False,
+ tcase.Testcase.check_testcase_area(['full'], 'half'))
+
+ @patch('dovetail.testcase.dt_utils')
+ def test_get_testcases_for_testsuite_no_testcases(self, mock_utils):
+ mock_utils.get_value_from_dict.return_value = None
+
+ result = tcase.Testcase.get_testcases_for_testsuite('suite', 'area')
+
+ mock_utils.get_value_from_dict.assert_has_calls([
+ call('testcases_list', 'suite'),
+ call('mandatory', None),
+ call('optional', None)])
+ self.assertEquals([], result)
+
+ @patch('dovetail.testcase.dt_cfg')
+ @patch('dovetail.testcase.dt_utils')
+ def test_get_testcases_for_testsuite_no_selected_testcases(self,
+ mock_utils,
+ mock_config):
+ logger_obj = Mock()
+ tcase.Testcase.logger = logger_obj
+ testcases_obj = Mock()
+ mock_utils.get_value_from_dict.side_effect = [
+ testcases_obj, None, None]
+ mock_config.dovetail_config = {
+ 'mandatory': True,
+ 'optional': True
+ }
+ testsuite = {'name': 'test_name'}
+
+ result = tcase.Testcase.get_testcases_for_testsuite(testsuite, 'area')
+
+ mock_utils.get_value_from_dict.assert_has_calls([
+ call('testcases_list', testsuite),
+ call('mandatory', testcases_obj),
+ call('optional', testcases_obj)])
+ logger_obj.error.assert_has_calls([
+ call('There is no mandatory test case in test suite {}'
+ .format(testsuite['name'])),
+ call('There is no optional test case in test suite {}'
+ .format(testsuite['name']))])
+ self.assertEquals(None, result)
+
+ @patch('dovetail.testcase.dt_cfg')
+ @patch('dovetail.testcase.dt_utils')
+ @patch.object(tcase.Testcase, 'check_testcase_area')
+ def test_get_testcases_for_testsuite(self, mock_check, mock_utils,
+ mock_config):
+ logger_obj = Mock()
+ tcase.Testcase.logger = logger_obj
+ testcases_obj = Mock()
+ mock_utils.get_value_from_dict.side_effect = [
+ testcases_obj, ['mandatory'], ['optional']]
+ mock_config.dovetail_config = {
+ 'mandatory': True,
+ 'optional': True
+ }
+ mock_check.return_value = True
+ testsuite = {'name': 'test_name'}
+ testarea = ['area']
+
+ mandatory_obj = Mock()
+ tcase.Testcase.testcase_list['mandatory'] = mandatory_obj
+ optional_obj = Mock()
+ tcase.Testcase.testcase_list['optional'] = optional_obj
+ result = tcase.Testcase.get_testcases_for_testsuite(
+ testsuite, testarea)
+
+ mock_utils.get_value_from_dict.assert_has_calls([
+ call('testcases_list', testsuite),
+ call('mandatory', testcases_obj),
+ call('optional', testcases_obj)])
+ mock_check.assert_has_calls([
+ call('mandatory', 'area'),
+ call('optional', 'area')])
+ self.assertEquals(['mandatory', 'optional'], result)
+ self.assertEquals(
+ True, tcase.Testcase.testcase_list['mandatory'].is_mandatory)
+ self.assertEquals(
+ False, tcase.Testcase.testcase_list['optional'].is_mandatory)
+
+ @patch('dovetail.testcase.dt_cfg')
+ @patch('dovetail.testcase.dt_utils')
+ @patch.object(tcase.Testcase, 'check_testcase_area')
+ def test_get_testcases_for_testsuite_no_conf(self, mock_check, mock_utils,
+ mock_config):
+ logger_obj = Mock()
+ tcase.Testcase.logger = logger_obj
+ testcases_obj = Mock()
+ mock_utils.get_value_from_dict.side_effect = [
+ testcases_obj, ['mandatory'], ['optional']]
+ mock_config.dovetail_config = {
+ 'mandatory': False,
+ 'optional': False
+ }
+ mock_check.return_value = True
+ testsuite = {'name': 'test_name'}
+ testarea = ['area']
+
+ mandatory_obj = Mock()
+ tcase.Testcase.testcase_list['mandatory'] = mandatory_obj
+ optional_obj = Mock()
+ tcase.Testcase.testcase_list['optional'] = optional_obj
+ result = tcase.Testcase.get_testcases_for_testsuite(testsuite,
+ testarea)
+
+ mock_utils.get_value_from_dict.assert_has_calls([
+ call('testcases_list', testsuite),
+ call('mandatory', testcases_obj),
+ call('optional', testcases_obj)])
+ mock_check.assert_has_calls([
+ call('mandatory', 'area'),
+ call('optional', 'area')])
+ self.assertEquals(['mandatory', 'optional'], result)
+ self.assertEquals(True,
+ tcase.Testcase.testcase_list['mandatory']
+ .is_mandatory)
+ self.assertEquals(False,
+ tcase.Testcase.testcase_list['optional']
+ .is_mandatory)
+
+ @patch.object(tcase.Testcase, 'prepare_cmd')
+ def test_functest_case_prepare_cmd_false(self, mock_prepare):
+ testcase = tcase.FunctestTestcase(self.testcase_yaml)
+ mock_prepare.return_value = False
+
+ result = testcase.prepare_cmd('type')
+
+ mock_prepare.assert_called_once_with('type')
+ self.assertEquals(False, result)
+
+ @patch('dovetail.testcase.os.path')
+ @patch('dovetail.testcase.dt_cfg')
+ @patch.object(tcase.Testcase, 'prepare_cmd')
+ def test_functest_case_prepare_cmd(self, mock_prepare, mock_config,
+ mock_path):
+ testcase = tcase.FunctestTestcase(self.testcase_yaml)
+ logger_obj = Mock()
+ testcase.logger = logger_obj
+ mock_prepare.return_value = True
+ mock_config.dovetail_config = {
+ 'no_api_validation': True,
+ 'functest': {'config': {'dir': 'value'}}}
+ mock_path.join.return_value = 'patch_cmd'
+
+ result = testcase.prepare_cmd('type')
+
+ mock_path.join.assert_called_once_with(
+ 'value', 'patches', 'functest', 'disable-api-validation',
+ 'apply.sh')
+ logger_obj.debug.assert_called_once_with(
+ 'Updated list of commands for test run with '
+ 'disabled API response validation: {}'
+ .format(testcase.cmds))
+ self.assertEquals(['patch_cmd'], testcase.cmds)
+ self.assertEquals(True, result)
+
+ def test_testfactory_error(self):
+ self.assertEquals(None,
+ tcase.TestcaseFactory.create('unknown',
+ self.testcase_yaml))
+
+ @patch('dovetail.testcase.dt_logger')
+ def test_testsuite_create_log(self, mock_logger):
+ getlogger_obj = Mock()
+ logger_obj = Mock()
+ logger_obj.getLogger.return_value = getlogger_obj
+ mock_logger.Logger.return_value = logger_obj
+
+ tcase.Testsuite.create_log()
+
+ self.assertEquals(getlogger_obj, tcase.Testsuite.logger)
+
+ def test_testsuite_get_test(self):
+ suite = tcase.Testsuite('suite')
+ suite.testcase_list['testcase'] = 'value'
+
+ result = suite.get_test('testcase')
+
+ self.assertEquals('value', result)
+
+ def test_testsuite_get_test_not_exists(self):
+ suite = tcase.Testsuite('suite')
+
+ result = suite.get_test('testcase')
+
+ self.assertEquals(None, result)
+
+ @patch('__builtin__.open')
+ @patch('dovetail.testcase.yaml')
+ @patch('dovetail.testcase.os')
+ @patch('dovetail.testcase.constants')
+ def test_testsuite_load(self, mock_constants, mock_os, mock_yaml,
+ mock_open):
+ mock_constants.COMPLIANCE_PATH = 'abs_path'
+ mock_os.walk.return_value = [('root', ['dir'], ['file'])]
+ mock_os.path.join.return_value = 'file_path'
+ mock_yaml.safe_load.return_value = {'testsuite': 'value'}
+ file_obj = Mock()
+ mock_open.return_value.__enter__.return_value = file_obj
+
+ tcase.Testsuite.load()
+
+ mock_os.walk.assert_called_once_with('abs_path')
+ mock_os.path.join.assert_called_with('root', 'file')
+ mock_open.assert_called_once_with('file_path')
+ mock_yaml.safe_load.assert_called_once_with(file_obj)
+ self.assertEquals({'testsuite': 'value'},
+ tcase.Testsuite.testsuite_list)
+
+ def test_testsuite_get_none(self):
+ self.assertEquals(None, tcase.Testsuite.get('unknown'))
+
+ def test_testsuite_get(self):
+ tcase.Testsuite.testsuite_list.update({'key': 'value'})
+ self.assertEquals('value', tcase.Testsuite.get('key'))
+
+ def test_testsuite_get_all(self):
+ tcase.Testsuite.testsuite_list.update({'key': 'value'})
+ self.assertEquals({'key': 'value'}, tcase.Testsuite.get_all())