1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 *
19 */
20 package org.apache.directory.server.core.schema;
21
22
23 import java.util.HashSet;
24 import java.util.Iterator;
25 import java.util.Set;
26
27 import org.apache.directory.server.schema.bootstrap.ApacheSchema;
28 import org.apache.directory.server.schema.bootstrap.BootstrapSchemaLoader;
29 import org.apache.directory.server.schema.bootstrap.CoreSchema;
30 import org.apache.directory.server.schema.bootstrap.SystemSchema;
31 import org.apache.directory.server.schema.registries.AttributeTypeRegistry;
32 import org.apache.directory.server.schema.registries.DefaultOidRegistry;
33 import org.apache.directory.server.schema.registries.DefaultRegistries;
34 import org.apache.directory.shared.ldap.schema.AttributeType;
35
36 import junit.framework.TestCase;
37
38
39 /**
40 * Tests methods in SchemaInterceptor.
41 */
42 public class SchemaServiceTest extends TestCase
43 {
44 DefaultRegistries registries;
45
46
47 public void setUp() throws Exception
48 {
49 BootstrapSchemaLoader loader = new BootstrapSchemaLoader();
50 registries = new DefaultRegistries( "bootstrap", loader, new DefaultOidRegistry() );
51 loader.load( new SystemSchema(), registries, false );
52 loader.load( new ApacheSchema(), registries, false );
53 loader.load( new CoreSchema(), registries, false );
54 }
55
56
57 public void testDescendants() throws Exception
58 {
59 AttributeTypeRegistry attrRegistry = registries.getAttributeTypeRegistry();
60 Iterator list = attrRegistry.descendants( "name" );
61 Set<String> nameAttrs = new HashSet<String>();
62 while ( list.hasNext() )
63 {
64 AttributeType type = ( AttributeType ) list.next();
65 nameAttrs.add( type.getName() );
66 }
67 assertEquals( "size of attributes extending name", 13, nameAttrs.size() );
68 assertTrue( nameAttrs.contains( "dmdName" ) );
69 assertTrue( nameAttrs.contains( "o" ) );
70 assertTrue( nameAttrs.contains( "c" ) );
71 assertTrue( nameAttrs.contains( "initials" ) );
72 assertTrue( nameAttrs.contains( "ou" ) );
73 assertTrue( nameAttrs.contains( "sn" ) );
74 assertTrue( nameAttrs.contains( "title" ) );
75 assertTrue( nameAttrs.contains( "l" ) );
76 assertTrue( nameAttrs.contains( "apachePresence" ) );
77 assertTrue( nameAttrs.contains( "cn" ) );
78 assertTrue( nameAttrs.contains( "st" ) );
79 assertTrue( nameAttrs.contains( "givenName" ) );
80 }
81
82 /*
83 public void testAlterObjectClassesBogusAttr() throws NamingException
84 {
85 Attribute attr = new AttributeImpl( "blah", "blah" );
86
87 try
88 {
89 SchemaInterceptor.alterObjectClasses( attr, registries.getObjectClassRegistry() );
90 fail( "should not get here" );
91 }
92 catch ( LdapNamingException e )
93 {
94 assertEquals( ResultCodeEnum.OPERATIONS_ERROR, e.getResultCode() );
95 }
96
97 attr = new AttributeImpl( "objectClass" );
98 SchemaInterceptor.alterObjectClasses( attr );
99 assertEquals( 0, attr.size() );
100 }
101
102
103 public void testAlterObjectClassesNoAttrValue() throws NamingException
104 {
105 Attribute attr = new AttributeImpl( "objectClass" );
106 SchemaInterceptor.alterObjectClasses( attr );
107 assertEquals( 0, attr.size() );
108 }
109
110
111 public void testAlterObjectClassesTopAttrValue() throws NamingException
112 {
113 Attribute attr = new AttributeImpl( "objectClass", "top" );
114 SchemaInterceptor.alterObjectClasses( attr, registries.getObjectClassRegistry() );
115 assertEquals( 0, attr.size() );
116 }
117
118
119 public void testAlterObjectClassesInetOrgPersonAttrValue() throws NamingException
120 {
121 Attribute attr = new AttributeImpl( "objectClass", "organizationalPerson" );
122 SchemaInterceptor.alterObjectClasses( attr, registries.getObjectClassRegistry() );
123 assertEquals( 2, attr.size() );
124 assertTrue( attr.contains( "person" ) );
125 assertTrue( attr.contains( "organizationalPerson" ) );
126 }
127
128
129 public void testAlterObjectClassesOverlapping() throws NamingException
130 {
131 Attribute attr = new AttributeImpl( "objectClass", "organizationalPerson" );
132 attr.add( "residentialPerson" );
133 SchemaInterceptor.alterObjectClasses( attr, registries.getObjectClassRegistry() );
134 assertEquals( 3, attr.size() );
135 assertTrue( attr.contains( "person" ) );
136 assertTrue( attr.contains( "organizationalPerson" ) );
137 assertTrue( attr.contains( "residentialPerson" ) );
138 }
139
140
141 public void testAlterObjectClassesOverlappingAndDsa() throws NamingException
142 {
143 Attribute attr = new AttributeImpl( "objectClass", "organizationalPerson" );
144 attr.add( "residentialPerson" );
145 attr.add( "dSA" );
146 SchemaInterceptor.alterObjectClasses( attr, registries.getObjectClassRegistry() );
147 assertEquals( 5, attr.size() );
148 assertTrue( attr.contains( "person" ) );
149 assertTrue( attr.contains( "organizationalPerson" ) );
150 assertTrue( attr.contains( "residentialPerson" ) );
151 assertTrue( attr.contains( "dSA" ) );
152 assertTrue( attr.contains( "applicationEntity" ) );
153 }
154 */
155 }