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