Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
import java.util.stream.Collectors;
import java.util.stream.Stream;

Expand Down Expand Up @@ -53,18 +54,26 @@
@NonNullByDefault
public class AVMFritzDiscoveryService extends AbstractThingHandlerDiscoveryService<AVMFritzBaseBridgeHandler>
implements FritzAhaStatusListener, DiscoveryService {
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = Stream.of(SUPPORTED_LIGHTING_THING_TYPES,
SUPPORTED_BUTTON_THING_TYPES_UIDS, SUPPORTED_HEATING_THING_TYPES, SUPPORTED_POWER_METER_THING_TYPES,
SUPPORTED_DEVICE_THING_TYPES_UIDS, SUPPORTED_GROUP_THING_TYPES_UIDS).flatMap(Set::stream)
.collect(Collectors.toUnmodifiableSet());

private final Logger logger = LoggerFactory.getLogger(AVMFritzDiscoveryService.class);
private final Bundle bundle;

@Activate
public AVMFritzDiscoveryService(final @Reference LocaleProvider localeProvider,
final @Reference TranslationProvider i18nProvider) {
super(AVMFritzBaseBridgeHandler.class,
Stream.of(SUPPORTED_LIGHTING_THING_TYPES, SUPPORTED_BUTTON_THING_TYPES_UIDS,
SUPPORTED_HEATING_THING_TYPES, SUPPORTED_POWER_METER_THING_TYPES,
SUPPORTED_DEVICE_THING_TYPES_UIDS, SUPPORTED_GROUP_THING_TYPES_UIDS).flatMap(Set::stream)
.collect(Collectors.toUnmodifiableSet()),
30);
super(AVMFritzBaseBridgeHandler.class, SUPPORTED_THING_TYPES, 30);
this.localeProvider = localeProvider;
this.i18nProvider = i18nProvider;
this.bundle = FrameworkUtil.getBundle(AVMFritzDiscoveryService.class);
}

AVMFritzDiscoveryService(ScheduledExecutorService scheduler, LocaleProvider localeProvider,
TranslationProvider i18nProvider) {
super(scheduler, AVMFritzBaseBridgeHandler.class, SUPPORTED_THING_TYPES, 30, true, null, null);
this.localeProvider = localeProvider;
this.i18nProvider = i18nProvider;
this.bundle = FrameworkUtil.getBundle(AVMFritzDiscoveryService.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import org.eclipse.jdt.annotation.Nullable;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.openhab.binding.avmfritz.internal.dto.AVMFritzBaseModel;
import org.openhab.binding.avmfritz.internal.dto.DeviceListModel;
Expand All @@ -45,6 +44,7 @@
import org.openhab.core.i18n.TranslationProvider;
import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.thing.ThingUID;
import org.openhab.core.util.SameThreadExecutorService;

/**
* Tests for {@link AVMFritzDiscoveryService}.
Expand All @@ -53,7 +53,6 @@
* @author Ulrich Mertin - Added support for HAN-FUN blinds
*/
@NonNullByDefault
@Disabled("Often blocks indefinitely, see: https://github.com/openhab/openhab-addons/issues/16536")
public class AVMFritzDiscoveryServiceOSGiTest extends AVMFritzThingHandlerOSGiTest {

private static final ThingUID BRIGE_THING_ID = new ThingUID("avmfritz:fritzbox:1");
Expand Down Expand Up @@ -83,7 +82,8 @@ public void thingDiscovered(DiscoveryService source, DiscoveryResult result) {
@BeforeEach
public void setUp() {
super.setUp();
discovery = new AVMFritzDiscoveryService(mock(LocaleProvider.class), mock(TranslationProvider.class));
discovery = new AVMFritzDiscoveryService(new SameThreadExecutorService(), mock(LocaleProvider.class),
mock(TranslationProvider.class));
discovery.setThingHandler(bridgeHandler);
discovery.addDiscoveryListener(listener);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,11 @@
import java.util.Map;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jetty.client.HttpClient;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.openhab.binding.avmfritz.internal.AVMFritzDynamicCommandDescriptionProvider;
import org.openhab.core.config.core.Configuration;
import org.openhab.core.test.java.JavaOSGiTest;
import org.openhab.core.test.storage.VolatileStorageService;
import org.openhab.core.thing.Bridge;
import org.openhab.core.thing.ManagedThingProvider;
import org.openhab.core.thing.ThingProvider;
import org.openhab.core.thing.binding.ThingHandler;
import org.openhab.core.thing.binding.ThingHandlerCallback;
import org.openhab.core.thing.binding.builder.BridgeBuilder;

Expand All @@ -43,60 +35,25 @@
@NonNullByDefault
public abstract class AVMFritzThingHandlerOSGiTest extends JavaOSGiTest {

private static HttpClient httpClient = new HttpClient();

private VolatileStorageService volatileStorageService = new VolatileStorageService();
private @NonNullByDefault({}) ManagedThingProvider managedThingProvider;

protected @NonNullByDefault({}) Bridge bridge;
protected @NonNullByDefault({}) BoxHandler bridgeHandler;

@BeforeAll
public static void setUpClass() throws Exception {
httpClient.start();
}

@BeforeEach
public void setUp() {
registerService(volatileStorageService);

managedThingProvider = getService(ThingProvider.class, ManagedThingProvider.class);
assertNotNull(managedThingProvider, "Could not get ManagedThingProvider");

bridge = buildBridge();
assertNotNull(bridge.getConfiguration());

managedThingProvider.add(bridge);

ThingHandlerCallback callback = mock(ThingHandlerCallback.class);

bridgeHandler = new BoxHandler(bridge, httpClient, mock(AVMFritzDynamicCommandDescriptionProvider.class));
bridgeHandler = new BoxHandler(bridge, mock(), mock(AVMFritzDynamicCommandDescriptionProvider.class));
assertNotNull(bridgeHandler);

bridgeHandler.setCallback(callback);

ThingHandler oldHandler = bridge.getHandler();
if (oldHandler != null) {
oldHandler.dispose();
}
bridge.setHandler(bridgeHandler);
assertNotNull(bridge.getHandler());

bridgeHandler.initialize();
}

@AfterEach
public void tearDown() {
if (bridge != null) {
managedThingProvider.remove(bridge.getUID());
}

unregisterService(volatileStorageService);
}

@AfterAll
public static void tearDownClass() throws Exception {
httpClient.stop();
// Discovery tests only need the handler's type and UID mapping. Initializing it would authenticate against
// the configured host and make these tests depend on the network.
}

private Bridge buildBridge() {
Expand Down
Loading