1# -*- tcl -*-
2# ldapx.test:  tests for the ldapx module.
3#
4# Sourcing this file into Tcl runs the tests and generates output for errors.
5# No output means no errors were found.
6#
7# Copyright (c) 2006 by Pierre David <pdav@users.sourceforge.net>
8# All rights reserved.
9#
10# $Id: ldapx.test,v 1.6 2007/08/19 20:20:43 pdav Exp $
11
12# -------------------------------------------------------------------------
13
14
15source [file join \
16	[file dirname [file dirname [file join [pwd] [info script]]]] \
17	devtools testutilities.tcl]
18
19testsNeedTcl     8.4
20testsNeedTcltest 1.0
21
22testing {
23    useLocal ldapx.tcl ldapx
24}
25
26# -------------------------------------------------------------------------
27
28set rdn1 "uid=test"
29set rdn2 "uid=test2"
30set sup1 "ou=mydept,o=myorg"
31set sup2 "ou=x,$sup1"
32
33set entry {a1 {v11 v12} a2 {v21} a3 {v31 v32 v33}}
34
35# -------------------------------------------------------------------------
36
37test ldapx-1.0 {ldapx::entry - creation} {
38    ::ldapx::entry create t1
39} {::t1}
40
41test ldapx-1.1 {ldapx::entry - reset} {
42    t1 reset
43    t1 format
44} {uninitialized}
45
46test ldapx-1.2 {ldapx::entry - dn} {
47    t1 dn "$rdn1,$sup1"
48    t1 dn
49} "$rdn1,$sup1"
50
51test ldapx-1.3 {ldapx::entry - superior} {
52    t1 dn "$rdn1,$sup1"
53    t1 superior
54} $sup1
55
56test ldapx-1.4 {ldapx::entry - rdn} {
57    t1 rdn
58} $rdn1
59
60test ldapx-1.5 {ldapx::entry - print uninitialized} {
61    t1 print
62} "dn: $rdn1,$sup1"
63
64test ldapx-2.1 {ldapx::entry - standard} {
65    t1 reset
66    t1 dn "$rdn1,$sup1"
67    t1 setall $entry
68    lsort [t1 getall]
69} [lsort $entry]
70
71test ldapx-2.2 {ldapx::entry - isempty} {
72    t1 reset
73    t1 dn "$rdn1,$sup1"
74    t1 setall $entry
75    set e1 [t1 isempty]
76    ::ldapx::entry create t2
77    set e2 [t2 isempty]
78    t2 destroy
79    list $e1 $e2
80} {0 1}
81
82test ldapx-2.3 {ldapx::entry - set1/get1} {
83    t1 set1 A4 v41
84    t1 get1 A4
85} {v41}
86
87test ldapx-2.4 {ldapx::entry - add1} {
88    t1 add1 a4 {v 42}
89    t1 get A4
90} {v41 {v 42}}
91
92test ldapx-2.5 {ldapx::entry - set/add/get} {
93    t1 set a5 {v51}
94    t1 add a5 {{v 52} {v 53}}
95    t1 get a5
96} {v51 {v 52} {v 53}}
97
98test ldapx-2.6 {ldapx::entry - del1/del} {
99    t1 del1 A5 {v 52}
100    t1 del a5 {{v 53}}
101    t1 get a5
102} {v51}
103
104test ldapx-2.7 {ldapx::entry - del} {
105    t1 del A5
106    t1 get a5
107} {}
108
109test ldapx-2.8 {ldapx::entry - getattr} {
110    lsort [t1 getattr]
111} {a1 a2 a3 a4}
112
113
114test ldapx-3.1 {ldapx::entry - backup toanother} {
115    ::ldapx::entry create t2
116    ::ldapx::entry create t3
117    t1 reset
118    t1 dn "$rdn1,$sup1"
119    t1 setall $entry
120    t1 backup t2
121    t3 diff t1 t2
122    t3 change
123} {}
124
125test ldapx-3.2 {ldapx::entry - diff toanother modrdn uid deleteoldrdn} {
126    t1 reset
127    t1 dn "$rdn1,$sup1"
128    t1 setall $entry
129    t1 set1 "uid" "test"
130    t1 backup t2
131    t1 dn "$rdn2,$sup1"
132    t1 set1 "uid" "test2"
133    t3 diff t1 t2
134    t3 change
135} [list [list modrdn $rdn2 1]]
136
137test ldapx-3.3 {ldapx::entry - diff toanother modrdn uid keepoldrdn} {
138    t1 reset
139    t1 dn "$rdn1,$sup1"
140    t1 setall $entry
141    t1 set1 "uid" "test"
142    t1 backup t2
143    t1 dn "$rdn2,$sup1"
144    t1 add1 "uid" "test2"
145    t3 diff t1 t2
146    t3 change
147} [list [list modrdn $rdn2 0]]
148
149test ldapx-3.4 {ldapx::entry - diff toanother modrdn superior} {
150    t1 reset
151    t1 dn "$rdn1,$sup1"
152    t1 setall $entry
153    t1 backup t2
154    t1 dn "$rdn1,$sup2"
155    t3 diff t1 t2
156    t3 change
157} [list [list modrdn $rdn1 0 $sup2]]
158
159test ldapx-3.5 {ldapx::entry - diff toanother add attr} {
160    t1 reset
161    t1 setall $entry
162    t1 backup t2
163    t1 set anotherAttribute {v1 v2}
164    t3 diff t1 t2
165    t3 change
166} {{mod {{modadd anotherattribute {v1 v2}}}}}
167
168test ldapx-3.6 {ldapx::entry - diff toanother repl attr} {
169    t1 reset
170    t1 setall $entry
171    t1 backup t2
172    t1 del1 a3 v32
173    t3 diff t1 t2
174    t3 change
175} {{mod {{modrepl a3 {v31 v33}}}}}
176
177test ldapx-3.7 {ldapx::entry - diff toanother add value} {
178    t1 reset
179    t1 setall $entry
180    t1 backup t2
181    t1 add1 a3 v34
182    t3 diff t1 t2
183    t3 change
184} {{mod {{modrepl a3 {v31 v32 v33 v34}}}}}
185
186test ldapx-3.8 {ldapx::entry - diff toanother del attr} {
187    t1 reset
188    t1 setall $entry
189    t1 backup t2
190    t1 del A3
191    t3 diff t1 t2
192    t3 change
193} {{mod {{moddel a3}}}}
194
195test ldapx-3.9 {ldapx::entry - diff toanother del entry 1} {
196    t1 reset
197    t1 dn "$rdn1,$sup1"
198    t1 setall $entry
199    t1 backup t2
200    t1 setall {}
201    t3 diff t1 t2
202    list [t3 dn] [lindex [t3 change] 0 0]
203} [list "$rdn1,$sup1" del]
204
205test ldapx-3.10 {ldapx::entry - diff toanother del entry 2} {
206    t1 reset
207    t1 dn "$rdn1,$sup1"
208    t1 setall $entry
209    t1 backup t2
210    t1 dn ""
211    t1 setall {}
212    t3 diff t1 t2
213    list [t3 dn] [lindex [t3 change] 0 0]
214} [list "$rdn1,$sup1" del]
215
216test ldapx-3.11 {ldapx::entry - diff toanother add entry} {
217    t1 reset
218    t1 setall {}
219    t1 backup t2
220    t1 setall $entry
221    t3 diff t1 t2
222    lsort [list [lindex [t3 change] 0 0] \
223		[lsort [lindex [t3 change] 0 1]]]
224} [lsort [list add [lsort [string tolower $entry]]]]
225
226test ldapx-3.12 {ldapx::entry - diff toanother add entry dn 1} {
227    t1 reset
228    t1 backup t2
229    t1 dn "$rdn1,$sup1"
230    t1 setall $entry
231    t3 diff t1 t2
232    list [t3 dn] [lindex [t3 change] 0 0]
233} [list "$rdn1,$sup1" add]
234
235test ldapx-3.13 {ldapx::entry - diff toanother add entry dn 2} {
236    t1 reset
237    t1 dn "$rdn1,$sup1"
238    t1 backup t2
239    t1 setall $entry
240    t3 diff t1 t2
241    list [t3 dn] [lindex [t3 change] 0 0]
242} [list "$rdn1,$sup1" add]
243
244
245test ldapx-3.14 {ldapx::entry - diff tothesame} {
246    t1 reset
247    t1 setall $entry
248    t1 backup
249    t1 set1 A3 v34
250    t3 diff t1
251    t3 change
252} {{mod {{modrepl a3 v34}}}}
253
254test ldapx-3.15 {ldapx::entry - restore toanother} {
255    t1 reset
256    t1 setall {a v}
257    t1 backup
258    t1 restore t2
259    t2 getall
260} {a v}
261
262test ldapx-3.16 {ldapx::entry - restore tothesame} {
263    t1 reset
264    t1 setall {a v}
265    t1 backup
266    t1 setall $entry
267    t1 restore
268    t1 getall
269} {a v}
270
271test ldapx-3.17 {ldapx::entry - swap} {
272    t1 reset
273    t1 setall {a v}
274    t1 dn d1
275    t1 backup
276    t1 setall {b w}
277    t1 dn d2
278    t1 swap
279    set l1 [list [t1 dn] [t1 getall]]
280    t1 swap
281    set l2 [list [t1 dn] [t1 getall]]
282    list $l1 $l2
283} {{d1 {a v}} {d2 {b w}}}
284
285test ldapx-3.18 {ldapx::entry - apply modrdn rdn} {
286    t1 reset
287    t1 dn "$rdn1,$sup1"
288    t2 reset
289    t2 dn "$rdn1,$sup1"
290    t2 change [list [list modrdn $rdn2 0]]
291    t1 apply t2
292    t1 dn
293} "$rdn2,$sup1"
294
295test ldapx-3.19 {ldapx::entry - apply modrdn superior} {
296    t1 reset
297    t1 dn "$rdn1,$sup1"
298    t2 reset
299    t2 dn "$rdn1,$sup1"
300    t2 change [list [list modrdn $rdn1 0 $sup2]]
301    t1 apply t2
302    t1 dn
303} "$rdn1,$sup2"
304
305test ldapx-3.20 {ldapx::entry - apply modrdn rdn+superior} {
306    t1 reset
307    t1 dn "$rdn1,$sup1"
308    t2 reset
309    t2 dn "$rdn1,$sup1"
310    t2 change [list [list modrdn $rdn2 0 $sup2]]
311    t1 apply t2
312    t1 dn
313} "$rdn2,$sup2"
314
315test ldapx-3.21 {ldapx::entry - apply add} {
316    t1 reset
317    t2 reset
318    t2 dn "$rdn1,$sup1"
319    t2 change [list [list add $entry]]
320    t1 apply t2
321    lsort [t1 getall]
322} [lsort $entry]
323
324test ldapx-3.22 {ldapx::entry - apply del} {
325    t1 reset
326    t1 dn "$rdn1,$sup1"
327    t1 setall $entry
328    t2 reset
329    t2 dn "$rdn1,$sup1"
330    t2 change {{del}}
331    t1 apply t2
332    lsort [t1 getall]
333} {}
334
335test ldapx-3.23 {ldapx::entry - apply mod add} {
336    t1 reset
337    t1 dn "$rdn1,$sup1"
338    t1 setall $entry
339    t2 reset
340    t2 dn "$rdn1,$sup1"
341    t2 change {{mod {{modadd A4 {v41 v42}}}}}
342    t1 apply t2
343    t1 get a4
344} {v41 v42}
345
346test ldapx-3.24 {ldapx::entry - apply mod del} {
347    t1 reset
348    t1 dn "$rdn1,$sup1"
349    t1 setall $entry
350    t2 reset
351    t2 dn "$rdn1,$sup1"
352    t2 change {{mod {{moddel A3}}}}
353    t1 apply t2
354    t1 get a3
355} {}
356
357test ldapx-3.25 {ldapx::entry - apply mod repl} {
358    t1 reset
359    t1 dn "$rdn1,$sup1"
360    t1 setall $entry
361    t2 reset
362    t2 dn "$rdn1,$sup1"
363    t2 change {{mod {{modrepl A3 {v34 v35}}}}}
364    t1 apply t2
365    t1 get a3
366} {v34 v35}
367
368test ldapx-4.1 {ldapx::entry - deletion} {
369    t1 destroy
370    t2 destroy
371    t3 destroy
372} {}
373
374
375testsuiteCleanup
376