1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.ldap.server.event;
18
19
20 import org.apache.ldap.server.AbstractAdminTestCase;
21
22 import javax.naming.NamingException;
23 import javax.naming.directory.*;
24 import javax.naming.event.*;
25 import java.util.List;
26 import java.util.ArrayList;
27 import java.util.EventObject;
28
29
30 /***
31 * Test cases for the event service.
32 *
33 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
34 * @version $Rev$
35 */
36 public class EventServiceTest extends AbstractAdminTestCase
37 {
38 /***
39 * Test to make sure NamingListener's are no longer registered
40 * after they are removed via the EventContex.removeNamingListener method.
41 */
42 public void testRemoveNamingListener() throws NamingException
43 {
44 TestListener listener = new TestListener();
45 EventDirContext ctx = ( EventDirContext ) super.sysRoot.lookup( "" );
46 ctx.addNamingListener( "", SearchControls.SUBTREE_SCOPE, listener );
47 Attributes testEntry = new BasicAttributes( "ou", "testentry", true );
48 Attribute objectClass = new BasicAttribute( "objectClass", "top" );
49 objectClass.add( "organizationalUnit" );
50 testEntry.put( objectClass );
51 ctx.createSubcontext( "ou=testentry", testEntry );
52
53 assertEquals( 1, listener.getEventRecords().size() );
54 EventRecord rec = ( EventRecord ) listener.getEventRecords().get( 0 );
55 assertEquals( "objectAdded", rec.method );
56 assertEquals( ctx, rec.event.getSource() );
57
58 ctx.removeNamingListener( listener );
59 ctx.destroySubcontext( "ou=testentry" );
60
61 assertEquals( 1, listener.getEventRecords().size() );
62 rec = ( EventRecord ) listener.getEventRecords().get( 0 );
63 assertEquals( "objectAdded", rec.method );
64 assertEquals( ctx, rec.event.getSource() );
65
66
67 ctx.createSubcontext( "ou=testentry", testEntry );
68 assertEquals( 1, listener.getEventRecords().size() );
69 rec = ( EventRecord ) listener.getEventRecords().get( 0 );
70 assertEquals( "objectAdded", rec.method );
71 assertEquals( ctx, rec.event.getSource() );
72 }
73
74
75 /***
76 * Test to make sure NamingListener's are no longer registered
77 * after the context used for registration is closed.
78 */
79 public void testContextClose() throws NamingException
80 {
81 TestListener listener = new TestListener();
82 EventDirContext ctx = ( EventDirContext ) super.sysRoot.lookup( "" );
83 ctx.addNamingListener( "", SearchControls.SUBTREE_SCOPE, listener );
84 Attributes testEntry = new BasicAttributes( "ou", "testentry", true );
85 Attribute objectClass = new BasicAttribute( "objectClass", "top" );
86 objectClass.add( "organizationalUnit" );
87 testEntry.put( objectClass );
88 ctx.createSubcontext( "ou=testentry", testEntry );
89
90 assertEquals( 1, listener.getEventRecords().size() );
91 EventRecord rec = ( EventRecord ) listener.getEventRecords().get( 0 );
92 assertEquals( "objectAdded", rec.method );
93 assertEquals( ctx, rec.event.getSource() );
94
95 ctx.close();
96 ctx = ( EventDirContext ) super.sysRoot.lookup( "" );
97 ctx.destroySubcontext( "ou=testentry" );
98
99 assertEquals( 1, listener.getEventRecords().size() );
100 rec = ( EventRecord ) listener.getEventRecords().get( 0 );
101 assertEquals( "objectAdded", rec.method );
102
103
104 ctx.createSubcontext( "ou=testentry", testEntry );
105 assertEquals( 1, listener.getEventRecords().size() );
106 rec = ( EventRecord ) listener.getEventRecords().get( 0 );
107 assertEquals( "objectAdded", rec.method );
108 }
109
110
111 public class TestListener implements ObjectChangeListener, NamespaceChangeListener
112 {
113 List events = new ArrayList();
114
115
116 public List getEventRecords()
117 {
118 return events;
119 }
120
121
122 public void objectChanged( NamingEvent event )
123 {
124 events.add( new EventRecord( "objectChanged", event ) );
125 }
126
127
128 public void namingExceptionThrown( NamingExceptionEvent event )
129 {
130 events.add( new EventRecord( "namingExceptionThrown", event ) );
131 }
132
133
134 public void objectAdded( NamingEvent event )
135 {
136 events.add( new EventRecord( "objectAdded", event ) );
137 }
138
139
140 public void objectRemoved( NamingEvent event )
141 {
142 events.add( new EventRecord( "objectRemoved", event ) );
143 }
144
145
146 public void objectRenamed( NamingEvent event )
147 {
148 events.add( new EventRecord( "objectRenamed", event ) );
149 }
150 }
151
152
153 public class EventRecord
154 {
155 String method;
156 EventObject event;
157
158 EventRecord( String method, EventObject event )
159 {
160 this.method = method;
161 this.event = event;
162 }
163 }
164 }