From 97573d8b0c59566877ff55b9291f8f658b09b7c9 Mon Sep 17 00:00:00 2001 From: Sam Doran Date: Wed, 14 Feb 2018 09:27:03 -0500 Subject: [PATCH] Add unit tests for edgeos_command (#35861) --- .../module_utils/network/edgeos/edgeos.py | 2 +- .../modules/network/edgeos/edgeos_command.py | 2 +- lib/ansible/plugins/cliconf/edgeos.py | 2 +- lib/ansible/plugins/terminal/edgeos.py | 2 +- .../modules/network/edgeos/edgeos_module.py | 2 +- .../network/edgeos/test_edgeos_command.py | 74 ++++++++++++++++++- 6 files changed, 77 insertions(+), 7 deletions(-) diff --git a/lib/ansible/module_utils/network/edgeos/edgeos.py b/lib/ansible/module_utils/network/edgeos/edgeos.py index 9ec09f517a..7a72626492 100644 --- a/lib/ansible/module_utils/network/edgeos/edgeos.py +++ b/lib/ansible/module_utils/network/edgeos/edgeos.py @@ -4,7 +4,7 @@ # still belong to the author of the module, and may assign their own license # to the complete work. # -# (c) 2016 Red Hat Inc. +# (c) 2018 Red Hat Inc. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: diff --git a/lib/ansible/modules/network/edgeos/edgeos_command.py b/lib/ansible/modules/network/edgeos/edgeos_command.py index c8d8ae6748..ddacd33d8b 100644 --- a/lib/ansible/modules/network/edgeos/edgeos_command.py +++ b/lib/ansible/modules/network/edgeos/edgeos_command.py @@ -1,6 +1,6 @@ #!/usr/bin/python -# Copyright: (c) 2017, Ansible Project +# Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) diff --git a/lib/ansible/plugins/cliconf/edgeos.py b/lib/ansible/plugins/cliconf/edgeos.py index 6732a6050f..d0958b01b3 100644 --- a/lib/ansible/plugins/cliconf/edgeos.py +++ b/lib/ansible/plugins/cliconf/edgeos.py @@ -1,4 +1,4 @@ -# Copyright: (c) 2017, Ansible Project +# Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) diff --git a/lib/ansible/plugins/terminal/edgeos.py b/lib/ansible/plugins/terminal/edgeos.py index 1f8050fe78..7184db27dd 100644 --- a/lib/ansible/plugins/terminal/edgeos.py +++ b/lib/ansible/plugins/terminal/edgeos.py @@ -1,4 +1,4 @@ -# Copyright: (c) 2017, Ansible Project +# Copyright: (c) 2018, Ansible Project # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) diff --git a/test/units/modules/network/edgeos/edgeos_module.py b/test/units/modules/network/edgeos/edgeos_module.py index 9c2a0e3104..59c7b3e3fc 100644 --- a/test/units/modules/network/edgeos/edgeos_module.py +++ b/test/units/modules/network/edgeos/edgeos_module.py @@ -1,4 +1,4 @@ -# (c) 2017 Red Hat Inc. +# (c) 2018 Red Hat Inc. # # This file is part of Ansible # diff --git a/test/units/modules/network/edgeos/test_edgeos_command.py b/test/units/modules/network/edgeos/test_edgeos_command.py index 8ff1f40e81..7de14c76c8 100644 --- a/test/units/modules/network/edgeos/test_edgeos_command.py +++ b/test/units/modules/network/edgeos/test_edgeos_command.py @@ -1,4 +1,4 @@ -# (c) 2017 Red Hat Inc. +# (c) 2018 Red Hat Inc. # # This file is part of Ansible # @@ -33,4 +33,74 @@ class TestEdgeosCommandModule(TestEdgeosModule): def setUp(self): super(TestEdgeosCommandModule, self).setUp() - self.mock_run_commands = patch() + self.mock_run_commands = patch('ansible.modules.network.edgeos.edgeos_command.run_commands') + self.run_commands = self.mock_run_commands.start() + + def tearDown(self): + super(TestEdgeosCommandModule, self).tearDown() + self.mock_run_commands.stop() + + def load_fixtures(self, commands=None): + def load_from_file(*args, **kwargs): + module, commands = args + output = list() + + for item in commands: + try: + obj = json.loads(item) + command = obj['command'] + except (ValueError, TypeError): + command = item['command'] + filename = str(command).replace(' ', '_') + output.append(load_fixture(filename)) + return output + + self.run_commands.side_effect = load_from_file + + def test_edgeos_command_simple(self): + set_module_args(dict(commands=['show version'])) + result = self.execute_module() + self.assertEqual(len(result['stdout']), 1) + self.assertTrue(result['stdout'][0].startswith('Version: v1.9.7')) + + def test_edgeos_command_multiple(self): + set_module_args(dict(commands=['show version', 'show version'])) + result = self.execute_module() + self.assertEqual(len(result['stdout']), 2) + self.assertTrue(result['stdout'][0].startswith('Version: v1.9.7')) + + def test_edgeos_commond_wait_for(self): + wait_for = 'result[0] contains "Ubiquiti Networks"' + set_module_args(dict(commands=['show version'], wait_for=wait_for)) + self.execute_module() + + def test_edgeos_command_wait_for_fails(self): + wait_for = 'result[0] contains "bad string"' + set_module_args(dict(commands=['show version'], wait_for=wait_for)) + self.execute_module(failed=True) + self.assertEqual(self.run_commands.call_count, 10) + + def test_edgeos_command_retries(self): + wait_for = 'result[0] contains "bad string"' + set_module_args(dict(commands=['show version'], wait_for=wait_for, retries=2)) + self.execute_module(failed=True) + self.assertEqual(self.run_commands.call_count, 2) + + def test_edgeos_command_match_any(self): + wait_for = ['result[0] contains "Ubiquiti Networks"', + 'result[0] contains "bad string"'] + set_module_args(dict(commands=['show version'], wait_for=wait_for, match='any')) + self.execute_module() + + def test_edgeos_command_match_all(self): + wait_for = ['result[0] contains "Ubiquiti Networks"', + 'result[0] contains "EdgeRouter"'] + set_module_args(dict(commands=['show version'], wait_for=wait_for, match='all')) + self.execute_module() + + def test_vyos_command_match_all_failure(self): + wait_for = ['result[0] contains "Ubiquiti Networks"', + 'result[0] contains "bad string"'] + commands = ['show version', 'show version'] + set_module_args(dict(commands=commands, wait_for=wait_for, match='all')) + self.execute_module(failed=True)