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