Added QueueRepository implemented in memory and on H2
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user