From 3d0e0a0d167540ed5433366e9f236ff155d795ed Mon Sep 17 00:00:00 2001 From: lb584 <lb584@cam.ac.uk> Date: Thu, 27 Apr 2023 14:08:06 +0100 Subject: [PATCH] work to make full integration tests share more code --- tests/integration/full/full_test_advisory.py | 76 ++++++------------- .../integration/full/full_test_deposition.py | 8 +- tests/integration/full/full_test_env_suit.py | 64 ++++------------ .../partial/integration_test_utils.py | 11 ++- .../test_suites/advisory_test_suite.py | 9 +++ .../test_suites/depo_test_suite.py | 9 +++ .../test_suites/env_suit_test_suite.py | 9 +++ 7 files changed, 77 insertions(+), 109 deletions(-) diff --git a/tests/integration/full/full_test_advisory.py b/tests/integration/full/full_test_advisory.py index a2cc5c7..8c2c105 100644 --- a/tests/integration/full/full_test_advisory.py +++ b/tests/integration/full/full_test_advisory.py @@ -1,9 +1,5 @@ import copy import os -import sys -from unittest import TestSuite, TestLoader - -from HtmlTestRunner import HTMLTestRunner from integration.partial.integration_test_utils import IntegrationTestUtils from integration.test_suites.advisory_test_suite import BaseAdvisoryTestSuite @@ -21,13 +17,15 @@ class FullTestAdvisory(BaseAdvisoryTestSuite.AdvisoryTestSuite): self.set_expected_values() - if BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH is None or not os.path.isdir(BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH): + if IntegrationTestUtils.TEST_OUT_PATH is None or not os.path.isdir(IntegrationTestUtils.TEST_OUT_PATH): # if True: FullTestAdvisory.write_temp_run_config_files() FullTestAdvisory.run_dependent_pipelines() FullTestAdvisory.run_advisory_pipeline() else: - print(f"output in {BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH} already written, skipping rerun") + string = f"output in {IntegrationTestUtils.TEST_OUT_PATH} already written, skipping rerun" + print(string) + i = 0 @staticmethod @@ -35,36 +33,36 @@ class FullTestAdvisory(BaseAdvisoryTestSuite.AdvisoryTestSuite): default_config = IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH default_config_dict: dict = IntegrationTestUtils.load_json_file(default_config) run_dict: dict = copy.deepcopy(default_config_dict) - run_dict['WorkspacePathout'] = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH - run_dict['WorkspacePath'] = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH + run_dict['WorkspacePathout'] = IntegrationTestUtils.TEST_OUT_PATH + run_dict['WorkspacePath'] = IntegrationTestUtils.TEST_OUT_PATH # we need to run the env suit pipeline as well - run_dict['Environment']['WORK_PATH'] = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH - run_dict['Environment']['INPUT_PATH'] = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH - run_dict['Environment']['OUTPUT_PATH'] = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH + run_dict['Environment']['WORK_PATH'] = IntegrationTestUtils.TEST_OUT_PATH + run_dict['Environment']['INPUT_PATH'] = IntegrationTestUtils.TEST_OUT_PATH + run_dict['Environment']['OUTPUT_PATH'] = IntegrationTestUtils.TEST_OUT_PATH #make sure we activate server download run_dict['Survey']['SkipServerDownload'] = False - # survey_cred_file: str = run_dict['Survey']['ServerCredentialsFile'] - # run_dict['Survey']['ServerCredentialsFile'] = survey_cred_file.replace("Cred-ODK-EIAR.json", "Cred-ODK-EIAR-NO-WRSIS.json") - # run_dict['Survey']['FormEdits'].pop('WRSIS', None) + survey_cred_file: str = run_dict['Survey']['ServerCredentialsFile'] + run_dict['Survey']['ServerCredentialsFile'] = survey_cred_file.replace("Cred-ODK-EIAR.json", "Cred-ODK-EIAR-NO-WRSIS.json") + run_dict['Survey']['FormEdits'].pop('WRSIS', None) # may be reusing a non-timestamped output file during development, so allow extant TEST_OUT_PATH - os.makedirs(BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH, exist_ok = True) - IntegrationTestUtils.TEMP_CONFIG_FILE_NAME = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH + "temp_config.json" + os.makedirs(IntegrationTestUtils.TEST_OUT_PATH, exist_ok = True) + IntegrationTestUtils.TEMP_CONFIG_FILE_NAME = IntegrationTestUtils.TEST_OUT_PATH + "temp_config.json" IntegrationTestUtils.write_json_file(run_dict, IntegrationTestUtils.TEMP_CONFIG_FILE_NAME) @staticmethod def run_dependent_pipelines(): IntegrationTestUtils.run_external_pipeline("Deposition", - BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_START_DATE, + IntegrationTestUtils.TEST_START_DATE, IntegrationTestUtils.EMAIL_CRED_PATH) IntegrationTestUtils.run_external_pipeline("Environment", - BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_START_DATE, + IntegrationTestUtils.TEST_START_DATE, IntegrationTestUtils.EMAIL_CRED_PATH) - previous_day_string: str = IntegrationTestUtils.get_day_before_as_string(BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_START_DATE) + previous_day_string: str = IntegrationTestUtils.get_day_before_as_string(IntegrationTestUtils.TEST_START_DATE) IntegrationTestUtils.run_external_pipeline("Survey", previous_day_string, IntegrationTestUtils.EMAIL_CRED_PATH) @@ -72,40 +70,12 @@ class FullTestAdvisory(BaseAdvisoryTestSuite.AdvisoryTestSuite): @staticmethod def run_advisory_pipeline(): - component = 'Advisory' - IntegrationTestUtils.run_unittest_pipeline(component, FullTestAdvisory.TEST_START_DATE) + IntegrationTestUtils.run_external_pipeline(BaseAdvisoryTestSuite.AdvisoryTestSuite.ADVISORY_COMPONENT_NAME, + IntegrationTestUtils.TEST_START_DATE, + IntegrationTestUtils.EMAIL_CRED_PATH) if __name__ == '__main__': - - _parser = IntegrationTestUtils.build_arg_parser() - - _args = _parser.parse_args() - _config_file: str = _args.config - _outdir: str = _args.outdir - _email_cred_path: str = _args.email_cred - _test_report_dir: str = _args.test_report_dir - _run_date_type: str = _args.run_date_type - _custom_run_date: str = _args.custom_run_date - - IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH = _config_file - - nowstring: str = IntegrationTestUtils.get_now_string() - # prefix: str = "temp_advisory_" + nowstring - prefix: str = "temp_advisory" - BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH = _outdir + prefix + os.sep - IntegrationTestUtils.EMAIL_CRED_PATH = _email_cred_path - - BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_START_DATE = IntegrationTestUtils.generate_run_date(_run_date_type, _custom_run_date) - - BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_JOB_DIR = "ADVISORY_" + BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_START_DATE - - # Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone) - sys.argv[1:] = _args.unittest_args - tests: TestSuite = TestLoader().loadTestsFromTestCase(FullTestAdvisory) - - if _test_report_dir is None: - _test_report_dir = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_JOB_DIR - - runner = HTMLTestRunner(output=_test_report_dir, combine_reports = True) - runner.run(tests) + IntegrationTestUtils.run_fill_integration_test_pipeline(FullTestAdvisory, + test_prefix = "advisory", + processor_dir = BaseAdvisoryTestSuite.AdvisoryTestSuite.ADVISORY_PROCESSOR_DIR) diff --git a/tests/integration/full/full_test_deposition.py b/tests/integration/full/full_test_deposition.py index 953516d..c6692a4 100644 --- a/tests/integration/full/full_test_deposition.py +++ b/tests/integration/full/full_test_deposition.py @@ -43,12 +43,12 @@ class FullTestDeposition(BaseDepoTestSuite.DepoTestSuite): @staticmethod def run_depo_pipeline(): - component = 'Deposition' - IntegrationTestUtils.run_external_pipeline(component, + IntegrationTestUtils.run_external_pipeline(BaseDepoTestSuite.DepoTestSuite.DEPO_COMPONENT_NAME, IntegrationTestUtils.TEST_START_DATE, IntegrationTestUtils.EMAIL_CRED_PATH) if __name__ == '__main__': - # note the job prefix needs to match - IntegrationTestUtils.rune(FullTestDeposition, "DEPOSITION") + IntegrationTestUtils.run_fill_integration_test_pipeline(FullTestDeposition, + test_prefix = "deposition", + processor_dir = BaseDepoTestSuite.DepoTestSuite.DEPO_PROCESSOR_DIR) diff --git a/tests/integration/full/full_test_env_suit.py b/tests/integration/full/full_test_env_suit.py index 07c8ada..5505e05 100644 --- a/tests/integration/full/full_test_env_suit.py +++ b/tests/integration/full/full_test_env_suit.py @@ -1,9 +1,5 @@ import copy import os -import sys -from unittest import TestSuite, TestLoader - -from HtmlTestRunner import HTMLTestRunner from integration.partial.integration_test_utils import IntegrationTestUtils from integration.test_suites.env_suit_test_suite import BaseEnvSuitTestSuite @@ -12,8 +8,8 @@ from integration.test_suites.env_suit_test_suite import BaseEnvSuitTestSuite class FullTestEnvSuit(BaseEnvSuitTestSuite.EnvSuitTestSuite): def set_expected_values(self): - self.EA_CSV_COUNT: int = 18 - self.ETH_CSV_COUNT: int = 18 + self.EA_CSV_COUNT: int = 30 + self.ETH_CSV_COUNT: int = 30 self.EA_PNG_COUNT: int = 6 self.ETH_PNG_COUNT: int = 6 @@ -21,12 +17,12 @@ class FullTestEnvSuit(BaseEnvSuitTestSuite.EnvSuitTestSuite): self.set_expected_values() - if BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH is None or not os.path.isdir( - BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH): + if IntegrationTestUtils.TEST_OUT_PATH is None or not os.path.isdir( + IntegrationTestUtils.TEST_OUT_PATH): FullTestEnvSuit.write_temp_run_config_file() FullTestEnvSuit.run_env_pipeline() else: - print(f"output in {BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH} already written, skipping rerun") + print(f"output in {IntegrationTestUtils.TEST_OUT_PATH} already written, skipping rerun") @staticmethod @@ -34,16 +30,16 @@ class FullTestEnvSuit(BaseEnvSuitTestSuite.EnvSuitTestSuite): default_config = IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH default_config_dict: dict = IntegrationTestUtils.load_json_file(default_config) run_dict: dict = copy.deepcopy(default_config_dict) - run_dict['WorkspacePathout'] = FullTestEnvSuit.TEST_OUT_PATH - run_dict['WorkspacePath'] = FullTestEnvSuit.TEST_OUT_PATH - run_dict['Environment']['WORK_PATH'] = FullTestEnvSuit.TEST_OUT_PATH - run_dict['Environment']['INPUT_PATH'] = FullTestEnvSuit.TEST_OUT_PATH - run_dict['Environment']['OUTPUT_PATH'] = FullTestEnvSuit.TEST_OUT_PATH + run_dict['WorkspacePathout'] = IntegrationTestUtils.TEST_OUT_PATH + run_dict['WorkspacePath'] = IntegrationTestUtils.TEST_OUT_PATH + run_dict['Environment']['WORK_PATH'] = IntegrationTestUtils.TEST_OUT_PATH + run_dict['Environment']['INPUT_PATH'] = IntegrationTestUtils.TEST_OUT_PATH + run_dict['Environment']['OUTPUT_PATH'] = IntegrationTestUtils.TEST_OUT_PATH run_dict['Environment']['EWS-Plotting']['Ethiopia']['FilterForCountry'] = "True" run_dict['Environment']['EWS-Plotting']['Kenya']['FilterForCountry'] = "True" - os.makedirs(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH) - IntegrationTestUtils.TEMP_CONFIG_FILE_NAME = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH + "temp_config.json" + os.makedirs(IntegrationTestUtils.TEST_OUT_PATH) + IntegrationTestUtils.TEMP_CONFIG_FILE_NAME = IntegrationTestUtils.TEST_OUT_PATH + "temp_config.json" IntegrationTestUtils.write_json_file(run_dict, IntegrationTestUtils.TEMP_CONFIG_FILE_NAME) @@ -51,40 +47,12 @@ class FullTestEnvSuit(BaseEnvSuitTestSuite.EnvSuitTestSuite): def run_env_pipeline(): component = 'Environment' IntegrationTestUtils.run_external_pipeline(component, - FullTestEnvSuit.TEST_START_DATE, + IntegrationTestUtils.TEST_START_DATE, IntegrationTestUtils.EMAIL_CRED_PATH) if __name__ == '__main__': - _parser = IntegrationTestUtils.build_arg_parser() - - _args = _parser.parse_args() - _config_file: str = _args.config - _outdir: str = _args.outdir - _email_cred_path: str = _args.email_cred - _test_report_dir: str = _args.test_report_dir - _run_date_type: str = _args.run_date_type - _custom_run_date: str = _args.custom_run_date - - IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH = _config_file - - nowstring: str = IntegrationTestUtils.get_now_string() - prefix: str = "temp_env_" + nowstring - # prefix: str = "temp_env" - BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH = _outdir + prefix + os.sep - IntegrationTestUtils.EMAIL_CRED_PATH = _email_cred_path - - BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_START_DATE = IntegrationTestUtils.generate_run_date(_run_date_type, - _custom_run_date) - BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR = "ENVIRONMENT_2.0_" + FullTestEnvSuit.TEST_START_DATE - - # Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone) - sys.argv[1:] = _args.unittest_args - tests: TestSuite = TestLoader().loadTestsFromTestCase(FullTestEnvSuit) - - if _test_report_dir is None: - _test_report_dir = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR - - runner = HTMLTestRunner(output=_test_report_dir, combine_reports = True) - runner.run(tests) + IntegrationTestUtils.run_fill_integration_test_pipeline(FullTestEnvSuit, + test_prefix = "env", + processor_dir = BaseEnvSuitTestSuite.EnvSuitTestSuite.ENV_PROCESSOR_DIR) diff --git a/tests/integration/partial/integration_test_utils.py b/tests/integration/partial/integration_test_utils.py index 53c7477..4088edf 100644 --- a/tests/integration/partial/integration_test_utils.py +++ b/tests/integration/partial/integration_test_utils.py @@ -41,7 +41,10 @@ class IntegrationTestUtils: return parser @staticmethod - def rune(test_case: [TestCase], job_prefix: str): + def run_fill_integration_test_pipeline(test_case: [TestCase], + test_prefix: str, + processor_dir: str): + _parser = IntegrationTestUtils.build_arg_parser() _args = _parser.parse_args() @@ -55,8 +58,8 @@ class IntegrationTestUtils: IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH = _config_file nowstring: str = IntegrationTestUtils.get_now_string() - prefix: str = f"temp_{job_prefix}_" + nowstring - # prefix: str = f"temp_{job_prefix}" + prefix: str = f"temp_{test_prefix}_" + nowstring + # prefix: str = f"temp_{test_prefix}" IntegrationTestUtils.TEST_OUT_PATH = _outdir + prefix + os.sep IntegrationTestUtils.EMAIL_CRED_PATH = _email_cred_path @@ -64,7 +67,7 @@ class IntegrationTestUtils: _custom_run_date) IntegrationTestUtils.TEST_JOB_DIR = os.path.join(IntegrationTestUtils.TEST_OUT_PATH, - f"{job_prefix}_" + + f"{processor_dir}_" + IntegrationTestUtils.TEST_START_DATE) # Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone) diff --git a/tests/integration/test_suites/advisory_test_suite.py b/tests/integration/test_suites/advisory_test_suite.py index f46695f..afd3fbf 100644 --- a/tests/integration/test_suites/advisory_test_suite.py +++ b/tests/integration/test_suites/advisory_test_suite.py @@ -10,6 +10,15 @@ class BaseAdvisoryTestSuite: class AdvisoryTestSuite(unittest.TestCase): + """ + the name passed to the Processor.py to define the component + """ + ADVISORY_COMPONENT_NAME = "Advisory" + """ + the prefix of the directory created by thr Processor.py, e.g. DEPOSITION_2020-01-01 + """ + ADVISORY_PROCESSOR_DIR = "ADVISORY" + @abc.abstractmethod def set_expected_values(self): self.EXPECTED_EA_IMAGE_COUNT = 0 diff --git a/tests/integration/test_suites/depo_test_suite.py b/tests/integration/test_suites/depo_test_suite.py index 50cbdff..15f88ea 100644 --- a/tests/integration/test_suites/depo_test_suite.py +++ b/tests/integration/test_suites/depo_test_suite.py @@ -10,6 +10,15 @@ class BaseDepoTestSuite: class DepoTestSuite(unittest.TestCase): + """ + the name passed to the Processor.py to define the component + """ + DEPO_COMPONENT_NAME = "Deposition" + """ + the prefix of the directory created by thr Processor.py, e.g. DEPOSITION_2020-01-01 + """ + DEPO_PROCESSOR_DIR = "DEPOSITION" + @abc.abstractmethod def set_expected_values(self): """ diff --git a/tests/integration/test_suites/env_suit_test_suite.py b/tests/integration/test_suites/env_suit_test_suite.py index 2552dc4..54d7f2c 100644 --- a/tests/integration/test_suites/env_suit_test_suite.py +++ b/tests/integration/test_suites/env_suit_test_suite.py @@ -10,6 +10,15 @@ class BaseEnvSuitTestSuite: class EnvSuitTestSuite(unittest.TestCase): + """ + the name passed to the Processor.py to define the component + """ + ENV_COMPONENT_NAME = "Environment" + """ + the prefix of the directory created by thr Processor.py, e.g. DEPOSITION_2020-01-01 + """ + ENV_PROCESSOR_DIR = "ENVIRONMENT_2.0" + @abc.abstractmethod def set_expected_values(self): """ -- GitLab