From be2a968cd202e070920e0ef846bce317b0bfa960 Mon Sep 17 00:00:00 2001 From: Jacob Floyd Date: Mon, 31 May 2021 15:00:08 -0500 Subject: [PATCH 1/7] Ensure that pack fixture paths are absolute st2common.content.utils.get_relative_path_to_pack_file assumes that a relative path is already relative to the pack dir. So, make sure we are passing an absolute path to tests. --- st2tests/st2tests/fixturesloader.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/st2tests/st2tests/fixturesloader.py b/st2tests/st2tests/fixturesloader.py index dd1446153e..502c958106 100644 --- a/st2tests/st2tests/fixturesloader.py +++ b/st2tests/st2tests/fixturesloader.py @@ -158,15 +158,15 @@ def get_fixtures_base_path(): - return os.path.join(os.path.dirname(__file__), "fixtures") + return os.path.abspath(os.path.join(os.path.dirname(__file__), "fixtures")) def get_fixtures_packs_base_path(): - return os.path.join(os.path.dirname(__file__), "fixtures/packs") + return os.path.abspath(os.path.join(os.path.dirname(__file__), "fixtures/packs")) def get_resources_base_path(): - return os.path.join(os.path.dirname(__file__), "resources") + return os.path.abspath(os.path.join(os.path.dirname(__file__), "resources")) class FixturesLoader(object): From 1f193e898b96d21a1002039db1e1d8d4a956c0ff Mon Sep 17 00:00:00 2001 From: Jacob Floyd Date: Wed, 3 Aug 2022 20:38:07 -0500 Subject: [PATCH 2/7] Import PATH/NAME for fixture packs: dummy_pack_1, dummy_pack_10 In order for pants to detect which changes need to be re-run after changing fixtures, pants needs to be able to infer the relevant dependencies. We could use a super-level target to depend on everything, but then we lose the fine-grained invalidation. The only way to tell pants that a test file is using a particular set of fixtures is via python imports. So, this adds some boilerplate python in every pack dir: __init__.py fixture.py We cannot use pack.yaml as a source root marker any more or importing these files fails. We'll have to implement something else for the main packs under contrib/. --- contrib/packs/tests/test_action_unload.py | 11 +++-- st2actions/tests/unit/test_output_schema.py | 4 +- .../tests/unit/controllers/v1/test_actions.py | 21 ++++----- .../tests/unit/controllers/v1/test_packs.py | 45 ++++++++++--------- .../test_register_content_script.py | 11 ++--- st2common/tests/unit/test_aliasesregistrar.py | 8 ++-- .../tests/unit/test_configs_registrar.py | 9 ++-- st2common/tests/unit/test_content_utils.py | 28 ++++++------ .../tests/unit/test_policies_registrar.py | 18 ++++---- .../tests/unit/test_resource_registrar.py | 17 ++++--- .../tests/unit/test_triggers_registrar.py | 13 +++--- st2common/tests/unit/test_virtualenvs.py | 5 ++- .../fixtures/packs/dummy_pack_1/fixture.py | 9 ++++ .../fixtures/packs/dummy_pack_10/__init__.py | 0 .../fixtures/packs/dummy_pack_10/fixture.py | 9 ++++ 15 files changed, 119 insertions(+), 89 deletions(-) create mode 100644 st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py create mode 100644 st2tests/st2tests/fixtures/packs/dummy_pack_10/__init__.py create mode 100644 st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py diff --git a/contrib/packs/tests/test_action_unload.py b/contrib/packs/tests/test_action_unload.py index fc07ff87c3..a4c0745b5c 100644 --- a/contrib/packs/tests/test_action_unload.py +++ b/contrib/packs/tests/test_action_unload.py @@ -36,16 +36,15 @@ from st2tests.base import BaseActionTestCase from st2tests.base import CleanDbTestCase -from st2tests import fixturesloader +from st2tests.fixtures.packs.dummy_pack_1.fixture import ( + PACK_NAME as DUMMY_PACK_1, + PACK_PATH as PACK_PATH_1, +) from pack_mgmt.unload import UnregisterPackAction __all__ = ["UnloadActionTestCase"] -PACK_PATH_1 = os.path.join( - fixturesloader.get_fixtures_packs_base_path(), "dummy_pack_1" -) - class UnloadActionTestCase(BaseActionTestCase, CleanDbTestCase): action_cls = UnregisterPackAction @@ -73,7 +72,7 @@ def setUp(self): register_content() def test_run(self): - pack = "dummy_pack_1" + pack = DUMMY_PACK_1 # Verify all the resources are there pack_dbs = Pack.query(ref=pack) diff --git a/st2actions/tests/unit/test_output_schema.py b/st2actions/tests/unit/test_output_schema.py index 330aa46860..8a91e9cb4d 100644 --- a/st2actions/tests/unit/test_output_schema.py +++ b/st2actions/tests/unit/test_output_schema.py @@ -37,9 +37,11 @@ from st2common.transport import publishers from st2tests.mocks import liveaction as mock_lv_ac_xport +from st2tests.fixtures.packs.dummy_pack_1.fixture import PACK_PATH as DUMMY_PACK_1_PATH + PACKS = [ - st2tests.fixturesloader.get_fixtures_packs_base_path() + "/dummy_pack_1", + DUMMY_PACK_1_PATH, st2tests.fixturesloader.get_fixtures_packs_base_path() + "/orquesta_tests", ] diff --git a/st2api/tests/unit/controllers/v1/test_actions.py b/st2api/tests/unit/controllers/v1/test_actions.py index 8225af15e2..c1891125d7 100644 --- a/st2api/tests/unit/controllers/v1/test_actions.py +++ b/st2api/tests/unit/controllers/v1/test_actions.py @@ -34,7 +34,10 @@ from st2common.constants.pack import SYSTEM_PACK_NAME from st2common.persistence.pack import Pack from st2api.controllers.v1.actions import ActionsController -from st2tests.fixturesloader import get_fixtures_packs_base_path +from st2tests.fixtures.packs.dummy_pack_1.fixture import ( + PACK_NAME as DUMMY_PACK_1, + PACK_PATH as DUMMY_PACK_1_PATH, +) from st2tests.base import CleanFilesTestCase from st2tests.api import FunctionalTest @@ -207,7 +210,7 @@ "name": "st2.dummy.action1", "description": "test description", "enabled": True, - "pack": "dummy_pack_1", + "pack": DUMMY_PACK_1, "entry_point": "/tmp/test/action1.sh", "runner_type": "local-shell-script", "parameters": { @@ -225,7 +228,7 @@ "name": "st2.dummy.action2", "description": "test description", "enabled": True, - "pack": "dummy_pack_1", + "pack": DUMMY_PACK_1, "entry_point": "/tmp/test/action1.sh", "runner_type": "local-shell-script", "parameters": { @@ -238,7 +241,7 @@ "name": "st2.dummy.action14", "description": "test description", "enabled": True, - "pack": "dummy_pack_1", + "pack": DUMMY_PACK_1, "entry_point": "/tmp/test/action1.sh", "runner_type": "local-shell-script", "parameters": { @@ -252,7 +255,7 @@ "name": "st2.dummy.action15", "description": "test description", "enabled": True, - "pack": "dummy_pack_1", + "pack": DUMMY_PACK_1, "entry_point": "/tmp/test/action1.sh", "runner_type": "local-shell-script", "parameters": { @@ -295,7 +298,7 @@ "name": "st2.dummy.action_notify_test", "description": "test description", "enabled": True, - "pack": "dummy_pack_1", + "pack": DUMMY_PACK_1, "entry_point": "/tmp/test/action1.sh", "runner_type": "local-shell-script", "parameters": { @@ -311,7 +314,7 @@ "name": "st2.dummy.action_unicode_我爱狗", "description": "test description", "enabled": True, - "pack": "dummy_pack_1", + "pack": DUMMY_PACK_1, "entry_point": "/tmp/test/action1.sh", "runner_type": "local-shell-script", "parameters": { @@ -333,9 +336,7 @@ class ActionsControllerTestCase( register_packs = True - to_delete_files = [ - os.path.join(get_fixtures_packs_base_path(), "dummy_pack_1/actions/filea.txt") - ] + to_delete_files = [os.path.join(DUMMY_PACK_1_PATH, "actions/filea.txt")] @mock.patch.object( action_validator, "validate_action", mock.MagicMock(return_value=True) diff --git a/st2api/tests/unit/controllers/v1/test_packs.py b/st2api/tests/unit/controllers/v1/test_packs.py index 0af29407cd..7de148d9f1 100644 --- a/st2api/tests/unit/controllers/v1/test_packs.py +++ b/st2api/tests/unit/controllers/v1/test_packs.py @@ -13,8 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os - import requests import mock import sys @@ -32,7 +30,14 @@ from st2tests.api import FunctionalTest from st2tests.api import APIControllerWithIncludeAndExcludeFilterTestCase -from st2tests.fixturesloader import get_fixtures_base_path +from st2tests.fixtures.packs.dummy_pack_1.fixture import ( + PACK_NAME as DUMMY_PACK_1, + PACK_PATH as DUMMY_PACK_1_PATH, +) +from st2tests.fixtures.packs.dummy_pack_10.fixture import ( + PACK_NAME as DUMMY_PACK_10, + PACK_PATH as DUMMY_PACK_10_PATH, +) __all__ = ["PacksControllerTestCase"] @@ -498,15 +503,10 @@ def test_packs_register_endpoint(self, mock_get_packs): # Note: We only register a couple of packs and not all on disk to speed # things up. Registering all the packs takes a long time. - fixtures_base_path = get_fixtures_base_path() - packs_base_path = os.path.join(fixtures_base_path, "packs") - pack_names = [ - "dummy_pack_1", - "dummy_pack_10", - ] - mock_return_value = {} - for pack_name in pack_names: - mock_return_value[pack_name] = os.path.join(packs_base_path, pack_name) + mock_return_value = { + DUMMY_PACK_1: DUMMY_PACK_1_PATH, + DUMMY_PACK_10: DUMMY_PACK_10_PATH, + } mock_get_packs.return_value = mock_return_value @@ -529,7 +529,8 @@ def test_packs_register_endpoint(self, mock_get_packs): # Register resources from a specific pack resp = self.app.post_json( - "/v1/packs/register", {"packs": ["dummy_pack_1"], "fail_on_failure": False} + "/v1/packs/register", + {"packs": [DUMMY_PACK_1], "fail_on_failure": False}, ) self.assertEqual(resp.status_int, 200) @@ -538,13 +539,13 @@ def test_packs_register_endpoint(self, mock_get_packs): self.assertTrue(resp.json["configs"] >= 1) # Verify metadata_file attribute is set - action_dbs = Action.query(pack="dummy_pack_1") + action_dbs = Action.query(pack=DUMMY_PACK_1) self.assertEqual(action_dbs[0].metadata_file, "actions/my_action.yaml") # Register 'all' resource types should try include any possible content for the pack resp = self.app.post_json( "/v1/packs/register", - {"packs": ["dummy_pack_1"], "fail_on_failure": False, "types": ["all"]}, + {"packs": [DUMMY_PACK_1], "fail_on_failure": False, "types": ["all"]}, ) self.assertEqual(resp.status_int, 200) @@ -566,7 +567,7 @@ def test_packs_register_endpoint(self, mock_get_packs): # * policies -> policy types resp = self.app.post_json( "/v1/packs/register", - {"packs": ["dummy_pack_1"], "fail_on_failure": False, "types": ["actions"]}, + {"packs": [DUMMY_PACK_1], "fail_on_failure": False, "types": ["actions"]}, ) self.assertEqual(resp.status_int, 200) @@ -575,7 +576,7 @@ def test_packs_register_endpoint(self, mock_get_packs): resp = self.app.post_json( "/v1/packs/register", - {"packs": ["dummy_pack_1"], "fail_on_failure": False, "types": ["rules"]}, + {"packs": [DUMMY_PACK_1], "fail_on_failure": False, "types": ["rules"]}, ) self.assertEqual(resp.status_int, 200) @@ -611,7 +612,7 @@ def test_packs_register_endpoint(self, mock_get_packs): # Register specific type for a single packs resp = self.app.post_json( - "/v1/packs/register", {"packs": ["dummy_pack_1"], "types": ["action"]} + "/v1/packs/register", {"packs": [DUMMY_PACK_1], "types": ["action"]} ) self.assertEqual(resp.status_int, 200) @@ -620,7 +621,7 @@ def test_packs_register_endpoint(self, mock_get_packs): # Verify that plural name form also works resp = self.app.post_json( - "/v1/packs/register", {"packs": ["dummy_pack_1"], "types": ["actions"]} + "/v1/packs/register", {"packs": [DUMMY_PACK_1], "types": ["actions"]} ) self.assertEqual(resp.status_int, 200) @@ -632,7 +633,7 @@ def test_packs_register_endpoint(self, mock_get_packs): resp = self.app.post_json( "/v1/packs/register", { - "packs": ["dummy_pack_1", "dummy_pack_1", "dummy_pack_1"], + "packs": [DUMMY_PACK_1, DUMMY_PACK_1, DUMMY_PACK_1], "types": ["actions"], "fail_on_failure": False, }, @@ -653,13 +654,13 @@ def test_packs_register_endpoint(self, mock_get_packs): # Fail on failure is enabled by default resp = self.app.post_json("/v1/packs/register", expect_errors=True) - expected_msg = 'Failed to register pack "dummy_pack_10":' + expected_msg = f'Failed to register pack "{DUMMY_PACK_10}":' self.assertEqual(resp.status_int, 400) self.assertIn(expected_msg, resp.json["faultstring"]) # Fail on failure (broken pack metadata) resp = self.app.post_json( - "/v1/packs/register", {"packs": ["dummy_pack_1"]}, expect_errors=True + "/v1/packs/register", {"packs": [DUMMY_PACK_1]}, expect_errors=True ) expected_msg = 'Referenced policy_type "action.mock_policy_error" doesnt exist' diff --git a/st2common/tests/integration/test_register_content_script.py b/st2common/tests/integration/test_register_content_script.py index 1e06ebc796..8ec089c8eb 100644 --- a/st2common/tests/integration/test_register_content_script.py +++ b/st2common/tests/integration/test_register_content_script.py @@ -23,6 +23,7 @@ from st2common.util.shell import run_command from st2tests import config as test_config from st2tests.fixturesloader import get_fixtures_packs_base_path +from st2tests.fixtures.packs.dummy_pack_1.fixture import PACK_PATH as DUMMY_PACK_1_PATH BASE_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -43,7 +44,7 @@ def setUp(self): test_config.parse_args() def test_register_from_pack_success(self): - pack_dir = os.path.join(get_fixtures_packs_base_path(), "dummy_pack_1") + pack_dir = DUMMY_PACK_1_PATH runner_dirs = os.path.join(get_fixtures_packs_base_path(), "runners") opts = [ @@ -142,7 +143,7 @@ def test_register_from_packs_doesnt_throw_on_missing_pack_resource_folder(self): def test_register_all_and_register_setup_virtualenvs(self): # Verify that --register-all works in combinations with --register-setup-virtualenvs # Single pack - pack_dir = os.path.join(get_fixtures_packs_base_path(), "dummy_pack_1") + pack_dir = DUMMY_PACK_1_PATH cmd = BASE_CMD_ARGS + [ "--register-pack=%s" % (pack_dir), "--register-all", @@ -157,7 +158,7 @@ def test_register_all_and_register_setup_virtualenvs(self): def test_register_setup_virtualenvs(self): # Single pack - pack_dir = os.path.join(get_fixtures_packs_base_path(), "dummy_pack_1") + pack_dir = DUMMY_PACK_1_PATH cmd = BASE_CMD_ARGS + [ "--register-pack=%s" % (pack_dir), @@ -173,7 +174,7 @@ def test_register_setup_virtualenvs(self): def test_register_recreate_virtualenvs(self): # 1. Register the pack and ensure it exists and doesn't rely on state from previous # test methods - pack_dir = os.path.join(get_fixtures_packs_base_path(), "dummy_pack_1") + pack_dir = DUMMY_PACK_1_PATH cmd = BASE_CMD_ARGS + [ "--register-pack=%s" % (pack_dir), @@ -187,7 +188,7 @@ def test_register_recreate_virtualenvs(self): self.assertEqual(exit_code, 0) # 2. Run it again with --register-recreate-virtualenvs flag - pack_dir = os.path.join(get_fixtures_packs_base_path(), "dummy_pack_1") + pack_dir = DUMMY_PACK_1_PATH cmd = BASE_CMD_ARGS + [ "--register-pack=%s" % (pack_dir), diff --git a/st2common/tests/unit/test_aliasesregistrar.py b/st2common/tests/unit/test_aliasesregistrar.py index 38d86a2f9f..bd94a9e6b3 100644 --- a/st2common/tests/unit/test_aliasesregistrar.py +++ b/st2common/tests/unit/test_aliasesregistrar.py @@ -20,14 +20,12 @@ from st2common.persistence.action import ActionAlias from st2tests import DbTestCase -from st2tests import fixturesloader +from st2tests.fixtures.packs.dummy_pack_1.fixture import ( + PACK_PATH as ALIASES_FIXTURE_PACK_PATH, +) __all__ = ["TestAliasRegistrar"] - -ALIASES_FIXTURE_PACK_PATH = os.path.join( - fixturesloader.get_fixtures_packs_base_path(), "dummy_pack_1" -) ALIASES_FIXTURE_PATH = os.path.join(ALIASES_FIXTURE_PACK_PATH, "aliases") diff --git a/st2common/tests/unit/test_configs_registrar.py b/st2common/tests/unit/test_configs_registrar.py index 821cec75fa..5c7afe6370 100644 --- a/st2common/tests/unit/test_configs_registrar.py +++ b/st2common/tests/unit/test_configs_registrar.py @@ -28,13 +28,14 @@ from st2tests.base import CleanDbTestCase from st2tests import fixturesloader +from st2tests.fixtures.packs.dummy_pack_1.fixture import ( + PACK_NAME as DUMMY_PACK_1, + PACK_PATH as PACK_1_PATH, +) __all__ = ["ConfigsRegistrarTestCase"] -PACK_1_PATH = os.path.join( - fixturesloader.get_fixtures_packs_base_path(), "dummy_pack_1" -) PACK_6_PATH = os.path.join( fixturesloader.get_fixtures_packs_base_path(), "dummy_pack_6" ) @@ -60,7 +61,7 @@ def test_register_configs_for_all_packs(self): registrar = ConfigsRegistrar(use_pack_cache=False) registrar._pack_loader.get_packs = mock.Mock() - registrar._pack_loader.get_packs.return_value = {"dummy_pack_1": PACK_1_PATH} + registrar._pack_loader.get_packs.return_value = {DUMMY_PACK_1: PACK_1_PATH} packs_base_paths = content_utils.get_packs_base_paths() registrar.register_from_packs(base_dirs=packs_base_paths) diff --git a/st2common/tests/unit/test_content_utils.py b/st2common/tests/unit/test_content_utils.py index 523114a613..2f1f2ebbce 100644 --- a/st2common/tests/unit/test_content_utils.py +++ b/st2common/tests/unit/test_content_utils.py @@ -31,6 +31,10 @@ from st2common.content.utils import get_relative_path_to_pack_file from st2tests import config as tests_config from st2tests.fixturesloader import get_fixtures_packs_base_path +from st2tests.fixtures.packs.dummy_pack_1.fixture import ( + PACK_NAME as DUMMY_PACK_1, + PACK_PATH as DUMMY_PACK_1_PATH, +) class ContentUtilsTestCase(unittest2.TestCase): @@ -112,7 +116,7 @@ def test_get_pack_resource_file_abs_path(self): ValueError, expected_msg, get_pack_resource_file_abs_path, - pack_ref="dummy_pack_1", + pack_ref=DUMMY_PACK_1, resource_type="fooo", file_path="test.py", ) @@ -137,7 +141,7 @@ def test_get_pack_resource_file_abs_path(self): ValueError, expected_msg, get_pack_resource_file_abs_path, - pack_ref="dummy_pack_1", + pack_ref=DUMMY_PACK_1, resource_type="action", file_path=file_path, ) @@ -152,7 +156,7 @@ def test_get_pack_resource_file_abs_path(self): ValueError, expected_msg, get_pack_resource_file_abs_path, - pack_ref="dummy_pack_1", + pack_ref=DUMMY_PACK_1, resource_type="sensor", file_path=file_path, ) @@ -166,18 +170,16 @@ def test_get_pack_resource_file_abs_path(self): ValueError, expected_msg, get_pack_file_abs_path, - pack_ref="dummy_pack_1", + pack_ref=DUMMY_PACK_1, file_path=file_path, ) # Valid paths file_paths = ["foo.py", "a/foo.py", "a/b/foo.py"] for file_path in file_paths: - expected = os.path.join( - get_fixtures_packs_base_path(), "dummy_pack_1/actions", file_path - ) + expected = os.path.join(DUMMY_PACK_1_PATH, "actions", file_path) result = get_pack_resource_file_abs_path( - pack_ref="dummy_pack_1", resource_type="action", file_path=file_path + pack_ref=DUMMY_PACK_1, resource_type="action", file_path=file_path ) self.assertEqual(result, expected) @@ -236,20 +238,18 @@ def test_get_action_libs_abs_path(self): def test_get_relative_path_to_pack_file(self): packs_base_paths = get_fixtures_packs_base_path() - pack_ref = "dummy_pack_1" + pack_ref = DUMMY_PACK_1 # 1. Valid paths - file_path = os.path.join(packs_base_paths, "dummy_pack_1/pack.yaml") + file_path = os.path.join(DUMMY_PACK_1_PATH, "pack.yaml") result = get_relative_path_to_pack_file(pack_ref=pack_ref, file_path=file_path) self.assertEqual(result, "pack.yaml") - file_path = os.path.join( - packs_base_paths, "dummy_pack_1/actions/action.meta.yaml" - ) + file_path = os.path.join(DUMMY_PACK_1_PATH, "actions/action.meta.yaml") result = get_relative_path_to_pack_file(pack_ref=pack_ref, file_path=file_path) self.assertEqual(result, "actions/action.meta.yaml") - file_path = os.path.join(packs_base_paths, "dummy_pack_1/actions/lib/foo.py") + file_path = os.path.join(DUMMY_PACK_1_PATH, "actions/lib/foo.py") result = get_relative_path_to_pack_file(pack_ref=pack_ref, file_path=file_path) self.assertEqual(result, "actions/lib/foo.py") diff --git a/st2common/tests/unit/test_policies_registrar.py b/st2common/tests/unit/test_policies_registrar.py index 85c1d34490..b666d2755b 100644 --- a/st2common/tests/unit/test_policies_registrar.py +++ b/st2common/tests/unit/test_policies_registrar.py @@ -28,6 +28,10 @@ from st2common.persistence.policy import PolicyType from st2tests.base import CleanDbTestCase from st2tests.fixturesloader import get_fixtures_packs_base_path +from st2tests.fixtures.packs.dummy_pack_1.fixture import ( + PACK_NAME as DUMMY_PACK_1, + PACK_PATH as DUMMY_PACK_1_PATH, +) __all__ = ["PoliciesRegistrarTestCase"] @@ -71,12 +75,12 @@ def test_register_all_policies(self): expected_policies = { "test_policy_1": { - "pack": "dummy_pack_1", + "pack": DUMMY_PACK_1, "type": "action.concurrency", "parameters": {"action": "delay", "threshold": 3}, }, "test_policy_3": { - "pack": "dummy_pack_1", + "pack": DUMMY_PACK_1, "type": "action.retry", "parameters": {"retry_on": "timeout", "max_retry_count": 5}, }, @@ -92,12 +96,12 @@ def test_register_all_policies(self): self.assertDictEqual(expected_policies, policies) def test_register_policies_from_pack(self): - pack_dir = os.path.join(get_fixtures_packs_base_path(), "dummy_pack_1") + pack_dir = DUMMY_PACK_1_PATH self.assertEqual(register_policies(pack_dir=pack_dir), 2) p1 = Policy.get_by_ref("dummy_pack_1.test_policy_1") self.assertEqual(p1.name, "test_policy_1") - self.assertEqual(p1.pack, "dummy_pack_1") + self.assertEqual(p1.pack, DUMMY_PACK_1) self.assertEqual(p1.resource_ref, "dummy_pack_1.local") self.assertEqual(p1.policy_type, "action.concurrency") # Verify that a default value for parameter "action" which isn't provided in the file is set @@ -110,16 +114,14 @@ def test_register_policies_from_pack(self): def test_register_policy_invalid_policy_type_references(self): # Policy references an invalid (inexistent) policy type registrar = PolicyRegistrar() - policy_path = os.path.join( - get_fixtures_packs_base_path(), "dummy_pack_1/policies/policy_2.yaml" - ) + policy_path = os.path.join(DUMMY_PACK_1_PATH, "policies/policy_2.yaml") expected_msg = 'Referenced policy_type "action.mock_policy_error" doesnt exist' self.assertRaisesRegexp( ValueError, expected_msg, registrar._register_policy, - pack="dummy_pack_1", + pack=DUMMY_PACK_1, policy=policy_path, ) diff --git a/st2common/tests/unit/test_resource_registrar.py b/st2common/tests/unit/test_resource_registrar.py index 2a1c61ad6a..3e25b62b90 100644 --- a/st2common/tests/unit/test_resource_registrar.py +++ b/st2common/tests/unit/test_resource_registrar.py @@ -28,16 +28,19 @@ from st2tests.base import CleanDbTestCase from st2tests.fixturesloader import get_fixtures_base_path +from st2tests.fixtures.packs.dummy_pack_1.fixture import ( + PACK_NAME as DUMMY_PACK_1, + PACK_PATH as PACK_PATH_1, +) +from st2tests.fixtures.packs.dummy_pack_10.fixture import PACK_PATH as PACK_PATH_10 __all__ = ["ResourceRegistrarTestCase"] -PACK_PATH_1 = os.path.join(get_fixtures_base_path(), "packs/dummy_pack_1") PACK_PATH_6 = os.path.join(get_fixtures_base_path(), "packs/dummy_pack_6") PACK_PATH_7 = os.path.join(get_fixtures_base_path(), "packs/dummy_pack_7") PACK_PATH_8 = os.path.join(get_fixtures_base_path(), "packs/dummy_pack_8") PACK_PATH_9 = os.path.join(get_fixtures_base_path(), "packs/dummy_pack_9") -PACK_PATH_10 = os.path.join(get_fixtures_base_path(), "packs/dummy_pack_10") PACK_PATH_12 = os.path.join(get_fixtures_base_path(), "packs/dummy_pack_12") PACK_PATH_13 = os.path.join(get_fixtures_base_path(), "packs/dummy_pack_13") PACK_PATH_14 = os.path.join(get_fixtures_base_path(), "packs/dummy_pack_14") @@ -58,7 +61,7 @@ def test_register_packs(self): registrar = ResourceRegistrar(use_pack_cache=False) registrar._pack_loader.get_packs = mock.Mock() - registrar._pack_loader.get_packs.return_value = {"dummy_pack_1": PACK_PATH_1} + registrar._pack_loader.get_packs.return_value = {DUMMY_PACK_1: PACK_PATH_1} packs_base_paths = content_utils.get_packs_base_paths() registrar.register_packs(base_dirs=packs_base_paths) @@ -72,7 +75,7 @@ def test_register_packs(self): pack_db = pack_dbs[0] config_schema_db = config_schema_dbs[0] - self.assertEqual(pack_db.name, "dummy_pack_1") + self.assertEqual(pack_db.name, DUMMY_PACK_1) self.assertEqual(len(pack_db.contributors), 2) self.assertEqual(pack_db.contributors[0], "John Doe1 ") self.assertEqual(pack_db.contributors[1], "John Doe2 ") @@ -117,7 +120,7 @@ def test_register_pack_pack_ref(self): registrar = ResourceRegistrar(use_pack_cache=False) registrar._pack_loader.get_packs = mock.Mock() registrar._pack_loader.get_packs.return_value = { - "dummy_pack_1": PACK_PATH_1, + DUMMY_PACK_1: PACK_PATH_1, "dummy_pack_6": PACK_PATH_6, } packs_base_paths = content_utils.get_packs_base_paths() @@ -129,8 +132,8 @@ def test_register_pack_pack_ref(self): self.assertEqual(len(pack_db.contributors), 0) # Ref is not provided, directory name should be used - pack_db = Pack.get_by_name("dummy_pack_1") - self.assertEqual(pack_db.ref, "dummy_pack_1") + pack_db = Pack.get_by_name(DUMMY_PACK_1) + self.assertEqual(pack_db.ref, DUMMY_PACK_1) # "ref" is not provided, but "name" is registrar._register_pack_db(pack_name=None, pack_dir=PACK_PATH_7) diff --git a/st2common/tests/unit/test_triggers_registrar.py b/st2common/tests/unit/test_triggers_registrar.py index 5ceda4f851..acca4fa21a 100644 --- a/st2common/tests/unit/test_triggers_registrar.py +++ b/st2common/tests/unit/test_triggers_registrar.py @@ -21,6 +21,10 @@ from st2common.persistence.trigger import TriggerType from st2tests.base import CleanDbTestCase from st2tests.fixturesloader import get_fixtures_packs_base_path +from st2tests.fixtures.packs.dummy_pack_1.fixture import ( + PACK_NAME as DUMMY_PACK_1, + PACK_PATH as DUMMY_PACK_1_PATH, +) __all__ = ["TriggersRegistrarTestCase"] @@ -41,8 +45,7 @@ def test_register_all_triggers(self): self.assertEqual(len(trigger_dbs), 2) def test_register_triggers_from_pack(self): - base_path = get_fixtures_packs_base_path() - pack_dir = os.path.join(base_path, "dummy_pack_1") + pack_dir = DUMMY_PACK_1_PATH trigger_type_dbs = TriggerType.get_all() self.assertEqual(len(trigger_type_dbs), 0) @@ -57,11 +60,11 @@ def test_register_triggers_from_pack(self): self.assertEqual(len(trigger_dbs), 2) self.assertEqual(trigger_type_dbs[0].name, "event_handler") - self.assertEqual(trigger_type_dbs[0].pack, "dummy_pack_1") + self.assertEqual(trigger_type_dbs[0].pack, DUMMY_PACK_1) self.assertEqual(trigger_dbs[0].name, "event_handler") - self.assertEqual(trigger_dbs[0].pack, "dummy_pack_1") + self.assertEqual(trigger_dbs[0].pack, DUMMY_PACK_1) self.assertEqual(trigger_dbs[0].type, "dummy_pack_1.event_handler") self.assertEqual(trigger_type_dbs[1].name, "head_sha_monitor") - self.assertEqual(trigger_type_dbs[1].pack, "dummy_pack_1") + self.assertEqual(trigger_type_dbs[1].pack, DUMMY_PACK_1) self.assertEqual(trigger_type_dbs[1].payload_schema["type"], "object") diff --git a/st2common/tests/unit/test_virtualenvs.py b/st2common/tests/unit/test_virtualenvs.py index 502f1df83c..f5d0c3e088 100644 --- a/st2common/tests/unit/test_virtualenvs.py +++ b/st2common/tests/unit/test_virtualenvs.py @@ -28,6 +28,7 @@ from st2common.util.virtualenvs import install_requirement from st2common.util.virtualenvs import install_requirements from st2common.util.virtualenvs import setup_pack_virtualenv +from st2tests.fixtures.packs.dummy_pack_1.fixture import PACK_NAME as DUMMY_PACK_1 __all__ = ["VirtualenvUtilsTestCase"] @@ -51,7 +52,7 @@ def setUp(self): def test_setup_pack_virtualenv_doesnt_exist_yet(self): # Test a fresh virtualenv creation - pack_name = "dummy_pack_1" + pack_name = DUMMY_PACK_1 pack_virtualenv_dir = os.path.join(self.virtualenvs_path, pack_name) # Verify virtualenv directory doesn't exist @@ -72,7 +73,7 @@ def test_setup_pack_virtualenv_doesnt_exist_yet(self): def test_setup_pack_virtualenv_already_exists(self): # Test a scenario where virtualenv already exists - pack_name = "dummy_pack_1" + pack_name = DUMMY_PACK_1 pack_virtualenv_dir = os.path.join(self.virtualenvs_path, pack_name) # Verify virtualenv directory doesn't exist diff --git a/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py b/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py new file mode 100644 index 0000000000..2808b48d3e --- /dev/null +++ b/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py @@ -0,0 +1,9 @@ +import os + +from st2tests import fixturesloader + +__all__ = ["PACK_NAME", "PACK_PATH"] + + +PACK_NAME = os.path.basename(os.path.dirname(__file__)) +PACK_PATH = os.path.join(fixturesloader.get_fixtures_packs_base_path(), PACK_NAME) diff --git a/st2tests/st2tests/fixtures/packs/dummy_pack_10/__init__.py b/st2tests/st2tests/fixtures/packs/dummy_pack_10/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py b/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py new file mode 100644 index 0000000000..2808b48d3e --- /dev/null +++ b/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py @@ -0,0 +1,9 @@ +import os + +from st2tests import fixturesloader + +__all__ = ["PACK_NAME", "PACK_PATH"] + + +PACK_NAME = os.path.basename(os.path.dirname(__file__)) +PACK_PATH = os.path.join(fixturesloader.get_fixtures_packs_base_path(), PACK_NAME) From d9868a8c7c4f5fa22a2fa0804b6a2992a597a374 Mon Sep 17 00:00:00 2001 From: Jacob Floyd Date: Mon, 31 May 2021 19:47:39 -0500 Subject: [PATCH 3/7] Minimize pack fixture boilerplate code --- st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py | 8 +------- st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py | 8 +------- st2tests/st2tests/fixturesloader.py | 6 ++++++ 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py b/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py index 2808b48d3e..11b7950efa 100644 --- a/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py +++ b/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py @@ -1,9 +1,3 @@ -import os - from st2tests import fixturesloader -__all__ = ["PACK_NAME", "PACK_PATH"] - - -PACK_NAME = os.path.basename(os.path.dirname(__file__)) -PACK_PATH = os.path.join(fixturesloader.get_fixtures_packs_base_path(), PACK_NAME) +PACK_NAME, PACK_PATH = fixturesloader.get_pack_fixture_name_and_path_from(__file__) diff --git a/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py b/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py index 2808b48d3e..11b7950efa 100644 --- a/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py +++ b/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py @@ -1,9 +1,3 @@ -import os - from st2tests import fixturesloader -__all__ = ["PACK_NAME", "PACK_PATH"] - - -PACK_NAME = os.path.basename(os.path.dirname(__file__)) -PACK_PATH = os.path.join(fixturesloader.get_fixtures_packs_base_path(), PACK_NAME) +PACK_NAME, PACK_PATH = fixturesloader.get_pack_fixture_name_and_path_from(__file__) diff --git a/st2tests/st2tests/fixturesloader.py b/st2tests/st2tests/fixturesloader.py index 502c958106..dd36e9e302 100644 --- a/st2tests/st2tests/fixturesloader.py +++ b/st2tests/st2tests/fixturesloader.py @@ -169,6 +169,12 @@ def get_resources_base_path(): return os.path.abspath(os.path.join(os.path.dirname(__file__), "resources")) +def get_pack_fixture_name_and_path_from(fixture_file): + pack_name = os.path.basename(os.path.dirname(fixture_file)) + pack_path = os.path.join(get_fixtures_packs_base_path(), pack_name) + return pack_name, pack_path + + class FixturesLoader(object): def __init__(self): self.meta_loader = MetaLoader() From be902f57bbe7e543b3cce7e3a2f0daae0d5bdd7e Mon Sep 17 00:00:00 2001 From: Jacob Floyd Date: Tue, 1 Jun 2021 21:17:21 -0500 Subject: [PATCH 4/7] Rename fixtureloader func to be more generic --- st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py | 2 +- st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py | 2 +- st2tests/st2tests/fixturesloader.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py b/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py index 11b7950efa..80dabf8c5b 100644 --- a/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py +++ b/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py @@ -1,3 +1,3 @@ from st2tests import fixturesloader -PACK_NAME, PACK_PATH = fixturesloader.get_pack_fixture_name_and_path_from(__file__) +PACK_NAME, PACK_PATH = fixturesloader.get_fixture_name_and_path(__file__) diff --git a/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py b/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py index 11b7950efa..80dabf8c5b 100644 --- a/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py +++ b/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py @@ -1,3 +1,3 @@ from st2tests import fixturesloader -PACK_NAME, PACK_PATH = fixturesloader.get_pack_fixture_name_and_path_from(__file__) +PACK_NAME, PACK_PATH = fixturesloader.get_fixture_name_and_path(__file__) diff --git a/st2tests/st2tests/fixturesloader.py b/st2tests/st2tests/fixturesloader.py index dd36e9e302..d2c30f0e00 100644 --- a/st2tests/st2tests/fixturesloader.py +++ b/st2tests/st2tests/fixturesloader.py @@ -169,7 +169,7 @@ def get_resources_base_path(): return os.path.abspath(os.path.join(os.path.dirname(__file__), "resources")) -def get_pack_fixture_name_and_path_from(fixture_file): +def get_fixture_name_and_path(fixture_file): pack_name = os.path.basename(os.path.dirname(fixture_file)) pack_path = os.path.join(get_fixtures_packs_base_path(), pack_name) return pack_name, pack_path From 8d6711d3e950ab88c6b59442ac966a69e82a1ef5 Mon Sep 17 00:00:00 2001 From: Jacob Floyd Date: Mon, 14 Jun 2021 12:37:20 -0500 Subject: [PATCH 5/7] add license header --- .../st2tests/fixtures/packs/dummy_pack_1/fixture.py | 13 +++++++++++++ .../fixtures/packs/dummy_pack_10/fixture.py | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py b/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py index 80dabf8c5b..50c698989e 100644 --- a/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py +++ b/st2tests/st2tests/fixtures/packs/dummy_pack_1/fixture.py @@ -1,3 +1,16 @@ +# Copyright 2022 The StackStorm Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. from st2tests import fixturesloader PACK_NAME, PACK_PATH = fixturesloader.get_fixture_name_and_path(__file__) diff --git a/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py b/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py index 80dabf8c5b..50c698989e 100644 --- a/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py +++ b/st2tests/st2tests/fixtures/packs/dummy_pack_10/fixture.py @@ -1,3 +1,16 @@ +# Copyright 2022 The StackStorm Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. from st2tests import fixturesloader PACK_NAME, PACK_PATH = fixturesloader.get_fixture_name_and_path(__file__) From 3b9717e09aa9e83e76403ce3ad7d1ec1951c5de8 Mon Sep 17 00:00:00 2001 From: Jacob Floyd Date: Mon, 14 Jun 2021 13:02:42 -0500 Subject: [PATCH 6/7] fix flake8 identified issues --- contrib/packs/tests/test_action_unload.py | 2 -- st2common/tests/unit/test_triggers_registrar.py | 1 - 2 files changed, 3 deletions(-) diff --git a/contrib/packs/tests/test_action_unload.py b/contrib/packs/tests/test_action_unload.py index a4c0745b5c..c0ffa9f5e3 100644 --- a/contrib/packs/tests/test_action_unload.py +++ b/contrib/packs/tests/test_action_unload.py @@ -15,8 +15,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os - from oslo_config import cfg from st2common.util.monkey_patch import use_select_poll_workaround diff --git a/st2common/tests/unit/test_triggers_registrar.py b/st2common/tests/unit/test_triggers_registrar.py index acca4fa21a..ef06ec5d8a 100644 --- a/st2common/tests/unit/test_triggers_registrar.py +++ b/st2common/tests/unit/test_triggers_registrar.py @@ -14,7 +14,6 @@ # limitations under the License. from __future__ import absolute_import -import os import st2common.bootstrap.triggersregistrar as triggers_registrar from st2common.persistence.trigger import Trigger From a1c1daf4677503052cdd8de80d5937ad901ebf37 Mon Sep 17 00:00:00 2001 From: Jacob Floyd Date: Wed, 3 Aug 2022 20:58:29 -0500 Subject: [PATCH 7/7] add changelog entry --- CHANGELOG.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e056240a97..7912a1cb55 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -86,12 +86,13 @@ Changed * Use PEP 440 direct reference requirements instead of legacy PIP VCS requirements. Now, our ``*.requirements.txt`` files use ``package-name@ git+https://url@version ; markers`` instead of ``git+https://url@version#egg=package-name ; markers``. #5673 - Contributed by @cognifloyd * Move from udatetime to ciso8601 for date functionality ahead of supporting python3.9 #5692 Contributed by Amanda McGuinness (@amanda11 intive) +* Refactor tests to use python imports to identify test fixtures. #5699 + Contributed by @cognifloyd Removed ~~~~~~~