Skip to content

Commit

Permalink
Improve reliability of sensorthings MQTT tests
Browse files Browse the repository at this point in the history
* Upgrade to the released osgi-test 1.3.0
* Upgrade to Moquette 0.17.0
* Use Configuration annotations in SensorThings MQTT integration tests
* Update to non-deprecated configuration properties for Moquette

Signed-off-by: Tim Ward <timothyjward@apache.org>
  • Loading branch information
timothyjward committed Apr 2, 2024
1 parent 9dd8124 commit d694802
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 37 deletions.
21 changes: 11 additions & 10 deletions northbound/sensorthings/mqtt/integration-test.bndrun
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,16 @@
com.fasterxml.jackson.core.jackson-databind;version='[2.16.1,2.16.2)',\
com.fasterxml.jackson.datatype.jackson-datatype-jsr310;version='[2.16.1,2.16.2)',\
io.dropwizard.metrics.core;version='[4.2.19,4.2.20)',\
io.netty.buffer;version='[4.1.77,4.1.78)',\
io.netty.codec;version='[4.1.77,4.1.78)',\
io.netty.codec-http;version='[4.1.77,4.1.78)',\
io.netty.codec-mqtt;version='[4.1.77,4.1.78)',\
io.netty.common;version='[4.1.77,4.1.78)',\
io.netty.handler;version='[4.1.77,4.1.78)',\
io.netty.resolver;version='[4.1.77,4.1.78)',\
io.netty.transport;version='[4.1.77,4.1.78)',\
io.netty.transport-classes-epoll;version='[4.1.77,4.1.78)',\
io.netty.transport-native-unix-common;version='[4.1.77,4.1.78)',\
io.netty.buffer;version='[4.1.93,4.1.94)',\
io.netty.codec;version='[4.1.93,4.1.94)',\
io.netty.codec-http;version='[4.1.93,4.1.94)',\
io.netty.codec-mqtt;version='[4.1.93,4.1.94)',\
io.netty.common;version='[4.1.93,4.1.94)',\
io.netty.handler;version='[4.1.93,4.1.94)',\
io.netty.resolver;version='[4.1.93,4.1.94)',\
io.netty.transport;version='[4.1.93,4.1.94)',\
io.netty.transport-classes-epoll;version='[4.1.93,4.1.94)',\
io.netty.transport-native-unix-common;version='[4.1.93,4.1.94)',\
jul.to.slf4j;version='[2.0.11,2.0.12)',\
junit-jupiter-api;version='[5.10.1,5.10.2)',\
junit-jupiter-engine;version='[5.10.1,5.10.2)',\
Expand Down Expand Up @@ -66,6 +66,7 @@
org.osgi.service.typedevent;version='[1.0.0,1.0.1)',\
org.osgi.test.common;version='[1.3.0,1.3.1)',\
org.osgi.test.junit5;version='[1.3.0,1.3.1)',\
org.osgi.test.junit5.cm;version='[1.3.0,1.3.1)',\
org.osgi.util.converter;version='[1.0.9,1.0.10)',\
org.osgi.util.function;version='[1.1.0,1.1.1)',\
org.osgi.util.promise;version='[1.3.0,1.3.1)',\
Expand Down
2 changes: 1 addition & 1 deletion northbound/sensorthings/mqtt/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
<dependency>
<groupId>io.moquette</groupId>
<artifactId>moquette-broker</artifactId>
<version>0.16</version>
<version>0.17</version>
<exclusions>
<exclusion>
<groupId>io.dropwizard.metrics</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,16 @@
**********************************************************************/
package org.eclipse.sensinact.gateway.northbount.sensorthings.mqtt;

import static io.moquette.BrokerConstants.HOST_PROPERTY_NAME;
import static io.moquette.BrokerConstants.JKS_PATH_PROPERTY_NAME;
import static io.moquette.BrokerConstants.KEY_MANAGER_PASSWORD_PROPERTY_NAME;
import static io.moquette.BrokerConstants.KEY_STORE_PASSWORD_PROPERTY_NAME;
import static io.moquette.BrokerConstants.KEY_STORE_TYPE;
import static io.moquette.BrokerConstants.PORT_PROPERTY_NAME;
import static io.moquette.BrokerConstants.SSL_PORT_PROPERTY_NAME;
import static io.moquette.BrokerConstants.WEB_SOCKET_PORT_PROPERTY_NAME;
import static io.moquette.BrokerConstants.WSS_PORT_PROPERTY_NAME;
import static io.moquette.broker.config.IConfig.HOST_PROPERTY_NAME;
import static io.moquette.broker.config.IConfig.JKS_PATH_PROPERTY_NAME;
import static io.moquette.broker.config.IConfig.KEY_MANAGER_PASSWORD_PROPERTY_NAME;
import static io.moquette.broker.config.IConfig.KEY_STORE_PASSWORD_PROPERTY_NAME;
import static io.moquette.broker.config.IConfig.KEY_STORE_TYPE;
import static io.moquette.broker.config.IConfig.PERSISTENCE_ENABLED_PROPERTY_NAME;
import static io.moquette.broker.config.IConfig.PORT_PROPERTY_NAME;
import static io.moquette.broker.config.IConfig.SSL_PORT_PROPERTY_NAME;
import static io.moquette.broker.config.IConfig.WEB_SOCKET_PORT_PROPERTY_NAME;
import static io.moquette.broker.config.IConfig.WSS_PORT_PROPERTY_NAME;
import static io.netty.handler.codec.mqtt.MqttQoS.AT_MOST_ONCE;

import java.io.IOException;
Expand Down Expand Up @@ -141,6 +142,7 @@ void start(Config config) throws IOException {
if (config.websocket_enable() && config.websocket_port() >= 0) {
props.setProperty(WEB_SOCKET_PORT_PROPERTY_NAME, String.valueOf(config.websocket_port()));
}
props.setProperty(PERSISTENCE_ENABLED_PROPERTY_NAME, "false");

IConfig serverConfig = new MemoryConfig(props);

Expand Down Expand Up @@ -232,4 +234,9 @@ private void notifyListeners(String topic, Object data) {
}
}

@Override
public void onSessionLoopError(Throwable error) {
LOG.error("An unknown error occurred", error);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.fail;

import java.net.ConnectException;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand Down Expand Up @@ -59,9 +59,9 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.test.common.annotation.InjectService;
import org.osgi.test.common.annotation.Property;
import org.osgi.test.common.annotation.config.WithFactoryConfiguration;
import org.osgi.util.promise.Promise;
import org.osgi.util.promise.PromiseFactory;

Expand All @@ -72,6 +72,10 @@
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

@WithFactoryConfiguration(factoryPid = "sensiNact.northbound.sensorthings.mqtt", properties = {
@Property(key = "port", value = "13579"),
@Property(key = "websocket.enable", value = "false")
})
public class InsecureMqttNotificationsTest {

@InjectService
Expand All @@ -88,43 +92,38 @@ public class InsecureMqttNotificationsTest {

private ObjectMapper mapper;

private Configuration configuration;

@BeforeEach
void start(@InjectService ConfigurationAdmin cm) throws Exception {

configuration = cm.getConfiguration("sensiNact.northbound.sensorthings.mqtt", "?");
if (configuration.updateIfDifferent(new Hashtable<>(getConfig()))) {
Thread.sleep(2000);
}

void start() throws Exception {
client = new MqttAsyncClient(getMqttURL(), "test-client");
MqttConnectOptions options = new MqttConnectOptions();
options.setAutomaticReconnect(true);
options.setConnectionTimeout(500);
boolean connected = false;
for (int i = 0; i < 5; i++) {
try {
client.connect(options).waitForCompletion(1000);
connected = true;
} catch (MqttException e) {
e.printStackTrace();
if (e.getCause() instanceof ConnectException) {
Thread.sleep(500);
continue;
}
throw e;
}
break;
}

if(!connected) {
fail("Not connected to the MQTT broker");
}

listener = (t, m) -> messages.put(new String(m.getPayload(), StandardCharsets.UTF_8));

mapper = JsonMapper.builder().addModule(new JavaTimeModule())
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true).build();
}

protected Map<String, Object> getConfig() {
return Map.of("port", 13579, "websocket.enable", false);
}

protected String getMqttURL() {
return "tcp://127.0.0.1:13579";
}
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@
<!-- test dependency versions -->
<junit.version>5.10.1</junit.version>
<mockito.version>5.10.0</mockito.version>
<osgi.test.version>1.3.0-SNAPSHOT</osgi.test.version>
<osgi.test.version>1.3.0</osgi.test.version>

<!-- plugin dependency versions -->
<bnd.version>7.0.0</bnd.version>
Expand Down

0 comments on commit d694802

Please sign in to comment.