|
29 | 29 | import org.eclipse.paho.client.mqttv3.MqttConnectOptions; |
30 | 30 | import org.eclipse.paho.client.mqttv3.MqttException; |
31 | 31 | import org.eclipse.paho.client.mqttv3.MqttMessage; |
| 32 | +import org.eclipse.paho.client.mqttv3.MqttClientPersistence; |
32 | 33 | import org.eclipse.paho.client.mqttv3.internal.wire.MqttPublish; |
33 | 34 | import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; |
34 | 35 | import org.eclipse.paho.client.mqttv3.test.logging.LoggingUtilities; |
@@ -312,6 +313,75 @@ public void testDeleteOldestBufferedMessages() throws Exception { |
312 | 313 | proxy.disableProxy(); |
313 | 314 | } |
314 | 315 |
|
| 316 | + |
| 317 | + /** |
| 318 | + * Tests that the buffer correctly handles persisted messages being buffered when the |
| 319 | + * buffer is full and deleteOldestBufferedMessage is set to true. |
| 320 | + */ |
| 321 | + @Test |
| 322 | + public void testDeleteOldestBufferedMessagesWithPersistance() throws Exception { |
| 323 | + String methodName = Utility.getMethodName(); |
| 324 | + LoggingUtilities.banner(log, cclass, methodName); |
| 325 | + int maxMessages = 10; |
| 326 | + |
| 327 | + // Tokens |
| 328 | + IMqttToken connectToken; |
| 329 | + |
| 330 | + MqttClientPersistence persistence = new MemoryPersistence(); |
| 331 | + |
| 332 | + // Client Options |
| 333 | + MqttConnectOptions options = new MqttConnectOptions(); |
| 334 | + options.setCleanSession(false); |
| 335 | + options.setAutomaticReconnect(false); |
| 336 | + MqttAsyncClient client = new MqttAsyncClient("tcp://localhost:" + proxy.getLocalPort(), methodName, persistence); |
| 337 | + DisconnectedBufferOptions disconnectedOpts = new DisconnectedBufferOptions(); |
| 338 | + disconnectedOpts.setBufferEnabled(true); |
| 339 | + // Set buffer to 100 to save time |
| 340 | + disconnectedOpts.setBufferSize(maxMessages); |
| 341 | + disconnectedOpts.setPersistBuffer(true); |
| 342 | + disconnectedOpts.setDeleteOldestMessages(true); |
| 343 | + client.setBufferOpts(disconnectedOpts); |
| 344 | + |
| 345 | + // Enable Proxy & Connect to server |
| 346 | + proxy.enableProxy(); |
| 347 | + connectToken = client.connect(options); |
| 348 | + connectToken.waitForCompletion(); |
| 349 | + boolean isConnected = client.isConnected(); |
| 350 | + log.info("First Connection isConnected: " + isConnected); |
| 351 | + Assert.assertTrue(isConnected); |
| 352 | + |
| 353 | + // Disable Proxy and cause disconnect |
| 354 | + proxy.disableProxy(); |
| 355 | + isConnected = client.isConnected(); |
| 356 | + log.info("Proxy Disconnect isConnected: " + isConnected); |
| 357 | + Assert.assertFalse(isConnected); |
| 358 | + |
| 359 | + int x; |
| 360 | + |
| 361 | + // Publish 10 messages |
| 362 | + for (x = 0; x < maxMessages; x++) { |
| 363 | + MqttMessage message = new MqttMessage(Integer.toString(x).getBytes()); |
| 364 | + client.publish(topicPrefix + methodName, message); |
| 365 | + } |
| 366 | + |
| 367 | + // Publish one message too many |
| 368 | + log.info("About to publish one message too many"); |
| 369 | + client.publish(topicPrefix + methodName, new MqttMessage(Integer.toString(x).getBytes())); |
| 370 | + |
| 371 | + Assert.assertFalse(persistence.containsKey("sb-1")); |
| 372 | + Assert.assertTrue(persistence.containsKey("sb-2")); |
| 373 | + Assert.assertTrue(persistence.containsKey("sb-11")); |
| 374 | + |
| 375 | + // Make sure that the message now at index 0 in the buffer is '1' |
| 376 | + // instead of '0' |
| 377 | + MqttMessage messageAt0 = client.getBufferedMessage(0); |
| 378 | + String msg = new String(messageAt0.getPayload()); |
| 379 | + Assert.assertEquals("1", msg); |
| 380 | + client.close(); |
| 381 | + client = null; |
| 382 | + proxy.disableProxy(); |
| 383 | + } |
| 384 | + |
315 | 385 | /** |
316 | 386 | * Tests that A message cannot be buffered when the buffer is full and |
317 | 387 | * deleteOldestBufferedMessage is set to false. |
|
0 commit comments