private void prepareSUT() { mockAuthenticator = new MockAuthenticator(singleton(FAKE_CLIENT_ID), singletonMap(TEST_USER, TEST_PWD)); subscriptions = new CTrieSubscriptionDirectory(); ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository(); subscriptions.init(subscriptionsRepository); queueRepository = new MemoryQueueRepository(); final PermitAllAuthorizatorPolicy authorizatorPolicy = new PermitAllAuthorizatorPolicy(); final Authorizator permitAll = new Authorizator(authorizatorPolicy); sessionRegistry = new SessionRegistry(subscriptions, queueRepository, permitAll); sut = new PostOffice(subscriptions, new MemoryRetainedRepository(), sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR, permitAll); }
private void assertMessageIsRetained(String expectedTopicName, ByteBuf expectedPayload) { List<RetainedMessage> msgs = retainedRepository.retainedOnTopic(expectedTopicName); assertEquals(1, msgs.size()); RetainedMessage msg = msgs.get(0); assertEquals(ByteBufUtil.hexDump(expectedPayload), ByteBufUtil.hexDump(msg.getPayload())); } }
@Test public void testPublishWithEmptyPayloadClearRetainedStore() { connection.processConnect(connectMessage); ConnectionTestUtils.assertConnectAccepted(channel); this.retainedRepository.retain(new Topic(NEWS_TOPIC), MqttMessageBuilders.publish() .payload(ByteBufUtil.writeAscii(UnpooledByteBufAllocator.DEFAULT, "Hello world!")) .qos(AT_LEAST_ONCE) .build()); // Exercise final ByteBuf anyPayload = Unpooled.copiedBuffer("Any payload", Charset.defaultCharset()); sut.receivedPublishQos0(new Topic(NEWS_TOPIC), TEST_USER, FAKE_CLIENT_ID, anyPayload, true, MqttMessageBuilders.publish() .payload(anyPayload) .qos(MqttQoS.AT_MOST_ONCE) .retained(false) .topicName(NEWS_TOPIC).build()); // Verify assertTrue("QoS0 MUST clean retained message for topic", retainedRepository.isEmpty()); }
@Test public void cleanRetainedMessageStoreWhenPublishWithRetainedQos0IsReceived() { connection.processConnect(connectMessage); ConnectionTestUtils.assertConnectAccepted(channel); // publish a QoS1 retained message final ByteBuf anyPayload = Unpooled.copiedBuffer("Any payload", Charset.defaultCharset()); final MqttPublishMessage publishMsg = MqttMessageBuilders.publish() .payload(Unpooled.copiedBuffer("Any payload", Charset.defaultCharset())) .qos(MqttQoS.AT_LEAST_ONCE) .retained(true) .topicName(NEWS_TOPIC) .build(); sut.receivedPublishQos1(connection, new Topic(NEWS_TOPIC), TEST_USER, anyPayload, 1, true, publishMsg); assertMessageIsRetained(NEWS_TOPIC, anyPayload); // publish a QoS0 retained message // Exercise final ByteBuf qos0Payload = Unpooled.copiedBuffer("QoS0 payload", Charset.defaultCharset()); sut.receivedPublishQos0(new Topic(NEWS_TOPIC), TEST_USER, connection.getClientId(), qos0Payload, true, MqttMessageBuilders.publish() .payload(qos0Payload) .qos(MqttQoS.AT_MOST_ONCE) .retained(false) .topicName(NEWS_TOPIC).build()); // Verify assertTrue("Retained message for topic /news must be cleared", retainedRepository.isEmpty()); }
subscriptionsRepository = new MemorySubscriptionsRepository(); queueRepository = new MemoryQueueRepository(); retainedRepository = new MemoryRetainedRepository();
private void prepareSUT() { mockAuthenticator = new MockAuthenticator(singleton(FAKE_CLIENT_ID), singletonMap(TEST_USER, TEST_PWD)); subscriptions = new CTrieSubscriptionDirectory(); ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository(); subscriptions.init(subscriptionsRepository); queueRepository = new MemoryQueueRepository(); final PermitAllAuthorizatorPolicy authorizatorPolicy = new PermitAllAuthorizatorPolicy(); final Authorizator permitAll = new Authorizator(authorizatorPolicy); sessionRegistry = new SessionRegistry(subscriptions, queueRepository, permitAll); sut = new PostOffice(subscriptions, new MemoryRetainedRepository(), sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR, permitAll); }
private MQTTConnection createMQTTConnection(BrokerConfiguration config, Channel channel) { IAuthenticator mockAuthenticator = new MockAuthenticator(singleton(FAKE_CLIENT_ID), singletonMap(TEST_USER, TEST_PWD)); ISubscriptionsDirectory subscriptions = new CTrieSubscriptionDirectory(); ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository(); subscriptions.init(subscriptionsRepository); queueRepository = new MemoryQueueRepository(); final PermitAllAuthorizatorPolicy authorizatorPolicy = new PermitAllAuthorizatorPolicy(); final Authorizator permitAll = new Authorizator(authorizatorPolicy); sessionRegistry = new SessionRegistry(subscriptions, queueRepository, permitAll); final PostOffice postOffice = new PostOffice(subscriptions, new MemoryRetainedRepository(), sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR, permitAll); return new MQTTConnection(channel, config, mockAuthenticator, sessionRegistry, postOffice); }
private MQTTConnection createMQTTConnection(BrokerConfiguration config, Channel channel) { IAuthenticator mockAuthenticator = new MockAuthenticator(singleton(FAKE_CLIENT_ID), singletonMap(TEST_USER, TEST_PWD)); ISubscriptionsDirectory subscriptions = new CTrieSubscriptionDirectory(); ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository(); subscriptions.init(subscriptionsRepository); queueRepository = new MemoryQueueRepository(); final PermitAllAuthorizatorPolicy authorizatorPolicy = new PermitAllAuthorizatorPolicy(); final Authorizator permitAll = new Authorizator(authorizatorPolicy); sut = new SessionRegistry(subscriptions, queueRepository, permitAll); final PostOffice postOffice = new PostOffice(subscriptions, new MemoryRetainedRepository(), sut, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR, permitAll); return new MQTTConnection(channel, config, mockAuthenticator, sut, postOffice); }
@Test public void testSubscribedToNotAuthorizedTopic() { NettyUtils.userName(channel, FAKE_USER_NAME); IAuthorizatorPolicy prohibitReadOnNewsTopic = mock(IAuthorizatorPolicy.class); when(prohibitReadOnNewsTopic.canRead(eq(new Topic(NEWS_TOPIC)), eq(FAKE_USER_NAME), eq(FAKE_CLIENT_ID))) .thenReturn(false); sut = new PostOffice(subscriptions, new MemoryRetainedRepository(), sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR, new Authorizator(prohibitReadOnNewsTopic)); connection.processConnect(connectMessage); ConnectionTestUtils.assertConnectAccepted(channel); //Exercise MqttSubscribeMessage subscribe = MqttMessageBuilders.subscribe() .addSubscription(AT_MOST_ONCE, NEWS_TOPIC) .messageId(1) .build(); sut.subscribeClientToTopics(subscribe, FAKE_CLIENT_ID, FAKE_USER_NAME, connection); // Verify MqttSubAckMessage subAckMsg = channel.readOutbound(); verifyFailureQos(subAckMsg); }
@Before public void setUp() { connMsg = MqttMessageBuilders.connect().protocolVersion(MqttVersion.MQTT_3_1).cleanSession(true); mockAuthenticator = new MockAuthenticator(singleton(FAKE_CLIENT_ID), singletonMap(TEST_USER, TEST_PWD)); ISubscriptionsDirectory subscriptions = new CTrieSubscriptionDirectory(); ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository(); subscriptions.init(subscriptionsRepository); queueRepository = new MemoryQueueRepository(); final PermitAllAuthorizatorPolicy authorizatorPolicy = new PermitAllAuthorizatorPolicy(); final Authorizator permitAll = new Authorizator(authorizatorPolicy); sessionRegistry = new SessionRegistry(subscriptions, queueRepository, permitAll); postOffice = new PostOffice(subscriptions, new MemoryRetainedRepository(), sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR, permitAll); sut = createMQTTConnection(CONFIG); channel = (EmbeddedChannel) sut.channel; }
private SessionRegistry initPostOfficeAndSubsystems() { subscriptions = new CTrieSubscriptionDirectory(); ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository(); subscriptions.init(subscriptionsRepository); retainedRepository = new MemoryRetainedRepository(); queueRepository = new MemoryQueueRepository(); final PermitAllAuthorizatorPolicy authorizatorPolicy = new PermitAllAuthorizatorPolicy(); final Authorizator permitAll = new Authorizator(authorizatorPolicy); SessionRegistry sessionRegistry = new SessionRegistry(subscriptions, queueRepository, permitAll); sut = new PostOffice(subscriptions, retainedRepository, sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR, permitAll); return sessionRegistry; }
private SessionRegistry initPostOfficeAndSubsystems() { subscriptions = new CTrieSubscriptionDirectory(); ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository(); subscriptions.init(subscriptionsRepository); retainedRepository = new MemoryRetainedRepository(); queueRepository = new MemoryQueueRepository(); final PermitAllAuthorizatorPolicy authorizatorPolicy = new PermitAllAuthorizatorPolicy(); final Authorizator permitAll = new Authorizator(authorizatorPolicy); SessionRegistry sessionRegistry = new SessionRegistry(subscriptions, queueRepository, permitAll); sut = new PostOffice(subscriptions, retainedRepository, sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR, permitAll); return sessionRegistry; }