def test_get_immutables_failure(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_lb_monitor lb_monitor_proxy_mock = Mock(diff_object=Mock(return_value={})) client_mock = Mock() m = Mock(return_value=['some']) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_lb_monitor', get_nitro_client=Mock(return_value=client_mock), ConfigProxy=Mock(return_value=lb_monitor_proxy_mock), ensure_feature_is_enabled=Mock(), lbmonitor_exists=Mock(side_effect=[True, True]), lbmonitor_identical=Mock(side_effect=[False, True]), get_immutables_intersection=m, diff_list=Mock(return_value={}), nitro_exception=self.MockException, ): self.module = netscaler_lb_monitor result = self.failed() self.assertTrue( result['msg'].startswith('Cannot update immutable attributes'), msg='Did not handle immutables error correctly', )
def test_graceful_nitro_exception_state_absent(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='absent', )) from ansible.modules.network.netscaler import netscaler_gslb_site class MockException(Exception): def __init__(self, *args, **kwargs): self.errorcode = 0 self.message = '' m = Mock(side_effect=MockException) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_gslb_site', gslb_site_exists=m, ensure_feature_is_enabled=Mock(), nitro_exception=MockException ): self.module = netscaler_gslb_site result = self.failed() self.assertTrue( result['msg'].startswith('nitro exception'), msg='Nitro exception not caught on operation absent' )
def test_present_gslb_site_identical_flow(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_gslb_site client_mock = Mock() m = Mock(return_value=client_mock) glsb_site_proxy_attrs = { 'diff_object.return_value': {}, } gslb_site_proxy_mock = Mock() gslb_site_proxy_mock.configure_mock(**glsb_site_proxy_attrs) config_proxy_mock = Mock(return_value=gslb_site_proxy_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_gslb_site', get_nitro_client=m, diff_list=Mock(return_value={}), get_immutables_intersection=Mock(return_value=[]), gslb_site_exists=Mock(side_effect=[True, True]), gslb_site_identical=Mock(side_effect=[True, True]), nitro_exception=self.MockException, ensure_feature_is_enabled=Mock(), ConfigProxy=config_proxy_mock, ): self.module = netscaler_gslb_site self.exited() gslb_site_proxy_mock.assert_not_called()
def test_graceful_nitro_error_on_login(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_lb_monitor class MockException(Exception): def __init__(self, *args, **kwargs): self.errorcode = 0 self.message = '' client_mock = Mock() client_mock.login = Mock(side_effect=MockException) m = Mock(return_value=client_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_lb_monitor', get_nitro_client=m, nitro_exception=MockException, ): self.module = netscaler_lb_monitor result = self.failed() self.assertTrue(result['msg'].startswith('nitro exception'), msg='nitro exception during login not handled properly')
def test_absent_gslb_site_failed_delete(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='absent', )) from ansible.modules.network.netscaler import netscaler_gslb_site client_mock = Mock() m = Mock(return_value=client_mock) glsb_site_proxy_attrs = { 'diff_object.return_value': {}, } gslb_site_proxy_mock = Mock() gslb_site_proxy_mock.configure_mock(**glsb_site_proxy_attrs) config_proxy_mock = Mock(return_value=gslb_site_proxy_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_gslb_site', nitro_exception=self.MockException, get_nitro_client=m, diff_list=Mock(return_value={}), get_immutables_intersection=Mock(return_value=[]), gslb_site_exists=Mock(side_effect=[True, True]), gslb_site_identical=Mock(side_effect=[False, False]), ensure_feature_is_enabled=Mock(), ConfigProxy=config_proxy_mock, ): self.module = netscaler_gslb_site result = self.failed() self.assertEqual(result['msg'], 'GSLB site still exists') self.assertTrue(result['failed'])
def test_ensure_feature_is_enabled_called(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_gslb_site gslb_site_proxy_mock = Mock() ensure_feature_is_enabled_mock = Mock() client_mock = Mock() with patch.multiple( 'ansible.modules.network.netscaler.netscaler_gslb_site', get_nitro_client=Mock(return_value=client_mock), gslb_site_exists=Mock(side_effect=[False, True]), gslb_site_identical=Mock(side_effect=[True]), nitro_exception=self.MockException, ensure_feature_is_enabled=ensure_feature_is_enabled_mock, ConfigProxy=Mock(return_value=gslb_site_proxy_mock), ): self.module = netscaler_gslb_site self.exited() ensure_feature_is_enabled_mock.assert_called_with(client_mock, 'GSLB')
def test_save_config_not_called_on_state_absent(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='absent', save_config=False, )) from ansible.modules.network.netscaler import netscaler_gslb_site client_mock = Mock() m = Mock(return_value=client_mock) gslb_site_proxy_mock = Mock() with patch.multiple( 'ansible.modules.network.netscaler.netscaler_gslb_site', get_nitro_client=m, gslb_site_exists=Mock(side_effect=[True, False]), nitro_exception=self.MockException, ensure_feature_is_enabled=Mock(), ConfigProxy=Mock(return_value=gslb_site_proxy_mock), ): self.module = netscaler_gslb_site self.exited() self.assertNotIn(call.save_config(), client_mock.mock_calls)
def test_slxos_linkagg_group_members_absent(self, *args, **kwargs): set_module_args(dict( group='20', state='absent' )) result = self.execute_module(changed=True) self.assertEqual( result, { 'commands': [ 'no interface port-channel 20' ], 'changed': True } ) set_module_args(dict( group='10', state='absent' )) result = self.execute_module(changed=False) self.assertEqual( result, { 'commands': [], 'changed': False } )
def test_graceful_login_error(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_gslb_site if sys.version_info[:2] == (2, 6): self.skipTest('requests library not available under python2.6') class MockException(Exception): pass client_mock = Mock() attrs = {'login.side_effect': requests.exceptions.SSLError} client_mock.configure_mock(**attrs) m = Mock(return_value=client_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_gslb_site', get_nitro_client=m, nitro_exception=MockException, ): self.module = netscaler_gslb_site result = self.failed() self.assertTrue(result['msg'].startswith('SSL Error'), msg='SSL Error was not handled gracefully')
def test_present_server_update_immutable_attribute(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_ssl_certkey client_mock = Mock() m = Mock(return_value=client_mock) ssl_certkey_proxy_attrs = { 'diff_object.return_value': {}, } ssl_certkey_proxy_mock = Mock() ssl_certkey_proxy_mock.configure_mock(**ssl_certkey_proxy_attrs) config_proxy_mock = Mock(return_value=ssl_certkey_proxy_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_ssl_certkey', nitro_exception=self.MockException, get_nitro_client=m, diff_list=Mock(return_value={}), get_immutables_intersection=Mock(return_value=['domain']), key_exists=Mock(side_effect=[True, True]), key_identical=Mock(side_effect=[False, False]), ConfigProxy=config_proxy_mock, ): self.module = netscaler_ssl_certkey result = self.failed() self.assertEqual(result['msg'], 'Cannot update immutable attributes [\'domain\']') self.assertTrue(result['failed'])
def test_bgp_add_network(self): neighbors = [dict(remote_as=173, neighbor='10.2.3.4')] set_module_args(dict(as_number=172, router_id='1.2.3.4', neighbors=neighbors, networks=['172.16.1.0/24', '172.16.2.0/24'])) commands = ['router bgp 172 network 172.16.2.0 /24'] self.execute_module(changed=True, commands=commands)
def test_new_ssl_certkey_execution_flow(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_ssl_certkey client_mock = Mock() m = Mock(return_value=client_mock) ssl_certkey_proxy_attrs = { 'diff_object.return_value': {}, } ssl_certkey_proxy_mock = Mock() ssl_certkey_proxy_mock.configure_mock(**ssl_certkey_proxy_attrs) config_proxy_mock = Mock(return_value=ssl_certkey_proxy_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_ssl_certkey', get_nitro_client=m, key_exists=Mock(side_effect=[False, True]), key_identical=Mock(side_effect=[True]), ConfigProxy=config_proxy_mock, ): self.module = netscaler_ssl_certkey self.exited() ssl_certkey_proxy_mock.assert_has_calls([call.add()])
def test_absent_server_noop_flow(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='absent', )) from ansible.modules.network.netscaler import netscaler_ssl_certkey client_mock = Mock() m = Mock(return_value=client_mock) ssl_certkey_proxy_attrs = { 'diff_object.return_value': {}, } ssl_certkey_proxy_mock = Mock() ssl_certkey_proxy_mock.configure_mock(**ssl_certkey_proxy_attrs) config_proxy_mock = Mock(return_value=ssl_certkey_proxy_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_ssl_certkey', get_nitro_client=m, diff_list=Mock(return_value={}), get_immutables_intersection=Mock(return_value=[]), key_exists=Mock(side_effect=[False, False]), key_identical=Mock(side_effect=[False, False]), ConfigProxy=config_proxy_mock, ): self.module = netscaler_ssl_certkey self.exited() ssl_certkey_proxy_mock.assert_not_called()
def test_mlag_port_channel_add(self): set_module_args(dict(name='Mpo34', state='present', members=['Eth1/9'])) self.load_mlag_port_channel_fixture() commands = ['interface mlag-port-channel 34', 'exit', 'interface ethernet 1/9 mlag-channel-group 34 mode on'] self.execute_module(changed=True, commands=commands)
def test_save_config_not_called_on_state_absent(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='absent', save_config=False, )) from ansible.modules.network.netscaler import netscaler_ssl_certkey client_mock = Mock() m = Mock(return_value=client_mock) ssl_certkey_proxy_mock = Mock() with patch.multiple( 'ansible.modules.network.netscaler.netscaler_ssl_certkey', get_nitro_client=m, key_exists=Mock(side_effect=[True, False]), ConfigProxy=Mock(return_value=ssl_certkey_proxy_mock), ): self.module = netscaler_ssl_certkey self.exited() self.assertNotIn(call.save_config(), client_mock.mock_calls)
def test_vyos_system_clear_all(self): set_module_args(dict(state='absent')) commands = ['delete system host-name', 'delete system domain-search domain', 'delete system domain-name', 'delete system name-server'] self.execute_module(changed=True, commands=commands)
def test_port_channel_add(self): set_module_args(dict(name='Po23', state='present', members=['Eth1/8'])) self.load_port_channel_fixture() commands = ['interface port-channel 23', 'exit', 'interface ethernet 1/8 channel-group 23 mode on'] self.execute_module(changed=True, commands=commands)
def test_create_lambda_if_not_exist(): set_module_args(base_module_args) (boto3_conn_double, lambda_client_double) = make_mock_no_connection_connection(code_change_lambda_config) with patch.object(lda, 'boto3_conn', boto3_conn_double): try: lda.main() except SystemExit: pass # guard against calling other than for a lambda connection (e.g. IAM) assert(len(boto3_conn_double.mock_calls) > 0), "boto connections never used" assert(len(boto3_conn_double.mock_calls) < 2), "multiple boto connections used unexpectedly" assert(len(lambda_client_double.update_function_configuration.mock_calls) == 0), \ "unexpectedly updated lambda configuration when should have only created" assert(len(lambda_client_double.update_function_code.mock_calls) == 0), \ "update lambda function code when function should have been created only" assert(len(lambda_client_double.create_function.mock_calls) > 0), \ "failed to call create_function " (create_args, create_kwargs) = lambda_client_double.create_function.call_args assert (len(create_kwargs) > 0), "expected create called with keyword args, none found" try: # For now I assume that we should NOT send an empty environment. It might # be okay / better to explicitly send an empty environment. However `None' # is not acceptable - mikedlr create_kwargs["Environment"] raise(Exception("Environment sent to boto when none expected")) except KeyError: pass # We are happy, no environment is fine
def test_ipl_add_peer(self): self._mlag_enabled = True set_module_args(dict(name="Po1", state='present', vlan_interface='Vlan 1002', peer_address='10.2.2.4')) commands = ['interface vlan 1002 ipl 1 peer-address 10.2.2.4'] self.execute_module(changed=True, commands=commands)
def test_absent_server_failed_delete(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='absent', )) from ansible.modules.network.netscaler import netscaler_server client_mock = Mock() m = Mock(return_value=client_mock) server_proxy_attrs = { 'diff_object.return_value': {}, } server_proxy_mock = Mock() server_proxy_mock.configure_mock(**server_proxy_attrs) config_proxy_mock = Mock(return_value=server_proxy_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_server', nitro_exception=self.MockException, get_nitro_client=m, diff_list=Mock(return_value={}), get_immutables_intersection=Mock(return_value=[]), server_exists=Mock(side_effect=[True, True]), server_identical=Mock(side_effect=[False, False]), ConfigProxy=config_proxy_mock, do_state_change=Mock(return_value=Mock(errorcode=0)) ): self.module = netscaler_server result = self.failed() self.assertEqual(result['msg'], 'Server seems to be present') self.assertTrue(result['failed'])
def test_ironware_facts_gather_subset_config(self): set_module_args({'gather_subset': 'config'}) result = self.execute_module() ansible_facts = result['ansible_facts'] self.assertIn('default', ansible_facts['ansible_net_gather_subset']) self.assertIn('config', ansible_facts['ansible_net_gather_subset']) self.assertIn('ansible_net_config', ansible_facts)
def test_disable_server_graceful(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', disabled=True, graceful=True )) from ansible.modules.network.netscaler import netscaler_server client_mock = Mock() m = Mock(return_value=client_mock) server_proxy_mock = Mock() d = { 'graceful': True, 'delay': 20, } with patch.multiple( 'ansible.modules.network.netscaler.netscaler_server', nitro_exception=self.MockException, get_nitro_client=m, diff_list=Mock(return_value=d), get_immutables_intersection=Mock(return_value=[]), server_exists=Mock(side_effect=[True, True]), ConfigProxy=Mock(return_value=server_proxy_mock), do_state_change=Mock(return_value=Mock(errorcode=0)) ): self.module = netscaler_server result = self.exited() self.assertEqual(d, {}, 'Graceful disable options were not discarded from the diff_list with the actual object')
def test_save_config_not_called_on_state_present(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', save_config=False, )) from ansible.modules.network.netscaler import netscaler_server client_mock = Mock() m = Mock(return_value=client_mock) server_proxy_mock = Mock() with patch.multiple( 'ansible.modules.network.netscaler.netscaler_server', get_nitro_client=m, server_exists=Mock(side_effect=[False, True]), ConfigProxy=Mock(return_value=server_proxy_mock), diff_list=Mock(return_value={}), do_state_change=Mock(return_value=Mock(errorcode=0)) ): self.module = netscaler_server self.exited() self.assertNotIn(call.save_config(), client_mock.mock_calls)
def test_update_agent_status_traps(self, *args): set_module_args(dict( sync_device_to_group='yes', device_group="foo", password='******', server='localhost', user='******' )) client = AnsibleF5Client( argument_spec=self.spec.argument_spec, supports_check_mode=self.spec.supports_check_mode, f5_product_name=self.spec.f5_product_name ) mm = ModuleManager(client) # Override methods to force specific logic in the module to happen mm._device_group_exists = Mock(return_value=True) mm._sync_to_group_required = Mock(return_value=False) mm.execute_on_device = Mock(return_value=True) mm.read_current_from_device = Mock(return_value=None) mm._get_status_from_resource = Mock() mm._get_status_from_resource.side_effect = [ 'Changes Pending', 'Awaiting Initial Sync', 'In Sync' ] results = mm.exec_module() assert results['changed'] is True
def test_iosxr_config_match_exact(self): lines = ['ip address 1.2.3.4 255.255.255.0', 'description test string', 'shutdown'] parents = ['interface GigabitEthernet0/0'] set_module_args(dict(lines=lines, parents=parents, match='exact')) commands = parents + lines self.execute_module(changed=True, commands=commands, sort=False)
def test_save_config_called_on_state_present(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_gslb_vserver client_mock = Mock() m = Mock(return_value=client_mock) gslb_service_proxy_mock = Mock() with patch.multiple( 'ansible.modules.network.netscaler.netscaler_gslb_vserver', get_nitro_client=m, gslb_vserver_exists=Mock(side_effect=[False, True]), gslb_vserver_identical=Mock(side_effect=[True]), do_state_change=Mock(return_value=Mock(errorcode=0)), nitro_exception=self.MockException, ensure_feature_is_enabled=Mock(), ConfigProxy=Mock(return_value=gslb_service_proxy_mock), ): self.module = netscaler_gslb_vserver self.exited() self.assertIn(call.save_config(), client_mock.mock_calls)
def test_new_gslb_vserver_execution_flow(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_gslb_vserver client_mock = Mock() m = Mock(return_value=client_mock) glsb_service_proxy_attrs = { 'diff_object.return_value': {}, } gslb_service_proxy_mock = Mock() gslb_service_proxy_mock.configure_mock(**glsb_service_proxy_attrs) config_proxy_mock = Mock(return_value=gslb_service_proxy_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_gslb_vserver', get_nitro_client=m, gslb_vserver_exists=Mock(side_effect=[False, True]), gslb_vserver_identical=Mock(side_effect=[True]), nitro_exception=self.MockException, do_state_change=Mock(return_value=Mock(errorcode=0)), ensure_feature_is_enabled=Mock(), ConfigProxy=config_proxy_mock, ): self.module = netscaler_gslb_vserver self.exited() gslb_service_proxy_mock.assert_has_calls([call.add()])
def test_do_state_change_fail(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_server client_mock = Mock() m = Mock(return_value=client_mock) server_proxy_mock = Mock() with patch.multiple( 'ansible.modules.network.netscaler.netscaler_server', nitro_exception=self.MockException, get_nitro_client=m, server_exists=Mock(side_effect=[True, False]), ConfigProxy=Mock(return_value=server_proxy_mock), diff_list=Mock(return_value={}), do_state_change=Mock(return_value=Mock(errorcode=1, message='Failed on purpose')) ): self.module = netscaler_server result = self.failed() self.assertEqual(result['msg'], 'Error when setting disabled state. errorcode: 1 message: Failed on purpose')
def test_dellos10_config_match_exact(self): lines = ['ip address 1.2.3.4/24', 'description test string', 'shutdown'] parents = ['interface ethernet1/1/2'] set_module_args(dict(lines=lines, parents=parents, match='exact')) commands = parents + lines self.execute_module(changed=True, commands=commands, sort=False)
def test_present_server_identical_flow(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='1.1.1.1', state='present', )) from ansible.modules.network.netscaler import netscaler_server client_mock = Mock() m = Mock(return_value=client_mock) server_proxy_attrs = { 'diff_object.return_value': {}, } server_proxy_mock = Mock() server_proxy_mock.configure_mock(**server_proxy_attrs) config_proxy_mock = Mock(return_value=server_proxy_mock) with patch.multiple( 'ansible.modules.network.netscaler.netscaler_server', get_nitro_client=m, diff_list=Mock(return_value={}), get_immutables_intersection=Mock(return_value=[]), server_exists=Mock(side_effect=[True, True]), server_identical=Mock(side_effect=[True, True]), ConfigProxy=config_proxy_mock, do_state_change=Mock(return_value=Mock(errorcode=0)) ): self.module = netscaler_server self.exited() server_proxy_mock.assert_not_called()
def test_eth_ifc_update(self): set_module_args( dict(name='Eth1/5', state='present', ipv4='172.3.13.4/24')) commands = ['interface ethernet 1/5 ip address 172.3.13.4/24'] self.load_eth_ifc_fixture() self._execute_module(changed=True, commands=commands)
def test_cnos_l3_interface_ipv4_address(self, *args, **kwargs): set_module_args(dict(name='Ethernet 1/35', ipv4='192.168.4.1/24')) commands = [ 'interface Ethernet 1/35', 'ip address 192.168.4.1 255.255.255.0' ] result = self.execute_module(changed=True, commands=commands)
def _run_module(self, module_args): set_module_args(module_args) with pytest.raises(AnsibleExitJson) as ex: self.module.main() return ex.value.args[0]
def test_eth_ifc_remove(self): set_module_args(dict(name='Eth1/5', state='absent')) commands = ['interface ethernet 1/5 no ip address'] self.load_eth_ifc_fixture() self._execute_module(changed=True, commands=commands)
def test_eth_ifc_no_change(self): set_module_args( dict(name='Eth1/5', state='present', ipv4='172.3.12.4/24')) self.load_eth_ifc_fixture() self._execute_module(changed=False)
def test_vlan_ifc_update(self): set_module_args( dict(name='Vlan 1002', state='present', ipv4='172.3.13.4/24')) commands = ['interface vlan 1002 ip address 172.3.13.4/24'] self.load_vlan_ifc_fixture() self._execute_module(changed=True, commands=commands)
def test_vlan_ifc_remove(self): set_module_args(dict(name='Vlan 1002', state='absent')) commands = ['interface vlan 1002 no ip address'] self.load_vlan_ifc_fixture() self._execute_module(changed=True, commands=commands)
def test_vyos_config_backup(self): set_module_args(dict(backup=True)) result = self.execute_module() self.assertIn('__backup__', result)
def test_edgeos_facts_invalid_subset(self): set_module_args(dict(gather_subset='cereal')) result = self.execute_module(failed=True)
def test_vyos_config_lines(self): commands = ['set system host-name foo'] set_module_args(dict(lines=commands)) candidate = '\n'.join(commands) self.conn.get_diff = MagicMock(return_value=self.cliconf_obj.get_diff(candidate, self.running_config)) self.execute_module(changed=True, commands=commands)
def test_configure_dcb_wrr_mode_with_change(self): set_module_args(dict(interfaces=["Eth1/1"], tc=0, dcb=dict(mode="wrr", weight=10))) commands = [ "interface ethernet 1/1 traffic-class 0 dcb ets wrr 10" ] self.execute_module(changed=True, commands=commands)
def test_vyos_config_unchanged(self): src = load_fixture('vyos_config_config.cfg') self.conn.get_diff = MagicMock(return_value=self.cliconf_obj.get_diff(src, src)) set_module_args(dict(src=src)) self.execute_module()
def test_configure_congestion_control_disabled_with_no_change(self): set_module_args(dict(state="disabled", interfaces=["Eth1/1"], tc=0)) self.execute_module(changed=False)
def _run_module_with_fail_json(self, module_args): set_module_args(module_args) with pytest.raises(AnsibleFailJson) as exc: self.module.main() result = exc.value.args[0] return result
def test_ios_config_replace_config_requires_src(self): args = dict(replace='config') set_module_args(args) result = self.execute_module(failed=True)
def test_configure_dcb_strict_mode_with_change(self): set_module_args(dict(interfaces=["Eth1/1"], tc=1, dcb=dict(mode="strict"))) commands = [ "interface ethernet 1/1 traffic-class 1 dcb ets strict" ] self.execute_module(changed=True, commands=commands)
def test_ios_config_match_strict_requires_lines(self): args = dict(match='strict') set_module_args(args) result = self.execute_module(failed=True)
def test_configure_dcb_wrr_mode_with_no_change(self): set_module_args(dict(interfaces=["Eth1/1"], tc=0, dcb=dict(mode="wrr", weight=12))) self.execute_module(changed=False)
def test_ios_config_match_none(self): lines = ['hostname router'] set_module_args(dict(lines=lines, match='none')) self.conn.get_diff = MagicMock(return_value=self.cliconf_obj.get_diff( '\n'.join(lines), self.running_config, diff_match='none')) self.execute_module(changed=True, commands=lines)
def test_ios_config_replace_block_requires_lines(self): args = dict(replace='block') set_module_args(args) result = self.execute_module(failed=True)
def test_iprange(self): """ Test iprange module with its flags src_range and dst_range """ set_module_args({ 'chain': 'INPUT', 'match': ['iprange'], 'src_range': '192.168.1.100-192.168.1.199', 'jump': 'ACCEPT' }) commands_results = [ (0, '', ''), ] with patch.object(basic.AnsibleModule, 'run_command') as run_command: run_command.side_effect = commands_results with self.assertRaises(AnsibleExitJson) as result: iptables.main() self.assertTrue(result.exception.args[0]['changed']) self.assertEqual(run_command.call_count, 1) self.assertEqual(run_command.call_args_list[0][0][0], [ '/sbin/iptables', '-t', 'filter', '-C', 'INPUT', '-m', 'iprange', '-j', 'ACCEPT', '--src-range', '192.168.1.100-192.168.1.199', ]) set_module_args({ 'chain': 'INPUT', 'src_range': '192.168.1.100-192.168.1.199', 'dst_range': '10.0.0.50-10.0.0.100', 'jump': 'ACCEPT' }) commands_results = [ (0, '', ''), ] with patch.object(basic.AnsibleModule, 'run_command') as run_command: run_command.side_effect = commands_results with self.assertRaises(AnsibleExitJson) as result: iptables.main() self.assertTrue(result.exception.args[0]['changed']) self.assertEqual(run_command.call_count, 1) self.assertEqual(run_command.call_args_list[0][0][0], [ '/sbin/iptables', '-t', 'filter', '-C', 'INPUT', '-j', 'ACCEPT', '-m', 'iprange', '--src-range', '192.168.1.100-192.168.1.199', '--dst-range', '10.0.0.50-10.0.0.100' ]) set_module_args({ 'chain': 'INPUT', 'dst_range': '10.0.0.50-10.0.0.100', 'jump': 'ACCEPT' }) commands_results = [ (0, '', ''), ] with patch.object(basic.AnsibleModule, 'run_command') as run_command: run_command.side_effect = commands_results with self.assertRaises(AnsibleExitJson) as result: iptables.main() self.assertTrue(result.exception.args[0]['changed']) self.assertEqual(run_command.call_count, 1) self.assertEqual(run_command.call_args_list[0][0][0], [ '/sbin/iptables', '-t', 'filter', '-C', 'INPUT', '-j', 'ACCEPT', '-m', 'iprange', '--dst-range', '10.0.0.50-10.0.0.100' ])
def test_ios_config_src_and_parents_fails(self): args = dict(src='foo', parents='foo') set_module_args(args) result = self.execute_module(failed=True)
def test_vyos_firewall_global_set_01_merged(self): set_module_args( dict(config=dict( validation='strict', config_trap=True, log_martians=True, syn_cookies=True, twa_hazards_protection=True, ping=dict(all=True, broadcast=True), state_policy=[ dict( connection_type='established', action='accept', log=True, ), dict(connection_type='invalid', action='reject') ], route_redirects=[ dict(afi='ipv4', ip_src_route=True, icmp_redirects=dict(send=True, receive=False)) ], group=dict( address_group=[ dict( name='MGMT-HOSTS', description='This group has the Management hosts address lists', members=[ dict(address='192.0.1.1'), dict(address='192.0.1.3'), dict(address='192.0.1.5') ]) ], network_group=[ dict(name='MGMT', description='This group has the Management network addresses', members=[dict(address='192.0.1.0/24')]) ])), state="merged")) commands = [ "set firewall group address-group MGMT-HOSTS address 192.0.1.1", "set firewall group address-group MGMT-HOSTS address 192.0.1.3", "set firewall group address-group MGMT-HOSTS address 192.0.1.5", "set firewall group address-group MGMT-HOSTS description 'This group has the Management hosts address lists'", "set firewall group address-group MGMT-HOSTS", "set firewall group network-group MGMT network 192.0.1.0/24", "set firewall group network-group MGMT description 'This group has the Management network addresses'", "set firewall group network-group MGMT", "set firewall ip-src-route 'enable'", "set firewall receive-redirects 'disable'", "set firewall send-redirects 'enable'", "set firewall config-trap 'enable'", "set firewall state-policy established action 'accept'", "set firewall state-policy established log 'enable'", "set firewall state-policy invalid action 'reject'", "set firewall broadcast-ping 'enable'", "set firewall all-ping 'enable'", "set firewall log-martians 'enable'", "set firewall twa-hazards-protection 'enable'", "set firewall syn-cookies 'enable'", "set firewall source-validation 'strict'" ] self.execute_module(changed=True, commands=commands)
def test_ios_config_save_changed_false(self): set_module_args(dict(save_when='changed')) self.execute_module(changed=False) self.assertEqual(self.run_commands.call_count, 0) self.assertEqual(self.get_config.call_count, 0) self.assertEqual(self.conn.edit_config.call_count, 0)
def test_aireos_config_before_after_no_change(self): set_module_args( dict(lines=['sysname router'], before=['test1', 'test2'], after=['test3', 'test4'])) self.execute_module()
def test_without_required_parameters(self): """Failure must occurs when all parameters are missing""" with self.assertRaises(AnsibleFailJson): set_module_args({}) iptables.main()
def test_aireos_config_unchanged(self): src = load_fixture('aireos_config_config.cfg') set_module_args(dict(src=src)) self.execute_module()
def test_vyos_firewall_global_set_01_deleted(self): set_module_args(dict(config=dict(), state="deleted")) commands = ["delete firewall "] self.execute_module(changed=True, commands=commands)
def test_aireos_config_match_none(self): lines = ['sysname router', 'interface create mtc-1 1'] set_module_args(dict(lines=lines, match='none')) self.execute_module(changed=True, commands=lines, sort=False)
def test_aireos_config_after(self): set_module_args(dict(lines=['sysname foo'], after=['test1', 'test2'])) commands = ['sysname foo', 'test1', 'test2'] self.execute_module(changed=True, commands=commands, sort=False)