def test_graceful_nitro_error_on_login(self): self.set_module_state('present') from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_cs_policy 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( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_cs_policy.get_nitro_client', m): with patch( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_cs_policy.nitro_exception', MockException): self.module = netscaler_cs_policy result = self.failed() self.assertTrue( result['msg'].startswith('nitro exception'), msg='nitro exception during login not handled properly')
def test_graceful_login_error(self): self.set_module_state('present') from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_service 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_collections.community.network.plugins.modules.network.netscaler.netscaler_service', get_nitro_client=m, nitro_exception=MockException, ): self.module = netscaler_service result = self.failed() self.assertTrue(result['msg'].startswith('SSL Error'), msg='SSL Error was not handled gracefully')
def test_create_non_existing_cs_policy(self): self.set_module_state('present') from ansible_collections.community.network.plugins.modules.network.netscaler 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=[False, True]) with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_cs_policy', ConfigProxy=m, policy_exists=policy_exists_mock, nitro_exception=self.MockException, ensure_feature_is_enabled=Mock(), ): self.module = netscaler_cs_policy result = self.exited() cs_policy_mock.assert_has_calls([call.add()]) self.assertTrue(result['changed'], msg='Change not recorded')
def test_configlet_action_add_no_task(self, mock_template): ''' Test configlet_action add that doesn't change configlet adds proper info to return data. Does not including any task info. ''' module = Mock() module.params = dict(action='add', switch_name='eos', switch_port='3') config = ('!\ninterface Ethernet3\n description test\n' '!\ninterface Ethernet4\n!') configlet = dict(name='eos-server', key='key', config=config) template_config = 'interface Ethernet3\n description test\n!' mock_template.return_value = template_config update_return = dict(data='Configlet eos-server successfully updated.') 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 description test\n!') self.assertEqual(result['fullConfig'], config) self.assertEqual(result['updateConfigletResponse'], update_return['data']) self.assertNotIn('changed', result) self.assertNotIn('taskCreated', result) self.assertEqual(module.client.api.update_configlet.call_count, 1)
def test_main_port_not_in_config(self, mock_module, mock_connect, mock_info, mock_comp, mock_server_conf, mock_port_conf, mock_exception): ''' Test main fails if user specified port not in configlet. ''' mock_module_object = Mock() mock_module_object.params = dict(action='add', switch_name='eos', switch_port='3') mock_module_object.fail_json.side_effect = SystemExit('Exiting') 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 = None self.assertRaises(SystemExit, 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) mock_module_object.fail_json.assert_called_with( msg='Port 3 is not configurable as a server port on switch eos.')
def test_wait_for_task_completion_fail(self, mock_time): ''' Test wait_for_task_completion failed. ''' module = Mock() try_one = dict(workOrderUserDefinedStatus='Failed') try_two = dict(workOrderUserDefinedStatus='Completed') module.client.api.get_task_by_id.side_effect = [try_one, try_two] result = cv_server_provision.wait_for_task_completion(module, '7') self.assertTrue(result) self.assertEqual(module.client.api.get_task_by_id.call_count, 2) text = ('Task 7 has reported status Failed. Please consult the CVP' ' admins for more information.') module.fail_json.assert_called_with(msg=text) self.assertEqual(mock_time.call_count, 1)
def test_wait_for_task_completion_good_three_tries(self, mock_time): ''' Test wait_for_task_completion completed. Three tries. ''' module = Mock() try_one_two = dict(workOrderUserDefinedStatus='Pending') try_three = dict(workOrderUserDefinedStatus='Completed') module.client.api.get_task_by_id.side_effect = [ try_one_two, try_one_two, try_three ] result = cv_server_provision.wait_for_task_completion(module, '7') self.assertTrue(result) self.assertEqual(module.client.api.get_task_by_id.call_count, 3) module.fail_json.assert_not_called() self.assertEqual(mock_time.call_count, 2)
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_edit_response_data_actual_body_data(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.community.network.plugins.modules.network.netscaler.netscaler_nitro_request.AnsibleModule', Mock(return_value=module_mock)): with tempfile.TemporaryFile() as r: actual_body = { 'errorcode': 258, 'message': 'Some error', 'severity': 'ERROR', } 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_data = {} for key, value in actual_body.items(): nitro_data['nitro_%s' % key] = value expected_result.update(nitro_data) instance.edit_response_data(r, info, result, success_status) self.assertDictEqual(result, expected_result)
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_ensure_feature_is_enabled_nitro_exception_caught(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', save_config=False, )) from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_lb_vserver client_mock = Mock() lb_vserver_proxy_mock = Mock() errorcode = 10 message = 'mock error' class MockException(Exception): def __init__(self): self.errorcode = errorcode self.message = message feature_mock = Mock(side_effect=MockException) with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_lb_vserver', get_nitro_client=Mock(return_value=client_mock), lb_vserver_exists=Mock(side_effect=[True, True]), lb_vserver_identical=Mock(side_effect=[True, True]), servicegroup_bindings_identical=Mock(side_effect=[True, True]), service_bindings_identical=Mock(side_effect=[True, True]), ConfigProxy=Mock(return_value=lb_vserver_proxy_mock), ensure_feature_is_enabled=feature_mock, nitro_exception=MockException, ): self.module = netscaler_lb_vserver result = self.failed() expected_msg = 'nitro exception errorcode=%s, message=%s' % ( errorcode, message) self.assertEqual(result['msg'], expected_msg, 'Failed to handle nitro exception')
def test_absent_state_workflow(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='absent', )) from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_lb_monitor lb_monitor_proxy_mock = Mock(diff_object=Mock(return_value={})) client_mock = Mock() with patch.multiple( 'ansible_collections.community.network.plugins.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(return_value=True), lbmonitor_exists=Mock(side_effect=[True, False]), ): self.module = netscaler_lb_monitor result = self.exited() lb_monitor_proxy_mock.assert_has_calls([call.delete()]) self.assertTrue(result['changed'])
def test_absent_operation_no_change(self): self.set_module_state('absent') from ansible_collections.community.network.plugins.modules.network.netscaler 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=[False, False]) with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_cs_policy', ConfigProxy=m, policy_exists=policy_exists_mock, nitro_exception=self.MockException, ensure_feature_is_enabled=Mock(), ): self.module = netscaler_cs_policy result = self.exited() cs_policy_mock.assert_not_called() self.assertFalse(result['changed'], msg='Changed status not set correctly')
def test_graceful_no_connection_error(self): if sys.version_info[:2] == (2, 6): self.skipTest('requests library not available under python2.6') set_module_args(dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', )) from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_lb_monitor client_mock = Mock() attrs = {'login.side_effect': requests.exceptions.ConnectionError} client_mock.configure_mock(**attrs) m = Mock(return_value=client_mock) with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_lb_monitor', get_nitro_client=m, nitro_exception=self.MockException, ): self.module = netscaler_lb_monitor result = self.failed() self.assertTrue(result['msg'].startswith('Connection error'), msg='Connection error was not handled gracefully')
def test_edit_response_data_body_in_info(self): args = copy.deepcopy(module_arguments) args.update(dict( nitro_user='******', nitro_pass='******', )) module_mock = Mock(params=args, from_json=json.loads) with patch( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_nitro_request.AnsibleModule', Mock(return_value=module_mock)): body = { 'errorcode': 258, 'message': 'Numerical error 258', 'severity': 'ERROR' } instance = netscaler_nitro_request.NitroAPICaller() r = None info = { 'status': 200, 'body': codecs.encode(json.dumps(body), 'utf-8'), } result = {} success_status = 200 expected_result = { 'http_response_body': json.dumps(body), 'http_response_data': info, } nitro_data = {} for key, value in body.items(): nitro_data['nitro_%s' % key] = value expected_result.update(nitro_data) instance.edit_response_data(r, info, result, success_status) self.assertDictEqual(result, expected_result)
def test_create(self, *args): set_module_args( dict(name='foo', description='this is a description', addresses=['1.1.1.1', '2.2.2.2'], address_ranges=['3.3.3.3-4.4.4.4', '5.5.5.5-6.6.6.6'], address_lists=['/Common/foo', 'foo'], geo_locations=[ dict(country='US', region='Los Angeles'), dict(country='China'), dict(country='EU') ], fqdns=['google.com', 'mit.edu'], provider=dict(server='localhost', password='******', 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(return_value=False) mm.create_on_device = Mock(return_value=True) results = mm.exec_module() assert results['changed'] is True assert 'addresses' in results assert 'address_lists' in results assert 'address_ranges' in results assert len(results['addresses']) == 2 assert len(results['address_ranges']) == 2 assert len(results['address_lists']) == 2 assert results['description'] == 'this is a description'
def test_configlet_update_task_good_three_tries(self, mock_info, mock_sleep): ''' Test configlet_update_task gets task on third try. ''' module = Mock() task1 = dict(data=dict(WORKFLOW_ACTION='Configlet Push'), description='Configlet Assign', workOrderId='7') task2 = dict(data=dict(WORKFLOW_ACTION='Nonsense'), description='Configlet Assign', workOrderId='700') device_info = dict(taskIdList=[task1, task2]) mock_info.side_effect = [dict(), dict(), device_info] result = cv_server_provision.configlet_update_task(module) self.assertEqual(result, '7') self.assertEqual(mock_sleep.call_count, 2) self.assertEqual(mock_info.call_count, 3)
def setUpClass(cls): class MockException(Exception): pass cls.MockException = MockException m = MagicMock() cls.server_mock = MagicMock() cls.server_mock.__class__ = MagicMock(add=Mock()) nssrc_modules_mock = { 'nssrc.com.citrix.netscaler.nitro.resource.config.basic': m, 'nssrc.com.citrix.netscaler.nitro.resource.config.basic.server': m, 'nssrc.com.citrix.netscaler.nitro.resource.config.basic.server.server': cls.server_mock, } cls.nitro_specific_patcher = patch.dict(sys.modules, nssrc_modules_mock) cls.nitro_base_patcher = nitro_base_patcher
def test_ensure_feature_is_enabled_called(self): self.set_module_state('present') from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_cs_policy client_mock = Mock() ensure_feature_is_enabled_mock = Mock() with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_cs_policy', get_nitro_client=Mock(return_value=client_mock), policy_exists=Mock(side_effect=[True, True]), nitro_exception=self.MockException, ensure_feature_is_enabled=ensure_feature_is_enabled_mock, ): self.module = netscaler_cs_policy result = self.exited() ensure_feature_is_enabled_mock.assert_has_calls( [call(client_mock, 'CS')])
def test_graceful_nitro_exception_operation_absent(self): self.set_module_state('absent') from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_servicegroup class MockException(Exception): def __init__(self, *args, **kwargs): self.errorcode = 0 self.message = '' m = Mock(side_effect=MockException) with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_servicegroup', servicegroup_exists=m, nitro_exception=MockException): self.module = netscaler_servicegroup result = self.failed() self.assertTrue( result['msg'].startswith('nitro exception'), msg='Nitro exception not caught on operation absent')
def test_put_on_user(self): set_module_args({ "avi_credentials": { "controller": "192.0.2.13", "username": "******", "password": "******", "api_version": "18.2.5" }, "state": "present", "avi_api_update_method": "put", "name": "testuser", "obj_username": "******", "obj_password": "******", "email": "*****@*****.**", "access": [{ "role_ref": "/api/role?name=Tenant-Admin", "tenant_ref": "/api/tenant?name=Test-Admin", "all_tenants": False }], "user_profile_ref": "/api/useraccountprofile?name=Default-User-Account-Profile", "is_active": True, "is_superuser": True, "default_tenant_ref": "/api/tenant?name=admin" }) avi_user.avi_ansible_api = Mock(return_value=data['mock_put_res']) response = avi_user.main() assert response['changed'] assert response['obj'] assert response['old_obj']
def test_absent_operation_no_change(self): self.set_module_state('absent') from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_servicegroup servicegroup_proxy_mock = MagicMock() attrs = { 'diff_object.return_value': {}, } servicegroup_proxy_mock.configure_mock(**attrs) m = MagicMock(return_value=servicegroup_proxy_mock) servicegroup_exists_mock = Mock(side_effect=[False, False]) with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_servicegroup', ConfigProxy=m, servicegroup_exists=servicegroup_exists_mock, ): self.module = netscaler_servicegroup result = self.exited() servicegroup_proxy_mock.assert_not_called() self.assertFalse(result['changed'], msg='Changed status not set correctly')
def test_get_typed_pool_facts(self, *args): set_module_args( dict(include='pool', password='******', server='localhost', user='******')) fixture1 = load_fixture('load_gtm_pool_a_collection.json') fixture2 = load_fixture('load_gtm_pool_a_example_stats.json') collection = [FakeARecord(attrs=x) for x in fixture1['items']] stats = Stats(FakeStatResource(fixture2['entries'])) module = AnsibleModule( argument_spec=self.spec.argument_spec, supports_check_mode=self.spec.supports_check_mode) # Override methods in the specific type of manager tfm = TypedPoolFactManager(module=module) tfm.read_collection_from_device = Mock(return_value=collection) tfm.read_stats_from_device = Mock(return_value=stats.stat) tm = PoolFactManager(module=module) tm.version_is_less_than_12 = Mock(return_value=False) tm.get_manager = Mock(return_value=tfm) # Override methods to force specific logic in the module to happen mm = ModuleManager(module=module) mm.get_manager = Mock(return_value=tm) mm.gtm_provisioned = Mock(return_value=True) results = mm.exec_module() assert results['changed'] is True assert 'pool' in results assert len(results['pool']) > 0 assert 'load_balancing_mode' in results['pool'][0]
def test_absent_gslb_site_failed_delete(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='absent', )) from ansible_collections.community.network.plugins.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_collections.community.network.plugins.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_absent_gslb_site_execution_flow(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='absent', )) from ansible_collections.community.network.plugins.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_collections.community.network.plugins.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, False]), gslb_site_identical=Mock(side_effect=[False, True]), ensure_feature_is_enabled=Mock(), ConfigProxy=config_proxy_mock, ): self.module = netscaler_gslb_site self.exited() gslb_site_proxy_mock.assert_has_calls([call.delete()])
def test_server_servicegroup_bindings_sanity_check(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', )) from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_lb_vserver lb_vserver_proxy_mock = Mock() client_mock = Mock() with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_lb_vserver', get_nitro_client=Mock(return_value=client_mock), lb_vserver_exists=Mock(side_effect=[True, True]), lb_vserver_identical=Mock(side_effect=[False, True]), servicegroup_bindings_identical=Mock( side_effect=[False, False]), service_bindings_identical=Mock(side_effect=[True, True]), ssl_certkey_bindings_identical=Mock( side_effect=[False, False]), ConfigProxy=Mock(return_value=lb_vserver_proxy_mock), ensure_feature_is_enabled=Mock(return_value=True), do_state_change=Mock(return_value=Mock(errorcode=0)), get_immutables_intersection=(Mock(return_value=[])), nitro_exception=self.MockException, ): self.module = netscaler_lb_vserver result = self.failed() self.assertEqual(result['msg'], 'servicegroup bindings are not identical')
def test_ssl_bindings_not_called_for_non_ssl_service(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', save_config=False, servicetype='HTTP', )) from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_lb_vserver lb_vserver_proxy_mock = Mock() ssl_sync_mock = Mock() client_mock = Mock() with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_lb_vserver', get_nitro_client=Mock(return_value=client_mock), lb_vserver_exists=Mock(side_effect=[True, True]), lb_vserver_identical=Mock(side_effect=[False, True]), servicegroup_bindings_identical=Mock(side_effect=[True, True]), service_bindings_identical=Mock(side_effect=[True, True]), ssl_certkey_bindings_identical=Mock(side_effect=[False, True]), ssl_certkey_bindings_sync=ssl_sync_mock, ConfigProxy=Mock(return_value=lb_vserver_proxy_mock), ensure_feature_is_enabled=Mock(return_value=True), do_state_change=Mock(return_value=Mock(errorcode=0)), get_immutables_intersection=(Mock(return_value=[])), ): self.module = netscaler_lb_vserver result = self.exited() ssl_sync_mock.assert_not_called() self.assertTrue(result['changed'])
def test_servicegroup_bindings_handling(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', save_config=False, )) from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_lb_vserver lb_vserver_proxy_mock = Mock() configured_dict = { 'first': Mock(), 'second': Mock(has_equal_attributes=Mock(return_value=False)), } actual_dict = { 'second': Mock(), 'third': Mock(), } client_mock = Mock() with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_lb_vserver', get_nitro_client=Mock(return_value=client_mock), lb_vserver_exists=Mock(side_effect=[True, True]), lb_vserver_identical=Mock(side_effect=[False, True]), servicegroup_bindings_identical=Mock( side_effect=[False, True]), service_bindings_identical=Mock(side_effect=[True, True]), get_configured_servicegroup_bindings=Mock( return_value=configured_dict), get_actual_servicegroup_bindings=Mock( return_value=actual_dict), ConfigProxy=Mock(return_value=lb_vserver_proxy_mock), ensure_feature_is_enabled=Mock(return_value=True), do_state_change=Mock(return_value=Mock(errorcode=0)), get_immutables_intersection=(Mock(return_value=[])), ): self.module = netscaler_lb_vserver result = self.exited() configured_dict['first'].assert_has_calls([call.add()]) configured_dict['second'].assert_has_calls( [call.has_equal_attributes(actual_dict['second']), call.add()]) actual_dict['second'].assert_has_calls( [call.delete(client_mock, actual_dict['second'])]) actual_dict['third'].assert_has_calls( [call.delete(client_mock, actual_dict['third'])]) self.assertTrue(result['changed'])
def test_create_new_lb_vserver_workflow(self): set_module_args( dict( nitro_user='******', nitro_pass='******', nsip='192.0.2.1', state='present', save_config=False, )) from ansible_collections.community.network.plugins.modules.network.netscaler import netscaler_lb_vserver lb_vserver_proxy_mock = Mock() with patch.multiple( 'ansible_collections.community.network.plugins.modules.network.netscaler.netscaler_lb_vserver', get_nitro_client=Mock(return_value=Mock()), lb_vserver_exists=Mock(side_effect=[False, True]), lb_vserver_identical=Mock(side_effect=[True]), servicegroup_bindings_identical=Mock(side_effect=[True, True]), service_bindings_identical=Mock(side_effect=[True, True]), do_state_change=Mock(return_value=Mock(errorcode=0)), ConfigProxy=Mock(return_value=lb_vserver_proxy_mock), ensure_feature_is_enabled=Mock(return_value=True), ): self.module = netscaler_lb_vserver result = self.exited() lb_vserver_proxy_mock.assert_has_calls([call.add()]) self.assertTrue(result['changed'])
# 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/>. # from ansible_collections.community.network.tests.unit.compat import unittest from ansible_collections.community.network.tests.unit.compat.mock import patch, Mock import sys sys.modules['cvprac'] = Mock() sys.modules['cvprac.cvp_client'] = Mock() sys.modules['cvprac.cvp_client_errors'] = Mock() from ansible_collections.community.network.plugins.modules.network.cloudvision import cv_server_provision class MockException(Exception): pass class TestCvServerProvision(unittest.TestCase): @patch( 'ansible_collections.community.network.plugins.modules.network.cloudvision.cv_server_provision.CvpApiError', new_callable=lambda: MockException) @patch( 'ansible_collections.community.network.plugins.modules.network.cloudvision.cv_server_provision.server_configurable_configlet'