You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@directory.apache.org by Doan Tin Nghia <do...@gmail.com> on 2016/09/08 01:12:44 UTC
apacheds unit tests cannot execute ldif update statements
Hi all,
I am using
- api-ldap-client-api 1.0.0-RC1
- apacheds-core-integ, apacheds-server-integ (2.0.0-M23)
and facing 2 issues when trying to apply LDIF update statements to embedded
apacheds.
1. Both @ApplyLdifFiles and @ApplyLdifs cannot execute the general format
of LDIF update statements as:
dn: m-oid=2.5.6.9, ou=objectclasses, cn=core, ou=schema
changetype: modify
delete: m-must
m-must: member
-
add: m-may
m-may: member
Seems each operation must have 'dn' in the first line.
2. Modified entry will cause the entry deleted from schema registry(
SchemaObjectRegistry), e.g in my case
*action 1:* modify groupOfNames
dn: m-oid=2.5.6.9, ou=objectclasses, cn=core, ou=schema
changetype: modify
delete: m-must
m-must: member
*action 2:* add new object class that depend on groupOfNames
dn: m-oid=1.3.6.1.4.1.2552.2.2, ou=objectclasses, cn=Test, ou=schema
objectclass: metaObjectClass
objectclass: metaTop
objectclass: top
m-oid: 1.3.6.1.4.1.2552.2.2
m-name: TestObjectClass
m-description: Test Object class
m-supObjectClass: groupOfNames
m-must: givenName
Then I got exception:
Caused by: java.lang.NullPointerException: null
at org.apache.directory.api.ldap.model.schema.registries.
DefaultSchemaObjectRegistry.unregister(DefaultSchemaObjectRegistry.java:302)
at org.apache.directory.api.ldap.model.schema.registries.
DefaultObjectClassRegistry.unregister(DefaultObjectClassRegistry.java:190)
at org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager.
unregisterObjectClass(DefaultSchemaManager.java:2263)
at org.apache.directory.server.core.api.schema.registries.synchronizers.
ObjectClassSynchronizer.modify(ObjectClassSynchronizer.java:80)
at org.apache.directory.server.core.api.schema.registries.synchronizers.
RegistrySynchronizerAdaptor.modify(RegistrySynchronizerAdaptor.java:296)
at org.apache.directory.server.core.api.schema.SchemaPartition.modify(
SchemaPartition.java:400)
at org.apache.directory.server.core.shared.partition.
DefaultPartitionNexus.modify(DefaultPartitionNexus.java:491)
at org.apache.directory.server.core.api.interceptor.
BaseInterceptor$1.modify(BaseInterceptor.java:170)
at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(
BaseInterceptor.java:506)
at org.apache.directory.server.core.journal.JournalInterceptor.modify(
JournalInterceptor.java:229)
at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(
BaseInterceptor.java:506)
at org.apache.directory.server.core.changelog.ChangeLogInterceptor.modify(
ChangeLogInterceptor.java:222)
at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(
BaseInterceptor.java:506)
at org.apache.directory.server.core.trigger.TriggerInterceptor.modify(
TriggerInterceptor.java:370)
at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(
BaseInterceptor.java:506)
at org.apache.directory.server.core.event.EventInterceptor.
modify(EventInterceptor.java:282)
at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(
BaseInterceptor.java:506)
at org.apache.directory.server.core.subtree.SubentryInterceptor.modify(
SubentryInterceptor.java:1220)
at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(
BaseInterceptor.java:506)
at org.apache.directory.server.core.collective.
CollectiveAttributeInterceptor.modify(CollectiveAttributeInterceptor
.java:165)
at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(
BaseInterceptor.java:506)
at org.apache.directory.server.core.operational.
OperationalAttributeInterceptor.modify(OperationalAttributeIntercepto
r.java:449)
at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(
BaseInterceptor.java:506)
at org.apache.directory.server.core.schema.SchemaInterceptor.
modify(SchemaInterceptor.java:1206)
at org.apache.directory.server.core.api.interceptor.BaseInterceptor.next(
BaseInterceptor.java:506)
at org.apache.directory.server.core.exception.ExceptionInterceptor.modify(
ExceptionInterceptor.java:252)
....
My java class is:
RunWith(FrameworkRunner.class)
@CreateLdapServer(transports = {
@CreateTransport(port = 10489, protocol = "LDAP")
})
@CreateDS(
name = "LicenseServerDS",
enableChangeLog = false,
partitions =
{
@CreatePartition(
name = "myexample",
suffix = "dc=myexample,dc=com",
contextEntry = @ContextEntry(
entryLdif =
"dn: dc=myexample,dc=com\n" +
"dc: myexample\n" +
"objectClass: top\n" +
"objectClass: domain\n\n"))
})
@ApplyLdifs ( {
"dn: m-oid=2.5.6.9, ou=objectclasses, cn=core, ou=schema",
"changetype: modify",
"delete: m-must",
"m-must: member",
"-"
})
@ApplyLdifFiles({
"action2.ldif"
})
public class MyTest extends AbstractLdapTestUnit{
@Test
public void testCreateDS() throws Exception
{
SearchControls controls = new SearchControls();
controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
controls.setReturningAttributes( new String[]
{ "+", "*" } );
NamingEnumeration<SearchResult> res = getRootContext( getService()
).search( "", "(ObjectClass=*)", controls );
assertTrue( res.hasMore() );
while ( res.hasMoreElements() )
{
SearchResult result = ( SearchResult ) res.next();
System.out.println( result.getName() );
}
}
}
Any help is appreciated. Thanks
Re: apacheds unit tests cannot execute ldif update statements
Posted by Doan Tin Nghia <do...@gmail.com>.
I have a workaround as:
- Create custom directory service factory which be used when create a
directory service
e.g
@CreateDS(
name = "SampleDS",
factory = CustomDefaultDirectoryServiceFactory.class,
..
- Create own system schema ( copied from api-ldap-schema-data-*.jar and
modified some ldif files) and let API use it by setting:
System.setProperty("schema.resource.location", schemaDirectory);
I would greatly appreciate if any other ideas.
Thanks
On Thu, Sep 8, 2016 at 8:12 AM, Doan Tin Nghia <do...@gmail.com> wrote:
> Hi all,
>
> I am using
>
> - api-ldap-client-api 1.0.0-RC1
> - apacheds-core-integ, apacheds-server-integ (2.0.0-M23)
>
> and facing 2 issues when trying to apply LDIF update statements to
> embedded apacheds.
>
> 1. Both @ApplyLdifFiles and @ApplyLdifs cannot execute the general format
> of LDIF update statements as:
>
> dn: m-oid=2.5.6.9, ou=objectclasses, cn=core, ou=schema
> changetype: modify
> delete: m-must
> m-must: member
> -
> add: m-may
> m-may: member
>
> Seems each operation must have 'dn' in the first line.
>
> 2. Modified entry will cause the entry deleted from schema registry(
> SchemaObjectRegistry), e.g in my case
>
> *action 1:* modify groupOfNames
>
> dn: m-oid=2.5.6.9, ou=objectclasses, cn=core, ou=schema
> changetype: modify
> delete: m-must
> m-must: member
>
> *action 2:* add new object class that depend on groupOfNames
>
> dn: m-oid=1.3.6.1.4.1.2552.2.2, ou=objectclasses, cn=Test, ou=schema
> objectclass: metaObjectClass
> objectclass: metaTop
> objectclass: top
> m-oid: 1.3.6.1.4.1.2552.2.2
> m-name: TestObjectClass
> m-description: Test Object class
> m-supObjectClass: groupOfNames
> m-must: givenName
>
>
> Then I got exception:
>
> Caused by: java.lang.NullPointerException: null
> at org.apache.directory.api.ldap.model.schema.registries.Defaul
> tSchemaObjectRegistry.unregister(DefaultSchemaObjectRegistry.java:302)
> at org.apache.directory.api.ldap.model.schema.registries.Defaul
> tObjectClassRegistry.unregister(DefaultObjectClassRegistry.java:190)
> at org.apache.directory.api.ldap.schema.manager.impl.DefaultSch
> emaManager.unregisterObjectClass(DefaultSchemaManager.java:2263)
> at org.apache.directory.server.core.api.schema.registries.synch
> ronizers.ObjectClassSynchronizer.modify(ObjectClassSynchronizer.java:80)
> at org.apache.directory.server.core.api.schema.registries.synch
> ronizers.RegistrySynchronizerAdaptor.modify(RegistrySynchron
> izerAdaptor.java:296)
> at org.apache.directory.server.core.api.schema.SchemaPartition.
> modify(SchemaPartition.java:400)
> at org.apache.directory.server.core.shared.partition.DefaultPar
> titionNexus.modify(DefaultPartitionNexus.java:491)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor$1.modify(BaseInterceptor.java:170)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor.next(BaseInterceptor.java:506)
> at org.apache.directory.server.core.journal.JournalInterceptor.
> modify(JournalInterceptor.java:229)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor.next(BaseInterceptor.java:506)
> at org.apache.directory.server.core.changelog.ChangeLogIntercep
> tor.modify(ChangeLogInterceptor.java:222)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor.next(BaseInterceptor.java:506)
> at org.apache.directory.server.core.trigger.TriggerInterceptor.
> modify(TriggerInterceptor.java:370)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor.next(BaseInterceptor.java:506)
> at org.apache.directory.server.core.event.EventInterceptor.modi
> fy(EventInterceptor.java:282)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor.next(BaseInterceptor.java:506)
> at org.apache.directory.server.core.subtree.SubentryInterceptor
> .modify(SubentryInterceptor.java:1220)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor.next(BaseInterceptor.java:506)
> at org.apache.directory.server.core.collective.CollectiveAttrib
> uteInterceptor.modify(CollectiveAttributeInterceptor.java:165)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor.next(BaseInterceptor.java:506)
> at org.apache.directory.server.core.operational.OperationalAttr
> ibuteInterceptor.modify(OperationalAttributeInterceptor.java:449)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor.next(BaseInterceptor.java:506)
> at org.apache.directory.server.core.schema.SchemaInterceptor.mo
> dify(SchemaInterceptor.java:1206)
> at org.apache.directory.server.core.api.interceptor.BaseInterce
> ptor.next(BaseInterceptor.java:506)
> at org.apache.directory.server.core.exception.ExceptionIntercep
> tor.modify(ExceptionInterceptor.java:252)
> ....
>
> My java class is:
>
> RunWith(FrameworkRunner.class)
> @CreateLdapServer(transports = {
> @CreateTransport(port = 10489, protocol = "LDAP")
> })
>
> @CreateDS(
> name = "LicenseServerDS",
> enableChangeLog = false,
> partitions =
> {
> @CreatePartition(
> name = "myexample",
> suffix = "dc=myexample,dc=com",
> contextEntry = @ContextEntry(
> entryLdif =
> "dn: dc=myexample,dc=com\n" +
> "dc: myexample\n" +
> "objectClass: top\n" +
> "objectClass: domain\n\n"))
> })
>
> @ApplyLdifs ( {
> "dn: m-oid=2.5.6.9, ou=objectclasses, cn=core, ou=schema",
> "changetype: modify",
> "delete: m-must",
> "m-must: member",
> "-"
> })
> @ApplyLdifFiles({
> "action2.ldif"
> })
>
> public class MyTest extends AbstractLdapTestUnit{
> @Test
> public void testCreateDS() throws Exception
> {
> SearchControls controls = new SearchControls();
> controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
> controls.setReturningAttributes( new String[]
> { "+", "*" } );
>
> NamingEnumeration<SearchResult> res = getRootContext( getService()
> ).search( "", "(ObjectClass=*)", controls );
>
> assertTrue( res.hasMore() );
>
> while ( res.hasMoreElements() )
> {
> SearchResult result = ( SearchResult ) res.next();
>
> System.out.println( result.getName() );
> }
> }
> }
>
> Any help is appreciated. Thanks
>
>