@Test public void testSubscribe() { connection.processConnect(connectMessage); ConnectionTestUtils.assertConnectAccepted(channel); // Exercise & verify subscribe(channel, NEWS_TOPIC, AT_MOST_ONCE); }
@Test public void testDoubleSubscribe() { connection.processConnect(connectMessage); ConnectionTestUtils.assertConnectAccepted(channel); assertEquals("After CONNECT subscription MUST be empty", 0, subscriptions.size()); subscribe(channel, NEWS_TOPIC, AT_MOST_ONCE); assertEquals("After /news subscribe, subscription MUST contain it", 1, subscriptions.size()); //Exercise & verify subscribe(channel, NEWS_TOPIC, AT_MOST_ONCE); }
@Test public void testReceiveRetainedPublishRespectingSubscriptionQoSAndNotPublisher() { // publisher publish a retained message on topic /news connection.processConnect(connectMessage); ConnectionTestUtils.assertConnectAccepted(channel); final ByteBuf payload = Unpooled.copiedBuffer("Hello world!", Charset.defaultCharset()); final MqttPublishMessage retainedPubQoS1Msg = MqttMessageBuilders.publish() .payload(payload.retainedDuplicate()) .qos(MqttQoS.AT_LEAST_ONCE) .topicName(NEWS_TOPIC).build(); sut.receivedPublishQos1(connection, new Topic(NEWS_TOPIC), TEST_USER, payload, 1, true, retainedPubQoS1Msg); // subscriber connects subscribe to topic /news and receive the last retained message EmbeddedChannel subChannel = new EmbeddedChannel(); MQTTConnection subConn = createMQTTConnection(ALLOW_ANONYMOUS_AND_ZERO_BYTES_CLID, subChannel); subConn.processConnect(ConnectionTestUtils.buildConnect(SUBSCRIBER_ID)); ConnectionTestUtils.assertConnectAccepted(subChannel); subscribe(subConn, NEWS_TOPIC, MqttQoS.AT_MOST_ONCE); // Verify publish is received ConnectionTestUtils.verifyReceiveRetainedPublish(subChannel, NEWS_TOPIC, "Hello world!", MqttQoS.AT_MOST_ONCE); }
@Test public void testCleanSession_maintainClientSubscriptions() { connection.processConnect(connectMessage); ConnectionTestUtils.assertConnectAccepted(channel); assertEquals("After CONNECT subscription MUST be empty", 0, subscriptions.size()); subscribe(channel, NEWS_TOPIC, AT_MOST_ONCE); assertEquals("Subscribe MUST contain one subscription", 1, subscriptions.size()); connection.processDisconnect(null); assertEquals("Disconnection MUSTN'T clear subscriptions", 1, subscriptions.size()); EmbeddedChannel anotherChannel = new EmbeddedChannel(); MQTTConnection anotherConn = createMQTTConnection(ALLOW_ANONYMOUS_AND_ZERO_BYTES_CLID, anotherChannel); anotherConn.processConnect(ConnectionTestUtils.buildConnect(FAKE_CLIENT_ID)); ConnectionTestUtils.assertConnectAccepted(anotherChannel); assertEquals("After a reconnect, subscription MUST be still present", 1, subscriptions.size()); final ByteBuf payload = Unpooled.copiedBuffer("Hello world!", Charset.defaultCharset()); sut.receivedPublishQos0(new Topic(NEWS_TOPIC), TEST_USER, TEST_PWD, payload, false, MqttMessageBuilders.publish() .payload(payload.retainedDuplicate()) .qos(MqttQoS.AT_MOST_ONCE) .retained(false) .topicName(NEWS_TOPIC).build()); ConnectionTestUtils.verifyPublishIsReceived(anotherChannel, AT_MOST_ONCE, "Hello world!"); }