summaryrefslogtreecommitdiffstats
path: root/test/test_profiles.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 12:06:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 12:06:49 +0000
commit2fe34b6444502079dc0b84365ce82dbc92de308e (patch)
tree8fedcab52bbbc3db6c5aa909a88a7a7b81685018 /test/test_profiles.py
parentInitial commit. (diff)
downloadansible-lint-2fe34b6444502079dc0b84365ce82dbc92de308e.tar.xz
ansible-lint-2fe34b6444502079dc0b84365ce82dbc92de308e.zip
Adding upstream version 6.17.2.upstream/6.17.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'test/test_profiles.py')
-rw-r--r--test/test_profiles.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/test_profiles.py b/test/test_profiles.py
new file mode 100644
index 0000000..a40382c
--- /dev/null
+++ b/test/test_profiles.py
@@ -0,0 +1,60 @@
+"""Tests for the --profile feature."""
+import platform
+import subprocess
+import sys
+
+from _pytest.capture import CaptureFixture
+
+from ansiblelint.rules import RulesCollection, filter_rules_with_profile
+from ansiblelint.rules.risky_shell_pipe import ShellWithoutPipefail
+from ansiblelint.text import strip_ansi_escape
+
+
+def test_profile_min() -> None:
+ """Asserts our ability to unload rules based on profile."""
+ collection = RulesCollection()
+ assert len(collection.rules) == 4, "Unexpected number of implicit rules."
+ # register one extra rule that we know not to be part of "min" profile
+
+ collection.register(ShellWithoutPipefail())
+ assert len(collection.rules) == 5, "Failed to register new rule."
+
+ filter_rules_with_profile(collection.rules, "min")
+ assert (
+ len(collection.rules) == 3
+ ), "Failed to unload rule that is not part of 'min' profile."
+
+
+def test_profile_listing(capfd: CaptureFixture[str]) -> None:
+ """Test that run without arguments it will detect and lint the entire repository."""
+ cmd = [
+ sys.executable,
+ "-m",
+ "ansiblelint",
+ "-P",
+ ]
+ result = subprocess.run(cmd, check=False).returncode
+ assert result == 0
+
+ out, err = capfd.readouterr()
+
+ # Confirmation that it runs in auto-detect mode
+ assert "command-instead-of-module" in out
+ # On WSL we might see this warning on stderr:
+ # [WARNING]: Ansible is being run in a world writable directory
+ # WSL2 has "WSL2" in platform name but WSL1 has "microsoft":
+ platform_name = platform.platform().lower()
+ err_lines = []
+ for line in strip_ansi_escape(err).splitlines():
+ if "SyntaxWarning:" in line:
+ continue
+ if (
+ "Skipped installing collection dependencies due to running in offline mode."
+ in line
+ ):
+ continue
+ err_lines.append(line)
+ if all(word not in platform_name for word in ["wsl", "microsoft"]) and err_lines:
+ assert (
+ not err_lines
+ ), f"Unexpected stderr output found while running on {platform_name} platform:\n{err_lines}"