summaryrefslogtreecommitdiff
path: root/test/units/modules/network/basics/test_net_command.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/units/modules/network/basics/test_net_command.py')
-rw-r--r--test/units/modules/network/basics/test_net_command.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/test/units/modules/network/basics/test_net_command.py b/test/units/modules/network/basics/test_net_command.py
new file mode 100644
index 0000000000..8286480cb2
--- /dev/null
+++ b/test/units/modules/network/basics/test_net_command.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+#
+# (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.basics import net_command
+from ansible.module_utils import basic
+from ansible.module_utils.local import LocalAnsibleModule
+from ansible.module_utils._text import to_bytes
+
+
+def set_module_args(args):
+ args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
+ basic._ANSIBLE_ARGS = to_bytes(args)
+
+fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures')
+fixture_data = {}
+
+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 TestNetCommandModule(unittest.TestCase):
+
+ def execute_module(self, command_response=None, failed=False, changed=True):
+
+ if not command_response:
+ command_response = (256, '', 'no command response provided in test case')
+
+ with patch.object(LocalAnsibleModule, 'exec_command') as mock_exec_command:
+ mock_exec_command.return_value = command_response
+
+ with self.assertRaises(AnsibleModuleExit) as exc:
+ net_command.main()
+
+ result = exc.exception.result
+
+ if failed:
+ self.assertTrue(result.get('failed'), result)
+ else:
+ self.assertEqual(result.get('changed'), changed, result)
+
+ return result
+
+ def test_net_command_string(self):
+ """
+ Test for all keys in the response
+ """
+ set_module_args({'_raw_params': 'show version'})
+ result = self.execute_module((0, 'ok', ''))
+ for key in ['rc', 'stdout', 'stderr', 'stdout_lines']:
+ self.assertIn(key, result)
+
+ def test_net_command_json(self):
+ """
+ The stdout_lines key should not be present when the return
+ string is a json data structure
+ """
+ set_module_args({'_raw_params': 'show version'})
+ result = self.execute_module((0, '{"key": "value"}', ''))
+ for key in ['rc', 'stdout', 'stderr']:
+ self.assertIn(key, result)
+ self.assertNotIn('stdout_lines', result)
+
+ def test_net_command_missing_command(self):
+ """
+ Test failure on missing command
+ """
+ set_module_args({'_raw_params': ''})
+ self.execute_module(failed=True)