1
2
3
4
5
6
7
8
9
10
11 package org.mule.context.notification;
12
13 import org.mule.tck.AbstractMuleTestCase;
14
15 public class NotificationManagerTestCase extends AbstractMuleTestCase
16 {
17
18 protected Listener1 listener1;
19 protected Listener2 listener2;
20 protected ServerNotificationManager manager;
21
22 protected void doSetUp() throws Exception
23 {
24 listener1 = new Listener1();
25 listener2 = new Listener2();
26 manager = new ServerNotificationManager();
27 }
28
29 protected void registerDefaultEvents() throws ClassNotFoundException
30 {
31 manager.addInterfaceToType(Listener1.class, SubEvent1.class);
32 manager.addInterfaceToType(Listener2.class, Event2.class);
33 }
34
35 public void testNoListenersMeansNoEvents() throws ClassNotFoundException
36 {
37 registerDefaultEvents();
38 assertNoEventsEnabled();
39 }
40
41 protected void assertNoEventsEnabled()
42 {
43 assertFalse(manager.isNotificationEnabled(Event1.class));
44 assertFalse(manager.isNotificationEnabled(SubEvent1.class));
45 assertFalse(manager.isNotificationEnabled(SubSubEvent1.class));
46 assertFalse(manager.isNotificationEnabled(Event2.class));
47 assertFalse(manager.isNotificationEnabled(SubEvent2.class));
48 assertFalse(manager.isNotificationEnabled(Event3.class));
49 }
50
51 protected void registerDefaultListeners()
52 {
53 manager.addListenerSubscription(listener1, "id1");
54 manager.addListener(listener2);
55 }
56
57 public void testAssociationOfInterfacesAndEvents() throws ClassNotFoundException
58 {
59 registerDefaultEvents();
60 registerDefaultListeners();
61 assertStandardEventsEnabled();
62 }
63
64 protected void assertStandardEventsEnabled()
65 {
66 assertTrue("via subclass", manager.isNotificationEnabled(Event1.class));
67 assertTrue("direct", manager.isNotificationEnabled(SubEvent1.class));
68 assertTrue("via superclass", manager.isNotificationEnabled(SubSubEvent1.class));
69 assertTrue("direct", manager.isNotificationEnabled(Event2.class));
70 assertTrue("via superclass", manager.isNotificationEnabled(SubEvent2.class));
71 assertFalse("not specified at all", manager.isNotificationEnabled(Event3.class));
72 }
73
74 public void testDynamicResponseToDisablingEvents() throws ClassNotFoundException
75 {
76 registerDefaultEvents();
77 registerDefaultListeners();
78 assertStandardEventsEnabled();
79
80 manager.disableType(Event2.class);
81 assertTrue("via subclass", manager.isNotificationEnabled(Event1.class));
82 assertTrue("direct", manager.isNotificationEnabled(SubEvent1.class));
83 assertFalse("disabled", manager.isNotificationEnabled(Event2.class));
84 assertFalse("no listener", manager.isNotificationEnabled(SubEvent2.class));
85 assertFalse("not specified at all", manager.isNotificationEnabled(Event3.class));
86
87 manager.addInterfaceToType(Listener2.class, SubEvent2.class);
88 assertTrue("via subclass", manager.isNotificationEnabled(Event1.class));
89 assertTrue("direct", manager.isNotificationEnabled(SubEvent1.class));
90 assertFalse("disabled", manager.isNotificationEnabled(Event2.class));
91 assertFalse("disabled", manager.isNotificationEnabled(SubEvent2.class));
92 assertFalse("not specified at all", manager.isNotificationEnabled(Event3.class));
93 }
94
95 public void testDynamicResponseToDisablingInterfaces() throws ClassNotFoundException
96 {
97 registerDefaultEvents();
98 registerDefaultListeners();
99 assertStandardEventsEnabled();
100
101 manager.disableInterface(Listener1.class);
102 assertFalse("via subclass, but no listener", manager.isNotificationEnabled(Event1.class));
103 assertFalse("disabled", manager.isNotificationEnabled(SubEvent1.class));
104 assertFalse("via superclass, but no listener", manager.isNotificationEnabled(SubSubEvent1.class));
105 assertTrue("direct", manager.isNotificationEnabled(Event2.class));
106 assertTrue("via superclass", manager.isNotificationEnabled(SubEvent2.class));
107 assertFalse("not specified at all", manager.isNotificationEnabled(Event3.class));
108 }
109
110
111
112
113 public void testPolicyCaching() throws ClassNotFoundException
114 {
115 registerDefaultEvents();
116 registerDefaultListeners();
117 Policy policy = manager.getPolicy();
118 assertStandardEventsEnabled();
119 assertSame(policy, manager.getPolicy());
120 manager.disableType(Event2.class);
121 assertNotSame(policy, manager.getPolicy());
122 }
123
124 public void testDynamicManagerDecisions() throws ClassNotFoundException
125 {
126 registerDefaultEvents();
127 registerDefaultListeners();
128 manager.setNotificationDynamic(true);
129 OptimisedNotificationHandler decision = new OptimisedNotificationHandler(manager, Event2.class);
130 assertTrue(decision.isNotificationEnabled(Event2.class));
131 manager.disableType(Event2.class);
132 assertFalse(decision.isNotificationEnabled(Event2.class));
133 }
134
135
136
137
138 public void testNonDynamicManagerDecisions() throws ClassNotFoundException
139 {
140 registerDefaultEvents();
141 registerDefaultListeners();
142 OptimisedNotificationHandler decision = new OptimisedNotificationHandler(manager, Event2.class);
143 assertTrue(decision.isNotificationEnabled(Event2.class));
144 manager.disableType(Event2.class);
145 assertTrue(decision.isNotificationEnabled(Event2.class));
146 }
147
148 public void testNotification() throws ClassNotFoundException
149 {
150 registerDefaultEvents();
151 registerDefaultListeners();
152 assertNoListenersNotified();
153 manager.notifyListeners(new Event1());
154 assertNoListenersNotified();
155 manager.notifyListeners(new SubEvent1());
156 assertNoListenersNotified();
157 manager.notifyListeners(new Event1("id1"));
158 assertNoListenersNotified();
159 manager.notifyListeners(new SubSubEvent1("id1"));
160 assertTrue(listener1.isNotified());
161 assertFalse(listener2.isNotified());
162 manager.notifyListeners(new Event2());
163 assertTrue(listener1.isNotified());
164 assertTrue(listener2.isNotified());
165 }
166
167 protected void assertNoListenersNotified()
168 {
169 assertFalse(listener1.isNotified());
170 assertFalse(listener2.isNotified());
171 }
172
173 }