mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-09-09 19:57:16 +02:00
Implement filter checks: ensure all defined filters are used and remove dead code
Integration tests added/updated: - tests/integration/test_filters_usage.py: AST-based detection of filter definitions (FilterModule.filters), robust Jinja detection ({{ ... }}, {% ... %}, {% filter ... %}), plus Python call tracking; fails if a filter is used only under tests/. - tests/integration/test_filters_are_defined.py: inverse check — every filter used in .yml/.yaml/.j2/.jinja2/.tmpl must be defined locally. Scans only inside Jinja blocks and ignores pipes inside strings (e.g., lookup('pipe', "... | grep ... | awk ...")) to avoid false positives like trusted_hosts, woff/woff2, etc. Bug fixes & robustness: - Build regexes without %-string formatting to avoid ValueError from literal '%' in Jinja tags. - Strip quoted strings in usage analysis so sed/grep/awk pipes are not miscounted as filters. - Prevent self-matches in the defining file. Cleanup / removal of dead code: - Removed unused filter plugins and related unit tests: * filter_plugins/alias_domains_map.py * filter_plugins/get_application_id.py * filter_plugins/load_configuration.py * filter_plugins/safe.py * filter_plugins/safe_join.py * roles/svc-db-openldap/filter_plugins/build_ldap_nested_group_entries.py * roles/sys-ctl-bkp-docker-2-loc/filter_plugins/dict_to_cli_args.py * corresponding tests under tests/unit/* - roles/svc-db-postgres/filter_plugins/split_postgres_connections.py: dropped no-longer-needed list_postgres_roles API; adjusted tests. Misc: - sys-stk-front-proxy/defaults/main.yml: clarified valid vhost_flavour values (comma-separated). Ref: https://chatgpt.com/share/68b56bac-c4f8-800f-aeef-6708dbb44199
This commit is contained in:
@@ -77,12 +77,6 @@ class SplitPostgresConnectionsTests(unittest.TestCase):
|
||||
def test_registry_contains_filters(self):
|
||||
registry = self.mod.FilterModule().filters()
|
||||
self.assertIn("split_postgres_connections", registry)
|
||||
self.assertIn("list_postgres_roles", registry)
|
||||
|
||||
def test_list_postgres_roles(self):
|
||||
roles = self.mod.list_postgres_roles(self.roles_dir)
|
||||
self.assertIsInstance(roles, list)
|
||||
self.assertSetEqual(set(roles), {"app_a", "app_b"})
|
||||
|
||||
def test_split_postgres_connections_division(self):
|
||||
# There are 2 postgres roles -> 200 / 2 = 100
|
||||
|
@@ -1,61 +0,0 @@
|
||||
import unittest
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Add the path to roles/sys-ctl-bkp-docker-2-loc/filter_plugins
|
||||
CURRENT_DIR = os.path.dirname(__file__)
|
||||
FILTER_PLUGIN_DIR = os.path.abspath(
|
||||
os.path.join(CURRENT_DIR, '../../../../../roles/sys-ctl-bkp-docker-2-loc/filter_plugins')
|
||||
)
|
||||
sys.path.insert(0, FILTER_PLUGIN_DIR)
|
||||
|
||||
from dict_to_cli_args import dict_to_cli_args
|
||||
|
||||
|
||||
class TestDictToCliArgs(unittest.TestCase):
|
||||
def test_simple_string_args(self):
|
||||
data = {"backup-dir": "/mnt/backups", "version-suffix": "-nightly"}
|
||||
expected = "--backup-dir=/mnt/backups --version-suffix=-nightly"
|
||||
self.assertEqual(dict_to_cli_args(data), expected)
|
||||
|
||||
def test_boolean_true(self):
|
||||
data = {"shutdown": True, "everything": True}
|
||||
expected = "--shutdown --everything"
|
||||
self.assertEqual(dict_to_cli_args(data), expected)
|
||||
|
||||
def test_boolean_false(self):
|
||||
data = {"shutdown": False, "everything": True}
|
||||
expected = "--everything"
|
||||
self.assertEqual(dict_to_cli_args(data), expected)
|
||||
|
||||
def test_list_argument(self):
|
||||
data = {"ignore-volumes": ["redis", "memcached"]}
|
||||
expected = '--ignore-volumes="redis memcached"'
|
||||
self.assertEqual(dict_to_cli_args(data), expected)
|
||||
|
||||
def test_mixed_arguments(self):
|
||||
data = {
|
||||
"backup-dir": "/mnt/backups",
|
||||
"shutdown": True,
|
||||
"ignore-volumes": ["redis", "memcached"]
|
||||
}
|
||||
result = dict_to_cli_args(data)
|
||||
self.assertIn("--backup-dir=/mnt/backups", result)
|
||||
self.assertIn("--shutdown", result)
|
||||
self.assertIn('--ignore-volumes="redis memcached"', result)
|
||||
|
||||
def test_empty_dict(self):
|
||||
self.assertEqual(dict_to_cli_args({}), "")
|
||||
|
||||
def test_none_value(self):
|
||||
data = {"some-value": None, "other": "yes"}
|
||||
expected = "--other=yes"
|
||||
self.assertEqual(dict_to_cli_args(data), expected)
|
||||
|
||||
def test_invalid_type(self):
|
||||
with self.assertRaises(TypeError):
|
||||
dict_to_cli_args(["not", "a", "dict"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
Reference in New Issue
Block a user