source: trunk/LATMOS-Accounts/live-test/10_sql.t @ 1910

Last change on this file since 1910 was 1910, checked in by nanardon, 7 years ago

Add some test, then fix some bugs

  • Property svn:keywords set to Id
File size: 11.7 KB
Line 
1# -*- indent-tabs-mode: nil; tab-width: 4; -*-
2# vim:ft=perl:et:sw=4
3# $Id$
4
5use strict;
6use warnings;
7use Test::More;
8use FindBin qw($Bin);
9
10use DateTime;
11
12require "$Bin/common.pl";
13eval "require '$Bin/config.pl'";
14
15warn join(' ', @INC);
16
17if ($@) {
18    plan skip_all => 'no config found' if ($@);
19} elsif (!$LA::T::SQLBASE) {
20    plan skip_all => 'No SQL base defined';
21} else {
22    plan tests => 102; # Number of test
23}
24
25use_ok('LATMOS::Accounts');
26use_ok('LATMOS::Accounts::Bases::Sql');
27
28ok(my $la = LATMOS::Accounts->new(undef, noacl => 1), "Can get LATMOS::Accounts");
29ok(my $base = $la->base($LA::T::SQLBASE), "can get SQL base $LA::T::SQLBASE");
30
31{ # test: user
32my $oid = genid();
33
34use_ok('LATMOS::Accounts::Bases::Sql::User');
35ok($base->create_c_object('user', $oid,
36    sn => "snUser",
37    givenName => "givenNameUser",
38    expire => undef,
39    ), "Can create user $oid");
40ok(my $obj = $base->get_object('user', $oid), "user $oid is actually deleted");
41is($obj->get_attributes('sn'), "snUser");
42
43my $passwd = genid();
44ok($obj->set_password($passwd), "Can set password");
45ok($base->authenticate_user($oid, $passwd), "can authenticate user");
46ok(!$base->authenticate_user($oid, '----'),
47    "don't authenticate with invalid password");
48
49ok($base->delete_object('user', $oid), "Can delete user $oid");
50ok(!$base->get_object('user', $oid), "user $oid is actually deleted");
51}
52
53$base->rollback;
54
55{ # test alias
56
57my $oid = genid();
58
59ok($base->create_c_object('user', $oid,
60    sn => "snUser",
61    givenName => "givenNameUser",
62    expire => undef,
63    ), "Can create user $oid");
64ok(my $realobj = $base->get_object('user', $oid), "user $oid is actually created");
65
66my $aliasoid = genid();
67
68ok($base->CreateAlias('user', $aliasoid, $oid), "Can create alias object");
69
70ok(my $obj = $base->get_object('user', $aliasoid), "Can get object trought alias");
71is($obj->get_attributes('sn'), 'snUser');
72
73ok(my $aobj = $base->GetAlias('user', $aliasoid), "Can get alias object");
74
75is($aobj->get_attributes('oalias'), $oid);
76is($aobj->get_attributes('oaliascache'), $oid);
77
78my $oidsub = genid();
79ok($base->create_c_object('user', $oidsub,
80    sn => "snUserSub",
81    givenName => "givenNameSub",
82    expire => undef,
83    ), "Can create user $oid");
84ok(my $subobj = $base->get_object('user', $oidsub), "user $oidsub is actually created");
85
86$subobj->set_c_fields(
87    managerContact => $aliasoid,
88);
89
90is($subobj->get_c_field('manager'), $aliasoid, "Can get ref manager");
91is($subobj->GetAttributeValue('manager'), $oid, "Can get ref manager via GetAttributeValue");
92
93ok(eq_set(
94        [ $base->search_objects('user', 'sn=snUser') ],
95        [ $oid, $aliasoid ]
96    ), 'Search retrieve alias');
97
98ok(eq_set(
99        [ $base->search_objects('user', 'sn=snUser', 'oalias=NULL') ],
100        [ $oid ]
101    ), 'Search with oalias=NULL don\'t retrieve alias');
102
103ok(eq_set(
104        [ $base->search_objects('user', 'sn=XXXXXXXXX') ],
105        [ ]
106    ), 'Search with no result don\'t retrieve alias');
107
108ok($base->RemoveAlias('user', $aliasoid), "Removing Alias");
109ok(!$base->GetAlias('user', $aliasoid), "Cannot get removed alias object");
110
111$subobj->set_c_fields(
112    managerContact => $oid,
113);
114
115ok($base->CreateAlias('user', $aliasoid, "user.$oidsub.managerContact"), "Can create alias object");
116ok($aobj = $base->GetAlias('user', $aliasoid), "Can get alias object");
117is($aobj->get_attributes('oalias'), "user.$oidsub.managerContact");
118is($aobj->get_attributes('oaliascache'), $oid);
119
120ok($aobj->set_c_fields(oalias => $oidsub));
121is($aobj->get_attributes('oalias'), $oidsub);
122is($aobj->get_attributes('oaliascache'), $oidsub);
123
124ok($aobj->set_c_fields(oalias => "user.$oidsub.managerContact"));
125is($aobj->get_attributes('oalias'), "user.$oidsub.managerContact");
126is($aobj->get_attributes('oaliascache'), $oid);
127
128}
129
130$base->rollback;
131
132{ # test: group
133my $oid = genid();
134
135use_ok('LATMOS::Accounts::Bases::Sql::Group');
136ok($base->create_c_object('group', $oid,
137    description => 'Group Test'
138), "Can create group $oid");
139ok(my $obj = $base->get_object('group', $oid), "group $oid is actually deleted");
140is($obj->get_attributes('description'), "Group Test");
141
142ok($base->delete_object('group', $oid), "Can delete group $oid");
143ok(!$base->get_object('group', $oid), "group $oid is actually deleted");
144}
145
146$base->rollback;
147
148{ # test: nethost
149my $oid = genid();
150
151use_ok('LATMOS::Accounts::Bases::Sql::Nethost');
152ok($base->create_c_object('nethost', $oid,
153    description => 'Nethost Test',
154    ip => '255.255.255.255', # widely improbable to conflict with existing one
155), "Can create nethost $oid");
156ok(my $obj = $base->get_object('nethost', $oid), "nethost $oid is actually deleted");
157is($obj->get_attributes('description'), "Nethost Test");
158my ($ip) = $obj->get_attributes('ip');
159is($ip, '255.255.255.255');
160
161ok($base->delete_object('nethost', $oid), "Can delete nethost $oid");
162ok(!$base->get_object('nethost', $oid), "nethost $oid is actually deleted");
163}
164
165$base->rollback;
166
167{ # test: netzone
168my $oid = genid();
169
170use_ok('LATMOS::Accounts::Bases::Sql::Netzone');
171ok($base->create_c_object('netzone', $oid,
172    description => 'Netzone Test',
173    type => 'dhcp',
174), "Can create netzone $oid");
175ok(my $obj = $base->get_object('netzone', $oid), "netzone $oid is actually deleted");
176is($obj->get_attributes('description'), "Netzone Test");
177
178ok($base->delete_object('netzone', $oid), "Can delete netzone $oid");
179ok(!$base->get_object('netzone', $oid), "netzone $oid is actually deleted");
180}
181
182$base->rollback;
183
184{ # test employment
185use_ok('LATMOS::Accounts::Bases::Sql::Employment');
186my $baseEmp = genid();
187my $empUser = genid();
188
189my $baseEmpStart = DateTime->now->subtract(days => 60);
190my $baseEmpEnd   = DateTime->now->add(days => 60);
191
192ok($base->create_c_object('user', $empUser,
193    sn => "snUser",
194    givenName => "givenNameUser",
195    ), "Can create user $empUser");
196
197ok($base->create_c_object('employment', $baseEmp,
198    user => $empUser,
199    firstday => $baseEmpStart->dmy('/'),
200    lastday  => $baseEmpEnd->dmy('/'),
201), "Can create current employment");
202
203{
204    my $Emp      = genid();
205    my $EmpStart = DateTime->now->add(days => 61);
206    my $EmpEnd   = DateTime->now->add(days => 120);
207    ok($base->create_c_object('employment', $Emp,
208        user => $empUser,
209        firstday => $EmpStart->dmy('/'),
210        lastday  => $EmpEnd->dmy('/'),
211    ), "Can create employment after");
212    ok($base->delete_object('employment', $Emp), "Deleting Emp $Emp");
213}
214{
215    my $Emp      = genid();
216    my $EmpStart = DateTime->now->subtract(days => 40);
217    my $EmpEnd   = DateTime->now->subtract(days => 20);
218    ok(!$base->create_c_object('employment', $Emp,
219        user => $empUser,
220        firstday => $EmpStart->dmy('/'),
221        lastday  => $EmpEnd->dmy('/'),
222    ), "Cannot create employment overlaping start");
223    ok(!$base->delete_object('employment', $Emp), "Deleting Emp $Emp");
224}
225{
226    my $Emp      = genid();
227    my $EmpStart = DateTime->now->add(days => 30);
228    my $EmpEnd   = DateTime->now->add(days => 90);
229    ok(!$base->create_c_object('employment', $Emp,
230        user => $empUser,
231        firstday => $EmpStart->dmy('/'),
232        lastday  => $EmpEnd->dmy('/'),
233    ), "Cannot create employment overlapping end");
234    ok(!$base->delete_object('employment', $Emp), "Deleting Emp $Emp");
235}
236{
237    my $Emp      = genid();
238    my $EmpStart = DateTime->now->subtract(days => 90);
239    my $EmpEnd   = DateTime->now->add(days => 90);
240    ok(!$base->create_c_object('employment', $Emp,
241        user => $empUser,
242        firstday => $EmpStart->dmy('/'),
243        lastday  => $EmpEnd->dmy('/'),
244    ), "Cannot create employment overlapping another");
245    ok(!$base->delete_object('employment', $Emp), "Deleting Emp $Emp");
246}
247ok($base->delete_object('employment', $baseEmp), "Deleting Emp BaseEmp $baseEmp");
248
249{
250
251    $base->{_options}{allow_pasted_employment} = 1;
252    my $Emp      = genid();
253    my $EmpStart = DateTime->now->subtract(days => 90);
254    ok($base->create_c_object('employment', $Emp,
255        user => $empUser,
256        firstday => $EmpStart->dmy('/'),
257        lastday  => undef,
258    ), "Can create unlimited employment");
259    ok(my $ouser = $base->get_object('user', $empUser), "Getting user object");
260    ok(!$ouser->get_attributes('expire'), 'User don t expire');
261
262    my $EmpOld   = genid();
263    ok($base->create_c_object('employment', $EmpOld,
264        user => $empUser,
265        firstday => '1/1/2012',
266        lastday  => '31/12/2012',
267    ), "Cannot create pasted employement");
268
269    ok($ouser = $base->get_object('user', $empUser), "Getting user object");
270    ok(!$ouser->get_attributes('expire'), 'User still don t expire');
271
272    ok($base->delete_object('employment', $Emp), "Deleting Emp $Emp");
273    ok($base->delete_object('employment', $EmpOld), "Deleting Emp $EmpOld");
274    $base->{_options}{allow_pasted_employment} = undef;
275}
276
277ok($base->delete_object('user', $empUser), "Deleting user $empUser");
278}
279
280$base->rollback;
281
282{
283    diag('Testing search');
284 
285    ok($base->create_c_object('user', 'searchuaa',
286        sn => "Lastnamea",
287        givenName => "Firstnamea",
288        ), "Can create user searchuaa");
289    ok($base->create_c_object('user', 'searchuna',
290        sn => "Lastnamea",
291        ), "Can create user searchuna");
292    ok($base->create_c_object('user', 'searchuab',
293        sn => "Lastnamea",
294        givenName => "Firstnameb",
295        ), "Can create user searchuab");
296    ok($base->create_c_object('user', 'searchuba',
297        sn => "Lastnameb",
298        givenName => "Firstnamea",
299        ), "Can create user searchuba");
300    ok($base->create_c_object('user', 'searchubb',
301        sn => "Lastnameb",
302        givenName => "Firstnameb",
303        ), "Can create user searchubb");
304    ok($base->create_c_object('group', 'searchga',
305            member => [ 'searchuaa', 'searchuba' ],
306        ), "Can create group searchga");
307    ok($base->create_c_object('group', 'searchgb',
308            member => [ 'searchuab', 'searchuba' ],
309        ), "Can create group searchgb");
310
311    ok(eq_set(
312        [ $base->search_objects('user', 'givenName=Firstnamea') ],
313        [ 'searchuaa', 'searchuba' ]
314    ), 'Can search on single attribute');
315    ok(eq_set(
316        [ $base->search_objects('user', 'givenName=Firstnamea', 'givenName=Firstnameb') ],
317        [ 'searchuaa', 'searchuab', 'searchuba', 'searchubb' ]
318    ), 'Can search on single attribute with 2 values');
319    ok(eq_set(
320        [ $base->search_objects('user', 'givenName=Firstnamea||Firstnameb') ],
321        [ 'searchuaa', 'searchuba', 'searchuab', 'searchubb' ]
322    ), 'Can search on single attribute with 2 values using ||');
323    ok(eq_set(
324        [ $base->search_objects('user', 'givenName=Firstnamea', 'sn=Lastnamea') ],
325        [ 'searchuaa' ]
326    ), 'Can search on 2 attributes');
327    ok(! $base->search_objects('user', 'givenName=Firstnamea', 'sn=NoName'), 'Can search on 2 attributes, one return nothing');
328    ok($base->search_objects('user'), 'No filter return something');
329    ok(eq_set(
330        [ $base->search_objects('user', 'givenName=NULL', 'sn=Lastnamea') ],
331        [ 'searchuna' ]
332    ), 'Can search on NULL attributes');
333    ok(eq_set(
334        [ $base->search_objects('user', 'memberOf=searchga&&searchgb') ],
335        [ 'searchuba' ],
336    ), "Search using && with two values");
337    ok(eq_set(
338        [ $base->search_objects('group', 'member.givenName=Firstnameb') ],
339        [ 'searchgb' ],
340    ), "Search using recursive search");
341    ok(eq_set(
342        [ $base->search_objects('user', 'givenName~nameb') ],
343        [ 'searchuab', 'searchubb' ]
344    ), 'Can search using ~ operator');
345
346    ok($base->delete_object('user', 'searchuaa'), "deleting user searchuaa");
347    ok($base->delete_object('user', 'searchuna'), "deleting user searchuna");
348    ok($base->delete_object('user', 'searchuba'), "deleting user searchuba");
349    ok($base->delete_object('user', 'searchuab'), "deleting user searchuab");
350    ok($base->delete_object('user', 'searchubb'), "deleting user searchubb");
351}
352
353$base->rollback;
Note: See TracBrowser for help on using the repository browser.