package com.ruoyi.device.registry;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertSame;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertNotSame;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
import org.junit.jupiter.api.Test;
|
import com.ruoyi.device.api.DeviceAdapter;
|
import com.ruoyi.device.model.AdapterCapabilities;
|
import com.ruoyi.device.model.ChannelIdentity;
|
import com.ruoyi.device.model.DeviceControlCommand;
|
|
class DeviceAdapterRegistryTest
|
{
|
@Test
|
void synchronizesEnabledConfigurationWithoutRecreatingUnchangedAdapter()
|
{
|
RecordingFactory factory = new RecordingFactory();
|
try (DeviceAdapterRegistry registry = new DeviceAdapterRegistry(List.of(factory)))
|
{
|
AdapterInstanceConfig config = config("127.0.0.1", true);
|
|
registry.synchronize(config);
|
DeviceAdapter first = registry.require("lab-bts");
|
registry.synchronize(config);
|
|
assertSame(first, registry.require("lab-bts"));
|
assertFalse(factory.adapters.get(0).closed.get());
|
}
|
}
|
|
@Test
|
void replacesChangedConfigurationAndClosesAdapterWhenDisabled()
|
{
|
RecordingFactory factory = new RecordingFactory();
|
try (DeviceAdapterRegistry registry = new DeviceAdapterRegistry(List.of(factory)))
|
{
|
registry.synchronize(config("127.0.0.1", true));
|
StubAdapter first = factory.adapters.get(0);
|
|
registry.synchronize(config("127.0.0.2", true));
|
|
assertTrue(first.closed.get());
|
assertNotSame(first, registry.require("lab-bts"));
|
|
registry.synchronize(config("127.0.0.2", false));
|
|
assertTrue(factory.adapters.get(1).closed.get());
|
assertFalse(registry.contains("lab-bts"));
|
assertThrows(AdapterRegistryException.class, () -> registry.require("lab-bts"));
|
}
|
}
|
|
private static AdapterInstanceConfig config(String host, boolean enabled)
|
{
|
return new AdapterInstanceConfig("lab-bts", "BTS", host, 502, 5000,
|
"Asia/Hong_Kong", enabled, AdapterCapabilities.observeOnly());
|
}
|
|
private static final class RecordingFactory implements DeviceAdapterFactory
|
{
|
private final List<StubAdapter> adapters = new ArrayList<>();
|
|
@Override
|
public String adapterType()
|
{
|
return "BTS";
|
}
|
|
@Override
|
public DeviceAdapter create(AdapterInstanceConfig config)
|
{
|
StubAdapter adapter = new StubAdapter(config.adapterCode());
|
adapters.add(adapter);
|
return adapter;
|
}
|
}
|
|
private static final class StubAdapter implements DeviceAdapter
|
{
|
private final String code;
|
private final AtomicBoolean closed = new AtomicBoolean();
|
|
private StubAdapter(String code)
|
{
|
this.code = code;
|
}
|
|
@Override
|
public String adapterCode()
|
{
|
return code;
|
}
|
|
@Override
|
public AdapterCapabilities capabilities()
|
{
|
return AdapterCapabilities.observeOnly();
|
}
|
|
@Override
|
public List<com.ruoyi.device.model.DetectedChannel> discoverChannels()
|
{
|
return List.of();
|
}
|
|
@Override
|
public java.util.Map<ChannelIdentity, com.ruoyi.device.model.RealtimeSnapshot> inquire(
|
java.util.Set<ChannelIdentity> channels)
|
{
|
return java.util.Map.of();
|
}
|
|
@Override
|
public List<com.ruoyi.device.model.HistoryAvailability> inquireHistory(
|
java.util.Set<ChannelIdentity> channels)
|
{
|
return List.of();
|
}
|
|
@Override
|
public com.ruoyi.device.model.HistoryPage downloadHistory(ChannelIdentity channel,
|
String btsTestId, long startPosition, int limit)
|
{
|
throw new UnsupportedOperationException();
|
}
|
|
@Override
|
public void control(ChannelIdentity channel, DeviceControlCommand command)
|
{
|
throw new UnsupportedOperationException();
|
}
|
|
@Override
|
public void close()
|
{
|
closed.set(true);
|
}
|
}
|
}
|