diff options
author | Nathaniel Case <this.is@nathanielca.se> | 2017-01-23 15:30:19 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-23 15:30:19 -0500 |
commit | b3662fdad1f3ceec1c8e80aa9c82c6018b01f4e8 (patch) | |
tree | 0eea9d6db68f80e13d46ef493b8c3a3cef50c78a /test | |
parent | cfed617dba3c66d252cd25843ef5e3855f4c1edc (diff) | |
download | ansible-b3662fdad1f3ceec1c8e80aa9c82c6018b01f4e8.tar.gz |
vyos_command 2.3 (#18994)
* Peter's new module_utils/vyos
* Update vyos_command
* Restore `set terminal length $ANSIBLE_VYOS_TERMINAL_LENGTH` in vyos
* vyos_command tests
* Remove provider mentions from vyos_command
* Extend get_config to take (and cache) various `show configuration` commands
Diffstat (limited to 'test')
-rw-r--r-- | test/units/modules/network/vyos/fixtures/show_version | 14 | ||||
-rw-r--r-- | test/units/modules/network/vyos/test_vyos_command.py | 145 |
2 files changed, 159 insertions, 0 deletions
diff --git a/test/units/modules/network/vyos/fixtures/show_version b/test/units/modules/network/vyos/fixtures/show_version new file mode 100644 index 0000000000..a015d554eb --- /dev/null +++ b/test/units/modules/network/vyos/fixtures/show_version @@ -0,0 +1,14 @@ +Version: VyOS 1.1.7 +Description: VyOS 1.1.7 (helium) +Copyright: 2016 VyOS maintainers and contributors +Built by: maintainers@vyos.net +Built on: Wed Feb 17 09:57:31 UTC 2016 +Build ID: 1602170957-4459750 +System type: x86 64-bit +Boot via: image +Hypervisor: VMware +HW model: VMware Virtual Platform +HW S/N: VMware-42 3c 26 25 44 c5 0a 91-cf 2c 97 2b fe 9b 25 be +HW UUID: 423C2625-44C5-0A91-CF2C-972BFE9B25BE +Uptime: 01:08:20 up 52 days, 2:13, 1 user, load average: 0.00, 0.01, 0.05 + diff --git a/test/units/modules/network/vyos/test_vyos_command.py b/test/units/modules/network/vyos/test_vyos_command.py new file mode 100644 index 0000000000..0e987d3247 --- /dev/null +++ b/test/units/modules/network/vyos/test_vyos_command.py @@ -0,0 +1,145 @@ +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import os +import json + +from ansible.compat.tests import unittest +from ansible.compat.tests.mock import patch, MagicMock +from ansible.errors import AnsibleModuleExit +from ansible.modules.network.vyos import vyos_command +from ansible.module_utils import basic +from ansible.module_utils._text import to_bytes + + +fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') +fixture_data = {} + + +def set_module_args(args): + args = json.dumps({'ANSIBLE_MODULE_ARGS': args}) + basic._ANSIBLE_ARGS = to_bytes(args) + + +def load_fixture(name): + path = os.path.join(fixture_path, name) + + if path in fixture_data: + return fixture_data[path] + + with open(path) as f: + data = f.read() + + try: + data = json.loads(data) + except: + pass + + fixture_data[path] = data + return data + + +class TestVyosCommandModule(unittest.TestCase): + + def setUp(self): + self.mock_run_commands = patch('ansible.modules.network.vyos.vyos_command.run_commands') + self.run_commands = self.mock_run_commands.start() + + def tearDown(self): + self.mock_run_commands.stop() + + def execute_module(self, failed=False, changed=False): + + 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: + command = item + filename = str(command).replace(' ', '_') + output.append(load_fixture(filename)) + return output + + self.run_commands.side_effect = load_from_file + + with self.assertRaises(AnsibleModuleExit) as exc: + vyos_command.main() + + result = exc.exception.result + + if failed: + self.assertTrue(result.get('failed')) + else: + self.assertEqual(result.get('changed'), changed, result) + + return result + + def test_vyos_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: VyOS')) + + def test_vyos_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: VyOS')) + + def test_vyos_command_wait_for(self): + wait_for = 'result[0] contains "VyOS maintainers"' + set_module_args(dict(commands=['show version'], wait_for=wait_for)) + self.execute_module() + + def test_vyos_command_wait_for_fails(self): + wait_for = 'result[0] contains "test 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_vyos_command_retries(self): + wait_for = 'result[0] contains "test 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_vyos_command_match_any(self): + wait_for = ['result[0] contains "VyOS maintainers"', + 'result[0] contains "test string"'] + set_module_args(dict(commands=['show version'], wait_for=wait_for, match='any')) + self.execute_module() + + def test_vyos_command_match_all(self): + wait_for = ['result[0] contains "VyOS maintainers"', + 'result[0] contains "maintainers@vyos.net"'] + 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 "VyOS maintainers"', + 'result[0] contains "test string"'] + commands = ['show version', 'show version'] + set_module_args(dict(commands=commands, wait_for=wait_for, match='all')) + self.execute_module(failed=True) |