Switched from Moquette's MQTT codec to Netty's MQTT codec ones
This commit is contained in:
@@ -39,14 +39,21 @@ public class MessageCollector implements MqttCallback {
|
||||
private BlockingQueue<ReceivedMessage> m_messages = new LinkedBlockingQueue<>();
|
||||
private boolean m_connectionLost = false;
|
||||
|
||||
public MqttMessage getMessage(boolean checkElapsed) {
|
||||
if (!checkElapsed && m_messages.isEmpty()) {
|
||||
/**
|
||||
* Return the message from the queue if not empty, else return null with wait period.
|
||||
* */
|
||||
public MqttMessage getMessageImmediate() {
|
||||
if (m_messages.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return m_messages.take().message;
|
||||
} catch (InterruptedException e) {
|
||||
return null;
|
||||
}
|
||||
return getMessage(1);
|
||||
}
|
||||
|
||||
public MqttMessage getMessage(int delay) {
|
||||
public MqttMessage waitMessage(int delay) {
|
||||
try {
|
||||
ReceivedMessage msg = m_messages.poll(delay, TimeUnit.SECONDS);
|
||||
if (msg == null) {
|
||||
@@ -91,7 +98,7 @@ public class MessageCollector implements MqttCallback {
|
||||
@Override
|
||||
public void deliveryComplete(IMqttDeliveryToken token) {
|
||||
// try {
|
||||
// m_messages.offer(new ReceivedMessage(token.getMessage(), token.getTopics()[0]));
|
||||
// m_messages.offer(new ReceivedMessage(token.waitMessage(), token.getTopics()[0]));
|
||||
// } catch (MqttException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
|
||||
@@ -15,10 +15,11 @@
|
||||
*/
|
||||
package io.moquette.server;
|
||||
|
||||
import io.moquette.parser.proto.messages.AbstractMessage.QOSType;
|
||||
import io.moquette.parser.proto.messages.PublishMessage;
|
||||
import io.moquette.server.netty.MessageBuilder;
|
||||
import io.moquette.server.config.IConfig;
|
||||
import io.moquette.server.config.MemoryConfig;
|
||||
import io.netty.handler.codec.mqtt.MqttPublishMessage;
|
||||
import io.netty.handler.codec.mqtt.MqttQoS;
|
||||
import org.eclipse.paho.client.mqttv3.*;
|
||||
import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence;
|
||||
import org.junit.After;
|
||||
@@ -30,7 +31,6 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
@@ -88,13 +88,14 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
m_subscriber.subscribe(topic, qos);
|
||||
}
|
||||
|
||||
private void internalPublishToWithQosAndRetained(String topic, QOSType qos, boolean retained) {
|
||||
PublishMessage message = new PublishMessage();
|
||||
message.setTopicName(topic);
|
||||
message.setRetainFlag(retained);
|
||||
message.setQos(qos);
|
||||
message.setPayload(ByteBuffer.wrap("Hello world MQTT!!".getBytes()));
|
||||
m_server.internalPublish(message);
|
||||
private void internalPublishToWithQosAndRetained(String topic, MqttQoS qos, boolean retained) {
|
||||
MqttPublishMessage message = MessageBuilder.publish()
|
||||
.topicName(topic)
|
||||
.retained(retained)
|
||||
.qos(qos)
|
||||
.payload("Hello world MQTT!!".getBytes())
|
||||
.build();
|
||||
m_server.internalPublish(message, "INTRPUBL");
|
||||
}
|
||||
|
||||
private void connectNoCleanSession() throws Exception {
|
||||
@@ -109,13 +110,13 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
}
|
||||
|
||||
private void verifyNoMessageIsReceived() throws Exception {
|
||||
MqttMessage msg = m_callback.getMessage(false);
|
||||
MqttMessage msg = m_callback.getMessageImmediate();
|
||||
assertNull(msg);
|
||||
}
|
||||
|
||||
private void verifyMessageIsReceivedSuccessfully() throws Exception {
|
||||
//check in 2 seconds
|
||||
MqttMessage msg = m_callback.getMessage(2);
|
||||
MqttMessage msg = m_callback.waitMessage(2);
|
||||
assertNotNull(msg);
|
||||
assertEquals("Hello world MQTT!!", new String(msg.getPayload()));
|
||||
}
|
||||
@@ -125,7 +126,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
LOG.info("*** testClientSubscribeAfterNotRetainedQoS0IsSent ***");
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.MOST_ONE, false);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.AT_MOST_ONCE, false);
|
||||
subscribeToWithQos("/topic", 0);
|
||||
|
||||
//Verify
|
||||
@@ -139,7 +140,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
subscribeToWithQos("/topic", 0);
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.MOST_ONE, false);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.AT_MOST_ONCE, false);
|
||||
|
||||
//Verify
|
||||
verifyMessageIsReceivedSuccessfully();
|
||||
@@ -152,7 +153,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
subscribeToWithQos("/topic", 0);
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.MOST_ONE, true);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.AT_MOST_ONCE, true);
|
||||
|
||||
//Verify
|
||||
verifyMessageIsReceivedSuccessfully();
|
||||
@@ -163,7 +164,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
LOG.info("*** testClientSubscribeAfterRetainedQoS0IsSent ***");
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.MOST_ONE, true);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.AT_MOST_ONCE, true);
|
||||
//LOG.info("** post internalPublish **");
|
||||
subscribeToWithQos("/topic", 0);
|
||||
|
||||
@@ -178,7 +179,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
subscribeToWithQos("/topic", 1);
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.LEAST_ONE, false);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.AT_LEAST_ONCE, false);
|
||||
|
||||
//Verify
|
||||
verifyMessageIsReceivedSuccessfully();
|
||||
@@ -189,7 +190,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
LOG.info("*** testClientSubscribeAfterNotRetainedQoS1IsSent ***");
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.LEAST_ONE, false);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.AT_LEAST_ONCE, false);
|
||||
subscribeToWithQos("/topic", 1);
|
||||
|
||||
//Verify
|
||||
@@ -203,7 +204,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
subscribeToWithQos("/topic", 1);
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.LEAST_ONE, true);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.AT_LEAST_ONCE, true);
|
||||
|
||||
//Verify
|
||||
verifyMessageIsReceivedSuccessfully();
|
||||
@@ -214,8 +215,8 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
LOG.info("*** testClientSubscribeAfterRetainedQoS0IsSent ***");
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.LEAST_ONE, true);
|
||||
subscribeToWithQos("/topic", 1);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.AT_LEAST_ONCE, true);
|
||||
subscribeToWithQos("/topic", MqttQoS.AT_LEAST_ONCE.value());
|
||||
LOG.info("** After subscribe **");
|
||||
|
||||
//Verify
|
||||
@@ -230,7 +231,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
subscribeToWithQos("/topic", 2);
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.EXACTLY_ONCE, false);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.EXACTLY_ONCE, false);
|
||||
|
||||
//Verify
|
||||
verifyMessageIsReceivedSuccessfully();
|
||||
@@ -241,7 +242,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
LOG.info("*** testClientSubscribeAfterNotRetainedQoS2IsSent ***");
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.EXACTLY_ONCE, false);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.EXACTLY_ONCE, false);
|
||||
subscribeToWithQos("/topic", 2);
|
||||
|
||||
//Verify
|
||||
@@ -255,7 +256,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
subscribeToWithQos("/topic", 2);
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.EXACTLY_ONCE, true);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.EXACTLY_ONCE, true);
|
||||
|
||||
//Verify
|
||||
verifyMessageIsReceivedSuccessfully();
|
||||
@@ -266,7 +267,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
LOG.info("*** testClientSubscribeAfterRetainedQoS2IsSent ***");
|
||||
|
||||
//Exercise
|
||||
internalPublishToWithQosAndRetained("/topic", QOSType.EXACTLY_ONCE, true);
|
||||
internalPublishToWithQosAndRetained("/topic", MqttQoS.EXACTLY_ONCE, true);
|
||||
subscribeToWithQos("/topic", 2);
|
||||
|
||||
//Verify
|
||||
@@ -280,11 +281,11 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
subscribeToWithQos("foo", 0);
|
||||
m_subscriber.disconnect();
|
||||
|
||||
internalPublishToWithQosAndRetained("foo", QOSType.MOST_ONE, false);
|
||||
internalPublishToWithQosAndRetained("foo", MqttQoS.AT_MOST_ONCE, false);
|
||||
|
||||
//verifyMessageIsReceivedSuccessfully();
|
||||
//m_subscriber.receive(2, TimeUnit.MILLISECONDS);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertTrue(message == null);
|
||||
}
|
||||
|
||||
@@ -296,7 +297,7 @@ public class ServerIntegrationEmbeddedPublishTest {
|
||||
assertTrue(m_server.getSubscriptions().size() == 1);
|
||||
connectNoCleanSession();
|
||||
assertTrue(m_server.getSubscriptions().size() == 1);
|
||||
internalPublishToWithQosAndRetained("foo", QOSType.MOST_ONE, false);
|
||||
internalPublishToWithQosAndRetained("foo", MqttQoS.AT_MOST_ONCE, false);
|
||||
verifyMessageIsReceivedSuccessfully();
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -105,21 +105,21 @@ public class ServerIntegrationHazelcastHandlerInterceptorTest{
|
||||
m_listener.subscribe("/topic", 1);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS0".getBytes(), 0, false);
|
||||
MqttMessage messageQos0 = m_messagesCollector.getMessage(true);
|
||||
MqttMessage messageQos0 = m_messagesCollector.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS0", messageQos0.toString());
|
||||
assertEquals(0, messageQos0.getQos());
|
||||
|
||||
m_listener.subscribe("/topic", 1);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS1".getBytes(), 1, false);
|
||||
MqttMessage messageQos1 = m_messagesCollector.getMessage(true);
|
||||
MqttMessage messageQos1 = m_messagesCollector.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS1", messageQos1.toString());
|
||||
assertEquals(1, messageQos1.getQos());
|
||||
|
||||
m_listener.subscribe("/topic", 2);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(), 2, false);
|
||||
MqttMessage messageQos2 = m_messagesCollector.getMessage(true);
|
||||
MqttMessage messageQos2 = m_messagesCollector.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS2", messageQos2.toString());
|
||||
assertEquals(2, messageQos2.getQos());
|
||||
}
|
||||
|
||||
@@ -19,10 +19,7 @@ import io.moquette.server.config.IConfig;
|
||||
import io.moquette.server.config.MemoryConfig;
|
||||
import org.eclipse.paho.client.mqttv3.*;
|
||||
import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -176,7 +173,7 @@ public class ServerIntegrationPahoTest {
|
||||
m_client.connect(options);
|
||||
m_client.publish("/topic", "Test my payload".getBytes(), 0, false);
|
||||
//Ugly, we need to get self notified after the publish
|
||||
assertEquals("Test my payload", new String(subListener.getMessage(1).getPayload()));
|
||||
assertEquals("Test my payload", new String(subListener.waitMessage(1).getPayload()));
|
||||
|
||||
//close
|
||||
m_client.disconnect();
|
||||
@@ -231,7 +228,7 @@ public class ServerIntegrationPahoTest {
|
||||
m_messagesCollector.reinit();
|
||||
m_client.publish("/topic", "Test my payload".getBytes(), 0, false);
|
||||
|
||||
assertNull(m_messagesCollector.getMessage(false));
|
||||
assertNull(m_messagesCollector.getMessageImmediate());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -252,7 +249,7 @@ public class ServerIntegrationPahoTest {
|
||||
m_client.connect(options);
|
||||
m_client.publish("/topic", "Test my payload".getBytes(), 0, false);
|
||||
|
||||
assertNull(m_messagesCollector.getMessage(false));
|
||||
assertNull(m_messagesCollector.getMessageImmediate());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -264,7 +261,7 @@ public class ServerIntegrationPahoTest {
|
||||
m_client.disconnect();
|
||||
|
||||
//reconnect and publish
|
||||
MqttMessage message = m_messagesCollector.getMessage(true);
|
||||
MqttMessage message = m_messagesCollector.waitMessage(1);
|
||||
assertEquals("Hello MQTT", message.toString());
|
||||
assertEquals(1, message.getQos());
|
||||
}
|
||||
@@ -283,7 +280,7 @@ public class ServerIntegrationPahoTest {
|
||||
|
||||
m_client.connect(options);
|
||||
|
||||
assertEquals("Hello MQTT", m_messagesCollector.getMessage(true).toString());
|
||||
assertEquals("Hello MQTT", m_messagesCollector.waitMessage(1).toString());
|
||||
}
|
||||
|
||||
|
||||
@@ -303,7 +300,7 @@ public class ServerIntegrationPahoTest {
|
||||
publishFromAnotherClient("/topic", "Hello MQTT".getBytes(), 1);
|
||||
|
||||
//Verify that after a reconnection the client receive the message
|
||||
MqttMessage message = m_messagesCollector.getMessage(true);
|
||||
MqttMessage message = m_messagesCollector.waitMessage(1);
|
||||
assertNotNull(message);
|
||||
assertEquals("Hello MQTT", message.toString());
|
||||
}
|
||||
@@ -329,7 +326,7 @@ public class ServerIntegrationPahoTest {
|
||||
m_messagesCollector.reinit();
|
||||
m_client.connect(options);
|
||||
|
||||
MqttMessage message = m_messagesCollector.getMessage(true);
|
||||
MqttMessage message = m_messagesCollector.waitMessage(1);
|
||||
assertEquals("Hello MQTT", message.toString());
|
||||
assertEquals(2, message.getQos());
|
||||
}
|
||||
@@ -349,7 +346,7 @@ public class ServerIntegrationPahoTest {
|
||||
m_client.connect(options);
|
||||
|
||||
assertNotNull(m_messagesCollector);
|
||||
MqttMessage message = m_messagesCollector.getMessage(true);
|
||||
MqttMessage message = m_messagesCollector.waitMessage(1);
|
||||
assertNotNull(message);
|
||||
assertEquals("Hello MQTT", message.toString());
|
||||
}
|
||||
@@ -368,7 +365,7 @@ public class ServerIntegrationPahoTest {
|
||||
m_client.connect(options);
|
||||
|
||||
assertNotNull(m_messagesCollector);
|
||||
MqttMessage message = m_messagesCollector.getMessage(true);
|
||||
MqttMessage message = m_messagesCollector.waitMessage(1);
|
||||
assertNotNull(message);
|
||||
assertEquals("Hello MQTT 1", message.toString());
|
||||
m_client.disconnect();
|
||||
@@ -380,7 +377,7 @@ public class ServerIntegrationPahoTest {
|
||||
m_messagesCollector.reinit();
|
||||
m_client.connect(options);
|
||||
assertNotNull(m_messagesCollector);
|
||||
message = m_messagesCollector.getMessage(true);
|
||||
message = m_messagesCollector.waitMessage(1);
|
||||
assertNotNull(message);
|
||||
assertEquals("Hello MQTT 2", message.toString());
|
||||
}
|
||||
@@ -417,12 +414,12 @@ public class ServerIntegrationPahoTest {
|
||||
m_client.connect();
|
||||
m_client.publish("a/b", "Hello world MQTT!!".getBytes(), 2, false);
|
||||
|
||||
MqttMessage messageOnA = cbSubscriberA.getMessage(true);
|
||||
MqttMessage messageOnA = cbSubscriberA.waitMessage(1);
|
||||
assertEquals("Hello world MQTT!!", new String(messageOnA.getPayload()));
|
||||
assertEquals(1, messageOnA.getQos());
|
||||
subscriberA.disconnect();
|
||||
|
||||
MqttMessage messageOnB = cbSubscriberB.getMessage(true);
|
||||
MqttMessage messageOnB = cbSubscriberB.waitMessage(1);
|
||||
assertEquals("Hello world MQTT!!", new String(messageOnB.getPayload()));
|
||||
assertEquals(2, messageOnB.getQos());
|
||||
subscriberB.disconnect();
|
||||
@@ -466,7 +463,7 @@ public class ServerIntegrationPahoTest {
|
||||
assertFalse(clientForSubscribe1.isConnected());
|
||||
assertTrue(clientForSubscribe2.isConnected());
|
||||
LOG.info("Waiting to receive 1 sec from " + clientForSubscribe2.getClientId());
|
||||
MqttMessage messageOnB = cbSubscriber2.getMessage(true);
|
||||
MqttMessage messageOnB = cbSubscriber2.waitMessage(1);
|
||||
assertEquals("Hello", new String(messageOnB.getPayload()));
|
||||
}
|
||||
|
||||
@@ -495,7 +492,7 @@ public class ServerIntegrationPahoTest {
|
||||
|
||||
//Verify that the second subscriber client get notified and not the first.
|
||||
assertTrue(cbSubscriber1.connectionLost());
|
||||
assertEquals("Hello 2", new String(cbSubscriber2.getMessage(true).getPayload()));
|
||||
assertEquals("Hello 2", new String(cbSubscriber2.waitMessage(1).getPayload()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -533,7 +530,7 @@ public class ServerIntegrationPahoTest {
|
||||
m_publisher.publish("/topic", "Hello world MQTT!!-1".getBytes(), 1, false);
|
||||
|
||||
//read the first message and drop the connection
|
||||
MqttMessage msg = m_messagesCollector.getMessage(true);
|
||||
MqttMessage msg = m_messagesCollector.waitMessage(1);
|
||||
assertEquals("Hello world MQTT!!-1", new String(msg.getPayload()));
|
||||
m_client.disconnect();
|
||||
|
||||
@@ -542,10 +539,10 @@ public class ServerIntegrationPahoTest {
|
||||
|
||||
//reconnect and expect to receive the hello 2 message
|
||||
m_client.connect(options);
|
||||
msg = m_messagesCollector.getMessage(true);
|
||||
msg = m_messagesCollector.waitMessage(1);
|
||||
assertEquals("Hello world MQTT!!-2", new String(msg.getPayload()));
|
||||
|
||||
msg = m_messagesCollector.getMessage(true);
|
||||
msg = m_messagesCollector.waitMessage(1);
|
||||
assertEquals("Hello world MQTT!!-3", new String(msg.getPayload()));
|
||||
m_client.disconnect();
|
||||
}
|
||||
@@ -569,7 +566,7 @@ public class ServerIntegrationPahoTest {
|
||||
//reconnect and expect to receive the hello 2 message
|
||||
m_client.connect(options);
|
||||
m_client.subscribe("/topic", 1);
|
||||
MqttMessage msg = messagesCollector.getMessage(true);
|
||||
MqttMessage msg = messagesCollector.waitMessage(1);
|
||||
assertNotNull(msg);
|
||||
assertEquals("Hello world MQTT!!-1", new String(msg.getPayload()));
|
||||
}
|
||||
@@ -599,10 +596,10 @@ public class ServerIntegrationPahoTest {
|
||||
//subscriber reconnects
|
||||
m_client.connect(options);
|
||||
//subscriber should receive the 2 messages missed
|
||||
MqttMessage msg = messagesCollector.getMessage(1);
|
||||
MqttMessage msg = messagesCollector.waitMessage(1);
|
||||
assertNotNull(msg);
|
||||
assertEquals("Hello1", new String(msg.getPayload()));
|
||||
msg = messagesCollector.getMessage(1);
|
||||
msg = messagesCollector.waitMessage(1);
|
||||
assertNotNull(msg);
|
||||
assertEquals("Hello2", new String(msg.getPayload()));
|
||||
}
|
||||
@@ -629,11 +626,11 @@ public class ServerIntegrationPahoTest {
|
||||
m_publisher.publish("a/b", "Hello world MQTT!!".getBytes(), 1, false);
|
||||
|
||||
//reconnect and expect to receive the hello 2 message
|
||||
MqttMessage msg = messagesCollector.getMessage(1);
|
||||
MqttMessage msg = messagesCollector.waitMessage(1);
|
||||
assertEquals("Hello world MQTT!!", new String(msg.getPayload()));
|
||||
|
||||
//try to listen a second publish
|
||||
msg = messagesCollector.getMessage(1);
|
||||
msg = messagesCollector.waitMessage(1);
|
||||
assertNull(msg);
|
||||
}
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ public class ServerIntegrationQoSValidationTest {
|
||||
m_subscriber.subscribe("/topic", 0);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS0".getBytes(), 0, false);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS0", message.toString());
|
||||
assertEquals(0, message.getQos());
|
||||
}
|
||||
@@ -111,7 +111,7 @@ public class ServerIntegrationQoSValidationTest {
|
||||
m_subscriber.subscribe("/topic", 0);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS1".getBytes(), 1, false);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS1", message.toString());
|
||||
assertEquals(0, message.getQos());
|
||||
}
|
||||
@@ -122,7 +122,7 @@ public class ServerIntegrationQoSValidationTest {
|
||||
m_subscriber.subscribe("/topic", 0);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(), 2, false);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS2", message.toString());
|
||||
assertEquals(0, message.getQos());
|
||||
}
|
||||
@@ -133,7 +133,7 @@ public class ServerIntegrationQoSValidationTest {
|
||||
m_subscriber.subscribe("/topic", 1);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS0".getBytes(), 0, false);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS0", message.toString());
|
||||
assertEquals(0, message.getQos());
|
||||
}
|
||||
@@ -144,7 +144,7 @@ public class ServerIntegrationQoSValidationTest {
|
||||
m_subscriber.subscribe("/topic", 1);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS1".getBytes(), 1, false);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS1", message.toString());
|
||||
assertEquals(1, message.getQos());
|
||||
}
|
||||
@@ -155,7 +155,7 @@ public class ServerIntegrationQoSValidationTest {
|
||||
m_subscriber.subscribe("/topic", 1);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(), 2, false);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS2", message.toString());
|
||||
assertEquals(1, message.getQos());
|
||||
}
|
||||
@@ -166,7 +166,7 @@ public class ServerIntegrationQoSValidationTest {
|
||||
m_subscriber.subscribe("/topic", 2);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(), 0, false);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS2", message.toString());
|
||||
assertEquals(0, message.getQos());
|
||||
}
|
||||
@@ -177,7 +177,7 @@ public class ServerIntegrationQoSValidationTest {
|
||||
m_subscriber.subscribe("/topic", 2);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(), 1, false);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS2", message.toString());
|
||||
assertEquals(1, message.getQos());
|
||||
}
|
||||
@@ -188,7 +188,7 @@ public class ServerIntegrationQoSValidationTest {
|
||||
m_subscriber.subscribe("/topic", 2);
|
||||
|
||||
m_publisher.publish("/topic", "Hello world MQTT QoS2".getBytes(), 2, false);
|
||||
MqttMessage message = m_callback.getMessage(true);
|
||||
MqttMessage message = m_callback.waitMessage(1);
|
||||
assertEquals("Hello world MQTT QoS2", message.toString());
|
||||
assertEquals(2, message.getQos());
|
||||
}
|
||||
|
||||
+32
-13
@@ -15,12 +15,11 @@
|
||||
*/
|
||||
package io.moquette.server;
|
||||
|
||||
import io.moquette.parser.proto.messages.ConnectMessage;
|
||||
import io.moquette.parser.proto.messages.AbstractMessage;
|
||||
import io.moquette.parser.proto.messages.ConnAckMessage;
|
||||
import io.moquette.server.config.IConfig;
|
||||
import io.moquette.server.config.MemoryConfig;
|
||||
import io.moquette.testclient.Client;
|
||||
import io.netty.handler.codec.mqtt.*;
|
||||
import io.netty.handler.codec.mqtt.MqttMessage;
|
||||
import org.eclipse.paho.client.mqttv3.*;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@@ -30,7 +29,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
import static io.netty.handler.codec.mqtt.MqttConnectReturnCode.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
@@ -45,7 +44,7 @@ public class ServerLowlevelMessagesIntegrationTests {
|
||||
IMqttClient m_willSubscriber;
|
||||
MessageCollector m_messageCollector;
|
||||
IConfig m_config;
|
||||
AbstractMessage receivedMsg;
|
||||
MqttMessage receivedMsg;
|
||||
|
||||
protected void startServer() throws IOException {
|
||||
m_server = new Server();
|
||||
@@ -72,14 +71,17 @@ public class ServerLowlevelMessagesIntegrationTests {
|
||||
LOG.debug("After asked server to stop");
|
||||
IntegrationUtils.cleanPersistenceFile(m_config);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void elapseKeepAliveTime() throws InterruptedException {
|
||||
int keepAlive = 2; //secs
|
||||
ConnectMessage connectMessage = new ConnectMessage();
|
||||
|
||||
MqttConnectMessage connectMessage = createConnectMessage("FAKECLNT", keepAlive);
|
||||
|
||||
/*ConnectMessage connectMessage = new ConnectMessage();
|
||||
connectMessage.setProtocolVersion((byte) 3);
|
||||
connectMessage.setClientID("FAKECLNT");
|
||||
connectMessage.setKeepAlive(keepAlive);
|
||||
connectMessage.setKeepAlive(keepAlive);*/
|
||||
m_client.sendMessage(connectMessage);
|
||||
|
||||
//wait 2 times the keepAlive
|
||||
@@ -87,6 +89,23 @@ public class ServerLowlevelMessagesIntegrationTests {
|
||||
|
||||
assertTrue(m_client.isConnectionLost());
|
||||
}
|
||||
|
||||
private static MqttConnectMessage createConnectMessage(String clientID, int keepAlive) {
|
||||
MqttFixedHeader mqttFixedHeader = new MqttFixedHeader(MqttMessageType.CONNECT, false, MqttQoS.AT_MOST_ONCE, false, 0);
|
||||
MqttConnectVariableHeader mqttConnectVariableHeader =
|
||||
new MqttConnectVariableHeader(
|
||||
MqttVersion.MQTT_3_1.protocolName(),
|
||||
MqttVersion.MQTT_3_1.protocolLevel(),
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
1,
|
||||
false,
|
||||
true,
|
||||
keepAlive);
|
||||
MqttConnectPayload mqttConnectPayload = new MqttConnectPayload(clientID, null, null, null, null);
|
||||
return new MqttConnectMessage(mqttFixedHeader, mqttConnectVariableHeader, mqttConnectPayload);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWillMessageIsWiredOnClientKeepAliveExpiry() throws Exception {
|
||||
@@ -102,7 +121,7 @@ public class ServerLowlevelMessagesIntegrationTests {
|
||||
|
||||
//but after the 2 KEEP ALIVE timeout expires it gets fired,
|
||||
//NB it's 1,5 * KEEP_ALIVE so 3 secs and some millis to propagate the message
|
||||
MqttMessage msg = m_messageCollector.getMessage(5);
|
||||
org.eclipse.paho.client.mqttv3.MqttMessage msg = m_messageCollector.waitMessage(5);
|
||||
assertNotNull("the will message should be fired after keep alive!", msg);
|
||||
//the will message hasn't to be received before the elapsing of Keep Alive timeout
|
||||
assertTrue(System.currentTimeMillis() - connectTime > 3000);
|
||||
@@ -118,9 +137,9 @@ public class ServerLowlevelMessagesIntegrationTests {
|
||||
|
||||
this.receivedMsg = this.m_client.lastReceivedMessage();
|
||||
|
||||
assertTrue(receivedMsg instanceof ConnAckMessage);
|
||||
ConnAckMessage connAck = (ConnAckMessage) receivedMsg;
|
||||
assertEquals(ConnAckMessage.IDENTIFIER_REJECTED, connAck.getReturnCode());
|
||||
assertTrue(receivedMsg instanceof MqttConnAckMessage);
|
||||
MqttConnAckMessage connAck = (MqttConnAckMessage) receivedMsg;
|
||||
assertEquals(CONNECTION_REFUSED_IDENTIFIER_REJECTED, connAck.variableHeader().connectReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -136,7 +155,7 @@ public class ServerLowlevelMessagesIntegrationTests {
|
||||
m_client.close();
|
||||
|
||||
//Verify will testament is published
|
||||
MqttMessage receivedTestament = m_messageCollector.getMessage(1);
|
||||
org.eclipse.paho.client.mqttv3.MqttMessage receivedTestament = m_messageCollector.waitMessage(1);
|
||||
assertEquals(willTestamentMsg, new String(receivedTestament.getPayload()));
|
||||
m_willSubscriber.disconnect();
|
||||
}
|
||||
|
||||
@@ -112,10 +112,10 @@ public class ServerRestartIntegrationTest {
|
||||
m_publisher.publish("/topic", "Hello world MQTT!!".getBytes(), 1, false);
|
||||
|
||||
//read the messages
|
||||
MqttMessage msg = m_messageCollector.getMessage(true);
|
||||
MqttMessage msg = m_messageCollector.waitMessage(1);
|
||||
assertEquals("Hello world MQTT!!", new String(msg.getPayload()));
|
||||
//no more messages on the same topic will be received
|
||||
assertNull(m_messageCollector.getMessage(1));
|
||||
assertNull(m_messageCollector.waitMessage(1));
|
||||
}
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ public class ServerRestartIntegrationTest {
|
||||
|
||||
//Expected
|
||||
//the subscriber doesn't get notified (it's fully unsubscribed)
|
||||
assertNull(m_messageCollector.getMessage(1));
|
||||
assertNull(m_messageCollector.waitMessage(1));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -174,7 +174,7 @@ public class ServerRestartIntegrationTest {
|
||||
client.connect();
|
||||
client.subscribe(topic, 1);
|
||||
client.publish(topic, "Hello world MQTT!!".getBytes(), 0, false);
|
||||
MqttMessage msg = collector.getMessage(true);
|
||||
MqttMessage msg = collector.waitMessage(1);
|
||||
assertEquals("Hello world MQTT!!", new String(msg.getPayload()));
|
||||
return client;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user