def test_main_add_auto_run_no_task(self, mock_module, mock_connect, mock_info, mock_comp, mock_server_conf, mock_port_conf, mock_conf_action, mock_conf_task, mock_wait): ''' Test main good with add and auto_run. Config not updated, no task. ''' mock_module_object = Mock() mock_module_object.params = dict(action='add', switch_name='eos', switch_port='3', auto_run=True) mock_module.return_value = mock_module_object mock_client_object = Mock() mock_connect.return_value = mock_client_object mock_info.return_value = 'Info' mock_server_conf.return_value = 'Configlet' mock_port_conf.return_value = 'Port' mock_conf_action.return_value = dict(taskCreated=True, changed=False) mock_conf_task.return_value = None cv_server_provision.main() self.assertEqual(mock_connect.call_count, 1) self.assertEqual(mock_info.call_count, 1) self.assertEqual(mock_comp.call_count, 1) self.assertEqual(mock_server_conf.call_count, 1) self.assertEqual(mock_port_conf.call_count, 1) self.assertEqual(mock_conf_action.call_count, 1) self.assertEqual(mock_conf_task.call_count, 1) mock_wait.assert_not_called() mock_module_object.fail_json.assert_not_called() return_dict = dict(changed=False, switchInfo='Info', switchConfigurable=True, portConfigurable=True, taskCreated=False, taskExecuted=False, taskCompleted=False) mock_module_object.exit_json.assert_called_with(**return_dict)
def test_no_change_to_module_when_all_identical(self): self.set_module_state('present') from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_service service_proxy_mock = MagicMock() attrs = { 'diff_object.return_value': {}, } service_proxy_mock.configure_mock(**attrs) m = MagicMock(return_value=service_proxy_mock) service_exists_mock = Mock(side_effect=[True, True]) service_identical_mock = Mock(side_effect=[True, True]) monitor_bindings_identical_mock = Mock(side_effect=[True, True]) with patch.multiple( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_service', ConfigProxy=m, service_exists=service_exists_mock, service_identical=service_identical_mock, monitor_bindings_identical=monitor_bindings_identical_mock, do_state_change=Mock(return_value=Mock(errorcode=0)), ): self.module = netscaler_service result = self.exited() self.assertFalse(result['changed'], msg='Erroneous changed status update')
def test_main_show(self, mock_module, mock_connect, mock_info, mock_comp, mock_server_conf, mock_port_conf, mock_conf_action): ''' Test main good with show action. ''' mock_module_object = Mock() mock_module_object.params = dict(action='show', switch_name='eos', switch_port='3', auto_run=False) mock_module.return_value = mock_module_object mock_connect.return_value = 'Client' mock_info.return_value = 'Info' mock_server_conf.return_value = 'Configlet' mock_port_conf.return_value = 'Port' mock_conf_action.return_value = dict() cv_server_provision.main() self.assertEqual(mock_connect.call_count, 1) self.assertEqual(mock_info.call_count, 1) mock_comp.assert_not_called() self.assertEqual(mock_server_conf.call_count, 1) self.assertEqual(mock_port_conf.call_count, 1) self.assertEqual(mock_conf_action.call_count, 1) mock_module_object.fail_json.assert_not_called() return_dict = dict(changed=False, switchInfo='Info', switchConfigurable=True, portConfigurable=True, taskCreated=False, taskExecuted=False, taskCompleted=False) mock_module_object.exit_json.assert_called_with(**return_dict)
def test_save_config_not_called_on_state_absent(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='absent', save_config=False, )) from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_ssl_certkey client_mock = Mock() m = Mock(return_value=client_mock) ssl_certkey_proxy_mock = Mock() with patch.multiple( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.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_graceful_nitro_exception_state_absent(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='absent', )) from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_gslb_vserver class MockException(Exception): def __init__(self, *args, **kwargs): self.errorcode = 0 self.message = '' m = Mock(side_effect=MockException) with patch.multiple( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_gslb_vserver', gslb_vserver_exists=m, ensure_feature_is_enabled=Mock(), nitro_exception=MockException): self.module = netscaler_gslb_vserver result = self.failed() self.assertTrue( result['msg'].startswith('nitro exception'), msg='Nitro exception not caught on operation absent')
def test_save_config_not_called_on_state_present(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', save_config=False, )) from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_cs_vserver client_mock = Mock() m = Mock(return_value=client_mock) cs_vserver_proxy_mock = Mock() with patch.multiple( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_cs_vserver', get_nitro_client=m, cs_vserver_exists=Mock(side_effect=[False, True]), cs_vserver_identical=Mock(side_effect=[True]), diff_list=Mock(return_value={}), ensure_feature_is_enabled=Mock(return_value=True), do_state_change=Mock(return_value=Mock(errorcode=0)), nitro_exception=self.MockException, ConfigProxy=Mock(return_value=cs_vserver_proxy_mock), ): self.module = netscaler_cs_vserver self.exited() self.assertNotIn(call.save_config(), client_mock.mock_calls)
def test_no_change_to_module_when_all_identical(self): self.set_module_state('present') from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_cs_policy cs_policy_mock = MagicMock() attrs = { 'diff_object.return_value': {}, } cs_policy_mock.configure_mock(**attrs) m = MagicMock(return_value=cs_policy_mock) policy_exists_mock = Mock(side_effect=[True, True]) policy_identical_mock = Mock(side_effect=[True, True]) with patch.multiple( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_cs_policy', ConfigProxy=m, policy_exists=policy_exists_mock, policy_identical=policy_identical_mock, ensure_feature_is_enabled=Mock(), nitro_exception=self.MockException, ): self.module = netscaler_cs_policy result = self.exited() self.assertFalse(result['changed'], msg='Erroneous changed status update')
def test_successful_modify_schedules_add(self, modify_snapshot): ''' adding snapshot policy schedules and testing idempotency ''' data = self.set_default_args() data['schedule'] = ['hourly', 'daily', 'weekly'] data['count'] = [100, 5, 10] data['snapmirror_label'] = ['', 'daily', ''] set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('policy') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] current = self.set_default_current() modify_snapshot.assert_called_with(current) # to reset na_helper from remembering the previous 'changed' value my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection( 'snapshot_policy_info_schedules_added') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert not exc.value.args[0]['changed']
def test_create(self, *args): set_module_args( dict(name='foo', description='this is a description', ports=[1, 2, 3, 4], port_ranges=['10-20', '30-40', '50-60'], port_lists=['/Common/foo', 'foo'], password='******', server='localhost', user='******')) module = AnsibleModule( argument_spec=self.spec.argument_spec, supports_check_mode=self.spec.supports_check_mode) mm = ModuleManager(module=module) # Override methods to force specific logic in the module to happen mm.exists = Mock(side_effect=[False, True]) mm.create_on_device = Mock(return_value=True) results = mm.exec_module() assert results['changed'] is True assert 'ports' in results assert 'port_lists' in results assert 'port_ranges' in results assert len(results['ports']) == 4 assert len(results['port_ranges']) == 3 assert len(results['port_lists']) == 2 assert results['description'] == 'this is a description'
def test_ensure_feature_is_enabled_called(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', )) from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_gslb_site gslb_site_proxy_mock = Mock() ensure_feature_is_enabled_mock = Mock() client_mock = Mock() with patch.multiple( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.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_main_module_args(self, mock_module, mock_connect, mock_info, mock_comp, mock_server_conf, mock_exception): ''' Test main module args. ''' mock_module_object = Mock() mock_module_object.params = dict(action='show', switch_name='eos') mock_module_object.fail_json.side_effect = SystemExit('Exiting') mock_module.return_value = mock_module_object mock_connect.return_value = 'Client' mock_info.side_effect = mock_exception('Error Getting Info') argument_spec = dict( host=dict(required=True), port=dict(required=False, default=None), protocol=dict(default='https', choices=['http', 'https']), username=dict(required=True), password=dict(required=True, no_log=True), server_name=dict(required=True), switch_name=dict(required=True), switch_port=dict(required=True), port_vlan=dict(required=False, default=None), template=dict(require=True), action=dict(default='show', choices=['show', 'add', 'remove']), auto_run=dict(type='bool', default=False), ) self.assertRaises(SystemExit, cv_server_provision.main) mock_module.assert_called_with(argument_spec=argument_spec, supports_check_mode=False) self.assertEqual(mock_connect.call_count, 1) self.assertEqual(mock_info.call_count, 1) mock_comp.assert_not_called() mock_server_conf.assert_not_called() mock_module_object.fail_json.assert_called_with(msg='Error Getting Info')
def _get_wapi(self, test_object): wapi = api.WapiModule(self.module) wapi.get_object = Mock(name='get_object', return_value=test_object) wapi.create_object = Mock(name='create_object') wapi.update_object = Mock(name='update_object') wapi.delete_object = Mock(name='delete_object') return wapi
def test_edit_response_data_actual_body_data_irrelevant(self): args = copy.deepcopy(module_arguments) args.update( dict( nitro_user='******', nitro_pass='******', nitro_auth_token='##DDASKLFDJ', )) module_mock = Mock(params=args, from_json=json.loads) with patch( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_nitro_request.AnsibleModule', Mock(return_value=module_mock)): with tempfile.TemporaryFile() as r: actual_body = {} r.write(codecs.encode(json.dumps(actual_body), 'utf-8')) r.seek(0) instance = netscaler_nitro_request.NitroAPICaller() info = { 'status': 200, } result = {} success_status = 200 expected_result = { 'http_response_body': json.dumps(actual_body), 'http_response_data': info, 'nitro_errorcode': 0, 'nitro_message': 'Success', 'nitro_severity': 'NONE', } instance.edit_response_data(r, info, result, success_status) self.assertDictEqual(result, expected_result)
def test_successful_initialize(self, snapmirror_initialize): ''' initialize snapmirror and testing idempotency ''' data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='transferring') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] snapmirror_initialize.assert_called_with() # to reset na_helper from remembering the previous 'changed' value data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert not exc.value.args[0]['changed']
def get_volume_mock_object(self, kind=None, job_error=None): """ Helper method to return an na_ontap_volume object :param kind: passes this param to MockONTAPConnection(). :param job_error: error message when getting job status. :return: na_ontap_volume object """ vol_obj = vol_module() vol_obj.ems_log_event = Mock(return_value=None) vol_obj.cluster = Mock() vol_obj.cluster.invoke_successfully = Mock() vol_obj.volume_style = None if kind is None: vol_obj.server = MockONTAPConnection() elif kind == 'volume': vol_obj.server = MockONTAPConnection(kind='volume', data=self.mock_vol) elif kind == 'job_info': vol_obj.server = MockONTAPConnection(kind='job_info', data=self.mock_vol, job_error=job_error) elif kind == 'error_modify': vol_obj.server = MockONTAPConnection(kind='error_modify', data=self.mock_vol) elif kind == 'failure_modify_async': vol_obj.server = MockONTAPConnection(kind='failure_modify_async', data=self.mock_vol) elif kind == 'success_modify_async': vol_obj.server = MockONTAPConnection(kind='success_modify_async', data=self.mock_vol) elif kind == 'zapi_error': vol_obj.server = MockONTAPConnection(kind='zapi_error', data=self.mock_vol) return vol_obj
def test_successful_create(self, snapmirror_create): ''' creating snapmirror and testing idempotency ''' data = self.set_default_args() data['schedule'] = 'abc' data['identity_preserve'] = True set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = self.server with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] snapmirror_create.assert_called_with() # to reset na_helper from remembering the previous 'changed' value set_module_args(self.set_default_args()) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', 'snapmirrored', status='idle') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert not exc.value.args[0]['changed']
def test_successful_modify(self, snapmirror_modify): ''' modifying snapmirror and testing idempotency ''' data = self.set_default_args() data['policy'] = 'ansible2' data['schedule'] = 'abc2' data['max_transfer_rate'] = 2000 set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] snapmirror_modify.assert_called_with({ 'policy': 'ansible2', 'schedule': 'abc2', 'max_transfer_rate': 2000 }) # to reset na_helper from remembering the previous 'changed' value data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert not exc.value.args[0]['changed']
def test_absent_state_sanity_check(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='absent', )) from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_lb_monitor lb_monitor_proxy_mock = Mock(diff_object=Mock(return_value={})) client_mock = Mock() with patch.multiple( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_lb_monitor', get_nitro_client=Mock(return_value=client_mock), ConfigProxy=Mock(return_value=lb_monitor_proxy_mock), ensure_feature_is_enabled=Mock(return_value=True), lbmonitor_exists=Mock(side_effect=[True, True]), nitro_exception=self.MockException, ): self.module = netscaler_lb_monitor result = self.failed() lb_monitor_proxy_mock.assert_has_calls([call.delete()]) self.assertEqual(result['msg'], 'lb monitor still exists')
def test_graceful_nitro_error_on_login(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', )) from ansible_collections.notmintest.not_a_real_collection.plugins.modules 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_collections.notmintest.not_a_real_collection.plugins.modules.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_graceful_login_error(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', )) from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_lb_monitor if sys.version_info[:2] == (2, 6): self.skipTest('requests library not available under python2.6') 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_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_lb_monitor', get_nitro_client=m, nitro_exception=self.MockException, ): self.module = netscaler_lb_monitor result = self.failed() self.assertTrue(result['msg'].startswith('SSL Error'), msg='SSL Error was not handled gracefully')
def test_configlet_action_add_with_task(self, mock_template): ''' Test configlet_action add with change updates configlet and adds proper info to return data. Including task spawned info. ''' module = Mock() module.params = dict(action='add', switch_name='eos', switch_port='3') config = '!\ninterface Ethernet3\n!\ninterface Ethernet4\n!' configlet = dict(name='eos-server', key='key', config=config) template_config = ('interface Ethernet3\n description Host eos' ' managed by Ansible and Jinja template\n' ' load-interval 30\n' ' switchport\n' ' switchport mode trunk\n' ' no shutdown\n!') mock_template.return_value = template_config update_return = dict(data='Configlet eos-server successfully updated' ' and task initiated.') module.client.api.update_configlet.return_value = update_return result = cv_server_provision.configlet_action(module, configlet) self.assertIsNotNone(result) self.assertEqual(result['oldConfigBlock'], 'interface Ethernet3\n!') full_config = '!\n' + template_config + '\ninterface Ethernet4\n!' self.assertEqual(result['fullConfig'], full_config) self.assertEqual(result['updateConfigletResponse'], update_return['data']) self.assertTrue(result['changed']) self.assertTrue(result['taskCreated']) self.assertEqual(module.client.api.update_configlet.call_count, 1)
def test_config_from_template_fail_wrong_port(self, mock_file_sys, mock_env, mock_debug, mock_find): ''' Test config_from_template fail. Wrong port number in template. ''' module = Mock() module.params = dict(switch_name='eos', switch_port='4', server_name='new', template='jinja.j2') mock_file_sys.return_value = 'file' mock_debug.return_value = 'debug' template_mock = Mock() template_mock.render.return_value = ('interface Ethernet3\n' ' description test\n!') env_mock = Mock() env_mock.loader.get_source.return_value = ['one', 'two'] env_mock.parse.return_value = 'parsed' env_mock.get_template.return_value = template_mock mock_env.return_value = env_mock mock_find.return_value = dict(server_name=None, switch_port=None) result = cv_server_provision.config_from_template(module) self.assertIsNotNone(result) expected = 'interface Ethernet3\n description test\n!' self.assertEqual(result, expected) self.assertEqual(mock_file_sys.call_count, 1) self.assertEqual(mock_env.call_count, 1) module.fail_json.assert_called_with(msg='Template content does not' ' configure proper interface' ' - %s' % expected)
def test_config_from_template_fail_no_vlan(self, mock_file_sys, mock_env, mock_debug, mock_find): ''' Test config_from_template fail. Template needs vlan but none provided. ''' module = Mock() module.params = dict(switch_name='eos', switch_port='3', server_name='new', template='jinja.j2', port_vlan=None) mock_file_sys.return_value = 'file' mock_debug.return_value = 'debug' template_mock = Mock() template_mock.render.return_value = ('interface Ethernet3\n' ' description test\n!') env_mock = Mock() env_mock.loader.get_source.return_value = ['one', 'two'] env_mock.parse.return_value = 'parsed' env_mock.get_template.return_value = template_mock mock_env.return_value = env_mock mock_find.return_value = dict(server_name=None, switch_port=None, port_vlan=None) result = cv_server_provision.config_from_template(module) self.assertIsNotNone(result) expected = 'interface Ethernet3\n description test\n!' self.assertEqual(result, expected) self.assertEqual(mock_file_sys.call_count, 1) self.assertEqual(mock_env.call_count, 1) module.fail_json.assert_called_with(msg='Template jinja.j2 requires a' ' vlan. Please re-run with vlan' ' number provided.')
def test_config_from_template_good_vlan(self, mock_file_sys, mock_env, mock_debug, mock_find): ''' Test config_from_template good. With port_vlan. ''' module = Mock() module.params = dict(switch_name='eos', switch_port='3', server_name='new', template='jinja.j2', port_vlan='7') mock_file_sys.return_value = 'file' mock_debug.return_value = 'debug' template_mock = Mock() template_mock.render.return_value = ('interface Ethernet3\n' ' description test\n' ' switchport\n' ' switchport access vlan 7\n' ' no shutdown\n!') env_mock = Mock() env_mock.loader.get_source.return_value = ['one', 'two'] env_mock.parse.return_value = 'parsed' env_mock.get_template.return_value = template_mock mock_env.return_value = env_mock mock_find.return_value = dict(server_name=None, switch_port=None, port_vlan=None) result = cv_server_provision.config_from_template(module) self.assertIsNotNone(result) expected = ('interface Ethernet3\n' ' description test\n' ' switchport\n' ' switchport access vlan 7\n' ' no shutdown\n!') self.assertEqual(result, expected) self.assertEqual(mock_file_sys.call_count, 1) self.assertEqual(mock_env.call_count, 1) module.fail_json.assert_not_called()
def test_handle_get_return_object(self): resource = 'lbvserver' args = copy.deepcopy(module_arguments) args.update( dict( nitro_user='******', nitro_pass='******', resource=resource, )) resource_data = { 'property1': 'value1', 'property2': 'value2', } module_mock = Mock(params=args, from_json=json.loads) with patch( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_nitro_request.AnsibleModule', Mock(return_value=module_mock)): instance = netscaler_nitro_request.NitroAPICaller() data = {resource: resource_data} result = { 'nitro_errorcode': 0, 'http_response_body': json.dumps(data), } expected_result = {'nitro_object': resource_data} expected_result.update(result) instance.handle_get_return_object(result) self.assertDictEqual(result, expected_result)
def test_get_immutables_failure(self): set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', )) from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_lb_vserver lb_vserver_proxy_mock = Mock() client_mock = Mock() m = Mock(return_value=['some']) with patch.multiple( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_lb_vserver', get_nitro_client=Mock(return_value=client_mock), ConfigProxy=Mock(return_value=lb_vserver_proxy_mock), ensure_feature_is_enabled=Mock(), lb_vserver_exists=Mock(side_effect=[True, True]), lb_vserver_identical=Mock(side_effect=[False]), do_state_change=Mock(return_value=Mock(errorcode=0)), get_immutables_intersection=m, nitro_exception=self.MockException, ): self.module = netscaler_lb_vserver result = self.failed() self.assertTrue( result['msg'].startswith('Cannot update immutable attributes'), msg='Did not handle immutables error correctly', )
def test_lb_monitor_identical_sanity_check(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', )) from ansible_collections.notmintest.not_a_real_collection.plugins.modules import netscaler_lb_monitor lb_monitor_proxy_mock = Mock(diff_object=Mock(return_value={})) client_mock = Mock() with patch.multiple( 'ansible_collections.notmintest.not_a_real_collection.plugins.modules.netscaler_lb_monitor', get_nitro_client=Mock(return_value=client_mock), lbmonitor_exists=Mock(side_effect=[True, True]), lbmonitor_identical=Mock(side_effect=[False, False]), ConfigProxy=Mock(return_value=lb_monitor_proxy_mock), ensure_feature_is_enabled=Mock(return_value=True), get_immutables_intersection=(Mock(return_value=[])), nitro_exception=self.MockException, diff_list=Mock(return_value={}), ): self.module = netscaler_lb_monitor result = self.failed() self.assertEqual(result['msg'], 'lb monitor is not configured correctly')
def test_current_config_no_match(self): ''' Test current_config with no entry for port ''' module = Mock() module.fail_json.side_effect = SystemExit module.params = dict(switch_name='eos', switch_port='2') config = '!\ninterface Ethernet3\n description test\n!' self.assertRaises(SystemExit, cv_server_provision.current_config, module, config)
def test_current_config_empty_config(self): ''' Test current_config with empty config for port ''' module = Mock() module.params = dict(switch_name='eos', switch_port='4') config = '!\ninterface Ethernet3\n!\ninterface Ethernet4' result = cv_server_provision.current_config(module, config) self.assertIsNotNone(result) self.assertEqual(result, 'interface Ethernet4')
def test_port_configurable_fail_no_config(self): ''' Test port_configurable configlet empty. ''' module = Mock() module.params = dict(switch_name='eos', switch_port='2') config = '' configlet = dict(name='eos-server', config=config) result = cv_server_provision.port_configurable(module, configlet) self.assertFalse(result)