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

Last change on this file since 1892 was 1892, checked in by nanardon, 8 years ago

2.0 is out

  • Property svn:keywords set to Id
File size: 10.9 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 => 90; # 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);
76
77my $oidsub = genid();
78ok($base->create_c_object('user', $oidsub,
79    sn => "snUserSub",
80    givenName => "givenNameSub",
81    expire => undef,
82    ), "Can create user $oid");
83ok(my $subobj = $base->get_object('user', $oidsub), "user $oidsub is actually created");
84
85$subobj->set_c_fields(
86    managerContact => $aliasoid,
87);
88
89is($subobj->get_c_field('manager'), $aliasoid, "Can get ref manager");
90is($subobj->GetAttributeValue('manager'), $oid, "Can get ref manager via GetAttributeValue");
91
92ok(eq_set(
93        [ $base->search_objects('user', 'sn=snUser') ],
94        [ $oid, $aliasoid ]
95    ), 'Search retrieve alias');
96
97ok(eq_set(
98        [ $base->search_objects('user', 'sn=snUser', 'oalias=NULL') ],
99        [ $oid ]
100    ), 'Search with oalias=NULL don\'t retrieve alias');
101
102ok(eq_set(
103        [ $base->search_objects('user', 'sn=XXXXXXXXX') ],
104        [ ]
105    ), 'Search with no result don\'t retrieve alias');
106
107ok($base->RemoveAlias('user', $aliasoid), "Removing Alias");
108}
109
110$base->rollback;
111
112{ # test: group
113my $oid = genid();
114
115use_ok('LATMOS::Accounts::Bases::Sql::Group');
116ok($base->create_c_object('group', $oid,
117    description => 'Group Test'
118), "Can create group $oid");
119ok(my $obj = $base->get_object('group', $oid), "group $oid is actually deleted");
120is($obj->get_attributes('description'), "Group Test");
121
122ok($base->delete_object('group', $oid), "Can delete group $oid");
123ok(!$base->get_object('group', $oid), "group $oid is actually deleted");
124}
125
126$base->rollback;
127
128{ # test: nethost
129my $oid = genid();
130
131use_ok('LATMOS::Accounts::Bases::Sql::Nethost');
132ok($base->create_c_object('nethost', $oid,
133    description => 'Nethost Test',
134    ip => '255.255.255.255', # widely improbable to conflict with existing one
135), "Can create nethost $oid");
136ok(my $obj = $base->get_object('nethost', $oid), "nethost $oid is actually deleted");
137is($obj->get_attributes('description'), "Nethost Test");
138my ($ip) = $obj->get_attributes('ip');
139is($ip, '255.255.255.255');
140
141ok($base->delete_object('nethost', $oid), "Can delete nethost $oid");
142ok(!$base->get_object('nethost', $oid), "nethost $oid is actually deleted");
143}
144
145$base->rollback;
146
147{ # test: netzone
148my $oid = genid();
149
150use_ok('LATMOS::Accounts::Bases::Sql::Netzone');
151ok($base->create_c_object('netzone', $oid,
152    description => 'Netzone Test',
153    type => 'dhcp',
154), "Can create netzone $oid");
155ok(my $obj = $base->get_object('netzone', $oid), "netzone $oid is actually deleted");
156is($obj->get_attributes('description'), "Netzone Test");
157
158ok($base->delete_object('netzone', $oid), "Can delete netzone $oid");
159ok(!$base->get_object('netzone', $oid), "netzone $oid is actually deleted");
160}
161
162$base->rollback;
163
164{ # test employment
165use_ok('LATMOS::Accounts::Bases::Sql::Employment');
166my $baseEmp = genid();
167my $empUser = genid();
168
169my $baseEmpStart = DateTime->now->subtract(days => 60);
170my $baseEmpEnd   = DateTime->now->add(days => 60);
171
172ok($base->create_c_object('user', $empUser,
173    sn => "snUser",
174    givenName => "givenNameUser",
175    ), "Can create user $empUser");
176
177ok($base->create_c_object('employment', $baseEmp,
178    user => $empUser,
179    firstday => $baseEmpStart->dmy('/'),
180    lastday  => $baseEmpEnd->dmy('/'),
181), "Can create current employment");
182
183{
184    my $Emp      = genid();
185    my $EmpStart = DateTime->now->add(days => 61);
186    my $EmpEnd   = DateTime->now->add(days => 120);
187    ok($base->create_c_object('employment', $Emp,
188        user => $empUser,
189        firstday => $EmpStart->dmy('/'),
190        lastday  => $EmpEnd->dmy('/'),
191    ), "Can create employment after");
192    ok($base->delete_object('employment', $Emp), "Deleting Emp $Emp");
193}
194{
195    my $Emp      = genid();
196    my $EmpStart = DateTime->now->subtract(days => 40);
197    my $EmpEnd   = DateTime->now->subtract(days => 20);
198    ok(!$base->create_c_object('employment', $Emp,
199        user => $empUser,
200        firstday => $EmpStart->dmy('/'),
201        lastday  => $EmpEnd->dmy('/'),
202    ), "Cannot create employment overlaping start");
203    ok(!$base->delete_object('employment', $Emp), "Deleting Emp $Emp");
204}
205{
206    my $Emp      = genid();
207    my $EmpStart = DateTime->now->add(days => 30);
208    my $EmpEnd   = DateTime->now->add(days => 90);
209    ok(!$base->create_c_object('employment', $Emp,
210        user => $empUser,
211        firstday => $EmpStart->dmy('/'),
212        lastday  => $EmpEnd->dmy('/'),
213    ), "Cannot create employment overlapping end");
214    ok(!$base->delete_object('employment', $Emp), "Deleting Emp $Emp");
215}
216{
217    my $Emp      = genid();
218    my $EmpStart = DateTime->now->subtract(days => 90);
219    my $EmpEnd   = DateTime->now->add(days => 90);
220    ok(!$base->create_c_object('employment', $Emp,
221        user => $empUser,
222        firstday => $EmpStart->dmy('/'),
223        lastday  => $EmpEnd->dmy('/'),
224    ), "Cannot create employment overlapping another");
225    ok(!$base->delete_object('employment', $Emp), "Deleting Emp $Emp");
226}
227ok($base->delete_object('employment', $baseEmp), "Deleting Emp BaseEmp $baseEmp");
228
229{
230
231    $base->{_options}{allow_pasted_employment} = 1;
232    my $Emp      = genid();
233    my $EmpStart = DateTime->now->subtract(days => 90);
234    ok($base->create_c_object('employment', $Emp,
235        user => $empUser,
236        firstday => $EmpStart->dmy('/'),
237        lastday  => undef,
238    ), "Can create unlimited employment");
239    ok(my $ouser = $base->get_object('user', $empUser), "Getting user object");
240    ok(!$ouser->get_attributes('expire'), 'User don t expire');
241
242    my $EmpOld   = genid();
243    ok($base->create_c_object('employment', $EmpOld,
244        user => $empUser,
245        firstday => '1/1/2012',
246        lastday  => '31/12/2012',
247    ), "Cannot create pasted employement");
248
249    ok($ouser = $base->get_object('user', $empUser), "Getting user object");
250    ok(!$ouser->get_attributes('expire'), 'User still don t expire');
251
252    ok($base->delete_object('employment', $Emp), "Deleting Emp $Emp");
253    ok($base->delete_object('employment', $EmpOld), "Deleting Emp $EmpOld");
254    $base->{_options}{allow_pasted_employment} = undef;
255}
256
257ok($base->delete_object('user', $empUser), "Deleting user $empUser");
258}
259
260$base->rollback;
261
262{
263    diag('Testing search');
264 
265    ok($base->create_c_object('user', 'searchuaa',
266        sn => "Lastnamea",
267        givenName => "Firstnamea",
268        ), "Can create user searchuaa");
269    ok($base->create_c_object('user', 'searchuna',
270        sn => "Lastnamea",
271        ), "Can create user searchuna");
272    ok($base->create_c_object('user', 'searchuab',
273        sn => "Lastnamea",
274        givenName => "Firstnameb",
275        ), "Can create user searchuab");
276    ok($base->create_c_object('user', 'searchuba',
277        sn => "Lastnameb",
278        givenName => "Firstnamea",
279        ), "Can create user searchuba");
280    ok($base->create_c_object('user', 'searchubb',
281        sn => "Lastnameb",
282        givenName => "Firstnameb",
283        ), "Can create user searchubb");
284    ok($base->create_c_object('group', 'searchga',
285            member => [ 'searchuaa', 'searchuba' ],
286        ), "Can create group searchga");
287    ok($base->create_c_object('group', 'searchgb',
288            member => [ 'searchuab', 'searchuba' ],
289        ), "Can create group searchgb");
290
291    ok(eq_set(
292        [ $base->search_objects('user', 'givenName=Firstnamea') ],
293        [ 'searchuaa', 'searchuba' ]
294    ), 'Can search on single attribute');
295    ok(eq_set(
296        [ $base->search_objects('user', 'givenName=Firstnamea', 'givenName=Firstnameb') ],
297        [ 'searchuaa', 'searchuab', 'searchuba', 'searchubb' ]
298    ), 'Can search on single attribute with 2 values');
299    ok(eq_set(
300        [ $base->search_objects('user', 'givenName=Firstnamea||Firstnameb') ],
301        [ 'searchuaa', 'searchuba', 'searchuab', 'searchubb' ]
302    ), 'Can search on single attribute with 2 values using ||');
303    ok(eq_set(
304        [ $base->search_objects('user', 'givenName=Firstnamea', 'sn=Lastnamea') ],
305        [ 'searchuaa' ]
306    ), 'Can search on 2 attributes');
307    ok(! $base->search_objects('user', 'givenName=Firstnamea', 'sn=NoName'), 'Can search on 2 attributes, one return nothing');
308    ok($base->search_objects('user'), 'No filter return something');
309    ok(eq_set(
310        [ $base->search_objects('user', 'givenName=NULL', 'sn=Lastnamea') ],
311        [ 'searchuna' ]
312    ), 'Can search on NULL attributes');
313    ok(eq_set(
314        [ $base->search_objects('user', 'memberOf=searchga&&searchgb') ],
315        [ 'searchuba' ],
316    ), "Search using && with two values");
317    ok(eq_set(
318        [ $base->search_objects('group', 'member.givenName=Firstnameb') ],
319        [ 'searchgb' ],
320    ), "Search using recursive search");
321    ok(eq_set(
322        [ $base->search_objects('user', 'givenName~nameb') ],
323        [ 'searchuab', 'searchubb' ]
324    ), 'Can search using ~ operator');
325
326    ok($base->delete_object('user', 'searchuaa'), "deleting user searchuaa");
327    ok($base->delete_object('user', 'searchuna'), "deleting user searchuna");
328    ok($base->delete_object('user', 'searchuba'), "deleting user searchuba");
329    ok($base->delete_object('user', 'searchuab'), "deleting user searchuab");
330    ok($base->delete_object('user', 'searchubb'), "deleting user searchubb");
331}
332
333$base->rollback;
Note: See TracBrowser for help on using the repository browser.