broker/ProtocolProcessor_CONNECT_Test: code formatter used

This commit is contained in:
Andreas Mager
2017-02-01 17:13:43 +01:00
parent 5206cc3df7
commit 5125132f23
@@ -13,6 +13,7 @@
* *
* You may elect to redistribute this code under either of these licenses. * You may elect to redistribute this code under either of these licenses.
*/ */
package io.moquette.spi.impl; package io.moquette.spi.impl;
import io.moquette.server.netty.MessageBuilder; import io.moquette.server.netty.MessageBuilder;
@@ -30,12 +31,10 @@ import io.netty.handler.codec.mqtt.MqttSubscribeMessage;
import io.netty.handler.codec.mqtt.MqttVersion; import io.netty.handler.codec.mqtt.MqttVersion;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import static io.moquette.spi.impl.NettyChannelAssertions.assertEqualsConnAck; import static io.moquette.spi.impl.NettyChannelAssertions.assertEqualsConnAck;
import static io.moquette.spi.impl.NettyChannelAssertions.assertEqualsSubAck; import static io.moquette.spi.impl.NettyChannelAssertions.assertEqualsSubAck;
import static io.netty.handler.codec.mqtt.MqttConnectReturnCode.*; import static io.netty.handler.codec.mqtt.MqttConnectReturnCode.*;
@@ -59,9 +58,7 @@ public class ProtocolProcessor_CONNECT_Test {
@Before @Before
public void setUp() throws InterruptedException { public void setUp() throws InterruptedException {
connMsg = MessageBuilder.connect() connMsg = MessageBuilder.connect().protocolVersion(MqttVersion.MQTT_3_1).cleanSession(true);
.protocolVersion(MqttVersion.MQTT_3_1)
.cleanSession(true);
m_session = new EmbeddedChannel(); m_session = new EmbeddedChannel();
@@ -82,8 +79,14 @@ public class ProtocolProcessor_CONNECT_Test {
subscriptions = new SubscriptionsStore(); subscriptions = new SubscriptionsStore();
subscriptions.init(m_sessionStore); subscriptions.init(m_sessionStore);
m_processor = new ProtocolProcessor(); m_processor = new ProtocolProcessor();
m_processor.init(subscriptions, m_messagesStore, m_sessionStore, m_mockAuthenticator, true, m_processor.init(
new PermitAllAuthorizator(), ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR); subscriptions,
m_messagesStore,
m_sessionStore,
m_mockAuthenticator,
true,
new PermitAllAuthorizator(),
ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR);
} }
// @Test // @Test
@@ -111,12 +114,8 @@ public class ProtocolProcessor_CONNECT_Test {
@Test @Test
public void testWill() { public void testWill() {
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).willFlag(true)
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .willTopic("topic").willMessage("Topic message").build();
.willFlag(true)
.willTopic("topic")
.willMessage("Topic message")
.build();
// Exercise // Exercise
// m_handler.setMessaging(mockedMessaging); // m_handler.setMessaging(mockedMessaging);
@@ -126,19 +125,16 @@ public class ProtocolProcessor_CONNECT_Test {
assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound()); assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound());
assertTrue("Connection is accepted and therefore should remain open.", m_session.isOpen()); assertTrue("Connection is accepted and therefore should remain open.", m_session.isOpen());
// TODO verify the call // TODO verify the call
/*verify(mockedMessaging).publish(eq("topic"), eq("Topic message".getBytes()), /*
any(AbstractMessage.QOSType.class), anyBoolean(), eq("123"), any(IoSession.class));*/ * verify(mockedMessaging).publish(eq("topic"), eq("Topic message".getBytes()),
* any(AbstractMessage.QOSType.class), anyBoolean(), eq("123"), any(IoSession.class));
*/
} }
@Test @Test
public void validAuthentication() { public void validAuthentication() {
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).hasUser().hasPassword()
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .username(ProtocolProcessorTest.TEST_USER).password(ProtocolProcessorTest.TEST_PWD).build();
.hasUser()
.hasPassword()
.username(ProtocolProcessorTest.TEST_USER)
.password(ProtocolProcessorTest.TEST_PWD)
.build();
// Exercise // Exercise
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
@@ -150,11 +146,8 @@ public class ProtocolProcessor_CONNECT_Test {
@Test @Test
public void noPasswdAuthentication() { public void noPasswdAuthentication() {
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).hasUser()
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .username(ProtocolProcessorTest.TEST_USER).build();
.hasUser()
.username(ProtocolProcessorTest.TEST_USER)
.build();
// Exercise // Exercise
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
@@ -166,13 +159,8 @@ public class ProtocolProcessor_CONNECT_Test {
@Test @Test
public void invalidAuthentication() { public void invalidAuthentication() {
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).hasUser().hasPassword()
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .username(ProtocolProcessorTest.TEST_USER + "_fake").password(ProtocolProcessorTest.TEST_PWD).build();
.hasUser()
.hasPassword()
.username(ProtocolProcessorTest.TEST_USER + "_fake")
.password(ProtocolProcessorTest.TEST_PWD)
.build();
// Exercise // Exercise
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
@@ -184,11 +172,15 @@ public class ProtocolProcessor_CONNECT_Test {
@Test @Test
public void prohibitAnonymousClient() { public void prohibitAnonymousClient() {
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).build();
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) m_processor.init(
.build(); subscriptions,
m_processor.init(subscriptions, m_messagesStore, m_sessionStore, m_mockAuthenticator, false, m_messagesStore,
new PermitAllAuthorizator(), ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR); m_sessionStore,
m_mockAuthenticator,
false,
new PermitAllAuthorizator(),
ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR);
// Exercise // Exercise
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
@@ -200,13 +192,16 @@ public class ProtocolProcessor_CONNECT_Test {
@Test @Test
public void prohibitAnonymousClient_providingUsername() { public void prohibitAnonymousClient_providingUsername() {
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).hasUser()
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .username(ProtocolProcessorTest.TEST_USER + "_fake").build();
.hasUser() m_processor.init(
.username(ProtocolProcessorTest.TEST_USER + "_fake") subscriptions,
.build(); m_messagesStore,
m_processor.init(subscriptions, m_messagesStore, m_sessionStore, m_mockAuthenticator, false, m_sessionStore,
new PermitAllAuthorizator(), ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR); m_mockAuthenticator,
false,
new PermitAllAuthorizator(),
ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR);
// Exercise // Exercise
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
@@ -218,11 +213,15 @@ public class ProtocolProcessor_CONNECT_Test {
@Test @Test
public void acceptAnonymousClient() { public void acceptAnonymousClient() {
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).build();
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) m_processor.init(
.build(); subscriptions,
m_processor.init(subscriptions, m_messagesStore, m_sessionStore, m_mockAuthenticator, true, m_messagesStore,
new PermitAllAuthorizator(), ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR); m_sessionStore,
m_mockAuthenticator,
true,
new PermitAllAuthorizator(),
ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR);
// Exercise // Exercise
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
@@ -234,14 +233,17 @@ public class ProtocolProcessor_CONNECT_Test {
@Test @Test
public void connectWithCleanSessionUpdateClientSession() throws InterruptedException { public void connectWithCleanSessionUpdateClientSession() throws InterruptedException {
m_processor.init(subscriptions, m_messagesStore, m_sessionStore, m_mockAuthenticator, true, m_processor.init(
new PermitAllAuthorizator(), ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR); subscriptions,
m_messagesStore,
m_sessionStore,
m_mockAuthenticator,
true,
new PermitAllAuthorizator(),
ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR);
// first connect with clean session true // first connect with clean session true
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).cleanSession(true).build();
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID)
.cleanSession(true)
.build();
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound()); assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound());
m_processor.processDisconnect(m_session); m_processor.processDisconnect(m_session);
@@ -249,10 +251,8 @@ public class ProtocolProcessor_CONNECT_Test {
// second connect with clean session false // second connect with clean session false
m_session = new EmbeddedChannel(); m_session = new EmbeddedChannel();
MqttConnectMessage secondConnMsg = MessageBuilder.connect() MqttConnectMessage secondConnMsg = MessageBuilder.connect().clientId(ProtocolProcessorTest.FAKE_CLIENT_ID)
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .protocolVersion(MqttVersion.MQTT_3_1).build();
.protocolVersion(MqttVersion.MQTT_3_1)
.build();
m_processor.processConnect(m_session, secondConnMsg); m_processor.processConnect(m_session, secondConnMsg);
assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound()); assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound());
@@ -268,23 +268,15 @@ public class ProtocolProcessor_CONNECT_Test {
@Test @Test
public void connectWithSameClientIDBadCredentialsDoesntDropExistingClient() { public void connectWithSameClientIDBadCredentialsDoesntDropExistingClient() {
// Connect a client1 // Connect a client1
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).hasUser().hasPassword()
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .username(ProtocolProcessorTest.TEST_USER).password(ProtocolProcessorTest.TEST_PWD).build();
.hasUser()
.hasPassword()
.username(ProtocolProcessorTest.TEST_USER)
.password(ProtocolProcessorTest.TEST_PWD)
.build();
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound()); assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound());
// create another connect same clientID but with bad credentials // create another connect same clientID but with bad credentials
MqttConnectMessage evilClientConnMsg = MessageBuilder.connect(). MqttConnectMessage evilClientConnMsg = MessageBuilder.connect().protocolVersion(MqttVersion.MQTT_3_1)
protocolVersion(MqttVersion.MQTT_3_1) .clientId(ProtocolProcessorTest.FAKE_CLIENT_ID).hasUser().username(ProtocolProcessorTest.EVIL_TEST_USER)
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .hasPassword().password(ProtocolProcessorTest.EVIL_TEST_PWD).build();
.hasUser().username(ProtocolProcessorTest.EVIL_TEST_USER)
.hasPassword().password(ProtocolProcessorTest.EVIL_TEST_PWD)
.build();
EmbeddedChannel evilSession = new EmbeddedChannel(); EmbeddedChannel evilSession = new EmbeddedChannel();
@@ -299,13 +291,10 @@ public class ProtocolProcessor_CONNECT_Test {
assertFalse(evilSession.isOpen()); assertFalse(evilSession.isOpen());
} }
@Test @Test
public void testConnAckContainsSessionPresentFlag() throws InterruptedException { public void testConnAckContainsSessionPresentFlag() throws InterruptedException {
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID)
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .protocolVersion(MqttVersion.MQTT_3_1_1).build();
.protocolVersion(MqttVersion.MQTT_3_1_1)
.build();
NettyUtils.clientID(m_session, ProtocolProcessorTest.FAKE_CLIENT_ID); NettyUtils.clientID(m_session, ProtocolProcessorTest.FAKE_CLIENT_ID);
NettyUtils.cleanSession(m_session, false); NettyUtils.cleanSession(m_session, false);
@@ -323,28 +312,25 @@ public class ProtocolProcessor_CONNECT_Test {
assertTrue("Connection is accepted and therefore should remain open.", firstReceiverSession.isOpen()); assertTrue("Connection is accepted and therefore should remain open.", firstReceiverSession.isOpen());
} }
@Test @Test
public void testMultipleReconnection() throws InterruptedException { public void testMultipleReconnection() throws InterruptedException {
// connect with clean a false and subscribe to a topic // connect with clean a false and subscribe to a topic
MqttConnectMessage msg = MessageBuilder.connect() MqttConnectMessage msg = MessageBuilder.connect().clientId(ProtocolProcessorTest.FAKE_CLIENT_ID)
.clientId(ProtocolProcessorTest.FAKE_CLIENT_ID) .protocolVersion(MqttVersion.MQTT_3_1_1).build();
.protocolVersion(MqttVersion.MQTT_3_1_1)
.build();
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound()); assertEqualsConnAck(CONNECTION_ACCEPTED, m_session.readOutbound());
assertTrue("Connection is accepted and therefore should remain open.", m_session.isOpen()); assertTrue("Connection is accepted and therefore should remain open.", m_session.isOpen());
// subscribe // subscribe
MqttSubscribeMessage subscribeMsg = MessageBuilder.subscribe() MqttSubscribeMessage subscribeMsg = MessageBuilder.subscribe()
.addSubscription(MqttQoS.AT_MOST_ONCE, ProtocolProcessorTest.FAKE_TOPIC) .addSubscription(MqttQoS.AT_MOST_ONCE, ProtocolProcessorTest.FAKE_TOPIC).messageId(10).build();
.messageId(10)
.build();
NettyUtils.clientID(m_session, ProtocolProcessorTest.FAKE_CLIENT_ID); NettyUtils.clientID(m_session, ProtocolProcessorTest.FAKE_CLIENT_ID);
NettyUtils.cleanSession(m_session, false); NettyUtils.cleanSession(m_session, false);
m_processor.processSubscribe(m_session, subscribeMsg); m_processor.processSubscribe(m_session, subscribeMsg);
Subscription expectedSubscription = new Subscription(ProtocolProcessorTest.FAKE_CLIENT_ID, ProtocolProcessorTest.FAKE_TOPIC, Subscription expectedSubscription = new Subscription(
ProtocolProcessorTest.FAKE_CLIENT_ID,
ProtocolProcessorTest.FAKE_TOPIC,
MqttQoS.AT_MOST_ONCE); MqttQoS.AT_MOST_ONCE);
assertTrue(subscriptions.contains(expectedSubscription)); assertTrue(subscriptions.contains(expectedSubscription));
assertEqualsSubAck(m_session.readOutbound()); assertEqualsSubAck(m_session.readOutbound());
@@ -367,18 +353,25 @@ public class ProtocolProcessor_CONNECT_Test {
public void testZeroByteClientIdWithoutCleanSession() { public void testZeroByteClientIdWithoutCleanSession() {
// Allow zero byte client ids // Allow zero byte client ids
m_processor = new ProtocolProcessor(); m_processor = new ProtocolProcessor();
m_processor.init(subscriptions, m_messagesStore, m_sessionStore, m_mockAuthenticator, true, true, m_processor.init(
new PermitAllAuthorizator(), ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR); subscriptions,
m_messagesStore,
m_sessionStore,
m_mockAuthenticator,
true,
true,
new PermitAllAuthorizator(),
ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR);
// Connect message without clean session set to true but client id is still null // Connect message without clean session set to true but client id is still null
MqttConnectMessage msg = MessageBuilder.connect() MqttConnectMessage msg = MessageBuilder.connect().clientId(null).protocolVersion(MqttVersion.MQTT_3_1_1)
.clientId(null)
.protocolVersion(MqttVersion.MQTT_3_1_1)
.build(); .build();
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
assertEqualsConnAck("Identifier should be rejected due to having clean session set to false.", assertEqualsConnAck(
CONNECTION_REFUSED_IDENTIFIER_REJECTED, m_session.readOutbound()); "Identifier should be rejected due to having clean session set to false.",
CONNECTION_REFUSED_IDENTIFIER_REJECTED,
m_session.readOutbound());
assertFalse("Connection should be closed by the broker.", m_session.isOpen()); assertFalse("Connection should be closed by the broker.", m_session.isOpen());
} }
@@ -387,19 +380,26 @@ public class ProtocolProcessor_CONNECT_Test {
public void testZeroByteClientIdWithCleanSession() { public void testZeroByteClientIdWithCleanSession() {
// Allow zero byte client ids // Allow zero byte client ids
m_processor = new ProtocolProcessor(); m_processor = new ProtocolProcessor();
m_processor.init(subscriptions, m_messagesStore, m_sessionStore, m_mockAuthenticator, true, true, m_processor.init(
new PermitAllAuthorizator(), ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR); subscriptions,
m_messagesStore,
m_sessionStore,
m_mockAuthenticator,
true,
true,
new PermitAllAuthorizator(),
ProtocolProcessorTest.NO_OBSERVERS_INTERCEPTOR);
// Connect message with clean session set to true and client id is null. // Connect message with clean session set to true and client id is null.
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(null).protocolVersion(MqttVersion.MQTT_3_1_1).cleanSession(true)
.clientId(null)
.protocolVersion(MqttVersion.MQTT_3_1_1)
.cleanSession(true)
.build(); .build();
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
assertEqualsConnAck("Connection should be accepted. A unique clientid should be generated" + assertEqualsConnAck(
" and clean session set to true.", CONNECTION_ACCEPTED, m_session.readOutbound()); "Connection should be accepted. A unique clientid should be generated"
+ " and clean session set to true.",
CONNECTION_ACCEPTED,
m_session.readOutbound());
assertTrue("Connection should be valid and open,", m_session.isOpen()); assertTrue("Connection should be valid and open,", m_session.isOpen());
} }
@@ -407,15 +407,14 @@ public class ProtocolProcessor_CONNECT_Test {
@Test @Test
public void testZeroByteClientIdNotAllowed() { public void testZeroByteClientIdNotAllowed() {
// Connect message with clean session set to true and client id is null. // Connect message with clean session set to true and client id is null.
MqttConnectMessage msg = connMsg MqttConnectMessage msg = connMsg.clientId(null).protocolVersion(MqttVersion.MQTT_3_1_1).cleanSession(true)
.clientId(null)
.protocolVersion(MqttVersion.MQTT_3_1_1)
.cleanSession(true)
.build(); .build();
m_processor.processConnect(m_session, msg); m_processor.processConnect(m_session, msg);
assertEqualsConnAck("Zero byte client identifiers are not allowed.", assertEqualsConnAck(
CONNECTION_REFUSED_IDENTIFIER_REJECTED, m_session.readOutbound()); "Zero byte client identifiers are not allowed.",
CONNECTION_REFUSED_IDENTIFIER_REJECTED,
m_session.readOutbound());
assertFalse("Connection should closed.", m_session.isOpen()); assertFalse("Connection should closed.", m_session.isOpen());
} }