def test_update_servicegroup_when_service_members_differ(self):
        self.set_module_state('present')
        from ansible_collections.ansible.misc.plugins.modules 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)
        sync_mock = Mock()

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_servicegroup',
                ConfigProxy=m,
                servicegroup_exists=Mock(side_effect=[True, True]),
                servicegroup_identical=Mock(side_effect=[True, True]),
                monitor_bindings_identical=Mock(side_effect=[True, True]),
                sync_monitor_bindings=Mock(),
                servicemembers_identical=Mock(side_effect=[False, True]),
                sync_service_members=sync_mock,
                do_state_change=Mock(return_value=Mock(errorcode=0)),
        ):
            self.module = netscaler_servicegroup
            result = self.exited()
        # poor man's assert_called_once since python3.5 does not implement that mock method
        self.assertEqual(len(sync_mock.mock_calls),
                         1,
                         msg='sync monitor bindings not called once')
        self.assertTrue(result['changed'], msg='Change not recorded')
コード例 #2
0
    def test_no_change_to_module_when_all_identical(self):
        self.set_module_state('present')
        from ansible_collections.ansible.misc.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.ansible.misc.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_servicegroup_monitor_bindings_sanity(self):
        self.set_module_state('present')
        from ansible_collections.ansible.misc.plugins.modules 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)
        sync_mock = Mock()

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_servicegroup',
                ConfigProxy=m,
                servicegroup_exists=Mock(side_effect=[True, True]),
                servicegroup_identical=Mock(side_effect=[True, True]),
                monitor_bindings_identical=Mock(side_effect=[False, False]),
                sync_monitor_bindings=Mock(),
                servicemembers_identical=Mock(side_effect=[True, True]),
                nitro_exception=self.MockException,
                sync_service_members=sync_mock,
                do_state_change=Mock(return_value=Mock(errorcode=0)),
        ):
            self.module = netscaler_servicegroup
            result = self.failed()
            self.assertEqual(result['msg'],
                             'Monitor bindings are not identical')
    def setUpClass(cls):
        class MockException(Exception):
            pass

        cls.MockException = MockException
        m = MagicMock()
        cls.servicegroup_mock = MagicMock()
        cls.servicegroup_mock.__class__ = MagicMock()
        nssrc_modules_mock = {
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.servicegroup':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.servicegroup.servicegroup':
            cls.servicegroup_mock,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.servicegroup_servicegroupmember_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.servicegroup_servicegroupmember_binding.servicegroup_servicegroupmember_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.servicegroup_lbmonitor_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.servicegroup_lbmonitor_binding.servicegroup_lbmonitor_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_servicegroup_binding.lbmonitor_servicegroup_binding':
            m
        }

        cls.nitro_specific_patcher = patch.dict(sys.modules,
                                                nssrc_modules_mock)
        cls.nitro_base_patcher = nitro_base_patcher
    def test_no_change_to_module_when_all_identical(self):
        self.set_module_state('present')
        from ansible_collections.ansible.misc.plugins.modules 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=[True, True])
        servicegroup_identical_mock = Mock(side_effect=[True, True])
        monitor_bindings_identical_mock = Mock(side_effect=[True, True])

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_servicegroup',
                ConfigProxy=m,
                servicegroup_exists=servicegroup_exists_mock,
                servicegroup_identical=servicegroup_identical_mock,
                servicemembers_identical=Mock(side_effect=[True, True]),
                monitor_bindings_identical=monitor_bindings_identical_mock,
                do_state_change=Mock(return_value=Mock(errorcode=0)),
                nitro_exception=self.MockException,
        ):
            self.module = netscaler_servicegroup
            result = self.exited()
            self.assertFalse(result['changed'],
                             msg='Erroneous changed status update')
コード例 #6
0
def test_simple_auth_with_start_tls(monkeypatch):
    mock_ldap_option = MagicMock()
    monkeypatch.setattr(FakeLdap, "set_option", mock_ldap_option)

    mock_ldap = MagicMock()
    monkeypatch.setattr("ldap.initialize", mock_ldap)

    lookup_loader.get('laps_password').run([],
                                           domain="dc01",
                                           start_tls=True,
                                           auth="simple",
                                           username="******",
                                           password="******")

    assert mock_ldap_option.mock_calls[0][1] == (
        FakeLdap.OPT_X_TLS_REQUIRE_CERT, FakeLdap.OPT_X_TLS_DEMAND)

    assert mock_ldap.mock_calls[3][0] == "().start_tls_s"
    assert mock_ldap.mock_calls[3][1] == ()

    assert mock_ldap.mock_calls[4][0] == '().bind_s'
    assert mock_ldap.mock_calls[4][1] == (u"user", u"pass")

    assert mock_ldap.mock_calls[5][0] == "().read_rootdse_s"
    assert mock_ldap.mock_calls[5][1] == ()
コード例 #7
0
    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.lb':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbvserver':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbvserver.lbvserver':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbvserver_service_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbvserver_service_binding.lbvserver_service_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbvserver_servicegroup_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbvserver_servicegroup_binding.lbvserver_servicegroup_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.ssl':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.ssl.sslvserver_sslcertkey_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.ssl.sslvserver_sslcertkey_binding.sslvserver_sslcertkey_binding':
            m,
        }

        cls.nitro_specific_patcher = patch.dict(sys.modules,
                                                nssrc_modules_mock)
        cls.nitro_base_patcher = nitro_base_patcher
コード例 #8
0
    def setUpClass(cls):
        m = MagicMock()
        cls.service_mock = MagicMock()
        cls.service_mock.__class__ = MagicMock()
        cls.service_lbmonitor_binding_mock = MagicMock()
        cls.lbmonitor_service_binding_mock = MagicMock()
        nssrc_modules_mock = {
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.service':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.service.service':
            cls.service_mock,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.service_lbmonitor_binding':
            cls.service_lbmonitor_binding_mock,
            'nssrc.com.citrix.netscaler.nitro.resource.config.basic.service_lbmonitor_binding.service_lbmonitor_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_service_binding':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.lb.lbmonitor_service_binding.lbmonitor_service_binding':
            cls.lbmonitor_service_binding_mock,
        }

        cls.nitro_specific_patcher = patch.dict(sys.modules,
                                                nssrc_modules_mock)
        cls.nitro_base_patcher = nitro_base_patcher
コード例 #9
0
def laps_password():
    """Imports and the laps_password lookup with a mocks laps module for testing"""

    # Build the fake ldap and ldapurl Python modules
    fake_ldap_obj = FakeLdap()
    fake_ldap_url_obj = MagicMock()
    fake_ldap_url_obj.isLDAPUrl.side_effect = fake_is_ldap_url
    fake_ldap_url_obj.LDAPUrl.side_effect = FakeLdapUrl

    # Take a snapshot of sys.modules before we manipulate it
    orig_modules = sys.modules.copy()
    try:
        sys.modules["ldap"] = fake_ldap_obj
        sys.modules["ldapurl"] = fake_ldap_url_obj

        from ansible_collections.ansible.misc.plugins.lookup import laps_password

        # ensure the changes to these globals aren't persisted after each test
        orig_has_ldap = laps_password.HAS_LDAP
        orig_ldap_imp_err = laps_password.LDAP_IMP_ERR

        yield laps_password

        laps_password.HAS_LDAP = orig_has_ldap
        laps_password.LDAP_IMP_ERR = orig_ldap_imp_err
    finally:
        # Restore sys.modules back to our pre-shenanigans
        sys.modules = orig_modules
コード例 #10
0
def test_get_password_no_results(laps_password):
    mock_conn = MagicMock()
    mock_conn.search_s.return_value = [
        (None, [
            "ldap://ForestDnsZones.domain.com/DC=ForestDnsZones,DC=domain,DC=com"
        ]),
        (None, [
            "ldap://DomainDnsZones.domain.com/DC=DomainDnsZones,DC=domain,DC=com"
        ]),
        (None, ["ldap://domain.com/CN=Configuration,DC=domain,DC=com"]),
    ]

    with pytest.raises(AnsibleLookupError) as err:
        laps_password.get_laps_password(mock_conn, "server",
                                        "DC=domain,DC=local")
    assert str(
        err.value
    ) == "Failed to find the server 'server' in the base 'DC=domain,DC=local'"

    assert len(mock_conn.method_calls) == 1
    assert mock_conn.method_calls[0][0] == "search_s"
    assert mock_conn.method_calls[0][1] == (
        "DC=domain,DC=local", FakeLdap.SCOPE_SUBTREE,
        "(&(objectClass=computer)(CN=server))")
    assert mock_conn.method_calls[0][2] == {
        "attrlist": ["distinguishedName", "ms-Mcs-AdmPwd"]
    }
コード例 #11
0
def test_get_password_laps_not_configured(laps_password):
    mock_conn = MagicMock()
    mock_conn.search_s.return_value = [
        ("CN=server,DC=domain,DC=local", {
            "distinguishedName": ["CN=server,DC=domain,DC=local"]
        }),
        (None, [
            "ldap://ForestDnsZones.domain.com/DC=ForestDnsZones,DC=domain,DC=com"
        ]),
        (None, [
            "ldap://DomainDnsZones.domain.com/DC=DomainDnsZones,DC=domain,DC=com"
        ]),
        (None, ["ldap://domain.com/CN=Configuration,DC=domain,DC=com"]),
    ]

    with pytest.raises(AnsibleLookupError) as err:
        laps_password.get_laps_password(mock_conn, "server2",
                                        "DC=test,DC=local")
    assert str(err.value) == \
        "The server 'CN=server,DC=domain,DC=local' did not have the LAPS attribute 'ms-Mcs-AdmPwd'"

    assert len(mock_conn.method_calls) == 1
    assert mock_conn.method_calls[0][0] == "search_s"
    assert mock_conn.method_calls[0][1] == (
        "DC=test,DC=local", FakeLdap.SCOPE_SUBTREE,
        "(&(objectClass=computer)(CN=server2))")
    assert mock_conn.method_calls[0][2] == {
        "attrlist": ["distinguishedName", "ms-Mcs-AdmPwd"]
    }
コード例 #12
0
def test_get_password_valid(laps_password):
    mock_conn = MagicMock()
    mock_conn.search_s.return_value = [
        ("CN=server,DC=domain,DC=local", {
            "ms-Mcs-AdmPwd": ["pass"],
            "distinguishedName": ["CN=server,DC=domain,DC=local"]
        }),
        # Replicates the 3 extra entries AD returns that aren't server objects
        (None, [
            "ldap://ForestDnsZones.domain.com/DC=ForestDnsZones,DC=domain,DC=com"
        ]),
        (None, [
            "ldap://DomainDnsZones.domain.com/DC=DomainDnsZones,DC=domain,DC=com"
        ]),
        (None, ["ldap://domain.com/CN=Configuration,DC=domain,DC=com"]),
    ]

    actual = laps_password.get_laps_password(mock_conn, "server",
                                             "DC=domain,DC=local")
    assert actual == "pass"

    assert len(mock_conn.method_calls) == 1
    assert mock_conn.method_calls[0][0] == "search_s"
    assert mock_conn.method_calls[0][1] == (
        "DC=domain,DC=local", FakeLdap.SCOPE_SUBTREE,
        "(&(objectClass=computer)(CN=server))")
    assert mock_conn.method_calls[0][2] == {
        "attrlist": ["distinguishedName", "ms-Mcs-AdmPwd"]
    }
コード例 #13
0
    def test_invalid_fetch_conjur_variable(self, mocker):
        for code in [401, 403, 404]:
            mock_response = MagicMock(spec_set=http_client.HTTPResponse)
            try:
                mock_response.getcode.return_value = code
            except Exception:
                # HTTPResponse is a Python 3 only feature. This uses a generic mock for python 2.6
                mock_response = MagicMock()
                mock_response.getcode.return_value = code

            mocker.patch.object(conjur_variable,
                                'open_url',
                                return_value=mock_response)

            with pytest.raises(AnsibleError):
                response = conjur_variable._fetch_conjur_token(
                    'super-secret', 'token', 'http://conjur', 'account')
コード例 #14
0
 def mock_response(self):
     mock_response = MagicMock()
     mock_response.getcode.return_value = 200
     mock_response.headers = mock_response.getheaders.return_value = {
         'X-Auth-Token': 'token_id'
     }
     mock_response.read.return_value = json.dumps({"value": "data"})
     return mock_response
コード例 #15
0
    def setUpClass(cls):
        class MockException(Exception):
            pass

        cls.MockException = MockException

        m = MagicMock()
        cls.cs_action_mock = MagicMock()
        cls.cs_action_mock.__class__ = MagicMock(add=Mock())
        nssrc_modules_mock = {
            'nssrc.com.citrix.netscaler.nitro.resource.config.cs': m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.cs.csaction': m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.cs.csaction.csaction': cls.cs_action_mock,
        }

        cls.nitro_specific_patcher = patch.dict(sys.modules, nssrc_modules_mock)
        cls.nitro_base_patcher = nitro_base_patcher
コード例 #16
0
    def test_update_service_when_service_differs(self):
        self.set_module_state('present')
        from ansible_collections.ansible.misc.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=[False, True])
        monitor_bindings_identical_mock = Mock(side_effect=[True, True])
        all_identical_mock = Mock(side_effect=[False])

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_service',
                ConfigProxy=m,
                service_exists=service_exists_mock,
                service_identical=service_identical_mock,
                monitor_bindings_identical=monitor_bindings_identical_mock,
                all_identical=all_identical_mock,
                do_state_change=Mock(return_value=Mock(errorcode=0)),
        ):
            self.module = netscaler_service
            result = self.exited()
            service_proxy_mock.assert_has_calls([call.update()])
            self.assertTrue(result['changed'], msg='Change not recorded')
    def test_create_non_existing_servicegroup(self):
        self.set_module_state('present')
        from ansible_collections.ansible.misc.plugins.modules 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, True])

        servicegroup_servicegroupmember_binding_mock = Mock(count=Mock(
            return_value=0))

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_servicegroup',
                ConfigProxy=m,
                servicegroup_exists=servicegroup_exists_mock,
                servicemembers_identical=Mock(side_effect=[False, True]),
                do_state_change=Mock(return_value=Mock(errorcode=0)),
                servicegroup_servicegroupmember_binding=
                servicegroup_servicegroupmember_binding_mock,
                nitro_exception=self.MockException,
        ):
            self.module = netscaler_servicegroup
            result = self.exited()
            servicegroup_proxy_mock.assert_has_calls([call.add()])
            self.assertTrue(result['changed'], msg='Change not recorded')
コード例 #18
0
    def test_valid_fetch_conjur_variable(self, mocker):
        mock_response = MagicMock(spec_set=http_client.HTTPResponse)
        try:
            mock_response.getcode.return_value = 200
        except Exception:
            # HTTPResponse is a Python 3 only feature. This uses a generic mock for python 2.6
            mock_response = MagicMock()
            mock_response.getcode.return_value = 200

        mock_response.read.return_value = 'foo-bar'
        mocker.patch.object(conjur_variable,
                            'open_url',
                            return_value=mock_response)

        response = conjur_variable._fetch_conjur_token('super-secret', 'token',
                                                       'http://conjur',
                                                       'account')
        assert response == 'foo-bar'
コード例 #19
0
def test_uri_options(monkeypatch, kwargs, expected):
    mock_ldap = MagicMock()
    monkeypatch.setattr("ldap.initialize", mock_ldap)

    lookup_loader.get('laps_password').run([], **kwargs)

    assert mock_ldap.call_count == 1
    assert mock_ldap.call_args[0] == (expected, )
    assert mock_ldap.call_args[1] == {"bytes_mode": False}
コード例 #20
0
def test_run_with_simple_auth_and_search_base(monkeypatch, laps_password):
    def get_laps_password(conn, cn, search_base):
        return "CN=%s,%s" % (cn, search_base)

    mock_ldap = MagicMock()
    monkeypatch.setattr("ldap.initialize", mock_ldap)

    mock_get_laps_password = MagicMock(side_effect=get_laps_password)
    monkeypatch.setattr(laps_password, "get_laps_password",
                        mock_get_laps_password)

    actual = lookup_loader.get('laps_password').run(
        ["host1", "host2"],
        domain="dc01",
        auth="simple",
        username="******",
        password="******",
        allow_plaintext=True,
        search_base="OU=Workstations,DC=domain,DC=com")
    assert actual == [
        "CN=host1,OU=Workstations,DC=domain,DC=com",
        "CN=host2,OU=Workstations,DC=domain,DC=com"
    ]

    # Verify the call count to get_laps_password
    assert mock_get_laps_password.call_count == 2

    # Verify the initialize() method call
    assert mock_ldap.call_count == 1
    assert mock_ldap.call_args[0] == ("ldap://dc01:389", )
    assert mock_ldap.call_args[1] == {"bytes_mode": False}

    # Verify the number of calls made to the mocked LDAP object
    assert mock_ldap.mock_calls[1][0] == "().set_option"
    assert mock_ldap.mock_calls[1][1] == (FakeLdap.OPT_PROTOCOL_VERSION, 3)

    assert mock_ldap.mock_calls[2][0] == "().set_option"
    assert mock_ldap.mock_calls[2][1] == (FakeLdap.OPT_REFERRALS, 0)

    assert mock_ldap.mock_calls[3][0] == '().bind_s'
    assert mock_ldap.mock_calls[3][1] == (u"user", u"pass")

    assert mock_ldap.mock_calls[4][0] == "().unbind_s"
    assert mock_ldap.mock_calls[4][1] == ()
コード例 #21
0
def test_certificate_validation(monkeypatch, validate, expected):
    mock_ldap_option = MagicMock()
    monkeypatch.setattr(FakeLdap, "set_option", mock_ldap_option)

    mock_ldap = MagicMock()
    monkeypatch.setattr("ldap.initialize", mock_ldap)

    lookup_loader.get('laps_password').run([],
                                           domain="dc01",
                                           start_tls=True,
                                           validate_certs=validate)

    assert mock_ldap_option.mock_calls[0][1] == (
        FakeLdap.OPT_X_TLS_REQUIRE_CERT, expected)

    assert mock_ldap.mock_calls[3][0] == "().start_tls_s"
    assert mock_ldap.mock_calls[3][1] == ()

    assert mock_ldap.mock_calls[4][0] == "().sasl_gssapi_bind_s"
    assert mock_ldap.mock_calls[4][1] == ()
コード例 #22
0
def test_certificate_validate_with_custom_cacert(monkeypatch):
    mock_ldap_option = MagicMock()
    monkeypatch.setattr(FakeLdap, "set_option", mock_ldap_option)

    mock_ldap = MagicMock()
    monkeypatch.setattr("ldap.initialize", mock_ldap)
    monkeypatch.setattr(os.path, 'exists', lambda x: True)

    lookup_loader.get('laps_password').run([],
                                           domain="dc01",
                                           scheme="ldaps",
                                           cacert_file="cacert.pem")

    assert mock_ldap_option.mock_calls[0][1] == (
        FakeLdap.OPT_X_TLS_REQUIRE_CERT, FakeLdap.OPT_X_TLS_DEMAND)
    assert mock_ldap_option.mock_calls[1][1] == (FakeLdap.OPT_X_TLS_CACERTFILE,
                                                 u"cacert.pem")

    assert mock_ldap.mock_calls[3][0] == "().sasl_gssapi_bind_s"
    assert mock_ldap.mock_calls[3][1] == ()
コード例 #23
0
def test_sasl_bind_ldap_no_mechs_error(monkeypatch):
    mock_ldap = MagicMock()
    mock_ldap.return_value.sasl_gssapi_bind_s.side_effect = FakeLDAPAuthUnknownError(
        "no mechs")
    monkeypatch.setattr("ldap.initialize", mock_ldap)

    with pytest.raises(AnsibleLookupError) as err:
        lookup_loader.get('laps_password').run([], domain="dc01")

    assert str(err.value) == "Failed to do a sasl bind against LDAP host 'ldap://dc01:389', the GSSAPI mech is " \
                             "not installed: no mechs"
コード例 #24
0
def test_normal_run(monkeypatch, laps_password):
    def get_laps_password(conn, cn, search_base):
        return "CN=%s,%s" % (cn, search_base)

    mock_ldap = MagicMock()
    mock_ldap.return_value.read_rootdse_s.return_value = {
        "defaultNamingContext": ["DC=domain,DC=com"]
    }
    monkeypatch.setattr("ldap.initialize", mock_ldap)

    mock_get_laps_password = MagicMock(side_effect=get_laps_password)
    monkeypatch.setattr(laps_password, "get_laps_password",
                        mock_get_laps_password)

    actual = lookup_loader.get('laps_password').run(["host1", "host2"],
                                                    domain="dc01")
    assert actual == ["CN=host1,DC=domain,DC=com", "CN=host2,DC=domain,DC=com"]

    # Verify the call count to get_laps_password
    assert mock_get_laps_password.call_count == 2

    # Verify the initialize() method call
    assert mock_ldap.call_count == 1
    assert mock_ldap.call_args[0] == ("ldap://dc01:389", )
    assert mock_ldap.call_args[1] == {"bytes_mode": False}

    # Verify the number of calls made to the mocked LDAP object
    assert mock_ldap.mock_calls[1][0] == "().set_option"
    assert mock_ldap.mock_calls[1][1] == (FakeLdap.OPT_PROTOCOL_VERSION, 3)

    assert mock_ldap.mock_calls[2][0] == "().set_option"
    assert mock_ldap.mock_calls[2][1] == (FakeLdap.OPT_REFERRALS, 0)

    assert mock_ldap.mock_calls[3][0] == '().sasl_gssapi_bind_s'
    assert mock_ldap.mock_calls[3][1] == ()

    assert mock_ldap.mock_calls[4][0] == "().read_rootdse_s"
    assert mock_ldap.mock_calls[4][1] == ()

    assert mock_ldap.mock_calls[5][0] == "().unbind_s"
    assert mock_ldap.mock_calls[5][1] == ()
コード例 #25
0
def test_sasl_bind_ldap_error(monkeypatch):
    mock_ldap = MagicMock()
    mock_ldap.return_value.sasl_gssapi_bind_s.side_effect = FakeLDAPError(
        "fake error")
    monkeypatch.setattr("ldap.initialize", mock_ldap)

    with pytest.raises(AnsibleLookupError) as err:
        lookup_loader.get('laps_password').run([], domain="dc01")

    assert str(
        err.value
    ) == "Failed to do a sasl bind against LDAP host 'ldap://dc01:389': fake error"
    def test_absent_operation_sanity(self):
        self.set_module_state('absent')
        from ansible_collections.ansible.misc.plugins.modules import netscaler_servicegroup

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_servicegroup',
                ConfigProxy=MagicMock(),
                servicegroup_exists=Mock(side_effect=[True, True]),
                nitro_exception=self.MockException,
        ):
            self.module = netscaler_servicegroup
            result = self.failed()
            self.assertEqual(result['msg'], 'Service group is present')
コード例 #27
0
def test_start_tls_ldap_error(monkeypatch):
    mock_ldap = MagicMock()
    mock_ldap.return_value.start_tls_s.side_effect = FakeLDAPError(
        "fake error")
    monkeypatch.setattr("ldap.initialize", mock_ldap)

    with pytest.raises(AnsibleLookupError) as err:
        lookup_loader.get('laps_password').run([],
                                               domain="dc01",
                                               start_tls=True)

    assert str(
        err.value
    ) == "Failed to send StartTLS to LDAP host 'ldap://dc01:389': fake error"
    def test_immutables_changed(self):
        self.set_module_state('present')
        from ansible_collections.ansible.misc.plugins.modules 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)

        with patch.multiple(
                'ansible_collections.ansible.misc.plugins.modules.netscaler_servicegroup',
                ConfigProxy=m,
                servicegroup_exists=Mock(side_effect=[True, True]),
                servicegroup_identical=Mock(side_effect=[False, True]),
                get_immutables_intersection=Mock(return_value=['some']),
                nitro_exception=self.MockException,
        ):
            self.module = netscaler_servicegroup
            result = self.failed()
            self.assertTrue(
                result['msg'].startswith('Cannot update immutable attributes'))
コード例 #29
0
def test_simple_bind_ldap_error(monkeypatch):
    mock_ldap = MagicMock()
    mock_ldap.return_value.bind_s.side_effect = FakeLDAPError("fake error")
    monkeypatch.setattr("ldap.initialize", mock_ldap)

    with pytest.raises(AnsibleLookupError) as err:
        lookup_loader.get('laps_password').run([],
                                               domain="dc01",
                                               auth="simple",
                                               username="******",
                                               password="******",
                                               allow_plaintext=True)

    assert str(
        err.value
    ) == "Failed to simple bind against LDAP host 'ldap://dc01:389': fake error"
コード例 #30
0
    def setUpClass(cls):
        class MockException(Exception):
            pass

        cls.MockException = MockException

        m = MagicMock()
        nssrc_modules_mock = {
            'nssrc.com.citrix.netscaler.nitro.resource.config.gslb':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.gslb.gslbsite':
            m,
            'nssrc.com.citrix.netscaler.nitro.resource.config.gslb.gslbsite.gslbsite':
            m,
        }

        cls.nitro_specific_patcher = patch.dict(sys.modules,
                                                nssrc_modules_mock)
        cls.nitro_base_patcher = nitro_base_patcher