new
Creates a new object. It does not connect to the real LDAP server. Each object is associated with a
shared LDAP data tree in memory, depending on the target (host/port/path) and scheme (ldap/ldaps/ldapi).
Test::Net::LDAP::Mock->new();
Test::Net::LDAP::Mock->new('ldap.example.com', port => 3389);
mockify
Test::Net::LDAP::Mock->mockify(sub {
# CODE
});
Inside the code block (recursively), all the occurrences of "Net::LDAP::new" are replaced by
"Test::Net::LDAP::Mock::new".
Subclasses of "Net::LDAP" are also mockified. "Test::Net::LDAP::Mock" is inserted into @ISA of each
subclass, only within the context of "mockify".
See also: "ldap_mockify" in Test::Net::LDAP::Util.
mock_data
Retrieves the currently associated data tree (for the internal purpose only).
mock_schema
Gets or sets the LDAP schema (Net::LDAP::Schema object) for the currently associated data tree.
In this version, the schema is used only for the search filter matching (based on Net::LDAP::FilterMatch
internally). It has no effect for any modification operations such as "add", "modify", and "delete".
mock_root_dse
Gets or sets the root DSE (Net::LDAP::RootDSE) for the currently associated data tree.
This should be set up as part of the test fixture before any successive call to the "root_dse()" method,
since Net::LDAP will cache the returned object.
$ldap->mock_root_dse(
namingContexts => 'dc=example,dc=com'
);
Note: the namingContexts value has no effect on the restriction with the topmost DN. In other words, even
if namingContexts is set to 'dc=example,dc=com', the "add()" method still allows you to add an entry to
'dc=somewhere-else'.
mock_bind
Gets or sets a LDAP result code (and optionally a message) that will be used as a message returned by a
later "bind()" call.
use Net::LDAP::Constant qw(LDAP_INVALID_CREDENTIALS);
$ldap->mock_bind(LDAP_INVALID_CREDENTIALS);
$ldap->mock_bind(LDAP_INVALID_CREDENTIALS, 'Login failed');
# ...
my $mesg = $ldap->bind(...);
$mesg->code && die $mesg->error; #=> die('Login failed')
In the list context, it returns an array of the code and message. In the scalar context, it returns the
code only.
Alternatively, this method can take a callback subroutine:
$ldap->mock_bind(sub {
my $arg = shift;
# Validate $arg->{dn} and $arg->{password}, etc.
if (...invalid credentials...) {
return LDAP_INVALID_CREDENTIALS;
}
});
The callback can return a single value as the LDAP result code or an array in the form "($code,
$message)". If the callback returns nothing (or "undef"), it is regarded as "LDAP_SUCCESS".
mock_password
Gets or sets the password for the simple password authentication with "bind()".
$ldap->mock_password('uid=test, dc=example, dc=com' => 'test_password');
# Caution: Passwords should usually *not* be hard-coded like this. Consider to load
# passwords from a config file, etc.
The passwords are stored with the entry node in the data tree.
Once this method is used, the "bind()" call will check the credentials whenever the "password" parameter
is passed. Anonymous binding and all the other authentication methods are not affected.
mock_target
Gets or sets the target scheme://host:port to normalize the way for successive "Test::Net::LDAP::Mock"
objects to resolve the associated data tree.
It is useful when normalizing the target scheme://host:port for different combinations. For example, if
there are sub-domains (such as ldap1.example.com and ldap2.example.com) that share the same data tree,
the target host should be normalized to be the single master server (such as ldap.example.com).
Test::Net::LDAP::Mock->mock_target('ldap.example.com');
Test::Net::LDAP::Mock->mock_target('ldap.example.com', port => 3389);
Test::Net::LDAP::Mock->mock_target(['ldap.example.com', {port => 3389}]);
Test::Net::LDAP::Mock->mock_target({scheme => 'ldaps', port => 3389});
Since this will affect all the successive calls to instantiate "Test::Net::LDAP::Mock", it may not be
ideal when your application uses connections to multiple LDAP servers. In that case, you can specify a
callback that will be invoked each time a "Test::Net::LDAP::Mock" object is instantiated.
Test::Net::LDAP::Mock->mock_target(sub {
my ($host, $arg) = @_;
# Normalize $host, $arg->{port}, and $arg->{scheme}
$host = 'ldap.example1.com' if $host =~ /\.example1\.com$/;
$host = 'ldap.example2.com' if $host =~ /\.example2\.com$/;
return ($host, $arg);
});
search
Searches for entries in the currently associated data tree.
$ldap->search(
base => 'dc=example, dc=com', scope => 'sub',
filter => '(cn=*)', attrs => ['uid', 'cn']
);
See "search" in Net::LDAP for more parameter usage.
compare
Compares an attribute/value pair with an entry in the currently associated data tree.
$ldap->compare('uid=test, dc=example, dc=com',
attr => 'cn',
value => 'Test'
);
See "compare" in Net::LDAP for more parameter usage.
add
Adds an entry to the currently associated data tree.
$ldap->add('uid=test, dc=example, dc=com', attrs => [
cn => 'Test'
]);
See "add" in Net::LDAP for more parameter usage.
modify
Modifies an entry in the currently associated data tree.
$ldap->modify('uid=test, dc=example, dc=com', add => [
cn => 'Test2'
]);
See "modify" in Net::LDAP for more parameter usage.
delete
Deletes an entry from the currently associated data tree.
$ldap->delete('uid=test, dc=example, dc=com');
See "delete" in Net::LDAP for more parameter usage.
moddn
Modifies DN of an entry in the currently associated data tree.
$ldap->moddn('uid=test, dc=example, dc=com',
newrdn => 'uid=test2'
);
See "moddn" in Net::LDAP for more parameter usage.
bind
Returns an expected result message if the bind result has previously been setup by the "mock_bind()"
method. Otherwise, a success message is returned.
unbind
Returns a success message.
abandon
Returns a success message.
perl v5.34.0 2022-06-28 Test::Net::LDAP::Mock(3pm)