Fix disabled integration tests (#8609)

* Fix disabled integration tests

Fixes and enables:

* org.openhab.binding.mqtt.homeassistant.tests
* org.openhab.binding.mqtt.homie.tests
* org.openhab.io.mqttembeddedbroker.tests

Fixes #8537 
* Address review comment

Signed-off-by: Wouter Born <github@maindrain.net>
This commit is contained in:
Wouter Born
2020-09-29 23:05:39 +02:00
committed by GitHub
parent 831eaeb026
commit d72a077ba9
15 changed files with 117 additions and 92 deletions

View File

@@ -9,6 +9,10 @@ Fragment-Host: org.openhab.binding.mqtt.homeassistant
bnd.identity;id='org.openhab.core.thing.xml',\
bnd.identity;id='org.openhab.io.mqttembeddedbroker'
# We would like to use the "volatile" storage only
-runblacklist: \
bnd.identity;id='org.openhab.core.storage.json'
#
# done
#
@@ -83,6 +87,7 @@ Fragment-Host: org.openhab.binding.mqtt.homeassistant
org.openhab.core.transform;version='[3.0.0,3.0.1)',\
org.openhab.io.mqttembeddedbroker;version='[3.0.0,3.0.1)',\
org.opentest4j;version='[1.2.0,1.2.1)',\
org.reactivestreams.reactive-streams;version='[1.0.2,1.0.3)'
org.reactivestreams.reactive-streams;version='[1.0.2,1.0.3)',\
moquette-broker;version='[0.13.0,0.13.1)'
-runvm: -Dio.netty.noUnsafe=true

View File

@@ -82,7 +82,6 @@
<groupId>com.h2database</groupId>
<artifactId>h2-mvstore</artifactId>
<version>1.4.199</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
@@ -99,7 +98,6 @@
<artifactId>netty-handler</artifactId>
<version>${netty.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -26,6 +26,8 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -49,26 +51,26 @@ import com.google.gson.GsonBuilder;
*
* @author David Graeff - Initial contribution
*/
@NonNullByDefault
public class DiscoverComponentsTest extends JavaOSGiTest {
private AutoCloseable mocksCloseable;
private @NonNullByDefault({}) AutoCloseable mocksCloseable;
private @Mock MqttBrokerConnection connection;
private @Mock ComponentDiscovered discovered;
private @Mock TransformationServiceProvider transformationServiceProvider;
private @Mock ChannelStateUpdateListener channelStateUpdateListener;
private @Mock AvailabilityTracker availabilityTracker;
private @Mock @NonNullByDefault({}) MqttBrokerConnection connection;
private @Mock @NonNullByDefault({}) ComponentDiscovered discovered;
private @Mock @NonNullByDefault({}) TransformationServiceProvider transformationServiceProvider;
private @Mock @NonNullByDefault({}) ChannelStateUpdateListener channelStateUpdateListener;
private @Mock @NonNullByDefault({}) AvailabilityTracker availabilityTracker;
@BeforeEach
public void beforeEach() {
mocksCloseable = openMocks(this);
CompletableFuture<Void> voidFutureComplete = new CompletableFuture<>();
CompletableFuture<@Nullable Void> voidFutureComplete = new CompletableFuture<>();
voidFutureComplete.complete(null);
doReturn(voidFutureComplete).when(connection).unsubscribeAll();
doReturn(CompletableFuture.completedFuture(true)).when(connection).subscribe(any(), any());
doReturn(CompletableFuture.completedFuture(true)).when(connection).unsubscribe(any(), any());
doReturn(CompletableFuture.completedFuture(true)).when(connection).publish(any(), any());
doReturn(CompletableFuture.completedFuture(true)).when(connection).publish(any(), any(), anyInt(),
anyBoolean());
doReturn(null).when(transformationServiceProvider).getTransformationService(any());

View File

@@ -17,7 +17,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.io.transport.mqtt.MqttBrokerConnection;
@@ -50,7 +49,7 @@ public class EmbeddedBrokerTools {
MqttServiceObserver observer = new MqttServiceObserver() {
@Override
public void brokerAdded(@NonNull String brokerID, @NonNull MqttBrokerConnection broker) {
public void brokerAdded(String brokerID, MqttBrokerConnection broker) {
if (brokerID.equals(Constants.CLIENTID)) {
embeddedConnection = broker;
semaphore.release();
@@ -58,7 +57,7 @@ public class EmbeddedBrokerTools {
}
@Override
public void brokerRemoved(@NonNull String brokerID, @NonNull MqttBrokerConnection broker) {
public void brokerRemoved(String brokerID, MqttBrokerConnection broker) {
}
};
mqttService.addBrokersListener(observer);

View File

@@ -32,6 +32,8 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -65,26 +67,28 @@ import com.google.gson.GsonBuilder;
*
* @author David Graeff - Initial contribution
*/
@NonNullByDefault
public class HomeAssistantMQTTImplementationTest extends JavaOSGiTest {
private MqttService mqttService;
private MqttBrokerConnection embeddedConnection;
private MqttBrokerConnection connection;
private @NonNullByDefault({}) MqttService mqttService;
private @NonNullByDefault({}) MqttBrokerConnection embeddedConnection;
private @NonNullByDefault({}) MqttBrokerConnection connection;
private int registeredTopics = 100;
private Throwable failure = null;
private @Nullable Throwable failure;
private AutoCloseable mocksCloseable;
private @NonNullByDefault({}) AutoCloseable mocksCloseable;
private @Mock ChannelStateUpdateListener channelStateUpdateListener;
private @Mock AvailabilityTracker availabilityTracker;
private @Mock TransformationServiceProvider transformationServiceProvider;
private @Mock @NonNullByDefault({}) ChannelStateUpdateListener channelStateUpdateListener;
private @Mock @NonNullByDefault({}) AvailabilityTracker availabilityTracker;
private @Mock @NonNullByDefault({}) TransformationServiceProvider transformationServiceProvider;
/**
* Create an observer that fails the test as soon as the broker client connection changes its connection state
* to something else then CONNECTED.
*/
private MqttConnectionObserver failIfChange = (state, error) -> assertThat(state,
private final MqttConnectionObserver failIfChange = (state, error) -> assertThat(state,
is(MqttConnectionState.CONNECTED));
private String testObjectTopic;
private final String testObjectTopic = "homeassistant/switch/node/"
+ ThingChannelConstants.testHomeAssistantThing.getId();
@BeforeEach
public void beforeEach() throws Exception {
@@ -104,14 +108,13 @@ public class HomeAssistantMQTTImplementationTest extends JavaOSGiTest {
connection.addConnectionObserver(failIfChange);
// Create topic string and config for one example HA component (a Switch)
testObjectTopic = "homeassistant/switch/node/" + ThingChannelConstants.testHomeAssistantThing.getId();
final String config = "{'name':'testname','state_topic':'" + testObjectTopic + "/state','command_topic':'"
+ testObjectTopic + "/set'}";
// Publish component configurations and component states to MQTT
List<CompletableFuture<Boolean>> futures = new ArrayList<>();
futures.add(embeddedConnection.publish(testObjectTopic + "/config", config.getBytes()));
futures.add(embeddedConnection.publish(testObjectTopic + "/state", "true".getBytes()));
futures.add(embeddedConnection.publish(testObjectTopic + "/config", config.getBytes(), 0, true));
futures.add(embeddedConnection.publish(testObjectTopic + "/state", "ON".getBytes(), 0, true));
registeredTopics = futures.size();
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).get(1000, TimeUnit.MILLISECONDS);
@@ -171,17 +174,17 @@ public class HomeAssistantMQTTImplementationTest extends JavaOSGiTest {
latch.countDown();
};
// Start the discovery for 500ms. Forced timeout after 1500ms.
// Start the discovery for 2000ms. Forced timeout after 4000ms.
HaID haID = new HaID(testObjectTopic + "/config");
CompletableFuture<Void> future = discover.startDiscovery(connection, 1000, Collections.singleton(haID), cd)
CompletableFuture<Void> future = discover.startDiscovery(connection, 2000, Collections.singleton(haID), cd)
.thenRun(() -> {
}).exceptionally(e -> {
failure = e;
return null;
});
assertTrue(latch.await(1500, TimeUnit.MILLISECONDS));
future.get(800, TimeUnit.MILLISECONDS);
assertTrue(latch.await(4000, TimeUnit.MILLISECONDS));
future.get(2000, TimeUnit.MILLISECONDS);
// No failure expected and one discovered result
assertNull(failure);
@@ -206,7 +209,7 @@ public class HomeAssistantMQTTImplementationTest extends JavaOSGiTest {
}).get();
// We should have received the retained value, while subscribing to the channels MQTT state topic.
verify(channelStateUpdateListener, timeout(1000).times(1)).updateChannelState(any(), any());
verify(channelStateUpdateListener, timeout(4000).times(1)).updateChannelState(any(), any());
// Value should be ON now.
value = haComponents.get(channelGroupId).channelTypes().get(ComponentSwitch.switchChannelID).getState()

View File

@@ -14,6 +14,7 @@ package org.openhab.binding.mqtt;
import static org.openhab.binding.mqtt.homeassistant.generic.internal.MqttBindingConstants.HOMEASSISTANT_MQTT_THING;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.core.thing.ThingUID;
/**
@@ -21,6 +22,7 @@ import org.openhab.core.thing.ThingUID;
*
* @author David Graeff - Initial contribution
*/
@NonNullByDefault
public class ThingChannelConstants {
// Common ThingUID and ChannelUIDs
public static final ThingUID testHomeAssistantThing = new ThingUID(HOMEASSISTANT_MQTT_THING, "device234");