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

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

Add live test for search_objects()

  • Property svn:keywords set to Id
File size: 8.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 => 65; # 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    ), "Can create user $oid");
37ok(my $obj = $base->get_object('user', $oid), "user $oid is actually deleted");
38is($obj->get_attributes('sn'), "snUser");
39
40my $passwd = genid();
41ok($obj->set_password($passwd), "Can set password");
42ok($base->authenticate_user($oid, $passwd), "can authenticate user");
43ok(!$base->authenticate_user($oid, '----'),
44    "don't authenticate with invalid password");
45
46ok($base->delete_object('user', $oid), "Can delete user $oid");
47ok(!$base->get_object('user', $oid), "user $oid is actually deleted");
48}
49
50$base->rollback;
51
52{ # test: group
53my $oid = genid();
54
55use_ok('LATMOS::Accounts::Bases::Sql::Group');
56ok($base->create_c_object('group', $oid,
57    description => 'Group Test'
58), "Can create group $oid");
59ok(my $obj = $base->get_object('group', $oid), "group $oid is actually deleted");
60is($obj->get_attributes('description'), "Group Test");
61
62ok($base->delete_object('group', $oid), "Can delete group $oid");
63ok(!$base->get_object('group', $oid), "group $oid is actually deleted");
64}
65
66$base->rollback;
67
68{ # test: nethost
69my $oid = genid();
70
71use_ok('LATMOS::Accounts::Bases::Sql::Nethost');
72ok($base->create_c_object('nethost', $oid,
73    description => 'Nethost Test',
74    ip => '255.255.255.255', # widely improbable to conflict with existing one
75), "Can create nethost $oid");
76ok(my $obj = $base->get_object('nethost', $oid), "nethost $oid is actually deleted");
77is($obj->get_attributes('description'), "Nethost Test");
78my ($ip) = $obj->get_attributes('ip');
79is($ip, '255.255.255.255');
80
81ok($base->delete_object('nethost', $oid), "Can delete nethost $oid");
82ok(!$base->get_object('nethost', $oid), "nethost $oid is actually deleted");
83}
84
85$base->rollback;
86
87{ # test: netzone
88my $oid = genid();
89
90use_ok('LATMOS::Accounts::Bases::Sql::Netzone');
91ok($base->create_c_object('netzone', $oid,
92    description => 'Netzone Test',
93    type => 'dhcp',
94), "Can create netzone $oid");
95ok(my $obj = $base->get_object('netzone', $oid), "netzone $oid is actually deleted");
96is($obj->get_attributes('description'), "Netzone Test");
97
98ok($base->delete_object('netzone', $oid), "Can delete netzone $oid");
99ok(!$base->get_object('netzone', $oid), "netzone $oid is actually deleted");
100}
101
102$base->rollback;
103
104{ # test employment
105use_ok('LATMOS::Accounts::Bases::Sql::Employment');
106my $baseEmp = genid();
107my $empUser = genid();
108
109my $baseEmpStart = DateTime->now->subtract(days => 60);
110my $baseEmpEnd   = DateTime->now->add(days => 60);
111
112ok($base->create_c_object('user', $empUser,
113    sn => "snUser",
114    givenName => "givenNameUser",
115    ), "Can create user $empUser");
116
117ok($base->create_c_object('employment', $baseEmp,
118    user => $empUser,
119    firstday => $baseEmpStart->dmy('/'),
120    lastday  => $baseEmpEnd->dmy('/'),
121), "Can create current employment");
122
123{
124    my $Emp      = genid();
125    my $EmpStart = DateTime->now->add(days => 61);
126    my $EmpEnd   = DateTime->now->add(days => 120);
127    ok($base->create_c_object('employment', $Emp,
128        user => $empUser,
129        firstday => $EmpStart->dmy('/'),
130        lastday  => $EmpEnd->dmy('/'),
131    ), "Can create employment after");
132    ok($base->delete_object('employment', $Emp), "Deleting Emp $Emp");
133}
134{
135    my $Emp      = genid();
136    my $EmpStart = DateTime->now->subtract(days => 40);
137    my $EmpEnd   = DateTime->now->subtract(days => 20);
138    ok(!$base->create_c_object('employment', $Emp,
139        user => $empUser,
140        firstday => $EmpStart->dmy('/'),
141        lastday  => $EmpEnd->dmy('/'),
142    ), "Cannot create employment overlaping start");
143    ok(!$base->delete_object('employment', $Emp), "Deleting Emp $Emp");
144}
145{
146    my $Emp      = genid();
147    my $EmpStart = DateTime->now->add(days => 30);
148    my $EmpEnd   = DateTime->now->add(days => 90);
149    ok(!$base->create_c_object('employment', $Emp,
150        user => $empUser,
151        firstday => $EmpStart->dmy('/'),
152        lastday  => $EmpEnd->dmy('/'),
153    ), "Cannot create employment overlapping end");
154    ok(!$base->delete_object('employment', $Emp), "Deleting Emp $Emp");
155}
156{
157    my $Emp      = genid();
158    my $EmpStart = DateTime->now->subtract(days => 90);
159    my $EmpEnd   = DateTime->now->add(days => 90);
160    ok(!$base->create_c_object('employment', $Emp,
161        user => $empUser,
162        firstday => $EmpStart->dmy('/'),
163        lastday  => $EmpEnd->dmy('/'),
164    ), "Cannot create employment overlapping another");
165    ok(!$base->delete_object('employment', $Emp), "Deleting Emp $Emp");
166}
167
168ok($base->delete_object('employment', $baseEmp), "Deleting Emp $baseEmp");
169ok($base->delete_object('user', $empUser), "Deleting user $empUser");
170}
171
172$base->rollback;
173
174{
175    diag('Testing search');
176 
177    ok($base->create_c_object('user', 'searchuaa',
178        sn => "Lastnamea",
179        givenName => "Firstnamea",
180        ), "Can create user searchuaa");
181    ok($base->create_c_object('user', 'searchuna',
182        sn => "Lastnamea",
183        ), "Can create user searchuna");
184    ok($base->create_c_object('user', 'searchuab',
185        sn => "Lastnamea",
186        givenName => "Firstnameb",
187        ), "Can create user searchuab");
188    ok($base->create_c_object('user', 'searchuba',
189        sn => "Lastnameb",
190        givenName => "Firstnamea",
191        ), "Can create user searchuba");
192    ok($base->create_c_object('user', 'searchubb',
193        sn => "Lastnameb",
194        givenName => "Firstnameb",
195        ), "Can create user searchubb");
196    ok($base->create_c_object('group', 'searchga',
197            member => [ 'searchuaa', 'searchuba' ],
198        ), "Can create group searchga");
199    ok($base->create_c_object('group', 'searchgb',
200            member => [ 'searchuab', 'searchuba' ],
201        ), "Can create group searchgb");
202
203    ok(eq_set(
204        [ $base->search_objects('user', 'givenName=Firstnamea') ],
205        [ 'searchuaa', 'searchuba' ]
206    ), 'Can search on single attribute');
207    ok(eq_set(
208        [ $base->search_objects('user', 'givenName=Firstnamea',
209            'givenName=Firstnameb') ],
210        [ 'searchuaa', 'searchuba', 'searchuab', 'searchubb' ]
211    ), 'Can search on single attribute with 2 values');
212    ok(eq_set(
213        [ $base->search_objects('user', 'givenName=Firstnamea||Firstnameb') ],
214        [ 'searchuaa', 'searchuba', 'searchuab', 'searchubb' ]
215    ), 'Can search on single attribute with 2 values using ||');
216    ok(eq_set(
217        [ $base->search_objects('user', 'givenName=Firstnamea', 'sn=Lastnamea') ],
218        [ 'searchuaa' ]
219    ), 'Can search on 2 attributes');
220    ok(eq_set(
221        [ $base->search_objects('user', 'givenName=NULL', 'sn=Lastnamea') ],
222        [ 'searchuna' ]
223    ), 'Can search on NULL attributes');
224    ok(eq_set(
225        [ $base->search_objects('user', 'memberOf=searchga&&searchgb') ],
226        [ 'searchuba' ],
227    ), "Search using && with two values");
228    ok(eq_set(
229        [ $base->search_objects('group', 'member.givenName=Firstnameb') ],
230        [ 'searchgb' ],
231    ), "Search using recursive search");
232    ok(eq_set(
233        [ $base->search_objects('user', 'givenName~nameb') ],
234        [ 'searchuab', 'searchubb' ]
235    ), 'Can search using ~ operator');
236
237    ok($base->delete_object('user', 'searchuaa'), "deleting user searchuaa");
238    ok($base->delete_object('user', 'searchuna'), "deleting user searchuna");
239    ok($base->delete_object('user', 'searchuba'), "deleting user searchuba");
240    ok($base->delete_object('user', 'searchuab'), "deleting user searchuab");
241    ok($base->delete_object('user', 'searchubb'), "deleting user searchubb");
242}
243
244$base->rollback;
Note: See TracBrowser for help on using the repository browser.