1 8 9 package test.mx4j.remote; 10 11 import java.util.HashMap ; 12 import java.util.Map ; 13 import javax.management.Notification ; 14 import javax.management.NotificationListener ; 15 import javax.management.remote.NotificationResult ; 16 17 import mx4j.remote.DefaultRemoteNotificationServerHandler; 18 import mx4j.remote.MX4JRemoteConstants; 19 import mx4j.remote.RemoteNotificationServerHandler; 20 import test.MX4JTestCase; 21 22 25 public class RemoteNotificationServerHandlerTest extends MX4JTestCase 26 { 27 public RemoteNotificationServerHandlerTest(String s) 28 { 29 super(s); 30 } 31 32 public void testFirstFetch() throws Exception  33 { 34 RemoteNotificationServerHandler handler = new DefaultRemoteNotificationServerHandler(null); 35 36 NotificationResult result = handler.fetchNotifications(-1, 10, 100); 38 39 assertEquals(result.getEarliestSequenceNumber(), 0); 40 assertEquals(result.getNextSequenceNumber(), 0); 41 assertNotNull(result.getTargetedNotifications()); 42 assertEquals(result.getTargetedNotifications().length, 0); 43 } 44 45 public void testNotificationMissBetweenAddAndFetch() throws Exception  46 { 47 RemoteNotificationServerHandler handler = new DefaultRemoteNotificationServerHandler(null); 48 49 NotificationListener listener = handler.getServerNotificationListener(); 51 Notification notification = new Notification ("dummy", this, 0); 52 Integer listenerID = new Integer (1); 53 listener.handleNotification(notification, listenerID); 54 55 NotificationResult result = handler.fetchNotifications(-1, 10, 100); 57 assertEquals(result.getEarliestSequenceNumber(), 0); 58 assertEquals(result.getNextSequenceNumber(), 1); 59 assertNotNull(result.getTargetedNotifications()); 60 assertEquals(result.getTargetedNotifications().length, 0); 61 62 listener.handleNotification(notification, listenerID); 64 65 result = handler.fetchNotifications(result.getNextSequenceNumber(), 10, 100); 67 assertEquals(result.getEarliestSequenceNumber(), 0); 68 assertEquals(result.getNextSequenceNumber(), 2); 69 assertNotNull(result.getTargetedNotifications()); 70 assertEquals(result.getTargetedNotifications().length, 1); 71 } 72 73 public void testBufferWithSmallCapacity() throws Exception  74 { 75 int bufferCapacity = 1; 76 Map environment = new HashMap (); 77 environment.put(MX4JRemoteConstants.NOTIFICATION_BUFFER_CAPACITY, new Integer (bufferCapacity)); 78 RemoteNotificationServerHandler handler = new DefaultRemoteNotificationServerHandler(environment); 79 80 NotificationListener listener = handler.getServerNotificationListener(); 82 Notification notification = new Notification ("dummy", this, 0); 83 Integer listenerID = new Integer (1); 84 for (int i = 0; i < bufferCapacity; ++i) listener.handleNotification(notification, listenerID); 85 86 NotificationResult result = handler.fetchNotifications(-1, bufferCapacity + 1, 100); 88 assertEquals(result.getEarliestSequenceNumber(), 0); 89 assertEquals(result.getNextSequenceNumber(), bufferCapacity); 90 assertNotNull(result.getTargetedNotifications()); 91 assertEquals(result.getTargetedNotifications().length, 0); 92 93 listener.handleNotification(notification, listenerID); 95 96 result = handler.fetchNotifications(result.getNextSequenceNumber(), bufferCapacity + 1, 100); 98 assertEquals(result.getEarliestSequenceNumber(), bufferCapacity); 99 assertEquals(result.getNextSequenceNumber(), bufferCapacity + 1); 100 assertNotNull(result.getTargetedNotifications()); 101 assertEquals(result.getTargetedNotifications().length, 1); 102 } 103 104 public void testPurgeNotifications() throws Exception  105 { 106 int distance = 2; 107 Map environment = new HashMap (); 108 environment.put(MX4JRemoteConstants.NOTIFICATION_PURGE_DISTANCE, new Integer (distance)); 109 RemoteNotificationServerHandler handler = new DefaultRemoteNotificationServerHandler(environment); 110 111 NotificationResult result = handler.fetchNotifications(-1, 10, 100); 113 114 NotificationListener listener = handler.getServerNotificationListener(); 116 Notification notification = new Notification ("dummy", this, 0); 117 Integer listenerID = new Integer (1); 118 int count = distance + 1; 119 for (int i = 0; i < count; ++i) listener.handleNotification(notification, listenerID); 120 121 result = handler.fetchNotifications(result.getNextSequenceNumber(), count + 1, 100); 123 assertEquals(result.getEarliestSequenceNumber(), 0); 124 assertEquals(result.getNextSequenceNumber(), count); 125 assertNotNull(result.getTargetedNotifications()); 126 assertEquals(result.getTargetedNotifications().length, count); 127 128 result = handler.fetchNotifications(result.getNextSequenceNumber(), count + 1, 100); 130 131 long oldEarliest = result.getEarliestSequenceNumber(); 133 result = handler.fetchNotifications(result.getNextSequenceNumber(), count + 1, 100); 134 if (oldEarliest >= result.getEarliestSequenceNumber()) fail(); 135 } 136 137 public void testPurgeNotificationsWithInitialNotificationMiss() throws Exception  138 { 139 int distance = 2; 140 Map environment = new HashMap (); 141 environment.put(MX4JRemoteConstants.NOTIFICATION_PURGE_DISTANCE, new Integer (distance)); 142 RemoteNotificationServerHandler handler = new DefaultRemoteNotificationServerHandler(environment); 143 144 NotificationListener listener = handler.getServerNotificationListener(); 146 Notification notification = new Notification ("dummy", this, 0); 147 Integer listenerID = new Integer (1); 148 int count = distance + 1; 149 for (int i = 0; i < count; ++i) listener.handleNotification(notification, listenerID); 150 151 NotificationResult result = handler.fetchNotifications(-1, count + 1, 100); 153 154 for (int i = 0; i < count; ++i) listener.handleNotification(notification, listenerID); 156 157 result = handler.fetchNotifications(result.getNextSequenceNumber(), count + 1, 100); 159 assertEquals(result.getEarliestSequenceNumber(), 0); 160 assertEquals(result.getNextSequenceNumber(), count + count); 161 assertNotNull(result.getTargetedNotifications()); 162 assertEquals(result.getTargetedNotifications().length, count); 163 164 long oldEarliest = result.getEarliestSequenceNumber(); 166 result = handler.fetchNotifications(result.getNextSequenceNumber(), count + 1, 100); 167 if (oldEarliest >= result.getEarliestSequenceNumber()) fail(); 168 } 169 170 public void testBufferOverflowWhileFetching() throws Exception  171 { 172 int bufferCapacity = 5; 173 Map environment = new HashMap (); 174 environment.put(MX4JRemoteConstants.NOTIFICATION_BUFFER_CAPACITY, new Integer (bufferCapacity)); 175 RemoteNotificationServerHandler handler = new DefaultRemoteNotificationServerHandler(environment); 176 177 NotificationResult result = handler.fetchNotifications(-1, bufferCapacity + 1, 100); 179 180 long count = bufferCapacity - 2; 182 NotificationListener listener = handler.getServerNotificationListener(); 183 Notification notification = new Notification ("dummy", this, 0); 184 Integer listenerID = new Integer (1); 185 for (int i = 0; i < count; ++i) listener.handleNotification(notification, listenerID); 186 187 result = handler.fetchNotifications(result.getNextSequenceNumber(), bufferCapacity + 1, 100); 189 assertEquals(result.getEarliestSequenceNumber(), 0); 190 assertEquals(result.getNextSequenceNumber(), count); 191 assertNotNull(result.getTargetedNotifications()); 192 assertEquals(result.getTargetedNotifications().length, count); 193 194 int overflow = 7; 200 long overflowCount = (bufferCapacity - count) + result.getNextSequenceNumber() + overflow; 203 for (int i = 0; i < overflowCount; ++i) listener.handleNotification(notification, listenerID); 204 result = handler.fetchNotifications(result.getNextSequenceNumber(), bufferCapacity + 1, 100); 205 206 assertEquals(count + overflow, result.getEarliestSequenceNumber()); 209 assertEquals(count + overflow + bufferCapacity, result.getNextSequenceNumber()); 210 assertNotNull(result.getTargetedNotifications()); 211 assertEquals(result.getTargetedNotifications().length, bufferCapacity); 212 } 213 } 214 | Popular Tags |