Skip to content

Commit

Permalink
WIP: Added tests for internal errors
Browse files Browse the repository at this point in the history
  • Loading branch information
SegFaulti4 committed Jan 17, 2024
1 parent 4adaa11 commit 6e56bba
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 6 deletions.
1 change: 1 addition & 0 deletions .github/workflows/cotea_testing_workflow.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@ jobs:
cd ./src
python cotea_ok_case.py
python cotea_ansible_error_case.py
python cotea_internal_error_case.py
10 changes: 4 additions & 6 deletions src/cotea/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,16 +123,14 @@ def _set_wrappers_back(self):
PlaybookExecutor.__init__ = self.playbook_executor_wrp.func

def _except_hook(self, args, /):
exc_type, exc_value, exc_traceback, thread = \
args.exc_type, args.exc_value, args.exc_traceback, args.thread

if (exc_type == SystemExit or
if (args.exc_type == SystemExit or
# NOTE: this probably should never happen
thread != self.ansible_thread):
args.thread != self.ansible_thread):
return self._old_except_hook(args)

self.sync_obj.exception = exc_value
self.sync_obj.exception = args.exc_value
self.sync_obj.continue_runner()
return

def _start_ansible(self):
args = self.arg_maker.args
Expand Down
69 changes: 69 additions & 0 deletions src/cotea_internal_error_case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import unittest

from cotea.runner import runner
from cotea.arguments_maker import argument_maker


def run_ansible_error_case(pb_path, inv_path):
arg_maker = argument_maker()
arg_maker.add_arg("-i", inv_path)
r = runner(pb_path, arg_maker, show_progress_bar=True)

while r.has_next_play():
while r.has_next_task():
r.run_next_task()
r.finish_ansible()

if r.was_error():
return True
return False


class TestCotea(unittest.TestCase):

def test_incorrect_playbook_path_case(self):
pb_path = "cotea_run_files/#%|&"
inv_path = "cotea_run_files/inv"

arg_maker = argument_maker()
arg_maker.add_arg("-i", inv_path)
r = runner(pb_path, arg_maker, show_progress_bar=True)

try:
while r.has_next_play():
while r.has_next_task():
r.run_next_task()
r.finish_ansible()
except Exception as e:
self.assertTrue(hasattr(e, "message"), msg="Exception is expected to have 'message' attribute")
self.assertTrue(e.message.startswith(f"the playbook: {pb_path} could not be found"),
msg="Unexpected exception message")
else:
self.assertFalse(True, msg="Ansible is supposed to fail due to syntax error "
"and its' exception should be passed to main thread")

def test_incorrect_syntax_case(self):
pb_path = "cotea_run_files/incorrect.yaml"
inv_path = "cotea_run_files/inv"

arg_maker = argument_maker()
arg_maker.add_arg("-i", inv_path)
r = runner(pb_path, arg_maker, show_progress_bar=True)

try:
while r.has_next_play():
while r.has_next_task():
r.run_next_task()
r.finish_ansible()
except Exception as e:
# NOTE: e should be AnsibleParserError, but "isinstance" returns False for some reason
self.assertTrue(hasattr(e, "message"), msg="Exception is expected to have 'message' attribute")
self.assertTrue(e.message.startswith("couldn't resolve module/action"),
msg="Unexpected exception message")
else:
self.assertFalse(True, msg="Ansible is supposed to fail due to syntax error "
"and its' exception should be passed to main thread")


if __name__ == '__main__':
unittest.main()
6 changes: 6 additions & 0 deletions src/cotea_run_files/incorrect.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
- name: Play1
hosts: all
tasks:
- name: Syntactically incorrect command
battle_star_engine:

0 comments on commit 6e56bba

Please sign in to comment.