Exemplo n.º 1
0
    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')
Exemplo n.º 3
0
    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)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
 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()
Exemplo n.º 11
0
    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')
Exemplo n.º 14
0
    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)
Exemplo n.º 16
0
    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'
Exemplo n.º 17
0
 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')
Exemplo n.º 21
0
 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]
Exemplo n.º 24
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'])
Exemplo n.º 25
0
    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()])
Exemplo n.º 26
0
    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')
Exemplo n.º 27
0
    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'])
Exemplo n.º 28
0
    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'])
Exemplo n.º 29
0
    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'])
Exemplo n.º 30
0
# 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'