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

Last change on this file since 2409 was 2327, checked in by nanardon, 5 years ago

Fix queryformat evaluation

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