diff --git a/tests/shared.py b/tests/shared.py new file mode 100644 index 0000000..735c242 --- /dev/null +++ b/tests/shared.py @@ -0,0 +1,19 @@ +""" +This file contains shared functions used within multiple tests. + +Author(s): David Marchant +""" +from core.functionality import make_dir, rmtree +from core.correctness.vars import TEST_HANDLER_BASE, TEST_JOB_OUTPUT, \ + TEST_MONITOR_BASE + +def setup(): + make_dir(TEST_MONITOR_BASE, ensure_clean=True) + make_dir(TEST_HANDLER_BASE, ensure_clean=True) + make_dir(TEST_JOB_OUTPUT, ensure_clean=True) + +def teardown(): + rmtree(TEST_MONITOR_BASE) + rmtree(TEST_HANDLER_BASE) + rmtree(TEST_JOB_OUTPUT) + rmtree("first") diff --git a/tests/test_all.sh b/tests/test_all.sh index ce7803c..a00a020 100755 --- a/tests/test_all.sh +++ b/tests/test_all.sh @@ -13,7 +13,7 @@ cd $script_dir search_dir=. for entry in "$search_dir"/* do - if [[ $entry == ./test* ]] && [[ $entry != ./$script_name ]]; + if [[ $entry == ./test* ]] && [[ $entry != ./$script_name ]] && [[ $entry != ./shared.py ]]; then pytest $entry "-W ignore::DeprecationWarning" fi diff --git a/tests/test_conductors.py b/tests/test_conductors.py index e387a22..2b1188b 100644 --- a/tests/test_conductors.py +++ b/tests/test_conductors.py @@ -7,12 +7,12 @@ from core.correctness.vars import PYTHON_TYPE, TEST_HANDLER_BASE, SHA256, \ WATCHDOG_BASE, WATCHDOG_RULE, WATCHDOG_HASH, JOB_PARAMETERS, JOB_HASH, \ PYTHON_FUNC, PYTHON_OUTPUT_DIR, PYTHON_EXECUTION_BASE, JOB_ID, META_FILE, \ BASE_FILE, PARAMS_FILE, JOB_FILE, RESULT_FILE -from core.functionality import make_dir, rmtree, get_file_hash, create_event, \ - create_job +from core.functionality import get_file_hash, create_event, create_job from core.meow import create_rule from conductors import LocalPythonConductor from patterns import FileEventPattern from recipes.jupyter_notebook_recipe import JupyterNotebookRecipe, job_func +from shared import setup, teardown def failing_func(): @@ -22,16 +22,12 @@ def failing_func(): class MeowTests(unittest.TestCase): def setUp(self)->None: super().setUp() - make_dir(TEST_MONITOR_BASE) - make_dir(TEST_HANDLER_BASE) - make_dir(TEST_JOB_OUTPUT) + setup() def tearDown(self)->None: super().tearDown() - rmtree(TEST_MONITOR_BASE) - rmtree(TEST_HANDLER_BASE) - rmtree(TEST_JOB_OUTPUT) - + teardown() + def testLocalPythonConductorCreation(self)->None: lpc = LocalPythonConductor() diff --git a/tests/test_functionality.py b/tests/test_functionality.py index 94ec5c6..2dd114d 100644 --- a/tests/test_functionality.py +++ b/tests/test_functionality.py @@ -23,16 +23,17 @@ from core.functionality import generate_id, wait, get_file_hash, rmtree, \ from core.meow import create_rule from patterns import FileEventPattern from recipes import JupyterNotebookRecipe +from shared import setup, teardown class CorrectnessTests(unittest.TestCase): def setUp(self)->None: super().setUp() - make_dir(TEST_MONITOR_BASE, ensure_clean=True) + setup() def tearDown(self)->None: super().tearDown() - rmtree(TEST_MONITOR_BASE) - + teardown() + def testGenerateIDWorking(self)->None: id = generate_id() self.assertEqual(len(id), 16) diff --git a/tests/test_meow.py b/tests/test_meow.py index 03dd6b5..138884a 100644 --- a/tests/test_meow.py +++ b/tests/test_meow.py @@ -3,13 +3,12 @@ import unittest from typing import Any, Union -from core.correctness.vars import TEST_HANDLER_BASE, TEST_JOB_OUTPUT, \ - TEST_MONITOR_BASE, BAREBONES_NOTEBOOK -from core.functionality import make_dir, rmtree +from core.correctness.vars import BAREBONES_NOTEBOOK from core.meow import BasePattern, BaseRecipe, BaseRule, BaseMonitor, \ BaseHandler, BaseConductor, create_rules, create_rule from patterns import FileEventPattern from recipes.jupyter_notebook_recipe import JupyterNotebookRecipe +from shared import setup, teardown valid_pattern_one = FileEventPattern( "pattern_one", "path_one", "recipe_one", "file_one") @@ -25,15 +24,11 @@ valid_recipe_two = JupyterNotebookRecipe( class MeowTests(unittest.TestCase): def setUp(self)->None: super().setUp() - make_dir(TEST_MONITOR_BASE) - make_dir(TEST_HANDLER_BASE) - make_dir(TEST_JOB_OUTPUT) + setup() def tearDown(self)->None: super().tearDown() - rmtree(TEST_MONITOR_BASE) - rmtree(TEST_HANDLER_BASE) - rmtree(TEST_JOB_OUTPUT) + teardown() def testBaseRecipe(self)->None: with self.assertRaises(TypeError): diff --git a/tests/test_patterns.py b/tests/test_patterns.py index 019d425..80da78c 100644 --- a/tests/test_patterns.py +++ b/tests/test_patterns.py @@ -8,10 +8,11 @@ from multiprocessing import Pipe from core.correctness.vars import FILE_CREATE_EVENT, BAREBONES_NOTEBOOK, \ TEST_MONITOR_BASE, EVENT_TYPE, WATCHDOG_RULE, WATCHDOG_BASE, \ WATCHDOG_TYPE, EVENT_PATH -from core.functionality import rmtree, make_dir +from core.functionality import make_dir from patterns.file_event_pattern import FileEventPattern, WatchdogMonitor, \ _DEFAULT_MASK, SWEEP_START, SWEEP_STOP, SWEEP_JUMP from recipes import JupyterNotebookRecipe +from shared import setup, teardown def patterns_equal(tester, pattern_one, pattern_two): @@ -38,11 +39,11 @@ def recipes_equal(tester, recipe_one, recipe_two): class CorrectnessTests(unittest.TestCase): def setUp(self)->None: super().setUp() - make_dir(TEST_MONITOR_BASE, ensure_clean=True) + setup() def tearDown(self)->None: super().tearDown() - rmtree(TEST_MONITOR_BASE) + teardown() def testFileEventPatternCreationMinimum(self)->None: FileEventPattern("name", "path", "recipe", "file") diff --git a/tests/test_recipes.py b/tests/test_recipes.py index 42f51c2..3883bda 100644 --- a/tests/test_recipes.py +++ b/tests/test_recipes.py @@ -13,26 +13,22 @@ from core.correctness.vars import BAREBONES_NOTEBOOK, TEST_HANDLER_BASE, \ APPENDING_NOTEBOOK, META_FILE, BASE_FILE, PARAMS_FILE, JOB_FILE, \ RESULT_FILE from core.correctness.validation import valid_job -from core.functionality import rmtree, make_dir, get_file_hash, create_job, \ - create_event +from core.functionality import get_file_hash, create_job, create_event from core.meow import create_rules, create_rule from patterns.file_event_pattern import FileEventPattern from recipes.jupyter_notebook_recipe import JupyterNotebookRecipe, \ PapermillHandler, job_func from rules.file_event_jupyter_notebook_rule import FileEventJupyterNotebookRule +from shared import setup, teardown class CorrectnessTests(unittest.TestCase): def setUp(self)->None: super().setUp() - make_dir(TEST_MONITOR_BASE) - make_dir(TEST_HANDLER_BASE) - make_dir(TEST_JOB_OUTPUT) + setup() def tearDown(self)->None: super().tearDown() - rmtree(TEST_MONITOR_BASE) - rmtree(TEST_HANDLER_BASE) - rmtree(TEST_JOB_OUTPUT) + teardown() def testJupyterNotebookRecipeCreationMinimum(self)->None: JupyterNotebookRecipe("test_recipe", BAREBONES_NOTEBOOK) diff --git a/tests/test_rules.py b/tests/test_rules.py index d8eac25..5c3a8f6 100644 --- a/tests/test_rules.py +++ b/tests/test_rules.py @@ -5,14 +5,17 @@ from core.correctness.vars import BAREBONES_NOTEBOOK from patterns.file_event_pattern import FileEventPattern from recipes.jupyter_notebook_recipe import JupyterNotebookRecipe from rules.file_event_jupyter_notebook_rule import FileEventJupyterNotebookRule +from shared import setup, teardown class CorrectnessTests(unittest.TestCase): def setUp(self)->None: - return super().setUp() + super().setUp() + setup() def tearDown(self)->None: - return super().tearDown() - + super().tearDown() + teardown() + def testFileEventJupyterNotebookRuleCreationMinimum(self)->None: fep = FileEventPattern("name", "path", "recipe", "file") jnr = JupyterNotebookRecipe("recipe", BAREBONES_NOTEBOOK) diff --git a/tests/test_runner.py b/tests/test_runner.py index a0f4da7..b645ab7 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -8,27 +8,24 @@ from time import sleep from conductors import LocalPythonConductor from core.correctness.vars import TEST_HANDLER_BASE, TEST_JOB_OUTPUT, \ TEST_MONITOR_BASE, APPENDING_NOTEBOOK, RESULT_FILE -from core.functionality import make_dir, rmtree, read_notebook +from core.functionality import make_dir, read_notebook from core.meow import BaseMonitor, BaseHandler, BaseConductor from core.runner import MeowRunner from patterns import WatchdogMonitor, FileEventPattern from recipes.jupyter_notebook_recipe import PapermillHandler, \ JupyterNotebookRecipe +from shared import setup, teardown class MeowTests(unittest.TestCase): def setUp(self)->None: super().setUp() - make_dir(TEST_MONITOR_BASE) - make_dir(TEST_HANDLER_BASE) - make_dir(TEST_JOB_OUTPUT) + setup() def tearDown(self)->None: super().tearDown() - rmtree(TEST_MONITOR_BASE) - rmtree(TEST_HANDLER_BASE) - rmtree(TEST_JOB_OUTPUT) - + teardown() + def testMeowRunnerSetup(self)->None: monitor_one = WatchdogMonitor(TEST_MONITOR_BASE, {}, {}) diff --git a/tests/test_validation.py b/tests/test_validation.py index aad35e8..882e155 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -13,18 +13,18 @@ from core.correctness.validation import check_type, check_implementation, \ from core.correctness.vars import VALID_NAME_CHARS, TEST_MONITOR_BASE, \ SHA256, EVENT_TYPE, EVENT_PATH, JOB_TYPE, JOB_EVENT, JOB_ID, JOB_PATTERN, \ JOB_RECIPE, JOB_RULE, JOB_STATUS, JOB_CREATE_TIME -from core.functionality import rmtree, make_dir +from core.functionality import make_dir +from shared import setup, teardown class CorrectnessTests(unittest.TestCase): def setUp(self)->None: super().setUp() - make_dir(TEST_MONITOR_BASE, ensure_clean=True) + setup() def tearDown(self)->None: super().tearDown() - rmtree(TEST_MONITOR_BASE) - rmtree("first") - + teardown() + def testCheckTypeValid(self)->None: check_type(1, int) check_type(0, int)