Escape special characters in user/role names
[catagits/Catalyst-Authentication-Store-LDAP.git] / t / lib / LDAPTest.pm
index e1e73c1..251881b 100644 (file)
@@ -1,26 +1,54 @@
 # local test ldap server
 
 package LDAPTest;
+use strict;
+use warnings;
 
 use Net::LDAP::Server::Test;
 use Net::LDAP::Entry;
+use Net::LDAP;
 
 sub server_port {10636}
 sub server_host { 'ldap://127.0.0.1:' . server_port() }
 
 sub spawn_server {
-    my @mydata;
-    my $entry = Net::LDAP::Entry->new;
-    $entry->dn('ou=foobar');
-    $entry->add(
-        dn          => 'ou=foobar',
-        uid         => 'somebody',
-        displayName => 'Some Body',
-        cn          => [qw(value1 value2)]
-    );
-    push @mydata, $entry;
-
-    return Net::LDAP::Server::Test->new( server_port(), data => \@mydata );
+    my $server = Net::LDAP::Server::Test->new( server_port(), auto_schema => 1, @_ );
+
+    my $ldap = Net::LDAP->new(server_host()) or die "Can't connect: $@";
+    my $msg = $ldap->bind;
+    die "Can't bind: " . $msg->error if $msg->is_error;
+
+    for my $user (
+        {
+            uid         => 'somebody',
+            displayName => 'Some Body',
+            cn          => [qw(value1 value2)]
+        },
+        {
+            uid         => 'some*',
+            displayName => 'Some Star',
+            cn          => [qw(value1 value2)]
+        },
+        {
+            uid         => 'sunnO)))',
+            displayName => 'Sunn O)))',
+            cn          => [qw(value1 value2)]
+        }
+    ) {
+        my $msg = $ldap->add("uid=$user->{uid},ou=foobar", attrs => [
+            objectClass => 'person',
+            ou => 'foobar',
+            %{$user},
+        ]);
+        die "Can't bind: " . $msg->error if $msg->is_error;
+    };
+    return bless { server => $server, client => $ldap }, 'ServerWrapper';
+}
+
+sub ServerWrapper::stop {
+    my ($self) = @_;
+    $self->{client}->unbind;
+    $self->{server}->stop;
 }
 
 1;