package com.battery.device.bts;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import java.util.List;
|
import java.util.Map;
|
import org.junit.jupiter.api.AfterEach;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import com.battery.device.api.DeviceAdapter;
|
import com.battery.device.api.DeviceAdapterException;
|
import com.battery.device.api.model.AdapterCapabilities;
|
import com.battery.device.api.registry.AdapterInstanceConfig;
|
import com.battery.device.api.registry.DeviceAdapterRegistry;
|
import com.battery.device.api.registry.DeviceAdapterFactory;
|
|
/**
|
* 直连新威接口的类型装配:类型标识、口令来源与只读能力。
|
*
|
* <p>口令走"本地凭据文件 → 环境变量 → 启动参数",测试用启动参数这一层注入只在本测试里存在的键,
|
* 以免碰到真实凭据文件。
|
*/
|
class NewareBtsAdapterFactoryContractTest
|
{
|
private static final String PASSWORD_KEY = "TEST_NEWARE_WIN_PASSWORD_FF";
|
|
@BeforeEach
|
void provideAdminAccount()
|
{
|
System.setProperty(NewareBtsAdapterFactory.DEFAULT_USER_ENV, "Administrator");
|
}
|
|
@AfterEach
|
void clearAccount()
|
{
|
System.clearProperty(NewareBtsAdapterFactory.DEFAULT_USER_ENV);
|
System.clearProperty(PASSWORD_KEY);
|
}
|
|
@Test
|
void declaresItsOwnStorageShapeType()
|
{
|
assertEquals("NEWARE_BTS", new NewareBtsAdapterFactory().adapterType());
|
assertEquals("NEWARE_BTS", NewareBtsAdapter.ADAPTER_TYPE);
|
}
|
|
@Test
|
void buildsAReadOnlyAdapterForAConfiguredHost()
|
{
|
System.setProperty(PASSWORD_KEY, "159357");
|
DeviceAdapterFactory factory = new NewareBtsAdapterFactory();
|
|
DeviceAdapter adapter = factory.create(config(Map.of(NewareBtsAdapterFactory.PASSWORD_ENV_OPTION, PASSWORD_KEY)));
|
|
assertEquals("neware-f", adapter.adapterCode());
|
assertEquals(true, adapter.capabilities().historyDownload());
|
assertFalse(adapter.capabilities().control());
|
}
|
|
@Test
|
void refusesToGuessTheMachinePassword()
|
{
|
DeviceAdapterFactory factory = new NewareBtsAdapterFactory();
|
|
DeviceAdapterException exception = assertThrows(DeviceAdapterException.class,
|
() -> factory.create(config(Map.of())));
|
|
// 五台机器的口令实测有两种,猜一个就会连错机器,所以这个配置项没有缺省值。
|
assertEquals(true, exception.getMessage().contains(NewareBtsAdapterFactory.PASSWORD_ENV_OPTION));
|
}
|
|
@Test
|
void registryRejectsAnInstanceWhoseCredentialsAreMissingWithoutEnablingIt()
|
{
|
try (DeviceAdapterRegistry registry = new DeviceAdapterRegistry(List.of(new NewareBtsAdapterFactory())))
|
{
|
assertThrows(DeviceAdapterException.class, () -> registry.synchronize(config(Map.of())));
|
|
assertFalse(registry.contains("neware-f"));
|
}
|
}
|
|
private static AdapterInstanceConfig config(Map<String, String> sourceConfig)
|
{
|
return new AdapterInstanceConfig("neware-f", "NEWARE_BTS", "26.117.165.166", 445, 60000,
|
"Asia/Hong_Kong", true, new AdapterCapabilities(true, true, true, false), sourceConfig);
|
}
|
}
|