Added QueueRepository implemented in memory and on H2

This commit is contained in:
andsel
2018-11-22 21:51:16 +01:00
parent 1141e9f7a1
commit c4d928bbd7
22 changed files with 89 additions and 214 deletions
@@ -52,6 +52,7 @@ public class MQTTConnectionConnectTest {
private static final BrokerConfiguration CONFIG = new BrokerConfiguration(true, true, false);
private IAuthenticator mockAuthenticator;
private PostOffice postOffice;
private MemoryQueueRepository queueRepository;
@Before
public void setUp() {
@@ -62,8 +63,9 @@ public class MQTTConnectionConnectTest {
ISubscriptionsDirectory subscriptions = new CTrieSubscriptionDirectory();
ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository();
subscriptions.init(subscriptionsRepository);
queueRepository = new MemoryQueueRepository();
sessionRegistry = new SessionRegistry(subscriptions, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
sessionRegistry = new SessionRegistry(subscriptions, queueRepository);
postOffice = new PostOffice(subscriptions, new PermitAllAuthorizatorPolicy(), new MemoryRetainedRepository(),
sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
@@ -45,6 +45,7 @@ public class MQTTConnectionPublishTest {
private EmbeddedChannel channel;
private SessionRegistry sessionRegistry;
private MqttMessageBuilders.ConnectBuilder connMsg;
private MemoryQueueRepository queueRepository;
@Before
public void setUp() {
@@ -67,8 +68,9 @@ public class MQTTConnectionPublishTest {
ISubscriptionsDirectory subscriptions = new CTrieSubscriptionDirectory();
ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository();
subscriptions.init(subscriptionsRepository);
queueRepository = new MemoryQueueRepository();
sessionRegistry = new SessionRegistry(subscriptions, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
sessionRegistry = new SessionRegistry(subscriptions, queueRepository);
final PostOffice postOffice = new PostOffice(subscriptions, new PermitAllAuthorizatorPolicy(),
new MemoryRetainedRepository(), sessionRegistry,
ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
@@ -54,6 +54,7 @@ public class PostOfficeInternalPublishTest {
private static final BrokerConfiguration ALLOW_ANONYMOUS_AND_ZERO_BYTES_CLID =
new BrokerConfiguration(true, true, false);
private MemoryRetainedRepository retainedRepository;
private MemoryQueueRepository queueRepository;
@Before
public void setUp() {
@@ -82,9 +83,9 @@ public class PostOfficeInternalPublishTest {
ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository();
subscriptions.init(subscriptionsRepository);
retainedRepository = new MemoryRetainedRepository();
queueRepository = new MemoryQueueRepository();
SessionRegistry sessionRegistry = new SessionRegistry(subscriptions,
ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
SessionRegistry sessionRegistry = new SessionRegistry(subscriptions, queueRepository);
sut = new PostOffice(subscriptions, new PermitAllAuthorizatorPolicy(), retainedRepository, sessionRegistry,
ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
return sessionRegistry;
@@ -64,6 +64,7 @@ public class PostOfficePublishTest {
static final BrokerConfiguration ALLOW_ANONYMOUS_AND_ZERO_BYTES_CLID =
new BrokerConfiguration(true, true, false);
private MemoryRetainedRepository retainedRepository;
private MemoryQueueRepository queueRepository;
@Before
public void setUp() {
@@ -89,9 +90,9 @@ public class PostOfficePublishTest {
ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository();
subscriptions.init(subscriptionsRepository);
retainedRepository = new MemoryRetainedRepository();
queueRepository = new MemoryQueueRepository();
SessionRegistry sessionRegistry = new SessionRegistry(subscriptions,
ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
SessionRegistry sessionRegistry = new SessionRegistry(subscriptions, queueRepository);
sut = new PostOffice(subscriptions, new PermitAllAuthorizatorPolicy(), retainedRepository, sessionRegistry,
ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
return sessionRegistry;
@@ -65,6 +65,7 @@ public class PostOfficeSubscribeTest {
private IAuthenticator mockAuthenticator;
private SessionRegistry sessionRegistry;
public static final BrokerConfiguration CONFIG = new BrokerConfiguration(true, true, false);
private MemoryQueueRepository queueRepository;
@Before
public void setUp() {
@@ -87,8 +88,9 @@ public class PostOfficeSubscribeTest {
subscriptions = new CTrieSubscriptionDirectory();
ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository();
subscriptions.init(subscriptionsRepository);
queueRepository = new MemoryQueueRepository();
sessionRegistry = new SessionRegistry(subscriptions, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
sessionRegistry = new SessionRegistry(subscriptions, queueRepository);
sut = new PostOffice(subscriptions, new PermitAllAuthorizatorPolicy(), new MemoryRetainedRepository(),
sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
}
@@ -56,6 +56,7 @@ public class PostOfficeUnsubscribeTest {
private IAuthenticator mockAuthenticator;
private SessionRegistry sessionRegistry;
public static final BrokerConfiguration CONFIG = new BrokerConfiguration(true, true, false);
private MemoryQueueRepository queueRepository;
@Before
public void setUp() {
@@ -78,8 +79,9 @@ public class PostOfficeUnsubscribeTest {
subscriptions = new CTrieSubscriptionDirectory();
ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository();
subscriptions.init(subscriptionsRepository);
queueRepository = new MemoryQueueRepository();
sessionRegistry = new SessionRegistry(subscriptions, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
sessionRegistry = new SessionRegistry(subscriptions, queueRepository);
sut = new PostOffice(subscriptions, new PermitAllAuthorizatorPolicy(), new MemoryRetainedRepository(),
sessionRegistry, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
}
@@ -47,6 +47,7 @@ public class SessionRegistryTest {
private MqttMessageBuilders.ConnectBuilder connMsg;
private static final BrokerConfiguration ALLOW_ANONYMOUS_AND_ZEROBYTE_CLIENT_ID =
new BrokerConfiguration(true, true, false);
private MemoryQueueRepository queueRepository;
@Before
public void setUp() {
@@ -67,8 +68,9 @@ public class SessionRegistryTest {
ISubscriptionsDirectory subscriptions = new CTrieSubscriptionDirectory();
ISubscriptionsRepository subscriptionsRepository = new MemorySubscriptionsRepository();
subscriptions.init(subscriptionsRepository);
queueRepository = new MemoryQueueRepository();
sut = new SessionRegistry(subscriptions, ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
sut = new SessionRegistry(subscriptions, queueRepository);
final PostOffice postOffice = new PostOffice(subscriptions, new PermitAllAuthorizatorPolicy(),
new MemoryRetainedRepository(), sut,
ConnectionTestUtils.NO_OBSERVERS_INTERCEPTOR);
@@ -0,0 +1,113 @@
/*
* Copyright (c) 2012-2018 The original author or authors
* ------------------------------------------------------
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package io.moquette.persistence;
import io.moquette.BrokerConstants;
import org.h2.mvstore.MVStore;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import java.io.File;
import static org.junit.Assert.*;
public class H2PersistentQueueTest {
private MVStore mvStore;
@Before
public void setUp() {
this.mvStore = new MVStore.Builder()
.fileName(BrokerConstants.DEFAULT_PERSISTENT_PATH)
.autoCommitDisabled()
.open();
}
@After
public void tearDown() {
File dbFile = new File(BrokerConstants.DEFAULT_PERSISTENT_PATH);
if (dbFile.exists()) {
dbFile.delete();
}
assertFalse(dbFile.exists());
}
@Test
public void testAdd() {
H2PersistentQueue<String> sut = new H2PersistentQueue<>(this.mvStore, "test");
sut.add("Hello");
sut.add("world");
assertEquals("Hello", sut.peek());
assertEquals("Hello", sut.peek());
assertEquals("peek just return elements, doesn't remove them", 2, sut.size());
}
@Test
public void testPoll() {
H2PersistentQueue<String> sut = new H2PersistentQueue<>(this.mvStore, "test");
sut.add("Hello");
sut.add("world");
assertEquals("Hello", sut.poll());
assertEquals("world", sut.poll());
assertTrue("after poll 2 elements inserted before, should be empty", sut.isEmpty());
}
@Ignore
@Test
public void testPerformance() {
H2PersistentQueue<String> sut = new H2PersistentQueue<>(this.mvStore, "test");
int numIterations = 10000000;
for (int i = 0; i < numIterations; i++) {
sut.add("Hello");
}
mvStore.commit();
for (int i = 0; i < numIterations; i++) {
assertEquals("Hello", sut.poll());
}
assertTrue("should be empty", sut.isEmpty());
}
@Test
public void testReloadFromPersistedState() {
H2PersistentQueue<String> before = new H2PersistentQueue<>(this.mvStore, "test");
before.add("Hello");
before.add("crazy");
before.add("world");
assertEquals("Hello", before.poll());
this.mvStore.commit();
this.mvStore.close();
this.mvStore = new MVStore.Builder()
.fileName(BrokerConstants.DEFAULT_PERSISTENT_PATH)
.autoCommitDisabled()
.open();
//now reload the persisted state
H2PersistentQueue<String> after = new H2PersistentQueue<>(this.mvStore, "test");
assertEquals("crazy", after.poll());
assertEquals("world", after.poll());
assertTrue("should be empty", after.isEmpty());
}
}