summaryrefslogtreecommitdiff
path: root/test/TestPlayBook.py
diff options
context:
space:
mode:
authorPetr Svoboda <petr@jatys.cz>2013-07-22 16:23:19 +0200
committerJames Cammarata <jimi@sngx.net>2013-08-20 00:40:49 -0500
commite3adfbf5f8b58279770811436cfb64956f04c5c6 (patch)
treecf390b538b8f10ac2ab40092221a92a5e2962b4f /test/TestPlayBook.py
parentfff4f1da331866b2f108a808d2f7a45fbfa12305 (diff)
downloadansible-e3adfbf5f8b58279770811436cfb64956f04c5c6.tar.gz
Add tests for undefined variable detection
Tests `test_playbook_undefined_varsX_fail` check if ansible detects undefined variables when `error_on_undefined_vars` is enabled. These tests fail without "Improve behavior with error_on_undefined_vars enabled" patch. Tests `test_playbook_undefined_varsX_ignore` check if ansible ignores undefined variables when `error_on_undefined_vars` is disabled. Also modify PlayBook._run_task_internal() so error_on_undefined_vars is testable.
Diffstat (limited to 'test/TestPlayBook.py')
-rw-r--r--test/TestPlayBook.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/TestPlayBook.py b/test/TestPlayBook.py
index a34de0ae3c..ac65ce5efc 100644
--- a/test/TestPlayBook.py
+++ b/test/TestPlayBook.py
@@ -266,6 +266,52 @@ class TestPlaybook(unittest.TestCase):
)
playbook.run()
+ def _test_playbook_undefined_vars(self, playbook, fail_on_undefined):
+ # save DEFAULT_UNDEFINED_VAR_BEHAVIOR so we can restore it in the end of the test
+ saved_undefined_var_behavior = C.DEFAULT_UNDEFINED_VAR_BEHAVIOR
+ C.DEFAULT_UNDEFINED_VAR_BEHAVIOR = fail_on_undefined
+
+ test_callbacks = TestCallbacks()
+ playbook = ansible.playbook.PlayBook(
+ playbook=os.path.join(self.test_dir, 'test_playbook_undefined_vars', playbook),
+ host_list='test/test_playbook_undefined_vars/hosts',
+ stats=ans_callbacks.AggregateStats(),
+ callbacks=test_callbacks,
+ runner_callbacks=test_callbacks
+ )
+ actual = playbook.run()
+
+ C.DEFAULT_UNDEFINED_VAR_BEHAVIOR = saved_undefined_var_behavior
+
+ # if different, this will output to screen
+ print "**ACTUAL**"
+ print utils.jsonify(actual, format=True)
+ expected = {
+ "localhost": {
+ "changed": 0,
+ "failures": 0,
+ "ok": int(not fail_on_undefined) + 1,
+ "skipped": 0,
+ "unreachable": int(fail_on_undefined)
+ }
+ }
+ print "**EXPECTED**"
+ print utils.jsonify(expected, format=True)
+
+ assert utils.jsonify(expected, format=True) == utils.jsonify(actual, format=True)
+
+ def test_playbook_undefined_vars1_ignore(self):
+ self._test_playbook_undefined_vars('playbook1.yml', False)
+
+ def test_playbook_undefined_vars1_fail(self):
+ self._test_playbook_undefined_vars('playbook1.yml', True)
+
+ def test_playbook_undefined_vars2_ignore(self):
+ self._test_playbook_undefined_vars('playbook2.yml', False)
+
+ def test_playbook_undefined_vars2_fail(self):
+ self._test_playbook_undefined_vars('playbook2.yml', True)
+
def test_yaml_hosts_list(self):
# Make sure playbooks support hosts: [host1, host2]
# TODO: Actually run the play on more than one host