1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.core.jndi;
21
22
23 import org.apache.directory.server.core.DirectoryService;
24 import org.apache.directory.server.core.integ.CiRunner;
25 import org.junit.Test;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertEquals;
29 import org.junit.runner.RunWith;
30
31 import javax.naming.Context;
32 import javax.naming.NamingEnumeration;
33 import javax.naming.NamingException;
34 import javax.naming.directory.Attribute;
35 import javax.naming.directory.Attributes;
36 import javax.naming.directory.BasicAttribute;
37 import javax.naming.directory.BasicAttributes;
38 import javax.naming.directory.DirContext;
39 import javax.naming.directory.InitialDirContext;
40 import javax.naming.directory.ModificationItem;
41 import javax.naming.directory.SearchControls;
42 import javax.naming.directory.SearchResult;
43
44 import java.util.Hashtable;
45
46
47
48
49
50
51
52 @RunWith ( CiRunner.class )
53 public class DIRSERVER783IT
54 {
55 public static DirectoryService service;
56
57
58
59
60
61
62
63 @Test
64 public void testAddAnotherValueToAnAttribute() throws NamingException
65 {
66
67 Attributes attrs = new BasicAttributes( true );
68 Attribute ocls = new BasicAttribute("objectClass");
69
70 ocls.add("top");
71 ocls.add("person");
72 attrs.put(ocls);
73 attrs.put("cn", "Fiona Apple");
74 attrs.put("sn", "Apple");
75
76 String rdn = "cn=Fiona Apple";
77
78 Hashtable<String,Object> env = new Hashtable<String, Object>();
79 env.put( DirectoryService.JNDI_KEY, service );
80 env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
81 env.put( Context.PROVIDER_URL, "ou=system" );
82
83 DirContext ctx = new InitialDirContext( env );
84
85 ctx.createSubcontext( rdn, attrs );
86
87
88 String description1 = "an American singer-songwriter";
89 Attribute firstDescr = new BasicAttribute( "description", description1 );
90 ModificationItem modification = new ModificationItem(DirContext.ADD_ATTRIBUTE, firstDescr);
91 ctx.modifyAttributes(rdn, new ModificationItem[] { modification });
92
93
94 String description2 = "Grammy award winning";
95 Attribute otherDescr = new BasicAttribute( "description", description2 );
96
97 modification = new ModificationItem(DirContext.ADD_ATTRIBUTE, otherDescr );
98 ctx.modifyAttributes(rdn, new ModificationItem[] { modification } );
99
100
101 String description3 = "MTV Music Award winning";
102 Attribute thirdDescr = new BasicAttribute( "description", description3 );
103
104 modification = new ModificationItem(DirContext.ADD_ATTRIBUTE, thirdDescr );
105 ctx.modifyAttributes(rdn, new ModificationItem[] { modification });
106
107
108 SearchControls sctls = new SearchControls();
109 sctls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
110 String filter = '(' + rdn + ')';
111 String base = "";
112
113
114 NamingEnumeration<SearchResult> enm = ctx.search(base, filter, sctls);
115 assertTrue(enm.hasMore());
116
117 while (enm.hasMore())
118 {
119 SearchResult sr = enm.next();
120 Attribute desc = sr.getAttributes().get("description");
121 assertNotNull(desc);
122 assertTrue(desc.contains(description1));
123 assertTrue(desc.contains(description2));
124 assertTrue(desc.contains(description3));
125 assertEquals(3, desc.size());
126 }
127
128
129 ctx.destroySubcontext(rdn);
130 }
131 }
132