-
Notifications
You must be signed in to change notification settings - Fork 635
/
test_examples.py
75 lines (61 loc) · 2.7 KB
/
test_examples.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
"""Assure samples produced desire outcomes."""
import os
from typing import Generator
import pytest
from _pytest.fixtures import FixtureRequest
from ansiblelint.app import get_app
from ansiblelint.rules import RulesCollection
from ansiblelint.runner import Runner
from ansiblelint.testing import run_ansible_lint
@pytest.fixture
def _change_into_examples_dir(request: FixtureRequest) -> Generator[None, None, None]:
# pylint: disable=unused-argument
os.chdir("examples")
yield
os.chdir("..")
@pytest.mark.usefixtures("_change_into_examples_dir")
def test_example(default_rules_collection: RulesCollection) -> None:
"""example.yml is expected to have exact number of errors inside."""
result = Runner("playbooks/example.yml", rules=default_rules_collection).run()
assert len(result) == 21
@pytest.mark.parametrize(
("filename", "line", "column"),
(
pytest.param(
"examples/playbooks/syntax-error-string.yml", 6, 7, id="syntax-error"
),
pytest.param("examples/playbooks/syntax-error.yml", 2, 3, id="syntax-error"),
),
)
def test_example_syntax_error(
default_rules_collection: RulesCollection, filename: str, line: int, column: int
) -> None:
"""Validates that loading valid YAML string produce error."""
result = Runner(filename, rules=default_rules_collection).run()
assert len(result) == 1
assert result[0].rule.id == "syntax-check"
# This also ensures that line and column numbers start at 1, so they
# match what editors will show (or output from other linters)
assert result[0].linenumber == line
assert result[0].column == column
def test_example_custom_module(default_rules_collection: RulesCollection) -> None:
"""custom_module.yml is expected to pass."""
app = get_app(offline=True)
result = Runner(
"examples/playbooks/custom_module.yml", rules=default_rules_collection
).run()
assert len(result) == 0, f"{app.runtime.cache_dir}"
def test_full_vault(default_rules_collection: RulesCollection) -> None:
"""custom_module.yml is expected to pass."""
result = Runner(
"examples/playbooks/vars/not_decryptable.yml", rules=default_rules_collection
).run()
assert len(result) == 0
def test_custom_kinds() -> None:
"""Check if user defined kinds are used."""
result = run_ansible_lint("-vv", "--offline", "examples/other/")
assert result.returncode == 0
# .yaml-too is not a recognized extension and unless is manually defined
# in our ansible-lint config, the test would not identify it as yaml file.
assert "Examining examples/other/some.yaml-too of type yaml" in result.stderr
assert "Examining examples/other/some.j2.yaml of type jinja2" in result.stderr