KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > scriptella > driver > ldap > ldif > LdifReaderTest


1 /*
2  * Copyright 2006 The Apache Software Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */

17 package scriptella.driver.ldap.ldif;
18
19 import junit.framework.TestCase;
20
21 import javax.naming.NamingException JavaDoc;
22 import javax.naming.directory.Attribute JavaDoc;
23 import javax.naming.directory.DirContext JavaDoc;
24 import javax.naming.directory.ModificationItem JavaDoc;
25 import javax.naming.ldap.Control JavaDoc;
26 import java.io.DataOutputStream JavaDoc;
27 import java.io.File JavaDoc;
28 import java.io.FileOutputStream JavaDoc;
29 import java.io.IOException JavaDoc;
30 import java.io.UnsupportedEncodingException JavaDoc;
31 import java.util.Arrays JavaDoc;
32 import java.util.List JavaDoc;
33
34 /**
35  * Tests for {@link LdifReader}.
36  * Based on LdifReaderTest from Apache Driectory Project.
37  *
38  * @author <a HREF="mailto:akarasulu@safehaus.org">Alex Karasulu</a>
39  * @author Fyodor Kupolov
40  * @version $Rev: 379008 $
41  */

42 public class LdifReaderTest extends TestCase {
43     private byte[] data;
44
45     private static File JavaDoc HJENSEN_JPEG_FILE = null;
46     private static File JavaDoc FIONA_JPEG_FILE = null;
47
48     private File JavaDoc createFile(String JavaDoc name, byte[] data) throws IOException JavaDoc {
49         File JavaDoc jpeg = File.createTempFile(name, "jpg");
50
51         jpeg.createNewFile();
52
53         DataOutputStream JavaDoc os = new DataOutputStream JavaDoc(new FileOutputStream JavaDoc(jpeg));
54
55         os.write(data);
56         os.close();
57
58         // This file will be deleted when the JVM
59
// will exit.
60
jpeg.deleteOnExit();
61
62         return jpeg;
63     }
64
65     /**
66      * Create a file to be used by ":<" values
67      */

68     public void setUp() throws Exception JavaDoc {
69         super.setUp();
70
71         data = new byte[256];
72
73         for (int i = 0; i < 256; i++) {
74             data[i] = (byte) i;
75         }
76
77         HJENSEN_JPEG_FILE = createFile("hjensen", data);
78         FIONA_JPEG_FILE = createFile("fiona", data);
79     }
80
81     public void testLdifEmpty() throws NamingException JavaDoc {
82         String JavaDoc ldif = "";
83
84         LdifReader reader = new LdifReader();
85         List JavaDoc entries = reader.parseLdif(ldif);
86
87         assertEquals(0, entries.size());
88     }
89
90     public void testLdifEmptyLines() throws NamingException JavaDoc {
91         String JavaDoc ldif = "\n\n\r\r\n";
92
93         LdifReader reader = new LdifReader();
94         List JavaDoc entries = reader.parseLdif(ldif);
95
96         assertEquals(0, entries.size());
97     }
98
99     public void testLdifComments() throws NamingException JavaDoc {
100         String JavaDoc ldif =
101                 "#Comment 1\r" +
102                         "#\r" +
103                         " th\n" +
104                         " is is still a comment\n" +
105                         "\n";
106
107         LdifReader reader = new LdifReader();
108         List JavaDoc entries = reader.parseLdif(ldif);
109
110         assertEquals(0, entries.size());
111     }
112
113     public void testLdifVersion() throws NamingException JavaDoc {
114         String JavaDoc ldif =
115                 "#Comment 1\r" +
116                 "#\r" +
117                 " th\n" +
118                 " is is still a comment\n" +
119                 "\n" +
120                 "version:\n" +
121                 " 2\n" +
122                 "# end";
123
124         LdifReader reader = new LdifReader();
125         List JavaDoc entries = reader.parseLdif(ldif);
126
127         assertEquals(0, entries.size());
128         assertEquals(2, reader.getVersion());
129     }
130
131     /**
132      * Spaces at the end of values should not be included into values.
133      *
134      * @throws NamingException
135      */

136     public void testLdifParserEndSpaces() throws NamingException JavaDoc {
137         String JavaDoc ldif =
138                 "version: 1\n" +
139                         "dn: cn=app1,ou=applications,ou=conf,dc=apache,dc=org\n" +
140                         "cn: app1\n" +
141                         "objectClass: top\n" +
142                         "objectClass: apApplication\n" +
143                         "displayName: app1 \n" +
144                         "dependencies:\n" +
145                         "envVars:";
146
147         LdifReader reader = new LdifReader();
148
149         List JavaDoc entries = reader.parseLdif(ldif);
150         assertNotNull(entries);
151
152         Entry entry = (Entry) entries.get(0);
153
154         assertTrue(entry.isChangeAdd());
155
156         assertEquals("cn=app1,ou=applications,ou=conf,dc=apache,dc=org", entry.getDn());
157
158         Attribute JavaDoc attr = entry.get("displayname");
159         assertTrue(attr.contains("app1"));
160
161     }
162
163     /**
164      * Changes and entries should not be mixed
165      *
166      * @throws NamingException
167      */

168     public void testLdifParserCombinedEntriesChanges() throws NamingException JavaDoc {
169         String JavaDoc ldif =
170                 "version: 1\n" +
171                         "dn: cn=app1,ou=applications,ou=conf,dc=apache,dc=org\n" +
172                         "cn: app1\n" +
173                         "objectClass: top\n" +
174                         "objectClass: apApplication\n" +
175                         "displayName: app1 \n" +
176                         "dependencies:\n" +
177                         "envVars:\n" +
178                         "\n" +
179                         "# Delete an entry. The operation will attach the LDAPv3\n" +
180                         "# Tree Delete Control defined in [9]. The criticality\n" +
181                         "# field is \"true\" and the controlValue field is\n" +
182                         "# absent, as required by [9].\n" +
183                         "dn: ou=Product Development, dc=airius, dc=com\n" +
184                         "control: 1.2.840.11A556.1.4.805 true\n" +
185                         "changetype: delete\n";
186
187         LdifReader reader = new LdifReader();
188
189         try {
190             reader.parseLdif(ldif);
191             fail();
192         }
193         catch (LdifParseException e) {
194             //OK
195
}
196     }
197
198     /**
199      * Changes and entries should not be mixed
200      *
201      * @throws NamingException
202      */

203     public void testLdifParserCombinedEntriesChanges2() throws NamingException JavaDoc {
204         String JavaDoc ldif =
205                 "version: 1\n" +
206                         "dn: cn=app1,ou=applications,ou=conf,dc=apache,dc=org\n" +
207                         "cn: app1\n" +
208                         "objectClass: top\n" +
209                         "objectClass: apApplication\n" +
210                         "displayName: app1 \n" +
211                         "dependencies:\n" +
212                         "envVars:\n" +
213                         "\n" +
214                         "# Delete an entry. The operation will attach the LDAPv3\n" +
215                         "# Tree Delete Control defined in [9]. The criticality\n" +
216                         "# field is \"true\" and the controlValue field is\n" +
217                         "# absent, as required by [9].\n" +
218                         "dn: ou=Product Development, dc=airius, dc=com\n" +
219                         "changetype: delete\n";
220
221         LdifReader reader = new LdifReader();
222
223         try {
224             reader.parseLdif(ldif);
225             fail();
226         }
227         catch (LdifParseException e) {
228             //OK
229
}
230     }
231
232     /**
233      * Changes and entries should not be mixed
234      *
235      * @throws NamingException
236      */

237     public void testLdifParserCombinedChangesEntries() throws NamingException JavaDoc {
238         String JavaDoc ldif =
239                 "version: 1\n" +
240                         "# Delete an entry. The operation will attach the LDAPv3\n" +
241                         "# Tree Delete Control defined in [9]. The criticality\n" +
242                         "# field is \"true\" and the controlValue field is\n" +
243                         "# absent, as required by [9].\n" +
244                         "dn: ou=Product Development, dc=airius, dc=com\n" +
245                         "control: 1.2.840.11A556.1.4.805 true\n" +
246                         "changetype: delete\n" +
247                         "\n" +
248                         "dn: cn=app1,ou=applications,ou=conf,dc=apache,dc=org\n" +
249                         "cn: app1\n" +
250                         "objectClass: top\n" +
251                         "objectClass: apApplication\n" +
252                         "displayName: app1 \n" +
253                         "dependencies:\n" +
254                         "envVars:\n";
255
256         LdifReader reader = new LdifReader();
257
258         try {
259             reader.parseLdif(ldif);
260             fail();
261         }
262         catch (LdifParseException e) {
263             //OK
264
}
265     }
266
267     /**
268      * Changes and entries should not be mixed
269      *
270      * @throws NamingException
271      */

272     public void testLdifParserCombinedChangesEntries2() throws NamingException JavaDoc {
273         String JavaDoc ldif =
274                 "version: 1\n" +
275                         "# Delete an entry. The operation will attach the LDAPv3\n" +
276                         "# Tree Delete Control defined in [9]. The criticality\n" +
277                         "# field is \"true\" and the controlValue field is\n" +
278                         "# absent, as required by [9].\n" +
279                         "dn: ou=Product Development, dc=airius, dc=com\n" +
280                         "changetype: delete\n" +
281                         "\n" +
282                         "dn: cn=app1,ou=applications,ou=conf,dc=apache,dc=org\n" +
283                         "cn: app1\n" +
284                         "objectClass: top\n" +
285                         "objectClass: apApplication\n" +
286                         "displayName: app1 \n" +
287                         "dependencies:\n" +
288                         "envVars:\n";
289
290         LdifReader reader = new LdifReader();
291
292         try {
293             reader.parseLdif(ldif);
294             fail();
295         }
296         catch (LdifParseException e) {
297             //OK
298
}
299     }
300
301     public void testLdifParser() throws NamingException JavaDoc {
302         String JavaDoc ldif =
303                 "version: 1\n" +
304                         "dn: cn=app1,ou=applications,ou=conf,dc=apache,dc=org\n" +
305                         "cn: app1\n" +
306                         "objectClass: top\n" +
307                         "objectClass: apApplication\n" +
308                         "displayName: app1 \n" +
309                         "dependencies:\n" +
310                         "envVars:";
311
312         LdifReader reader = new LdifReader();
313         List JavaDoc entries = reader.parseLdif(ldif);
314
315         assertNotNull(entries);
316
317         Entry entry = (Entry) entries.get(0);
318         assertTrue(entry.isChangeAdd());
319
320         assertEquals("cn=app1,ou=applications,ou=conf,dc=apache,dc=org", entry.getDn());
321
322         Attribute JavaDoc attr = entry.get("cn");
323         assertTrue(attr.contains("app1"));
324
325         attr = entry.get("objectclass");
326         assertTrue(attr.contains("top"));
327         assertTrue(attr.contains("apApplication"));
328
329         attr = entry.get("displayname");
330         assertTrue(attr.contains("app1"));
331
332         attr = entry.get("dependencies");
333         assertNull(attr.get());
334
335         attr = entry.get("envvars");
336         assertNull(attr.get());
337     }
338
339     public void testLdifParserMuiltiLineComments() throws NamingException JavaDoc {
340         String JavaDoc ldif =
341                 "#comment\n" +
342                         " still a comment\n" +
343                         "dn: cn=app1,ou=applications,ou=conf,dc=apache,dc=org\n" +
344                         "cn: app1#another comment\n" +
345                         "objectClass: top\n" +
346                         "objectClass: apApplication\n" +
347                         "displayName: app1\n" +
348                         "serviceType: http\n" +
349                         "dependencies:\n" +
350                         "httpHeaders:\n" +
351                         "startupOptions:\n" +
352                         "envVars:";
353
354         LdifReader reader = new LdifReader();
355         List JavaDoc entries = reader.parseLdif(ldif);
356
357         assertNotNull(entries);
358
359         Entry entry = (Entry) entries.get(0);
360         assertTrue(entry.isChangeAdd());
361
362         assertEquals("cn=app1,ou=applications,ou=conf,dc=apache,dc=org", entry.getDn());
363
364         Attribute JavaDoc attr = entry.get("cn");
365         assertTrue(attr.contains("app1#another comment"));
366
367         attr = entry.get("objectclass");
368         assertTrue(attr.contains("top"));
369         assertTrue(attr.contains("apApplication"));
370
371         attr = entry.get("displayname");
372         assertTrue(attr.contains("app1"));
373
374         attr = entry.get("dependencies");
375         assertNull(attr.get());
376
377         attr = entry.get("envvars");
378         assertNull(attr.get());
379     }
380
381     public void testLdifParserMultiLineEntries() throws NamingException JavaDoc {
382         String JavaDoc ldif =
383                 "#comment\n" +
384                         "dn: cn=app1,ou=appli\n" +
385                         " cations,ou=conf,dc=apache,dc=org\n" +
386                         "cn: app1#another comment\n" +
387                         "objectClass: top\n" +
388                         "objectClass: apApplication\n" +
389                         "displayName: app1\n" +
390                         "serviceType: http\n" +
391                         "dependencies:\n" +
392                         "httpHeaders:\n" +
393                         "startupOptions:\n" +
394                         "envVars:";
395
396         LdifReader reader = new LdifReader();
397         List JavaDoc entries = reader.parseLdif(ldif);
398
399         assertNotNull(entries);
400
401         Entry entry = (Entry) entries.get(0);
402         assertTrue(entry.isChangeAdd());
403
404         assertEquals("cn=app1,ou=applications,ou=conf,dc=apache,dc=org", entry.getDn());
405
406         Attribute JavaDoc attr = entry.get("cn");
407         assertTrue(attr.contains("app1#another comment"));
408
409         attr = entry.get("objectclass");
410         assertTrue(attr.contains("top"));
411         assertTrue(attr.contains("apApplication"));
412
413         attr = entry.get("displayname");
414         assertTrue(attr.contains("app1"));
415
416         attr = entry.get("dependencies");
417         assertNull(attr.get());
418
419         attr = entry.get("envvars");
420         assertNull(attr.get());
421     }
422
423     public void testLdifParserBase64() throws NamingException JavaDoc, UnsupportedEncodingException JavaDoc {
424         String JavaDoc ldif =
425                 "#comment\n" +
426                         "dn: cn=app1,ou=applications,ou=conf,dc=apache,dc=org\n" +
427                         "cn:: RW1tYW51ZWwgTMOpY2hhcm55\n" +
428                         "objectClass: top\n" +
429                         "objectClass: apApplication\n" +
430                         "displayName: app1\n" +
431                         "serviceType: http\n" +
432                         "dependencies:\n" +
433                         "httpHeaders:\n" +
434                         "startupOptions:\n" +
435                         "envVars:";
436
437         LdifReader reader = new LdifReader();
438         List JavaDoc entries = reader.parseLdif(ldif);
439
440         assertNotNull(entries);
441
442         Entry entry = (Entry) entries.get(0);
443         assertTrue(entry.isChangeAdd());
444
445         assertEquals("cn=app1,ou=applications,ou=conf,dc=apache,dc=org", entry.getDn());
446
447         Attribute JavaDoc attr = entry.get("cn");
448         assertTrue(attr.contains("Emmanuel L\u00e9charny".getBytes("UTF-8")));
449
450         attr = entry.get("objectclass");
451         assertTrue(attr.contains("top"));
452         assertTrue(attr.contains("apApplication"));
453
454         attr = entry.get("displayname");
455         assertTrue(attr.contains("app1"));
456
457         attr = entry.get("dependencies");
458         assertNull(attr.get());
459
460         attr = entry.get("envvars");
461         assertNull(attr.get());
462     }
463
464     public void testLdifParserBase64MultiLine() throws NamingException JavaDoc, UnsupportedEncodingException JavaDoc {
465         String JavaDoc ldif =
466                 "#comment\n" +
467                         "dn: cn=app1,ou=applications,ou=conf,dc=apache,dc=org\n" +
468                         "cn:: RW1tYW51ZWwg\n" +
469                         " TMOpY2hhcm55ICA=\n" +
470                         "objectClass: top\n" +
471                         "objectClass: apApplication\n" +
472                         "displayName: app1\n" +
473                         "serviceType: http\n" +
474                         "dependencies:\n" +
475                         "httpHeaders:\n" +
476                         "startupOptions:\n" +
477                         "envVars:";
478
479         LdifReader reader = new LdifReader();
480         List JavaDoc entries = reader.parseLdif(ldif);
481
482         assertNotNull(entries);
483
484         Entry entry = (Entry) entries.get(0);
485         assertTrue(entry.isChangeAdd());
486
487         assertEquals("cn=app1,ou=applications,ou=conf,dc=apache,dc=org", entry.getDn());
488
489         Attribute JavaDoc attr = entry.get("cn");
490         assertTrue(attr.contains("Emmanuel L\u00e9charny ".getBytes("UTF-8")));
491
492         attr = entry.get("objectclass");
493         assertTrue(attr.contains("top"));
494         assertTrue(attr.contains("apApplication"));
495
496         attr = entry.get("displayname");
497         assertTrue(attr.contains("app1"));
498
499         attr = entry.get("dependencies");
500         assertNull(attr.get());
501
502         attr = entry.get("envvars");
503         assertNull(attr.get());
504     }
505
506     public void testLdifParserRFC2849Sample1() throws NamingException JavaDoc {
507         String JavaDoc ldif =
508                 "version: 1\n" +
509                         "dn: cn=Barbara Jensen, ou=Product Development, dc=airius, dc=com\n" +
510                         "objectclass: top\n" +
511                         "objectclass: person\n" +
512                         "objectclass: organizationalPerson\n" +
513                         "cn: Barbara Jensen\n" +
514                         "cn: Barbara J Jensen\n" +
515                         "cn: Babs Jensen\n" +
516                         "sn: Jensen\n" +
517                         "uid: bjensen\n" +
518                         "telephonenumber: +1 408 555 1212\n" +
519                         "description: A big sailing fan.\n" +
520                         "\n" +
521                         "dn: cn=Bjorn Jensen, ou=Accounting, dc=airius, dc=com\n" +
522                         "objectclass: top\n" +
523                         "objectclass: person\n" +
524                         "objectclass: organizationalPerson\n" +
525                         "cn: Bjorn Jensen\n" +
526                         "sn: Jensen\n" +
527                         "telephonenumber: +1 408 555 1212";
528
529         LdifReader reader = new LdifReader();
530         List JavaDoc entries = reader.parseLdif(ldif);
531
532         assertEquals(2, entries.size());
533
534         // Entry 1
535
Entry entry = (Entry) entries.get(0);
536         assertTrue(entry.isChangeAdd());
537
538         assertEquals("cn=Barbara Jensen, ou=Product Development, dc=airius, dc=com", entry.getDn());
539
540         Attribute JavaDoc attr = entry.get("objectclass");
541         assertTrue(attr.contains("top"));
542         assertTrue(attr.contains("person"));
543         assertTrue(attr.contains("organizationalPerson"));
544
545         attr = entry.get("cn");
546         assertTrue(attr.contains("Barbara Jensen"));
547         assertTrue(attr.contains("Barbara J Jensen"));
548         assertTrue(attr.contains("Babs Jensen"));
549
550         attr = entry.get("sn");
551         assertTrue(attr.contains("Jensen"));
552
553         attr = entry.get("uid");
554         assertTrue(attr.contains("bjensen"));
555
556         attr = entry.get("telephonenumber");
557         assertTrue(attr.contains("+1 408 555 1212"));
558
559         attr = entry.get("description");
560         assertTrue(attr.contains("A big sailing fan."));
561
562         // Entry 2
563
entry = (Entry) entries.get(1);
564         assertTrue(entry.isChangeAdd());
565
566         assertEquals("cn=Bjorn Jensen, ou=Accounting, dc=airius, dc=com", entry.getDn());
567
568         attr = entry.get("objectclass");
569         assertTrue(attr.contains("top"));
570         assertTrue(attr.contains("person"));
571         assertTrue(attr.contains("organizationalPerson"));
572
573         attr = entry.get("cn");
574         assertTrue(attr.contains("Bjorn Jensen"));
575
576         attr = entry.get("sn");
577         assertTrue(attr.contains("Jensen"));
578
579         attr = entry.get("telephonenumber");
580         assertTrue(attr.contains("+1 408 555 1212"));
581     }
582
583     public void testLdifParserRFC2849Sample2() throws NamingException JavaDoc {
584         String JavaDoc ldif =
585                 "version: 1\n" +
586                         "dn: cn=Barbara Jensen, ou=Product Development, dc=airius, dc=com\n" +
587                         "objectclass: top\n" +
588                         "objectclass: person\n" +
589                         "objectclass: organizationalPerson\n" +
590                         "cn: Barbara Jensen\n" +
591                         "cn: Barbara J Jensen\n" +
592                         "cn: Babs Jensen\n" +
593                         "sn: Jensen\n" +
594                         "uid: bjensen\n" +
595                         "telephonenumber: +1 408 555 1212\n" +
596                         "description:Babs is a big sailing fan, and travels extensively in sea\n" +
597                         " rch of perfect sailing conditions.\n" +
598                         "title:Product Manager, Rod and Reel Division";
599
600         LdifReader reader = new LdifReader();
601         List JavaDoc entries = reader.parseLdif(ldif);
602
603         assertEquals(1, entries.size());
604
605         // Entry 1
606
Entry entry = (Entry) entries.get(0);
607         assertTrue(entry.isChangeAdd());
608
609         assertEquals("cn=Barbara Jensen, ou=Product Development, dc=airius, dc=com", entry.getDn());
610
611         Attribute JavaDoc attr = entry.get("objectclass");
612         assertTrue(attr.contains("top"));
613         assertTrue(attr.contains("person"));
614         assertTrue(attr.contains("organizationalPerson"));
615
616         attr = entry.get("cn");
617         assertTrue(attr.contains("Barbara Jensen"));
618         assertTrue(attr.contains("Barbara J Jensen"));
619         assertTrue(attr.contains("Babs Jensen"));
620
621         attr = entry.get("sn");
622         assertTrue(attr.contains("Jensen"));
623
624         attr = entry.get("uid");
625         assertTrue(attr.contains("bjensen"));
626
627         attr = entry.get("telephonenumber");
628         assertTrue(attr.contains("+1 408 555 1212"));
629
630         attr = entry.get("description");
631         assertTrue(attr
632                 .contains("Babs is a big sailing fan, and travels extensively in search of perfect sailing conditions."));
633
634         attr = entry.get("title");
635         assertTrue(attr.contains("Product Manager, Rod and Reel Division"));
636
637     }
638
639     public void testLdifParserRFC2849Sample3() throws NamingException JavaDoc, Exception JavaDoc {
640         String JavaDoc ldif =
641                 "version: 1\n" +
642                         "dn: cn=Gern Jensen, ou=Product Testing, dc=airius, dc=com\n" +
643                         "objectclass: top\n" +
644                         "objectclass: person\n" +
645                         "objectclass: organizationalPerson\n" +
646                         "cn: Gern Jensen\n" +
647                         "cn: Gern O Jensen\n" +
648                         "sn: Jensen\n" +
649                         "uid: gernj\n" +
650                         "telephonenumber: +1 408 555 1212\n" +
651                         "description:: V2hhdCBhIGNhcmVmdWwgcmVhZGVyIHlvdSBhcmUhICBUaGlzIHZhbHVl\n" +
652                         " IGlzIGJhc2UtNjQtZW5jb2RlZCBiZWNhdXNlIGl0IGhhcyBhIGNvbnRyb2wgY2hhcmFjdG\n" +
653                         " VyIGluIGl0IChhIENSKS4NICBCeSB0aGUgd2F5LCB5b3Ugc2hvdWxkIHJlYWxseSBnZXQg\n" +
654                         " b3V0IG1vcmUu";
655
656         LdifReader reader = new LdifReader();
657         List JavaDoc entries = reader.parseLdif(ldif);
658
659         assertEquals(1, entries.size());
660
661         // Entry 1
662
Entry entry = (Entry) entries.get(0);
663         assertTrue(entry.isChangeAdd());
664
665         assertEquals("cn=Gern Jensen, ou=Product Testing, dc=airius, dc=com", entry.getDn());
666
667         Attribute JavaDoc attr = entry.get("objectclass");
668         assertTrue(attr.contains("top"));
669         assertTrue(attr.contains("person"));
670         assertTrue(attr.contains("organizationalPerson"));
671
672         attr = entry.get("cn");
673         assertTrue(attr.contains("Gern Jensen"));
674         assertTrue(attr.contains("Gern O Jensen"));
675
676         attr = entry.get("sn");
677         assertTrue(attr.contains("Jensen"));
678
679         attr = entry.get("uid");
680         assertTrue(attr.contains("gernj"));
681
682         attr = entry.get("telephonenumber");
683         assertTrue(attr.contains("+1 408 555 1212"));
684
685         attr = entry.get("description");
686         assertTrue(attr
687                 .contains("What a careful reader you are! This value is base-64-encoded because it has a control character in it (a CR).\r By the way, you should really get out more."
688                 .getBytes("UTF-8")));
689     }
690
691     public void testLdifParserRFC2849Sample3VariousSpacing() throws NamingException JavaDoc, Exception JavaDoc {
692         String JavaDoc ldif =
693                 "version:1\n" +
694                         "dn:cn=Gern Jensen, ou=Product Testing, dc=airius, dc=com \n" +
695                         "objectclass:top\n" +
696                         "objectclass: person \n" +
697                         "objectclass:organizationalPerson\n" +
698                         "cn:Gern Jensen\n" +
699                         "cn:Gern O Jensen\n" +
700                         "sn:Jensen\n" +
701                         "uid:gernj\n" +
702                         "telephonenumber:+1 408 555 1212 \n" +
703                         "description:: V2hhdCBhIGNhcmVmdWwgcmVhZGVyIHlvdSBhcmUhICBUaGlzIHZhbHVl\n" +
704                         " IGlzIGJhc2UtNjQtZW5jb2RlZCBiZWNhdXNlIGl0IGhhcyBhIGNvbnRyb2wgY2hhcmFjdG\n" +
705                         " VyIGluIGl0IChhIENSKS4NICBCeSB0aGUgd2F5LCB5b3Ugc2hvdWxkIHJlYWxseSBnZXQg\n" +
706                         " b3V0IG1vcmUu ";
707
708         LdifReader reader = new LdifReader();
709         List JavaDoc entries = reader.parseLdif(ldif);
710
711         assertEquals(1, entries.size());
712
713         // Entry 1
714
Entry entry = (Entry) entries.get(0);
715         assertTrue(entry.isChangeAdd());
716
717         assertEquals("cn=Gern Jensen, ou=Product Testing, dc=airius, dc=com", entry.getDn());
718
719         Attribute JavaDoc attr = entry.get("objectclass");
720         assertTrue(attr.contains("top"));
721         assertTrue(attr.contains("person"));
722         assertTrue(attr.contains("organizationalPerson"));
723
724         attr = entry.get("cn");
725         assertTrue(attr.contains("Gern Jensen"));
726         assertTrue(attr.contains("Gern O Jensen"));
727
728         attr = entry.get("sn");
729         assertTrue(attr.contains("Jensen"));
730
731         attr = entry.get("uid");
732         assertTrue(attr.contains("gernj"));
733
734         attr = entry.get("telephonenumber");
735         assertTrue(attr.contains("+1 408 555 1212"));
736
737         attr = entry.get("description");
738         assertTrue(attr
739                 .contains("What a careful reader you are! This value is base-64-encoded because it has a control character in it (a CR).\r By the way, you should really get out more."
740                 .getBytes("UTF-8")));
741     }
742
743     public void testLdifParserRFC2849Sample4() throws NamingException JavaDoc, Exception JavaDoc {
744         String JavaDoc ldif =
745                 "version: 1\n" +
746                         "dn:: b3U95Za25qWt6YOoLG89QWlyaXVz\n" +
747                         "# dn:: ou=õÖ?öåíùÃè,o=Airius\n" +
748                         "objectclass: top\n" +
749                         "objectclass: organizationalUnit\n" +
750                         "ou:: 5Za25qWt6YOo\n" +
751                         "# ou:: õÖ?öåíùÃè\n" +
752                         "ou;lang-ja:: 5Za25qWt6YOo\n" +
753                         "# ou;lang-ja:: õÖ?öåíùÃè\n" +
754                         "ou;lang-ja;phonetic:: 44GI44GE44GO44KH44GG44G2\n" +
755                         "# ou;lang-ja:: óÁÈóÁÄóÁÎóÂÇóÁÆóÁ?\n" +
756                         "ou;lang-en: Sales\n" +
757                         "description: Japanese office\n" +
758                         "\n" +
759                         "dn:: dWlkPXJvZ2FzYXdhcmEsb3U95Za25qWt6YOoLG89QWlyaXVz\n" +
760                         "# dn:: uid=rogasawara,ou=õÖ?öåíùÃè,o=Airius\n" +
761                         "userpassword: {SHA}O3HSv1MusyL4kTjP+HKI5uxuNoM=\n" +
762                         "objectclass: top\n" +
763                         "objectclass: person\n" +
764                         "objectclass: organizationalPerson\n" +
765                         "objectclass: inetOrgPerson\n" +
766                         "uid: rogasawara\n" +
767                         "mail: rogasawara@airius.co.jp\n" +
768                         "givenname;lang-ja:: 44Ot44OJ44OL44O8\n" +
769                         "# givenname;lang-ja:: óÃíóÃÉóÃËóÃ?\n" +
770                         "sn;lang-ja:: 5bCP56yg5Y6f\n" +
771                         "# sn;lang-ja:: õ?Ï÷ìàõÎß\n" +
772                         "cn;lang-ja:: 5bCP56yg5Y6fIOODreODieODi+ODvA==\n" +
773                         "# cn;lang-ja:: õ?Ï÷ìàõÎß óÃíóÃÉóÃËóÃ?\n" +
774                         "title;lang-ja:: 5Za25qWt6YOoIOmDqOmVtw==\n" +
775                         "# title;lang-ja:: õÖ?öåíùÃè ùÃèùÕ?\n" +
776                         "preferredlanguage: ja\n" +
777                         "givenname:: 44Ot44OJ44OL44O8\n" +
778                         "# givenname:: óÃíóÃÉóÃËóÃ?\n" +
779                         "sn:: 5bCP56yg5Y6f\n" +
780                         "# sn:: õ?Ï÷ìàõÎß\n" +
781                         "cn:: 5bCP56yg5Y6fIOODreODieODi+ODvA==\n" +
782                         "# cn:: õ?Ï÷ìàõÎß óÃíóÃÉóÃËóÃ?\n" +
783                         "title:: 5Za25qWt6YOoIOmDqOmVtw==\n" +
784                         "# title:: õÖ?öåíùÃè ùÃèùÕ?\n" +
785                         "givenname;lang-ja;phonetic:: 44KN44Gp44Gr44O8\n" +
786                         "# givenname;lang-ja;phonetic:: óÂÍóÁéóÁëóÃ?\n" +
787                         "sn;lang-ja;phonetic:: 44GK44GM44GV44KP44KJ\n" +
788                         "# sn;lang-ja;phonetic:: óÁÊóÁÌóÁÕóÂÏóÂÉ\n" +
789                         "cn;lang-ja;phonetic:: 44GK44GM44GV44KP44KJIOOCjeOBqeOBq+ODvA==\n" +
790                         "# cn;lang-ja;phonetic:: óÁÊóÁÌóÁÎóÂÏóÂÉ óÂÍóÁéóÁëóÃ?\n" +
791                         "title;lang-ja;phonetic:: 44GI44GE44GO44KH44GG44G2IOOBtuOBoeOCh+OBhg==\n" +
792                         "# title;lang-ja;phonetic::\n" +
793                         "# óÁÈóÁÄóÁÎóÂÇóÁÆóÁ? óÁ?óÁáóÂÇóÁÆ\n" +
794                         "givenname;lang-en: Rodney\n" +
795                         "sn;lang-en: Ogasawara\n" +
796                         "cn;lang-en: Rodney Ogasawara\n" +
797                         "title;lang-en: Sales, Director\n";
798
799         LdifReader reader = new LdifReader();
800         List JavaDoc entries = reader.parseLdif(ldif);
801
802         String JavaDoc[][][] values =
803                 {
804                         {
805                                 {"dn", "ou=\u55b6\u696d\u90e8,o=Airius"}, // 55b6 = õÖ?, 696d = öåí, 90e8 = ùÃè
806
{"objectclass", "top"},
807                                 {"objectclass", "organizationalUnit"},
808                                 {"ou", "\u55b6\u696d\u90e8"},
809                                 {"ou;lang-ja", "\u55b6\u696d\u90e8"},
810                                 {"ou;lang-ja;phonetic", "\u3048\u3044\u304e\u3087\u3046\u3076"}, // 3048 = óÁÈ, 3044 = óÁÄ, 304e = óÁÎ
811
// 3087 = óÂÇ, 3046 = óÁÆ, 3076 = óÁ?
812
{"ou;lang-en", "Sales"},
813                                 {"description", "Japanese office"}},
814                         {
815                                 {"dn", "uid=rogasawara,ou=\u55b6\u696d\u90e8,o=Airius"},
816                                 {"userpassword", "{SHA}O3HSv1MusyL4kTjP+HKI5uxuNoM="},
817                                 {"objectclass", "top"},
818                                 {"objectclass", "person"},
819                                 {"objectclass", "organizationalPerson"},
820                                 {"objectclass", "inetOrgPerson"},
821                                 {"uid", "rogasawara"},
822                                 {"mail", "rogasawara@airius.co.jp"},
823                                 {"givenname;lang-ja", "\u30ed\u30c9\u30cb\u30fc"}, // 30ed = óÃí, 30c9 = óÃÉ, 30cb = óÃË, 30fc = óÃ?
824
{"sn;lang-ja", "\u5c0f\u7b20\u539f"}, // 5c0f = õ?Ï, 7b20 = ÷ìà, 539f = õÎß
825
{"cn;lang-ja", "\u5c0f\u7b20\u539f \u30ed\u30c9\u30cb\u30fc"},
826                                 {"title;lang-ja", "\u55b6\u696d\u90e8 \u90e8\u9577"}, // 9577 = ùÕ?
827
{"preferredlanguage", "ja"},
828                                 {"givenname", "\u30ed\u30c9\u30cb\u30fc"},
829                                 {"sn", "\u5c0f\u7b20\u539f"},
830                                 {"cn", "\u5c0f\u7b20\u539f \u30ed\u30c9\u30cb\u30fc"},
831                                 {"title", "\u55b6\u696d\u90e8 \u90e8\u9577"},
832                                 {"givenname;lang-ja;phonetic", "\u308d\u3069\u306b\u30fc"}, // 308d = óÂÍ,3069 = óÁé, 306b = óÁë
833
{"sn;lang-ja;phonetic", "\u304a\u304c\u3055\u308f\u3089"}, // 304a = óÁÊ, 304c = óÁÌ,3055 = óÁÕ,308f = óÂÏ, 3089 = óÂÉ
834
{"cn;lang-ja;phonetic", "\u304a\u304c\u3055\u308f\u3089 \u308d\u3069\u306b\u30fc"},
835                                 {"title;lang-ja;phonetic", "\u3048\u3044\u304e\u3087\u3046\u3076 \u3076\u3061\u3087\u3046"}, // 304E = óÁÎ, 3061 = óÁá
836
{"givenname;lang-en", "Rodney"},
837                                 {"sn;lang-en", "Ogasawara"},
838                                 {"cn;lang-en", "Rodney Ogasawara"},
839                                 {"title;lang-en", "Sales, Director"}
840                         }
841                 };
842
843         assertEquals(2, entries.size());
844
845         // Entry 1
846
for (int i = 0; i < entries.size(); i++) {
847             Entry entry = (Entry) entries.get(i);
848             assertTrue(entry.isChangeAdd());
849
850             for (int j = 0; j < values[i].length; j++) {
851                 if ("dn".equalsIgnoreCase(values[i][j][0])) {
852                     assertEquals(values[i][j][1], entry.getDn());
853                 } else {
854                     Attribute JavaDoc attr = entry.get(values[i][j][0]);
855
856                     if (attr.contains(values[i][j][1])) {
857                         assertTrue(true);
858                     } else {
859                         assertTrue(attr.contains(values[i][j][1].getBytes("UTF-8")));
860                     }
861                 }
862             }
863         }
864     }
865
866     public void testLdifParserRFC2849Sample5() throws NamingException JavaDoc, Exception JavaDoc {
867         String JavaDoc ldif =
868                 "version: 1\n" +
869                         "dn: cn=Horatio Jensen, ou=Product Testing, dc=airius, dc=com\n" +
870                         "objectclass: top\n" +
871                         "objectclass: person\n" +
872                         "objectclass: organizationalPerson\n" +
873                         "cn: Horatio Jensen\n" +
874                         "cn: Horatio N Jensen\n" +
875                         "sn: Jensen\n" +
876                         "uid: hjensen\n" +
877                         "telephonenumber: +1 408 555 1212\n" +
878                         "jpegphoto:< file:" + HJENSEN_JPEG_FILE.getAbsolutePath() + "\n";
879
880         LdifReader reader = new LdifReader();
881         List JavaDoc entries = reader.parseLdif(ldif);
882
883         String JavaDoc[][] values =
884                 {
885                         {"dn", "cn=Horatio Jensen, ou=Product Testing, dc=airius, dc=com"},
886                         {"objectclass", "top"},
887                         {"objectclass", "person"},
888                         {"objectclass", "organizationalPerson"},
889                         {"cn", "Horatio Jensen"},
890                         {"cn", "Horatio N Jensen"},
891                         {"sn", "Jensen"},
892                         {"uid", "hjensen"},
893                         {"telephonenumber", "+1 408 555 1212"},
894                         {"jpegphoto", null}
895                 };
896
897         assertEquals(1, entries.size());
898
899         // Entry 1
900
Entry entry = (Entry) entries.get(0);
901         assertTrue(entry.isChangeAdd());
902
903         for (int i = 0; i < values.length; i++) {
904             if ("dn".equalsIgnoreCase(values[i][0])) {
905                 assertEquals(values[i][1], entry.getDn());
906             } else if ("jpegphoto".equalsIgnoreCase(values[i][0])) {
907                 Attribute JavaDoc attr = entry.get(values[i][0]);
908                 assertTrue(Arrays.equals(data, (byte[]) attr.get()));
909             } else {
910                 Attribute JavaDoc attr = entry.get(values[i][0]);
911
912                 if (attr.contains(values[i][1])) {
913                     assertTrue(true);
914                 } else {
915                     assertTrue(attr.contains(values[i][1].getBytes("UTF-8")));
916                 }
917             }
918         }
919     }
920
921     public void testLdifParserRFC2849Sample5WithSizeLimit() throws NamingException JavaDoc, Exception JavaDoc {
922         String JavaDoc ldif =
923                 "version: 1\n" +
924                         "dn: cn=Horatio Jensen, ou=Product Testing, dc=airius, dc=com\n" +
925                         "objectclass: top\n" +
926                         "objectclass: person\n" +
927                         "objectclass: organizationalPerson\n" +
928                         "cn: Horatio Jensen\n" +
929                         "cn: Horatio N Jensen\n" +
930                         "sn: Jensen\n" +
931                         "uid: hjensen\n" +
932                         "telephonenumber: +1 408 555 1212\n" +
933                         "jpegphoto:< file:" + HJENSEN_JPEG_FILE.getAbsolutePath() + "\n";
934
935         LdifReader reader = new LdifReader();
936         reader.setSizeLimit(128);
937
938         try {
939             reader.parseLdif(ldif);
940             fail();
941         }
942         catch (LdifParseException e) {
943             final Throwable JavaDoc cause = e.getCause();
944             assertTrue("Content too long exception must be thrown",
945                     cause !=null && cause.getMessage().indexOf("too long")>0);
946         }
947     }
948
949     public void testLdifParserRFC2849Sample6() throws NamingException JavaDoc, Exception JavaDoc {
950         String JavaDoc ldif =
951                 "version: 1\n" +
952                         // First entry modification : ADD
953
"# Add a new entry\n" +
954                         "dn: cn=Fiona Jensen, ou=Marketing, dc=airius, dc=com\n" +
955                         "changetype: add\n" +
956                         "objectclass: top\n" +
957                         "objectclass: person\n" +
958                         "objectclass: organizationalPerson\n" +
959                         "cn: Fiona Jensen\n" +
960                         "sn: Jensen\n" +
961                         "uid: fiona\n" +
962                         "telephonenumber: +1 408 555 1212\n" +
963                         "jpegphoto:< file:" + FIONA_JPEG_FILE.getAbsolutePath() + "\n" +
964                         "\n" +
965                         // Second entry modification : DELETE
966
"# Delete an existing entry\n" +
967                         "dn: cn=Robert Jensen, ou=Marketing, dc=airius, dc=com\n" +
968                         "changetype: delete\n" +
969                         "\n" +
970                         // Third entry modification : MODRDN
971
"# Modify an entry's relative distinguished name\n" +
972                         "dn: cn=Paul Jensen, ou=Product Development, dc=airius, dc=com\n" +
973                         "changetype: modrdn\n" +
974                         "newrdn: cn=Paula Jensen\n" +
975                         "deleteoldrdn: 1\n" +
976                         "\n" +
977                         // Forth entry modification : MODRDN
978
"# Rename an entry and move all of its children to a new location in\n" +
979                         "# the directory tree (only implemented by LDAPv3 servers).\n" +
980                         "dn: ou=PD Accountants, ou=Product Development, dc=airius, dc=com\n" +
981                         "changetype: moddn\n" +
982                         "newrdn: ou=Product Development Accountants\n" +
983                         "deleteoldrdn: 0\n" +
984                         "newsuperior: ou=Accounting, dc=airius, dc=com\n" +
985                         "# Modify an entry: add an additional value to the postaladdress\n" +
986                         "# attribute, completely delete the description attribute, replace\n" +
987                         "# the telephonenumber attribute with two values, and delete a specific\n" +
988                         "# value from the facsimiletelephonenumber attribute\n" +
989                         "\n" +
990                         // Fitfh entry modification : MODIFY
991
"dn: cn=Paula Jensen, ou=Product Development, dc=airius, dc=com\n" +
992                         "changetype: modify\n" +
993                         "add: postaladdress\n" +
994                         "postaladdress: 123 Anystreet $ Sunnyvale, CA $ 94086\n" +
995                         "-\n" +
996                         "delete: description\n" +
997                         "-\n" +
998                         "replace: telephonenumber\n" +
999                         "telephonenumber: +1 408 555 1234\n" +
1000                        "telephonenumber: +1 408 555 5678\n" +
1001                        "-\n" +
1002                        "delete: facsimiletelephonenumber\n" +
1003                        "facsimiletelephonenumber: +1 408 555 9876\n" +
1004                        "-\n" +
1005                        "\n" +
1006                        // Sixth entry modification : MODIFY
1007
"# Modify an entry: replace the postaladdress attribute with an empty\n" +
1008                        "# set of values (which will cause the attribute to be removed), and\n" +
1009                        "# delete the entire description attribute. Note that the first will\n" +
1010                        "# always succeed, while the second will only succeed if at least\n" +
1011                        "# one value for the description attribute is present.\n" +
1012                        "dn: cn=Ingrid Jensen, ou=Product Support, dc=airius, dc=com\n" +
1013                        "changetype: modify\n" +
1014                        "replace: postaladdress\n" +
1015                        "-\n" +
1016                        "delete: description\n" +
1017                        "-\n";
1018
1019        LdifReader reader = new LdifReader();
1020        List JavaDoc entries = reader.parseLdif(ldif);
1021
1022        String JavaDoc[][][] values =
1023                {
1024                        // First entry modification : ADD
1025
{
1026                                {"dn", "cn=Fiona Jensen, ou=Marketing, dc=airius, dc=com"},
1027                                {"objectclass", "top"},
1028                                {"objectclass", "person"},
1029                                {"objectclass", "organizationalPerson"},
1030                                {"cn", "Fiona Jensen"},
1031                                {"sn", "Jensen"},
1032                                {"uid", "fiona"},
1033                                {"telephonenumber", "+1 408 555 1212"},
1034                                {"jpegphoto", ""}
1035                        },
1036                        // Second entry modification : DELETE
1037
{
1038                                {"dn", "cn=Robert Jensen, ou=Marketing, dc=airius, dc=com"}
1039                        },
1040                        // Third entry modification : MODRDN
1041
{
1042                                {"dn", "cn=Paul Jensen, ou=Product Development, dc=airius, dc=com"},
1043                                {"cn=Paula Jensen"}
1044                        },
1045                        // Forth entry modification : MODRDN
1046
{
1047                                {"dn", "ou=PD Accountants, ou=Product Development, dc=airius, dc=com"},
1048                                {"ou=Product Development Accountants"},
1049                                {"ou=Accounting, dc=airius, dc=com"}
1050                        },
1051                        // Fitfh entry modification : MODIFY
1052
{
1053                                {"dn", "cn=Paula Jensen, ou=Product Development, dc=airius, dc=com"},
1054                                // add
1055
{"postaladdress", "123 Anystreet $ Sunnyvale, CA $ 94086"},
1056                                // delete
1057
{"description"},
1058                                // replace
1059
{"telephonenumber", "+1 408 555 1234", "+1 408 555 5678"},
1060                                // delete
1061
{"facsimiletelephonenumber", "+1 408 555 9876"},
1062                        },
1063                        // Sixth entry modification : MODIFY
1064
{
1065                                {"dn", "cn=Ingrid Jensen, ou=Product Support, dc=airius, dc=com"},
1066                                // replace
1067
{"postaladdress"},
1068                                // delete
1069
{"description"}
1070                        }
1071                };
1072
1073        Entry entry = (Entry) entries.get(0);
1074        assertTrue(entry.isChangeAdd());
1075
1076        for (int i = 0; i < values.length; i++) {
1077            if ("dn".equalsIgnoreCase(values[0][i][0])) {
1078                assertEquals(values[0][i][1], entry.getDn());
1079            } else if ("jpegphoto".equalsIgnoreCase(values[0][i][0])) {
1080                Attribute JavaDoc attr = entry.get(values[0][i][0]);
1081                assertTrue(Arrays.equals(data, (byte[]) attr.get()));
1082            } else {
1083                Attribute JavaDoc attr = entry.get(values[0][i][0]);
1084
1085                if (attr.contains(values[0][i][1])) {
1086                    assertTrue(true);
1087                } else {
1088                    assertTrue(attr.contains(values[0][i][1].getBytes("UTF-8")));
1089                }
1090            }
1091        }
1092
1093        // Second entry
1094
entry = (Entry) entries.get(1);
1095        assertTrue(entry.isChangeDelete());
1096        assertEquals(values[1][0][1], entry.getDn());
1097
1098        // Third entry
1099
entry = (Entry) entries.get(2);
1100        assertTrue(entry.isChangeModRdn());
1101        assertEquals(values[2][0][1], entry.getDn());
1102        assertEquals(values[2][1][0], entry.getNewRdn());
1103        assertTrue(entry.isDeleteOldRdn());
1104
1105        // Forth entry
1106
entry = (Entry) entries.get(3);
1107        assertTrue(entry.isChangeModDn());
1108        assertEquals(values[3][0][1], entry.getDn());
1109        assertEquals(values[3][1][0], entry.getNewRdn());
1110        assertFalse(entry.isDeleteOldRdn());
1111        assertEquals(values[3][2][0], entry.getNewSuperior());
1112
1113        // Fifth entry
1114
entry = (Entry) entries.get(4);
1115        List JavaDoc modifs = entry.getModificationItems();
1116
1117        assertTrue(entry.isChangeModify());
1118        assertEquals(values[4][0][1], entry.getDn());
1119
1120        // "add: postaladdress"
1121
// "postaladdress: 123 Anystreet $ Sunnyvale, CA $ 94086"
1122
ModificationItem JavaDoc item = (ModificationItem JavaDoc) modifs.get(0);
1123        assertEquals(DirContext.ADD_ATTRIBUTE, item.getModificationOp());
1124        assertEquals(values[4][1][0], item.getAttribute().getID());
1125        assertEquals(values[4][1][1], item.getAttribute().get(0));
1126
1127        // "delete: description\n" +
1128
item = (ModificationItem JavaDoc) modifs.get(1);
1129        assertEquals(DirContext.REMOVE_ATTRIBUTE, item.getModificationOp());
1130        assertEquals(values[4][2][0], item.getAttribute().getID());
1131
1132        // "replace: telephonenumber"
1133
// "telephonenumber: +1 408 555 1234"
1134
// "telephonenumber: +1 408 555 5678"
1135
item = (ModificationItem JavaDoc) modifs.get(2);
1136        assertEquals(DirContext.REPLACE_ATTRIBUTE, item.getModificationOp());
1137        assertEquals(values[4][3][0], item.getAttribute().getID());
1138        assertEquals(values[4][3][1], item.getAttribute().get(0));
1139        assertEquals(values[4][3][2], item.getAttribute().get(1));
1140
1141        // "delete: facsimiletelephonenumber"
1142
// "facsimiletelephonenumber: +1 408 555 9876"
1143
item = (ModificationItem JavaDoc) modifs.get(3);
1144        assertEquals(DirContext.REMOVE_ATTRIBUTE, item.getModificationOp());
1145        assertEquals(values[4][4][0], item.getAttribute().getID());
1146        assertEquals(values[4][4][1], item.getAttribute().get(0));
1147
1148        // Sixth entry
1149
entry = (Entry) entries.get(5);
1150        modifs = entry.getModificationItems();
1151
1152        assertTrue(entry.isChangeModify());
1153        assertEquals(values[5][0][1], entry.getDn());
1154
1155        // "replace: postaladdress"
1156
item = (ModificationItem JavaDoc) modifs.get(0);
1157        assertEquals(DirContext.REPLACE_ATTRIBUTE, item.getModificationOp());
1158        assertEquals(values[5][1][0], item.getAttribute().getID());
1159
1160        // "delete: description"
1161
item = (ModificationItem JavaDoc) modifs.get(1);
1162        assertEquals(DirContext.REMOVE_ATTRIBUTE, item.getModificationOp());
1163        assertEquals(values[5][2][0], item.getAttribute().getID());
1164    }
1165
1166    public void testLdifParserRFC2849Sample7() throws NamingException JavaDoc, Exception JavaDoc {
1167        String JavaDoc ldif =
1168                "version: 1\n" +
1169                        "# Delete an entry. The operation will attach the LDAPv3\n" +
1170                        "# Tree Delete Control defined in [9]. The criticality\n" +
1171                        "# field is \"true\" and the controlValue field is\n" +
1172                        "# absent, as required by [9].\n" +
1173                        "dn: ou=Product Development, dc=airius, dc=com\n" +
1174                        "control: 1.2.840.113556.1.4.805 true\n" +
1175                        "changetype: delete\n";
1176
1177        LdifReader reader = new LdifReader();
1178        List JavaDoc entries = reader.parseLdif(ldif);
1179
1180        Entry entry = (Entry) entries.get(0);
1181
1182        assertEquals("ou=Product Development, dc=airius, dc=com", entry.getDn());
1183        assertTrue(entry.isChangeDelete());
1184
1185        // Check the control
1186
Control JavaDoc control = entry.getControl();
1187
1188        assertEquals("1.2.840.113556.1.4.805", control.getID());
1189        assertTrue(control.isCritical());
1190    }
1191
1192    public void testLdifParserRFC2849Sample7NoValueNoCritical() throws NamingException JavaDoc, Exception JavaDoc {
1193        String JavaDoc ldif =
1194                "version: 1\n" +
1195                        "# Delete an entry. The operation will attach the LDAPv3\n" +
1196                        "# Tree Delete Control defined in [9]. The criticality\n" +
1197                        "# field is \"true\" and the controlValue field is\n" +
1198                        "# absent, as required by [9].\n" +
1199                        "dn: ou=Product Development, dc=airius, dc=com\n" +
1200                        "control: 1.2.840.11556.1.4.805\n" +
1201                        "changetype: delete\n";
1202
1203        LdifReader reader = new LdifReader();
1204        List JavaDoc entries = reader.parseLdif(ldif);
1205
1206        Entry entry = (Entry) entries.get(0);
1207
1208        assertEquals("ou=Product Development, dc=airius, dc=com", entry.getDn());
1209        assertTrue(entry.isChangeDelete());
1210
1211        // Check the control
1212
Control JavaDoc control = entry.getControl();
1213
1214        assertEquals("1.2.840.11556.1.4.805", control.getID());
1215        assertFalse(control.isCritical());
1216    }
1217
1218    public void testLdifParserRFC2849Sample7NoCritical() throws NamingException JavaDoc, Exception JavaDoc {
1219        String JavaDoc ldif =
1220                "version: 1\n" +
1221                        "# Delete an entry. The operation will attach the LDAPv3\n" +
1222                        "# Tree Delete Control defined in [9]. The criticality\n" +
1223                        "# field is \"true\" and the controlValue field is\n" +
1224                        "# absent, as required by [9].\n" +
1225                        "dn: ou=Product Development, dc=airius, dc=com\n" +
1226                        "control: 1.2.840.11556.1.4.805:control-value\n" +
1227                        "changetype: delete\n";
1228
1229        LdifReader reader = new LdifReader();
1230        List JavaDoc entries = reader.parseLdif(ldif);
1231
1232        Entry entry = (Entry) entries.get(0);
1233
1234        assertEquals("ou=Product Development, dc=airius, dc=com", entry.getDn());
1235        assertTrue(entry.isChangeDelete());
1236
1237        // Check the control
1238
Control JavaDoc control = entry.getControl();
1239
1240        assertEquals("1.2.840.11556.1.4.805", control.getID());
1241        assertFalse(control.isCritical());
1242        assertEquals("control-value", new String JavaDoc(control.getEncodedValue()));
1243    }
1244
1245    public void testLdifParserRFC2849Sample7NoOid() throws NamingException JavaDoc, Exception JavaDoc {
1246        String JavaDoc ldif =
1247                "version: 1\n" +
1248                        "# Delete an entry. The operation will attach the LDAPv3\n" +
1249                        "# Tree Delete Control defined in [9]. The criticality\n" +
1250                        "# field is \"true\" and the controlValue field is\n" +
1251                        "# absent, as required by [9].\n" +
1252                        "dn: ou=Product Development, dc=airius, dc=com\n" +
1253                        "control: true\n" +
1254                        "changetype: delete\n";
1255
1256        LdifReader reader = new LdifReader();
1257
1258        try {
1259            reader.parseLdif(ldif);
1260            fail();
1261        }
1262        catch (LdifParseException e) {
1263            //OK
1264
}
1265    }
1266
1267    public void testLdifParserRFC2849Sample7BadOid() throws NamingException JavaDoc, Exception JavaDoc {
1268        String JavaDoc ldif =
1269                "version: 1\n" +
1270                        "# Delete an entry. The operation will attach the LDAPv3\n" +
1271                        "# Tree Delete Control defined in [9]. The criticality\n" +
1272                        "# field is \"true\" and the controlValue field is\n" +
1273                        "# absent, as required by [9].\n" +
1274                        "dn: ou=Product Development, dc=airius, dc=com\n" +
1275                        "control: 1.2.840.11A556.1.4.805 true\n" +
1276                        "changetype: delete\n";
1277
1278        LdifReader reader = new LdifReader();
1279
1280        try {
1281            reader.parseLdif(ldif);
1282            fail();
1283        }
1284        catch (LdifParseException e) {
1285            //OK
1286
}
1287    }
1288
1289    public void testLdifParserChangeModifyMultiAttrs() throws NamingException JavaDoc, Exception JavaDoc {
1290        String JavaDoc ldif =
1291                "version: 1\n" +
1292                        "dn: ou=Product Development, dc=airius, dc=com\n" +
1293                        "changetype: modify\n" +
1294                        "add: postaladdress\n" +
1295                        "postaladdress: 123 Anystreet $ Sunnyvale, CA $ 94086\n" +
1296                        "-\n" +
1297                        "delete: postaladdress\n" +
1298                        "-\n" +
1299                        "replace: telephonenumber\n" +
1300                        "telephonenumber: +1 408 555 1234\n" +
1301                        "telephonenumber: +1 408 555 5678\n" +
1302                        "-\n" +
1303                        "delete: facsimiletelephonenumber\n" +
1304                        "facsimiletelephonenumber: +1 408 555 9876\n";
1305
1306        LdifReader reader = new LdifReader();
1307
1308        try {
1309            reader.parseLdif(ldif);
1310            fail();
1311        }
1312        catch (LdifParseException e) {
1313            //OK
1314
}
1315    }
1316}
1317
Popular Tags