1## SUFFIX SELECTION VALIDATION
2##
3## Here we can check the suffix selection function.
4##
5## We do not need running LDAP server for that
6##
7
8use strict;
9use warnings;
10use utf8;
11use File::Spec;
12use Test::More;
13
14#--- check permission to run test
15my $test_directory = File::Spec->catfile( 't', '18_ldap');
16my $semaphore_file = File::Spec->catfile(
17			    $test_directory,
18                    	    'enable_talk_to_server',
19		     );
20if( !( -f $semaphore_file) ) {
21    plan skip_all => "No ldap server for testing";
22};
23
24use_ok( 'OpenXPKI::LdapUtils' );
25
26# A hash with DN-s for tests:
27#		$dn => suffix index in @{$suffixes} ( - 1 if not found )
28# messages about suffixes are in  %suffix_messages - keep it
29# syncronized with @{$suffixes} and %cert_dns
30# FIXME - would be nice to create those structures dynamically
31#
32
33
34my %cert_dns=(
35            "CN=aa+SN=dC,OU=Decels,L=GB,ST=SomeYz,DC=OpenXPKI,DC=org" => 0,
36            "CN=aa+SN=dC,OU=Decels,L=GB,ST=SomeYz,DC=OpenXPKI,C=RU"   => 1,
37            "CN=aa+SN=dC,OU=Decels,L=GB,ST=SomeYz,DC=IPMCE,C=RU"      => -1,
38            "CN=aa+SN=dC,OU=Decels,L=GB,ST=SomeYz,DC=IPMCE,DC=org"    => -1,
39            "CN=aa+SN=dC,OU=Decels,L=GB,ST=SomeYz,DC=OpenXPKI,DC=RU"  => -1,
40	    "CN=Иван+SN=dC,OU=Decels,L=GB,ST=SomeYz,DC=OpenXPKI,DC=org" =>
41	    0,
42	    "CN=John+SN=Иванов,OU=Decels,L=GB,ST=SomeYz,DC=OpenXPKI,DC=org" =>
43	    0,
44	    "CN=Иван+SN=Иванов,OU=Decels,L=GB,ST=SomeYz,DC=OpenXPKI,DC=org" =>
45	    0,
46	    "CN=John+SN=dC,OU=Отдел Инвормации,L=RU,ST=Россия,DC=OpenXPKI,DC=org" =>
47	    0,
48	    "CN=Иван+SN=dC,OU=Decels,L=GB,O=Институт Механики,DC=org" =>
49	    2,
50	    "CN=John+SN=Иванов,OU=Decels,L=GB,O=Институт Механики,DC=org" =>
51	    2,
52	    "CN=Иван+SN=Иванов,OU=Decels,L=GB,O=Институт Механики,DC=org" =>
53	    2,
54	    "CN=John+SN=dC,OU=Отдел Инвормации,L=RU,O=Институт Механики,DC=org" =>
55	    2,
56	    "CN=Иван+SN=dC,OU=Decels,L=GB,ST=SomeYz,DC=OpenXPKIй,DC=org" =>
57	    -1,
58	    "CN=John+SN=Иванов,OU=Decels,L=GB,ST=SomeYz,DC=OpenXPKIй,DC=org" =>
59	    -1,
60  	    "CN=Иван+SN=Иванов,OU=Decels,L=GB,ST=SomeYz,DC=OpenXPKIй,DC=org" =>
61	    -1,
62	    "CN=John+SN=dC,OU=Отдел Инвормации,L=RU,ST=Россия,DC=OpenXPKIй,DC=org" =>
63	    -1,
64	    "CN=Иван+SN=dC,OU=Decels,L=GB,O=Институт Механикий,DC=org" =>
65	    -1,
66	    "CN=John+SN=Иванов,OU=Decels,L=GB,O=Институт Механикий,DC=org" =>
67	    -1,
68	    "CN=Иван+SN=Иванов,OU=Decels,L=GB,O=Институт Механикий,DC=org" =>
69	    -1,
70	    "CN=John+SN=dC,OU=Отдел Инвормации,L=RU,O=Институт Механикий,DC=org" =>
71	    -1,
72            );
73
74my $suffixes=[
75                'dc=openxpki,dc=org' ,
76                'dc=openxpki,c=RU',
77                'O=Институт Механики,DC=org',
78             ];
79
80#                                 ^
81# keep this hash | and this array | synchronized
82#                v
83my %suffix_messages=(
84            		'dc=openxpki,dc=org' =>
85			    'dc=openxpki,dc=org',
86            		'dc=openxpki,c=RU'   =>
87			    'dc=openxpki,c=RU',
88            		'O=Институт Механики,DC=org' =>
89			    ' (UTF-8 characters)',
90                    );
91
92
93
94my  @results=();
95my $utils=OpenXPKI::LdapUtils->new();
96my $test_number = scalar (keys %cert_dns);
97
98plan tests => $test_number;
99
100
101diag "GET SUFFIX VALIDATION\n" if $ENV{VERBOSE};
102
103if($ENV{DEBUG}){
104    diag( "NUMBER OF TESTS >" . $test_number . "<\n");
105};
106
107
108foreach my $cert_dn ( keys %cert_dns ) {
109
110   if($ENV{DEBUG}){
111       diag( "--- DN  --- ".  $cert_dn . "\n");
112   };
113
114   my $suffix = $utils->get_suffix( $cert_dn , $suffixes );
115   if( defined $suffix ){
116
117        if($ENV{DEBUG}){
118            diag( "SUFFIX  --- ". $suffix . "\n");
119        };
120        is(
121	    $suffix,
122	    $suffixes->[$cert_dns{$cert_dn}],
123	    'Find a suffix '. $suffix_messages{$suffix}
124	);
125   } else {
126
127        if($ENV{DEBUG}){
128            diag( "SUFFIX  --- NOT FOUND\n");
129        };
130        is(-1,$cert_dns{$cert_dn},'The suffix does not match anything');
131   };
132};
1331;
134
135
136