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.schema;
21
22
23 import org.apache.directory.server.core.DefaultDirectoryService;
24 import org.apache.directory.server.core.DirectoryService;
25 import org.apache.directory.server.core.entry.ServerEntry;
26 import org.apache.directory.server.xdbm.Index;
27 import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmIndex;
28 import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition;
29 import org.apache.directory.server.schema.SerializableComparator;
30 import org.apache.directory.server.schema.bootstrap.ApacheSchema;
31 import org.apache.directory.server.schema.bootstrap.ApachemetaSchema;
32 import org.apache.directory.server.schema.bootstrap.BootstrapSchemaLoader;
33 import org.apache.directory.server.schema.bootstrap.CoreSchema;
34 import org.apache.directory.server.schema.bootstrap.Schema;
35 import org.apache.directory.server.schema.bootstrap.SystemSchema;
36 import org.apache.directory.server.schema.bootstrap.partition.SchemaPartitionExtractor;
37 import org.apache.directory.server.schema.registries.DefaultOidRegistry;
38 import org.apache.directory.server.schema.registries.DefaultRegistries;
39 import org.apache.directory.server.schema.registries.Registries;
40 import org.junit.BeforeClass;
41 import org.junit.Test;
42
43 import static org.junit.Assert.assertNotNull;
44 import static org.junit.Assert.assertEquals;
45 import static org.junit.Assert.assertTrue;
46 import static org.junit.Assert.assertFalse;
47
48 import javax.naming.NamingException;
49 import java.io.File;
50 import java.io.IOException;
51 import java.util.HashSet;
52 import java.util.List;
53 import java.util.Map;
54 import java.util.Set;
55
56
57
58
59
60
61
62
63
64
65 public class PartitionSchemaLoaderTest
66 {
67 private static Registries registries;
68 private static DirectoryService directoryService;
69 private static JdbmPartition schemaPartition;
70
71
72 @BeforeClass public static void setUp() throws Exception
73 {
74
75 directoryService = new DefaultDirectoryService();
76 File workingDirectory = new File( System.getProperty( "workingDirectory", System.getProperty( "user.dir" ) ) );
77
78 if ( ! workingDirectory.exists() )
79 {
80 workingDirectory.mkdirs();
81 }
82
83 directoryService.setWorkingDirectory( workingDirectory );
84
85
86
87
88
89
90 BootstrapSchemaLoader loader = new BootstrapSchemaLoader();
91 registries = new DefaultRegistries( "bootstrap", loader, new DefaultOidRegistry() );
92 directoryService.setRegistries( registries );
93
94
95 Set<Schema> bootstrapSchemas = new HashSet<Schema>();
96 bootstrapSchemas.add( new ApachemetaSchema() );
97 bootstrapSchemas.add( new ApacheSchema() );
98 bootstrapSchemas.add( new CoreSchema() );
99 bootstrapSchemas.add( new SystemSchema() );
100 loader.loadWithDependencies( bootstrapSchemas, registries );
101
102
103 List<Throwable> errors = registries.checkRefInteg();
104
105 if ( !errors.isEmpty() )
106 {
107 NamingException e = new NamingException();
108 e.setRootCause( errors.get( 0 ) );
109 throw e;
110 }
111
112 SerializableComparator.setRegistry( registries.getComparatorRegistry() );
113
114
115
116
117
118 SchemaPartitionExtractor extractor = null;
119 try
120 {
121 extractor = new SchemaPartitionExtractor( directoryService.getWorkingDirectory() );
122 extractor.extract();
123 }
124 catch ( IOException e )
125 {
126 NamingException ne = new NamingException( "Failed to extract pre-loaded schema partition." );
127 ne.setRootCause( e );
128 throw ne;
129 }
130
131
132
133
134
135 schemaPartition = new JdbmPartition();
136 schemaPartition.setId( "schema" );
137 schemaPartition.setCacheSize( 1000 );
138
139 Set<Index<?, ServerEntry>> indexedAttributes = new HashSet<Index<?, ServerEntry>>();
140 for ( String attributeId : extractor.getDbFileListing().getIndexedAttributes() )
141 {
142 indexedAttributes.add( new JdbmIndex<String,ServerEntry>( attributeId ) );
143 }
144
145 schemaPartition.setIndexedAttributes( indexedAttributes );
146 schemaPartition.setSuffix( "ou=schema" );
147 schemaPartition.init( directoryService );
148 }
149
150
151 @Test public void testGetSchemas() throws Exception
152 {
153 PartitionSchemaLoader loader = new PartitionSchemaLoader( schemaPartition, registries );
154 Map<String,Schema> schemas = loader.getSchemas();
155
156 Schema schema = schemas.get( "mozilla" );
157 assertNotNull( schema );
158 assertEquals( schema.getSchemaName(), "mozilla" );
159
160 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
161 schema = null;
162
163 schema = schemas.get( "core" );
164 assertNotNull( schema );
165 assertEquals( schema.getSchemaName(), "core" );
166 assertFalse( schema.isDisabled() );
167 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
168 schema = null;
169
170 schema = schemas.get( "apachedns" );
171 assertNotNull( schema );
172 assertEquals( schema.getSchemaName(), "apachedns" );
173
174 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
175 schema = null;
176
177 schema = schemas.get( "autofs" );
178 assertNotNull( schema );
179 assertEquals( schema.getSchemaName(), "autofs" );
180
181 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
182 schema = null;
183
184 schema = schemas.get( "apache" );
185 assertNotNull( schema );
186 assertEquals( schema.getSchemaName(), "apache" );
187 assertFalse( schema.isDisabled() );
188 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
189 schema = null;
190
191 schema = schemas.get( "cosine" );
192 assertNotNull( schema );
193 assertEquals( schema.getSchemaName(), "cosine" );
194 assertFalse( schema.isDisabled() );
195 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
196 schema = null;
197
198 schema = schemas.get( "krb5kdc" );
199 assertNotNull( schema );
200 assertEquals( schema.getSchemaName(), "krb5kdc" );
201
202 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
203 schema = null;
204
205 schema = schemas.get( "samba" );
206 assertNotNull( schema );
207 assertEquals( schema.getSchemaName(), "samba" );
208
209 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
210 schema = null;
211
212 schema = schemas.get( "collective" );
213 assertNotNull( schema );
214 assertEquals( schema.getSchemaName(), "collective" );
215 assertFalse( schema.isDisabled() );
216 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
217 schema = null;
218
219 schema = schemas.get( "java" );
220 assertNotNull( schema );
221 assertEquals( schema.getSchemaName(), "java" );
222 assertFalse( schema.isDisabled() );
223 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
224 schema = null;
225
226 schema = schemas.get( "dhcp" );
227 assertNotNull( schema );
228 assertEquals( schema.getSchemaName(), "dhcp" );
229
230 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
231 schema = null;
232
233 schema = schemas.get( "corba" );
234 assertNotNull( schema );
235 assertEquals( schema.getSchemaName(), "corba" );
236
237 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
238 schema = null;
239
240 schema = schemas.get( "nis" );
241 assertNotNull( schema );
242 assertEquals( schema.getSchemaName(), "nis" );
243
244 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
245 schema = null;
246
247 schema = schemas.get( "inetorgperson" );
248 assertNotNull( schema );
249 assertEquals( schema.getSchemaName(), "inetorgperson" );
250 assertFalse( schema.isDisabled() );
251 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
252 schema = null;
253
254 schema = schemas.get( "system" );
255 assertNotNull( schema );
256 assertEquals( schema.getSchemaName(), "system" );
257 assertFalse( schema.isDisabled() );
258 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
259 schema = null;
260
261 schema = schemas.get( "apachemeta" );
262 assertNotNull( schema );
263 assertEquals( schema.getSchemaName(), "apachemeta" );
264 assertFalse( schema.isDisabled() );
265 assertEquals( schema.getOwner(), "uid=admin,ou=system" );
266 schema = null;
267 }
268
269
270 @Test public void testGetSchemaNames() throws Exception
271 {
272 PartitionSchemaLoader loader = new PartitionSchemaLoader( schemaPartition, registries );
273 Set<String> schemaNames = loader.getSchemaNames();
274 assertTrue( schemaNames.contains( "mozilla" ) );
275 assertTrue( schemaNames.contains( "core" ) );
276 assertTrue( schemaNames.contains( "apachedns" ) );
277 assertTrue( schemaNames.contains( "autofs" ) );
278 assertTrue( schemaNames.contains( "apache" ) );
279 assertTrue( schemaNames.contains( "cosine" ) );
280 assertTrue( schemaNames.contains( "krb5kdc" ) );
281 assertTrue( schemaNames.contains( "samba" ) );
282 assertTrue( schemaNames.contains( "collective" ) );
283 assertTrue( schemaNames.contains( "java" ) );
284 assertTrue( schemaNames.contains( "dhcp" ) );
285 assertTrue( schemaNames.contains( "corba" ) );
286 assertTrue( schemaNames.contains( "nis" ) );
287 assertTrue( schemaNames.contains( "inetorgperson" ) );
288 assertTrue( schemaNames.contains( "system" ) );
289 assertTrue( schemaNames.contains( "apachemeta" ) );
290 }
291 }