Skip to content

Commit

Permalink
Adding tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
felixfontein committed Oct 19, 2020
1 parent f9a0695 commit bbb3333
Show file tree
Hide file tree
Showing 27 changed files with 293 additions and 0 deletions.
42 changes: 42 additions & 0 deletions test/TestLocalContent.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
"""Test playbooks with local content."""
import pytest

from ansiblelint.runner import Runner


def test_local_collection(default_rules_collection):
"""Assures local collections are found."""
playbook_path = 'test/local-content/test-collection.yml'
runner = Runner(default_rules_collection, playbook_path, [], [], [])
results = runner.run()

assert len(runner.playbooks) == 1
assert len(results) == 0


def test_roles_local_content(default_rules_collection):
"""Assures local content in roles is found."""
playbook_path = 'test/local-content/test-roles-success/test.yml'
runner = Runner(default_rules_collection, playbook_path, [], [], [])
results = runner.run()

assert len(runner.playbooks) == 4
assert len(results) == 0


def test_roles_local_content_failure(default_rules_collection):
"""Assures local content in roles is found, even if Ansible itself has trouble."""
playbook_path = 'test/local-content/test-roles-failed/test.yml'
runner = Runner(default_rules_collection, playbook_path, [], [], [])
results = runner.run()

assert len(runner.playbooks) == 4
assert len(results) == 0


def test_roles_local_content_failure_complete(default_rules_collection):
"""Role with local content that is not found."""
playbook_path = 'test/local-content/test-roles-failed-complete/test.yml'
runner = Runner(default_rules_collection, playbook_path, [], [], [])
with pytest.raises(SystemExit, match="^3$"):
runner.run()
6 changes: 6 additions & 0 deletions test/local-content/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
The reason that every roles test gets its own directory is that while they
use the same three roles, the way the tests work makes sure that when the
second one runs, the roles and their local plugins from the first test are
still known to Ansible. For that reason, their names reflect the directory
they are in to make sure that tests don't use modules/plugins found by
other tests.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace: testns
name: testcoll
version: 0.1.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""A filter plugin."""


def a_test_filter(a, b):
"""Return a string containing both a and b."""
return '{0}:{1}'.format(a, b)


class FilterModule(object):
"""Filter plugin."""

def filters(self):
"""Return filters."""
return {
'test_filter': a_test_filter
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/python
"""A module."""

from ansible.module_utils.basic import AnsibleModule


def main() -> None:
"""Execute module."""
module = AnsibleModule(dict())
module.exit_json(msg="Hello 2!")


if __name__ == '__main__':
main()
10 changes: 10 additions & 0 deletions test/local-content/test-collection.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
- name: Use module and filter plugin from local collection
hosts: localhost
tasks:
- name: Use module from local collection
testns.testcoll.test_module_2:
- name: Use filter from local collection
assert:
that:
- 1 | testns.testcoll.test_filter(2) == '1:2'
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/python
"""A module."""

from ansible.module_utils.basic import AnsibleModule


def main() -> None:
"""Execute module."""
module = AnsibleModule(dict())
module.exit_json(msg="Hello 1!")


if __name__ == '__main__':
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
- name: Use local module 1
test_module_1_failed_complete:
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: Use local module from other role that has been included before this one
# If it has not been included before, loading this role fails!
test_module_1_failed_complete:
- name: Use local module from other role that has been included before this one
# If it has not been included before, loading this role fails!
test_module_3_failed_complete:
- name: Use local test plugin
assert:
that:
- "'2' is b_test_failed_complete '12345'"
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""A test plugin."""


def compatibility_in_test(a, b):
"""Return True when a is contained in b."""
return a in b


class TestModule:
"""Test plugin."""

def tests(self):
"""Return tests."""
return {
'b_test_failed_complete': compatibility_in_test,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/python
"""A module."""

from ansible.module_utils.basic import AnsibleModule


def main() -> None:
"""Execute module."""
module = AnsibleModule(dict())
module.exit_json(msg="Hello 3!")


if __name__ == '__main__':
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
- name: Use local module 3
test_module_3_failed_complete:
5 changes: 5 additions & 0 deletions test/local-content/test-roles-failed-complete/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
- name: Include role which expects module that is local to other role which is not loaded
hosts: localhost
roles:
- role2
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/python
"""A module."""

from ansible.module_utils.basic import AnsibleModule


def main() -> None:
"""Execute module."""
module = AnsibleModule(dict())
module.exit_json(msg="Hello 1!")


if __name__ == '__main__':
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
- name: Use local module 1
test_module_1_failed:
11 changes: 11 additions & 0 deletions test/local-content/test-roles-failed/roles/role2/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: Use local module from other role that has been included before this one
# If it has not been included before, loading this role fails!
test_module_1_failed:
- name: Use local module from other role that has been included before this one
# If it has not been included before, loading this role fails!
test_module_3_failed:
- name: Use local test plugin
assert:
that:
- "'2' is b_test_failed '12345'"
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""A test plugin."""


def compatibility_in_test(a, b):
"""Return True when a is contained in b."""
return a in b


class TestModule:
"""Test plugin."""

def tests(self):
"""Return tests."""
return {
'b_test_failed': compatibility_in_test,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/python
"""A module."""

from ansible.module_utils.basic import AnsibleModule


def main() -> None:
"""Execute module."""
module = AnsibleModule(dict())
module.exit_json(msg="Hello 3!")


if __name__ == '__main__':
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
- name: Use local module 3
test_module_3_failed:
7 changes: 7 additions & 0 deletions test/local-content/test-roles-failed/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
- name: Use roles with local module in wrong order, so that Ansible fails
hosts: localhost
roles:
- role2
- role3
- role1
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/python
"""A module."""

from ansible.module_utils.basic import AnsibleModule


def main() -> None:
"""Execute module."""
module = AnsibleModule(dict())
module.exit_json(msg="Hello 1!")


if __name__ == '__main__':
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
- name: Use local module 1
test_module_1_success:
11 changes: 11 additions & 0 deletions test/local-content/test-roles-success/roles/role2/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: Use local module from other role that has been included before this one
# If it has not been included before, loading this role fails!
test_module_1_success:
- name: Use local module from other role that has been included before this one
# If it has not been included before, loading this role fails!
test_module_3_success:
- name: Use local test plugin
assert:
that:
- "'2' is b_test_success '12345'"
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""A test plugin."""


def compatibility_in_test(a, b):
"""Return True when a is contained in b."""
return a in b


class TestModule:
"""Test plugin."""

def tests(self):
"""Return tests."""
return {
'b_test_success': compatibility_in_test,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/python
"""A module."""

from ansible.module_utils.basic import AnsibleModule


def main() -> None:
"""Execute module."""
module = AnsibleModule(dict())
module.exit_json(msg="Hello 3!")


if __name__ == '__main__':
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
- name: Use local module 3
test_module_3_success:
7 changes: 7 additions & 0 deletions test/local-content/test-roles-success/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
- name: Use roles with local modules and test plugins
hosts: localhost
roles:
- role1
- role3
- role2

0 comments on commit bbb3333

Please sign in to comment.