def test_api_path(self): with self.assertRaises(AnsibleExitJson) as exc: set_module_args(self.config_module_args.copy()) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False)
def test_api_extended_query_and_WHERE_or(self): with self.assertRaises(AnsibleExitJson) as exc: module_args = self.config_module_args.copy() module_args['extended_query'] = { 'attributes': ['.id', 'name'], 'where': [ { 'or': [ { 'attribute': 'name', 'is': 'in', 'value': [1, 2], }, { 'attribute': 'name', 'is': '!=', 'value': 5, }, ], }, ], } set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False) self.assertEqual(result['msg'], [ { '.id': '*A1', 'name': 'dummy_bridge_A1' }, ])
def test_disabled_omit(self, mock_compose_api_path): mock_compose_api_path.return_value = [ { 'chain': 'input', 'in-interface-list': 'LAN', '.id': '*1', 'dynamic': False, }, ] with self.assertRaises(AnsibleExitJson) as exc: args = self.config_module_args.copy() args.update({ 'path': 'ip firewall filter', 'handle_disabled': 'omit', }) set_module_args(args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False) self.assertEqual(result['result'], [{ 'chain': 'input', 'in-interface-list': 'LAN', '.id': '*1', }])
def test_api_extended_query(self): with self.assertRaises(AnsibleExitJson) as exc: module_args = self.config_module_args.copy() module_args['extended_query'] = { 'attributes': ['.id', 'name'], } set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False) self.assertEqual(result['msg'], [ { '.id': '*A1', 'name': 'dummy_bridge_A1' }, { '.id': '*A2', 'name': 'dummy_bridge_A2' }, { '.id': '*A3', 'name': 'dummy_bridge_A3' }, ])
def test_command_multiple(self): set_module_args( dict( commands=['/system resource print', '/system resource print'])) result = self.execute_module(changed=True) self.assertEqual(len(result['stdout']), 2) self.assertTrue('platform: "MikroTik"' in result['stdout'][0])
def test_regular_result(self, mock_compose_api_path): mock_compose_api_path.return_value = [ { 'called-format': 'mac:ssid', 'interim-update': 'enabled', 'mac-caching': 'disabled', 'mac-format': 'XX:XX:XX:XX:XX:XX', 'mac-mode': 'as-username', 'foo': 'bar', '.id': '*1', }, ] with self.assertRaises(AnsibleExitJson) as exc: args = self.config_module_args.copy() args.update({ 'path': 'caps-man aaa', }) set_module_args(args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False) self.assertEqual(result['result'], [{ 'interim-update': 'enabled', '.id': '*1', }])
def test_module_fail_when_required_args_missing(self): with self.assertRaises(AnsibleFailJson) as exc: set_module_args({}) self.module.main() result = exc.exception.args[0] self.assertEqual(result['failed'], True)
def test_command_retries(self): wait_for = 'result[0] contains "test string"' set_module_args( dict(commands=['/system resource print'], wait_for=wait_for, retries=2)) self.execute_module(failed=True) self.assertEqual(self.run_commands.call_count, 2)
def test_command_match_all_failure(self): wait_for = [ 'result[0] contains "MikroTik"', 'result[0] contains "test string"' ] commands = ['/system resource print', '/system resource print'] set_module_args(dict(commands=commands, wait_for=wait_for, match='all')) self.execute_module(failed=True)
def test_facts_config(self): set_module_args(dict(gather_subset='config')) result = self.execute_module() self.assertIsInstance(result['ansible_facts']['ansible_net_config'], str) self.assertIsInstance( result['ansible_facts']['ansible_net_config_nonverbose'], str)
def test_command_match_any(self): wait_for = [ 'result[0] contains "MikroTik"', 'result[0] contains "test string"' ] set_module_args( dict(commands=['/system resource print'], wait_for=wait_for, match='any')) self.execute_module()
def test_api_remove(self): with self.assertRaises(AnsibleExitJson) as exc: module_args = self.config_module_args.copy() module_args['remove'] = "*A1" set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], True)
def test_api_query_missing_key(self): with self.assertRaises(AnsibleExitJson) as exc: module_args = self.config_module_args.copy() module_args['query'] = ".id other" set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False)
def test_api_update(self): with self.assertRaises(AnsibleExitJson) as exc: module_args = self.config_module_args.copy() module_args['update'] = ".id=*A1 name=unit_test_brige" set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], True)
def test_api_cmd(self): with self.assertRaises(AnsibleExitJson) as exc: module_args = self.config_module_args.copy() module_args['cmd'] = "add name=unit_test_brige_arbitrary" set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False)
def test_command_match_all(self): wait_for = [ 'result[0] contains "MikroTik"', 'result[0] contains "RB1100"' ] set_module_args( dict(commands=['/system resource print'], wait_for=wait_for, match='all')) self.execute_module(changed=True)
def test_api_query_and_WHERE_no_cond(self): with self.assertRaises(AnsibleExitJson) as exc: module_args = self.config_module_args.copy() module_args['query'] = ".id name WHERE name != dummy_bridge_A2" set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False)
def test_api_cmd_none_existing_cmd(self): with self.assertRaises(AnsibleFailJson) as exc: module_args = self.config_module_args.copy() module_args['cmd'] = "add NONE_EXIST=unit_test_brige_arbitrary" set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['failed'], True) self.assertEqual(result['msg'][0], 'no such command')
def test_api_remove_no_id(self): with self.assertRaises(AnsibleFailJson) as exc: module_args = self.config_module_args.copy() module_args['remove'] = "*A2" set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['failed'], True) self.assertEqual(result['msg'][0], 'no such item (4)')
def test_api_update_none_existing_id(self): with self.assertRaises(AnsibleFailJson) as exc: module_args = self.config_module_args.copy() module_args['update'] = ".id=*A2 name=unit_test_brige" set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['failed'], True) self.assertEqual(result['msg'][0], 'no such item (4)')
def test_api_add_already_exist(self): with self.assertRaises(AnsibleFailJson) as exc: module_args = self.config_module_args.copy() module_args['add'] = "name=unit_test_brige_exist" set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['failed'], True) self.assertEqual(result['msg'][0], 'failure: already have interface with such name')
def test_module_fail_when_invalid_gather_subset(self): with self.assertRaises(AnsibleFailJson) as exc: module_args = self.config_module_args.copy() module_args['gather_subset'] = ['!foobar'] set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['failed'], True) self.assertEqual(result['msg'], 'Bad subset: foobar')
def test_facts_hardware(self): set_module_args(dict(gather_subset='hardware')) result = self.execute_module() self.assertEqual(result['ansible_facts']['ansible_net_spacefree_mb'], 64921.6) self.assertEqual(result['ansible_facts']['ansible_net_spacetotal_mb'], 65024.0) self.assertEqual(result['ansible_facts']['ansible_net_memfree_mb'], 988.3) self.assertEqual(result['ansible_facts']['ansible_net_memtotal_mb'], 1010.8)
def test_api_extended_query_missing_key(self): with self.assertRaises(AnsibleExitJson) as exc: module_args = self.config_module_args.copy() module_args['extended_query'] = { 'attributes': ['.id', 'other'], } set_module_args(module_args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False) self.assertEqual(result['msg'], [])
def test_invalid_path(self): with self.assertRaises(AnsibleFailJson) as exc: args = self.config_module_args.copy() args.update({ 'path': 'something invalid' }) set_module_args(args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['failed'], True) self.assertEqual(result['msg'].startswith('value of path must be one of: '), True)
def test_empty_result(self, mock_compose_api_path): mock_compose_api_path.return_value = [] with self.assertRaises(AnsibleExitJson) as exc: args = self.config_module_args.copy() args.update({ 'path': 'ip dns static' }) set_module_args(args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False) self.assertEqual(result['result'], [])
def test_facts_default(self): set_module_args(dict(gather_subset='default')) result = self.execute_module() self.assertEqual(result['ansible_facts']['ansible_net_hostname'], 'MikroTik') self.assertEqual(result['ansible_facts']['ansible_net_version'], '6.42.5 (stable)') self.assertEqual(result['ansible_facts']['ansible_net_model'], 'RouterBOARD 3011UiAS') self.assertEqual(result['ansible_facts']['ansible_net_serialnum'], '1234567890') self.assertEqual(result['ansible_facts']['ansible_net_arch'], 'x86') self.assertEqual(result['ansible_facts']['ansible_net_uptime'], '3h28m52s')
def test_idempotent_1(self): with self.assertRaises(AnsibleExitJson) as exc: args = self.config_module_args.copy() args.update({ 'path': 'ip dns static', 'find': {}, 'values': {}, }) set_module_args(args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], False) self.assertEqual(result['old_data'], START_IP_DNS_STATIC_OLD_DATA) self.assertEqual(result['new_data'], START_IP_DNS_STATIC_OLD_DATA) self.assertEqual(result['match_count'], 3) self.assertEqual(result['modify_count'], 0)
def test_facts_interfaces(self): set_module_args(dict(gather_subset='interfaces')) result = self.execute_module() self.assertIn( result['ansible_facts']['ansible_net_all_ipv4_addresses'][0], ['10.37.129.3', '10.37.0.0', '192.168.88.1']) self.assertEqual( result['ansible_facts']['ansible_net_all_ipv6_addresses'], ['fe80::21c:42ff:fe36:5290']) self.assertEqual( result['ansible_facts']['ansible_net_all_ipv6_addresses'][0], result['ansible_facts']['ansible_net_interfaces']['ether1']['ipv6'] [0]['address']) self.assertEqual( len(result['ansible_facts']['ansible_net_interfaces'].keys()), 11) self.assertEqual(len(result['ansible_facts']['ansible_net_neighbors']), 4)
def test_change_remove_comment_1(self): with self.assertRaises(AnsibleExitJson) as exc: args = self.config_module_args.copy() args.update({ 'path': 'ip dns static', 'find': {}, 'values': { 'comment': None, }, }) set_module_args(args) self.module.main() result = exc.exception.args[0] self.assertEqual(result['changed'], True) self.assertEqual(result['old_data'], START_IP_DNS_STATIC_OLD_DATA) self.assertEqual(result['new_data'], [ { '.id': '*1', 'name': 'router', 'address': '192.168.88.1', 'ttl': '1d', 'disabled': False, 'dynamic': False, }, { '.id': '*A', 'name': 'router', 'text': 'Router Text Entry', 'ttl': '1d', 'disabled': False, 'dynamic': False, }, { '.id': '*7', 'name': 'foo', 'address': '192.168.88.2', 'ttl': '1d', 'disabled': False, 'dynamic': False, }, ]) self.assertEqual('diff' in result, False) self.assertEqual(result['match_count'], 3) self.assertEqual(result['modify_count'], 1)