Initial commit 4.0.5-3
[usit-rt.git] / local / plugins / RT-Authen-ExternalAuth.multiple-emails / lib / RT / Authen / ExternalAuth / Test.pm
1 use strict;
2 use warnings;
3
4 ### after: use lib qw(@RT_LIB_PATH@);
5 use lib qw(/www/var/hjelp/local/lib /www/var/hjelp/lib);
6
7 package RT::Authen::ExternalAuth::Test;
8
9 our @ISA;
10 BEGIN {
11     local $@;
12     eval { require RT::Test; 1 } or do {
13         require Test::More;
14         Test::More::BAIL_OUT(
15             "requires 3.8 to run tests. Error:\n$@\n"
16             ."You may need to set PERL5LIB=/path/to/rt/lib"
17         );
18     };
19     push @ISA, 'RT::Test';
20 }
21
22 sub import {
23     my $class = shift;
24     my %args  = @_;
25
26     $args{'requires'} ||= [];
27     if ( $args{'testing'} ) {
28         unshift @{ $args{'requires'} }, 'RT::Authen::ExternalAuth';
29     } else {
30         $args{'testing'} = 'RT::Authen::ExternalAuth';
31     }
32
33     if ( delete $args{'ldap'} ) {
34         local $@;
35         eval {
36             require Net::LDAP;
37             require Net::LDAP::Server::Test;
38             1;
39         } or do {
40             require Test::More;
41             Test::More::plan( skip_all => 'Unable to test without LDAP modules: '. $@ );
42             exit;
43         }
44     }
45     if ( my $driver = delete $args{'dbi'} ) {
46         local $@;
47         eval {
48             require DBI;
49             require File::Temp;
50             require Digest::MD5;
51             require File::Spec;
52             eval "require DBD::$driver; 1";
53         } or do {
54             require Test::More;
55             Test::More::plan( skip_all => 'Unable to test without DB modules: '. $@ );
56             exit;
57         }
58     }
59
60     $class->SUPER::import( %args );
61     $class->export_to_level(1);
62
63     require RT::Authen::ExternalAuth;
64 }
65
66 my %ldap;
67 sub bootstrap_ldap_server {
68     my $self = shift;
69
70     my $port = RT::Test->generate_port;
71
72     require Net::LDAP::Server::Test;
73     my $server = Net::LDAP::Server::Test->new( $port, auto_schema => 1 );
74     return () unless $server;
75
76     my $client = Net::LDAP->new( "localhost:$port" );
77     $client->bind;
78
79     @ldap{'server','client'} = ($server, $client);
80     return ($server, $client, "localhost:$port", $port);
81 }
82
83 sub bootstrap_ldap_basics {
84     my $self = shift;
85     my ($server, $client, $address, $port) = $self->bootstrap_ldap_server;
86
87     RT->Config->Set( Plugins                     => 'RT::Authen::ExternalAuth' );
88     RT->Config->Set( ExternalAuthPriority        => ['My_LDAP'] );
89     RT->Config->Set( ExternalInfoPriority        => ['My_LDAP'] );
90     RT->Config->Set( ExternalServiceUsesSSLorTLS => 0 );
91     RT->Config->Set( AutoCreateNonExternalUsers  => 0 );
92     RT->Config->Set( AutoCreate  => undef );
93     RT->Config->Set(
94         ExternalSettings => {
95             'My_LDAP' => {
96                 'type'            => 'ldap',
97                 'server'          => $address,
98                 'base'            => 'dc=bestpractical,dc=com',
99                 'filter'          => '(objectClass=*)',
100                 'd_filter'        => '()',
101                 'tls'             => 0,
102                 'net_ldap_args'   => [ version => 3 ],
103                 'attr_match_list' => [ 'Name', 'EmailAddress' ],
104                 'attr_map'        => {
105                     'Name'         => 'uid',
106                     'EmailAddress' => 'mail',
107                 },
108             },
109         },
110     );
111     return ($server, $client);
112 }
113
114 sub add_ldap_user {
115     my $self = shift;
116     my %args = @_;
117
118     $args{'uid'} ||= $args{'cn'};
119     $args{'cn'} ||= $args{'uid'};
120
121     my $dn = delete $args{'dn'};
122     $dn ||= "uid=". $args{'uid'} .",dc=bestpractical,dc=com";
123
124     $args{'objectClass'} ||= 'User';
125     $args{'userPassword'} ||= 'password';
126
127     return $ldap{'client'}->add( $dn, attr => [%args] );
128 }
129
130 { my $i = 0;
131 sub add_ldap_user_simple {
132     my $self = shift;
133     my %args = @_;
134
135     my $name = delete $args{'cn'} || "testuser". ++$i;
136
137     s/\%name\b/$name/g foreach grep defined, values %args;
138
139     $self->add_ldap_user(
140         cn    => $name,
141         mail  => "$name\@invalid.tld",
142         %args,
143     );
144     return $name;
145 } }
146
147 1;