mirror of
https://gitee.com/pnoker/iot-dc3.git
synced 2026-08-28 22:21:16 +08:00
style: format dc3-common, dc3-driver and dc3-e2e test code
This commit is contained in:
+3
-3
@@ -52,14 +52,14 @@ public class ChatClientConfig {
|
||||
|
||||
public static final String SYSTEM_PROMPT = """
|
||||
You are an intelligent assistant for the IoT DC3 platform.
|
||||
|
||||
|
||||
You can help users manage IoT devices, query real-time and historical data,
|
||||
and perform device operations. You have access to the following capabilities:
|
||||
|
||||
|
||||
- **Auth tools**: Read the current low-sensitivity tenant and user context.
|
||||
- **Manager tools**: Query devices, drivers, and data points (metrics).
|
||||
- **Data tools**: Read real-time point values, query historical data, and send read/write commands to devices.
|
||||
|
||||
|
||||
Guidelines:
|
||||
- Always confirm before sending write commands to physical devices.
|
||||
- Present data in a clear, structured format.
|
||||
|
||||
+6
-6
@@ -64,6 +64,12 @@ class ChatClientFactoryTest {
|
||||
|
||||
private ChatClientFactory factory;
|
||||
|
||||
private static Field cacheField() throws NoSuchFieldException {
|
||||
Field field = ChatClientFactory.class.getDeclaredField("cache");
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
factory = new ChatClientFactory(modelProviderManager, modelConfigManager, modelProviderBuilder,
|
||||
@@ -109,10 +115,4 @@ class ChatClientFactoryTest {
|
||||
factory.evict(2L);
|
||||
assertThat(cache).isEmpty();
|
||||
}
|
||||
|
||||
private static Field cacheField() throws NoSuchFieldException {
|
||||
Field field = ChatClientFactory.class.getDeclaredField("cache");
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
}
|
||||
|
||||
+11
-11
@@ -36,6 +36,17 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
class AgenticRequestContextTest {
|
||||
|
||||
private static RequestHeader.UserHeader userHeader(Long tenantId, Long userId) {
|
||||
RequestHeader.UserHeader h = new RequestHeader.UserHeader();
|
||||
h.setTenantId(tenantId);
|
||||
h.setUserId(userId);
|
||||
return h;
|
||||
}
|
||||
|
||||
private static ToolContext toolContext(Map<String, Object> values) {
|
||||
return new ToolContext(new HashMap<>(values));
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void cleanThreadLocal() {
|
||||
AgenticRequestContext.clear();
|
||||
@@ -159,15 +170,4 @@ class AgenticRequestContextTest {
|
||||
AgenticRequestContext.recordToolInvocation(ctx, "tool", "domain", "desc");
|
||||
AgenticRequestContext.recordToolInvocation(null, "tool", "domain", "desc");
|
||||
}
|
||||
|
||||
private static RequestHeader.UserHeader userHeader(Long tenantId, Long userId) {
|
||||
RequestHeader.UserHeader h = new RequestHeader.UserHeader();
|
||||
h.setTenantId(tenantId);
|
||||
h.setUserId(userId);
|
||||
return h;
|
||||
}
|
||||
|
||||
private static ToolContext toolContext(Map<String, Object> values) {
|
||||
return new ToolContext(new HashMap<>(values));
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -29,7 +29,6 @@ import reactor.test.StepVerifier;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
|
||||
+8
-10
@@ -22,10 +22,16 @@ import io.github.pnoker.common.agentic.skill.SkillRegistry;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import reactor.test.StepVerifier;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class SkillControllerTest {
|
||||
|
||||
private static SkillDefinition skill(String name, String description) {
|
||||
SkillDefinition skill = new SkillDefinition();
|
||||
skill.setName(name);
|
||||
skill.setDescription(description);
|
||||
skill.setEnabled(true);
|
||||
return skill;
|
||||
}
|
||||
|
||||
@Test
|
||||
void listExposesEverySkillAsVO() {
|
||||
SkillRegistry registry = new SkillRegistry();
|
||||
@@ -55,12 +61,4 @@ class SkillControllerTest {
|
||||
})
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
private static SkillDefinition skill(String name, String description) {
|
||||
SkillDefinition skill = new SkillDefinition();
|
||||
skill.setName(name);
|
||||
skill.setDescription(description);
|
||||
skill.setEnabled(true);
|
||||
return skill;
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -31,7 +31,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.never;
|
||||
|
||||
+1
-1
@@ -64,7 +64,7 @@ class SessionServiceImplTest {
|
||||
// SessionServiceImpl uses @Resource which @InjectMocks resolves by field name; the
|
||||
// names match so injection should succeed but we re-set defensively in case the
|
||||
// resolution misses.
|
||||
for (String name : new String[] {"sessionBuilder", "sessionManager", "agenticChatMemory", "messageService"}) {
|
||||
for (String name : new String[]{"sessionBuilder", "sessionManager", "agenticChatMemory", "messageService"}) {
|
||||
Field f = SessionServiceImpl.class.getDeclaredField(name);
|
||||
f.setAccessible(true);
|
||||
if (f.get(service) == null) {
|
||||
|
||||
+6
-6
@@ -28,6 +28,12 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class SkillLoaderTest {
|
||||
|
||||
private static SkillDefinition invokeMapToSkill(SkillLoader loader, Map<String, Object> map) throws Exception {
|
||||
Method method = SkillLoader.class.getDeclaredMethod("mapToSkill", Map.class);
|
||||
method.setAccessible(true);
|
||||
return (SkillDefinition) method.invoke(loader, map);
|
||||
}
|
||||
|
||||
@Test
|
||||
void loaderRegistersAllEnabledProductionSkills() throws Exception {
|
||||
SkillRegistry registry = new SkillRegistry();
|
||||
@@ -81,10 +87,4 @@ class SkillLoaderTest {
|
||||
SkillDefinition skill = invokeMapToSkill(loader, map);
|
||||
assertThat(skill.getExamples()).isNull();
|
||||
}
|
||||
|
||||
private static SkillDefinition invokeMapToSkill(SkillLoader loader, Map<String, Object> map) throws Exception {
|
||||
Method method = SkillLoader.class.getDeclaredMethod("mapToSkill", Map.class);
|
||||
method.setAccessible(true);
|
||||
return (SkillDefinition) method.invoke(loader, map);
|
||||
}
|
||||
}
|
||||
|
||||
+10
-10
@@ -26,6 +26,16 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
|
||||
class SkillRegistryTest {
|
||||
|
||||
private static SkillDefinition skill(String name, List<String> tools) {
|
||||
SkillDefinition skill = new SkillDefinition();
|
||||
skill.setName(name);
|
||||
skill.setEnabled(true);
|
||||
skill.setDescription("d");
|
||||
skill.setSystemPromptAddition("");
|
||||
skill.setTools(tools);
|
||||
return skill;
|
||||
}
|
||||
|
||||
@Test
|
||||
void registerAndLookupBySkillName() {
|
||||
SkillRegistry registry = new SkillRegistry();
|
||||
@@ -92,14 +102,4 @@ class SkillRegistryTest {
|
||||
registry.register(skill);
|
||||
assertThat(registry.getEnabledToolNames("free-form")).isNull();
|
||||
}
|
||||
|
||||
private static SkillDefinition skill(String name, List<String> tools) {
|
||||
SkillDefinition skill = new SkillDefinition();
|
||||
skill.setName(name);
|
||||
skill.setEnabled(true);
|
||||
skill.setDescription("d");
|
||||
skill.setSystemPromptAddition("");
|
||||
skill.setTools(tools);
|
||||
return skill;
|
||||
}
|
||||
}
|
||||
|
||||
+6
-2
@@ -35,9 +35,13 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class TenantBindServiceImplTest {
|
||||
|
||||
+6
-2
@@ -39,9 +39,13 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class TenantServiceImplTest {
|
||||
|
||||
+6
-2
@@ -38,9 +38,13 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class UserLoginServiceImplTest {
|
||||
|
||||
+3
-1
@@ -39,7 +39,9 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
+5
@@ -66,6 +66,11 @@ public class PointValueVO implements Serializable {
|
||||
*/
|
||||
private String calValue;
|
||||
|
||||
/**
|
||||
* Numeric projection of calValue for aggregation queries.
|
||||
*/
|
||||
private Double numValue;
|
||||
|
||||
/**
|
||||
* Driver ID
|
||||
*/
|
||||
|
||||
+4
-1
@@ -34,7 +34,10 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DeviceEventServiceImplTest {
|
||||
|
||||
+4
-1
@@ -34,7 +34,10 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DriverEventServiceImplTest {
|
||||
|
||||
+4
-1
@@ -43,7 +43,10 @@ import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class PointValueCommandServiceImplTest {
|
||||
|
||||
+7
-2
@@ -39,9 +39,14 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class PointValueServiceImplTest {
|
||||
|
||||
+3
-1
@@ -35,7 +35,9 @@ import java.lang.reflect.Field;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ScheduleForDataServiceImplTest {
|
||||
|
||||
+3
-1
@@ -50,7 +50,9 @@ import java.util.UUID;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class PointValueServerTest {
|
||||
|
||||
+3
-1
@@ -38,7 +38,9 @@ import java.util.concurrent.Executors;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.timeout;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class PointValueJobTest {
|
||||
|
||||
+4
-1
@@ -30,7 +30,10 @@ import org.springframework.amqp.core.Message;
|
||||
import org.springframework.amqp.core.MessageProperties;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DeviceEventReceiverTest {
|
||||
|
||||
+3
-1
@@ -30,7 +30,9 @@ import org.springframework.amqp.core.Message;
|
||||
import org.springframework.amqp.core.MessageProperties;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DriverEventReceiverTest {
|
||||
|
||||
+3
-1
@@ -36,7 +36,9 @@ import java.lang.reflect.Field;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class PointValueReceiverTest {
|
||||
|
||||
+4
-1
@@ -33,7 +33,10 @@ import org.springframework.amqp.core.MessageProperties;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DeviceCommandReceiverTest {
|
||||
|
||||
+3
-1
@@ -40,7 +40,9 @@ import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class MetadataReceiverTest {
|
||||
|
||||
+4
-1
@@ -42,7 +42,10 @@ import java.util.Map;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DriverReadServiceImplTest {
|
||||
|
||||
+4
-1
@@ -35,7 +35,10 @@ import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DriverScheduleServiceImplTest {
|
||||
|
||||
+4
-1
@@ -42,7 +42,10 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DriverSenderServiceImplTest {
|
||||
|
||||
+4
-1
@@ -41,7 +41,10 @@ import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DriverWriteServiceImplTest {
|
||||
|
||||
+15
-15
@@ -45,6 +45,21 @@ class ResourceRegistryLocalFacadeTest {
|
||||
|
||||
private ResourceRegistryLocalFacade facade;
|
||||
|
||||
private static FacadeScannedApiBO api(String method, String path, String name, String group) {
|
||||
return FacadeScannedApiBO.builder()
|
||||
.method(method)
|
||||
.path(path)
|
||||
.apiName(name)
|
||||
.title(method.toLowerCase())
|
||||
.remark("")
|
||||
.apiGroup(group)
|
||||
.build();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
facade = new ResourceRegistryLocalFacade();
|
||||
@@ -126,19 +141,4 @@ class ResourceRegistryLocalFacadeTest {
|
||||
org.mockito.Mockito.verify(resourceRegistrySyncService).sync(captor.capture());
|
||||
assertThat(captor.getValue().getApis()).isEmpty();
|
||||
}
|
||||
|
||||
private static FacadeScannedApiBO api(String method, String path, String name, String group) {
|
||||
return FacadeScannedApiBO.builder()
|
||||
.method(method)
|
||||
.path(path)
|
||||
.apiName(name)
|
||||
.title(method.toLowerCase())
|
||||
.remark("")
|
||||
.apiGroup(group)
|
||||
.build();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -45,6 +45,10 @@ class TenantLocalFacadeTest {
|
||||
|
||||
private TenantLocalFacade facade;
|
||||
|
||||
private static TenantBO any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
facade = new TenantLocalFacade();
|
||||
@@ -74,8 +78,4 @@ class TenantLocalFacadeTest {
|
||||
field.setAccessible(true);
|
||||
field.set(facade, value);
|
||||
}
|
||||
|
||||
private static TenantBO any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -45,6 +45,10 @@ class UserLocalFacadeTest {
|
||||
|
||||
private UserLocalFacade facade;
|
||||
|
||||
private static UserBO any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
facade = new UserLocalFacade();
|
||||
@@ -74,8 +78,4 @@ class UserLocalFacadeTest {
|
||||
field.setAccessible(true);
|
||||
field.set(facade, value);
|
||||
}
|
||||
|
||||
private static UserBO any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -46,6 +46,10 @@ class UserLoginLocalFacadeTest {
|
||||
|
||||
private UserLoginLocalFacade facade;
|
||||
|
||||
private static UserLoginBO any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
facade = new UserLoginLocalFacade();
|
||||
@@ -78,8 +82,4 @@ class UserLoginLocalFacadeTest {
|
||||
field.setAccessible(true);
|
||||
field.set(facade, value);
|
||||
}
|
||||
|
||||
private static UserLoginBO any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -49,6 +49,14 @@ class PointValueLocalFacadeTest {
|
||||
|
||||
private PointValueLocalFacade facade;
|
||||
|
||||
private static <T> T any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
facade = new PointValueLocalFacade();
|
||||
@@ -109,12 +117,4 @@ class PointValueLocalFacadeTest {
|
||||
field.setAccessible(true);
|
||||
field.set(facade, value);
|
||||
}
|
||||
|
||||
private static <T> T any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -51,6 +51,14 @@ class DeviceLocalFacadeTest {
|
||||
|
||||
private DeviceLocalFacade facade;
|
||||
|
||||
private static <T> T any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
facade = new DeviceLocalFacade();
|
||||
@@ -172,12 +180,4 @@ class DeviceLocalFacadeTest {
|
||||
field.setAccessible(true);
|
||||
field.set(facade, value);
|
||||
}
|
||||
|
||||
private static <T> T any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -51,6 +51,14 @@ class DriverLocalFacadeTest {
|
||||
|
||||
private DriverLocalFacade facade;
|
||||
|
||||
private static <T> T any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
facade = new DriverLocalFacade();
|
||||
@@ -143,12 +151,4 @@ class DriverLocalFacadeTest {
|
||||
field.setAccessible(true);
|
||||
field.set(facade, value);
|
||||
}
|
||||
|
||||
private static <T> T any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -51,6 +51,14 @@ class PointLocalFacadeTest {
|
||||
|
||||
private PointLocalFacade facade;
|
||||
|
||||
private static <T> T any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
facade = new PointLocalFacade();
|
||||
@@ -120,12 +128,4 @@ class PointLocalFacadeTest {
|
||||
field.setAccessible(true);
|
||||
field.set(facade, value);
|
||||
}
|
||||
|
||||
private static <T> T any() {
|
||||
return org.mockito.ArgumentMatchers.any();
|
||||
}
|
||||
|
||||
private static <T> T any(Class<T> clazz) {
|
||||
return org.mockito.ArgumentMatchers.any(clazz);
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -42,7 +42,9 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class AuthenticGatewayFilterTest {
|
||||
|
||||
+3
-1
@@ -40,7 +40,9 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DriverRegisterServiceImplTest {
|
||||
|
||||
+3
-1
@@ -43,7 +43,9 @@ import java.util.Set;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
/**
|
||||
* Reactive controller test that exercises DriverController through StepVerifier
|
||||
|
||||
+5
-1
@@ -36,7 +36,11 @@ import java.util.List;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class MetadataEventListenerTest {
|
||||
|
||||
+4
-1
@@ -49,7 +49,10 @@ import java.util.ArrayList;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.atLeastOnce;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DeviceServiceImplTest {
|
||||
|
||||
+3
-1
@@ -41,7 +41,9 @@ import java.util.List;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DriverAttributeServiceImplTest {
|
||||
|
||||
+6
-2
@@ -41,9 +41,13 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DriverServiceImplTest {
|
||||
|
||||
+3
-1
@@ -41,7 +41,9 @@ import java.util.List;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class PointAttributeServiceImplTest {
|
||||
|
||||
+7
-2
@@ -46,10 +46,15 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.atLeastOnce;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class PointServiceImplTest {
|
||||
|
||||
+6
-2
@@ -34,9 +34,13 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ProfileBindServiceImplTest {
|
||||
|
||||
+6
-2
@@ -40,9 +40,13 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ProfileServiceImplTest {
|
||||
|
||||
+3
-1
@@ -25,7 +25,9 @@ import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.assertj.core.api.Assertions.offset;
|
||||
|
||||
class ArithmeticUtilTest {
|
||||
|
||||
|
||||
+3
-1
@@ -38,7 +38,9 @@ import java.lang.reflect.Field;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class QuartzServiceTest {
|
||||
|
||||
+7
-2
@@ -33,9 +33,14 @@ import org.springframework.core.env.Environment;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ResourceRegistrarTest {
|
||||
|
||||
@@ -1,4 +1,19 @@
|
||||
-- Copyright 2016-present the IoT DC3 original author or authors.
|
||||
/*
|
||||
* Copyright 2016-present the IoT DC3 original author or authors.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
--
|
||||
-- This program is free software: you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU Affero General Public License as
|
||||
|
||||
+20
-20
@@ -72,6 +72,26 @@ class ListeningVirtualDriverCustomServiceImplTest {
|
||||
|
||||
private ListeningVirtualDriverCustomServiceImpl service;
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(Long id) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(id);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
service = new ListeningVirtualDriverCustomServiceImpl();
|
||||
@@ -167,24 +187,4 @@ class ListeningVirtualDriverCustomServiceImplTest {
|
||||
field.setAccessible(true);
|
||||
field.set(service, value);
|
||||
}
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(Long id) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(id);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
}
|
||||
|
||||
+59
-59
@@ -82,6 +82,56 @@ class ModbusTcpDriverCustomServiceImplTest {
|
||||
|
||||
private ModbusFactory previousFactory;
|
||||
|
||||
private static ModbusFactory swapStaticFactory(ModbusFactory replacement) throws Exception {
|
||||
Field field = ModbusTcpDriverCustomServiceImpl.class.getDeclaredField("modbusFactory");
|
||||
field.setAccessible(true);
|
||||
ModbusFactory previous = (ModbusFactory) field.get(null);
|
||||
field.set(null, replacement);
|
||||
return previous;
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> driverConfig(String host, int port) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("host", AttributeBO.builder().value(host).type(AttributeTypeFlagEnum.STRING).build());
|
||||
m.put("port", AttributeBO.builder().value(String.valueOf(port)).type(AttributeTypeFlagEnum.INT).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> pointConfig(int slaveId, int functionCode, int offset) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("slaveId",
|
||||
AttributeBO.builder().value(String.valueOf(slaveId)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("functionCode",
|
||||
AttributeBO.builder().value(String.valueOf(functionCode)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("offset", AttributeBO.builder().value(String.valueOf(offset)).type(AttributeTypeFlagEnum.INT).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(PointTypeFlagEnum type) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(1L);
|
||||
point.setPointTypeFlag(type);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static WValue wValue(String value, PointTypeFlagEnum type) {
|
||||
return WValue.builder().value(value).type(type).build();
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
service = new ModbusTcpDriverCustomServiceImpl();
|
||||
@@ -152,7 +202,7 @@ class ModbusTcpDriverCustomServiceImplTest {
|
||||
|
||||
assertThatThrownBy(() -> service.read(driverConfig("host", 1502), pointConfig(1, 1, 0), device(7L),
|
||||
point(PointTypeFlagEnum.INT))).isInstanceOf(ConnectorException.class)
|
||||
.hasMessageContaining("offline");
|
||||
.hasMessageContaining("offline");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -163,11 +213,11 @@ class ModbusTcpDriverCustomServiceImplTest {
|
||||
assertThat(
|
||||
service.read(driverConfig("h", 1), pointConfig(1, 1, 0), device(2L), point(PointTypeFlagEnum.BOOLEAN))
|
||||
.getValue())
|
||||
.isEqualTo("true");
|
||||
.isEqualTo("true");
|
||||
assertThat(
|
||||
service.read(driverConfig("h", 1), pointConfig(1, 2, 0), device(2L), point(PointTypeFlagEnum.BOOLEAN))
|
||||
.getValue())
|
||||
.isEqualTo("false");
|
||||
.isEqualTo("false");
|
||||
assertThat(service.read(driverConfig("h", 1), pointConfig(1, 3, 0), device(2L), point(PointTypeFlagEnum.INT))
|
||||
.getValue()).isEqualTo("42");
|
||||
assertThat(service.read(driverConfig("h", 1), pointConfig(1, 4, 0), device(2L), point(PointTypeFlagEnum.INT))
|
||||
@@ -190,7 +240,7 @@ class ModbusTcpDriverCustomServiceImplTest {
|
||||
|
||||
assertThatThrownBy(() -> service.read(driverConfig("h", 1), pointConfig(1, 3, 0), device(3L),
|
||||
point(PointTypeFlagEnum.INT))).isInstanceOf(ReadPointException.class)
|
||||
.hasMessageContaining("rs485 down");
|
||||
.hasMessageContaining("rs485 down");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -203,7 +253,7 @@ class ModbusTcpDriverCustomServiceImplTest {
|
||||
|
||||
assertThatThrownBy(() -> service.read(driverConfig("h", 1), pointConfig(1, 4, 0), device(3L),
|
||||
point(PointTypeFlagEnum.INT))).isInstanceOf(ReadPointException.class)
|
||||
.hasMessageContaining("illegal data address");
|
||||
.hasMessageContaining("illegal data address");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -238,8 +288,8 @@ class ModbusTcpDriverCustomServiceImplTest {
|
||||
|
||||
assertThatThrownBy(() -> service.write(driverConfig("h", 1), pointConfig(1, 1, 0), device(7L),
|
||||
point(PointTypeFlagEnum.BOOLEAN), wValue("true", PointTypeFlagEnum.BOOLEAN)))
|
||||
.isInstanceOf(WritePointException.class)
|
||||
.hasMessageContaining("transport reset");
|
||||
.isInstanceOf(WritePointException.class)
|
||||
.hasMessageContaining("transport reset");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -259,8 +309,8 @@ class ModbusTcpDriverCustomServiceImplTest {
|
||||
|
||||
assertThatThrownBy(() -> service.write(driverConfig("h", 1), pointConfig(1, 3, 0), device(8L),
|
||||
point(PointTypeFlagEnum.FLOAT), wValue("1.0", PointTypeFlagEnum.FLOAT)))
|
||||
.isInstanceOf(WritePointException.class)
|
||||
.hasMessageContaining("offline");
|
||||
.isInstanceOf(WritePointException.class)
|
||||
.hasMessageContaining("offline");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -278,54 +328,4 @@ class ModbusTcpDriverCustomServiceImplTest {
|
||||
field.setAccessible(true);
|
||||
field.set(service, value);
|
||||
}
|
||||
|
||||
private static ModbusFactory swapStaticFactory(ModbusFactory replacement) throws Exception {
|
||||
Field field = ModbusTcpDriverCustomServiceImpl.class.getDeclaredField("modbusFactory");
|
||||
field.setAccessible(true);
|
||||
ModbusFactory previous = (ModbusFactory) field.get(null);
|
||||
field.set(null, replacement);
|
||||
return previous;
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> driverConfig(String host, int port) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("host", AttributeBO.builder().value(host).type(AttributeTypeFlagEnum.STRING).build());
|
||||
m.put("port", AttributeBO.builder().value(String.valueOf(port)).type(AttributeTypeFlagEnum.INT).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> pointConfig(int slaveId, int functionCode, int offset) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("slaveId",
|
||||
AttributeBO.builder().value(String.valueOf(slaveId)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("functionCode",
|
||||
AttributeBO.builder().value(String.valueOf(functionCode)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("offset", AttributeBO.builder().value(String.valueOf(offset)).type(AttributeTypeFlagEnum.INT).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(PointTypeFlagEnum type) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(1L);
|
||||
point.setPointTypeFlag(type);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static WValue wValue(String value, PointTypeFlagEnum type) {
|
||||
return WValue.builder().value(value).type(type).build();
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-10
@@ -42,6 +42,16 @@ class MqttReceiveServiceImplTest {
|
||||
|
||||
private MqttReceiveServiceImpl service;
|
||||
|
||||
private static MqttMessage mqttMessage(String topic, int qos, String payload) {
|
||||
MessageHeader header = new MessageHeader(null);
|
||||
header.setMqttReceivedTopic(topic);
|
||||
header.setMqttReceivedQos(qos);
|
||||
MqttMessage msg = new MqttMessage();
|
||||
msg.setHeader(header);
|
||||
msg.setPayload(payload);
|
||||
return msg;
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
service = new MqttReceiveServiceImpl();
|
||||
@@ -95,14 +105,4 @@ class MqttReceiveServiceImplTest {
|
||||
|
||||
verify(driverSenderService).pointValueSender(org.mockito.ArgumentMatchers.any(PointValue.class));
|
||||
}
|
||||
|
||||
private static MqttMessage mqttMessage(String topic, int qos, String payload) {
|
||||
MessageHeader header = new MessageHeader(null);
|
||||
header.setMqttReceivedTopic(topic);
|
||||
header.setMqttReceivedQos(qos);
|
||||
MqttMessage msg = new MqttMessage();
|
||||
msg.setHeader(header);
|
||||
msg.setPayload(payload);
|
||||
return msg;
|
||||
}
|
||||
}
|
||||
|
||||
+20
-20
@@ -64,6 +64,26 @@ class MqttDriverCustomServiceImplTest {
|
||||
|
||||
private MqttDriverCustomServiceImpl service;
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(Long id) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(id);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
service = new MqttDriverCustomServiceImpl();
|
||||
@@ -153,24 +173,4 @@ class MqttDriverCustomServiceImplTest {
|
||||
field.setAccessible(true);
|
||||
field.set(service, value);
|
||||
}
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(Long id) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(id);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
}
|
||||
|
||||
+15
-15
@@ -63,6 +63,21 @@ class OpcDaDriverCustomServiceImplTest {
|
||||
|
||||
private OpcDaDriverCustomServiceImpl service;
|
||||
|
||||
private static Map<String, AttributeBO> pointConfig(String group, String tag) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("group", AttributeBO.builder().value(group).type(AttributeTypeFlagEnum.STRING).build());
|
||||
m.put("tag", AttributeBO.builder().value(tag).type(AttributeTypeFlagEnum.STRING).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
service = new OpcDaDriverCustomServiceImpl();
|
||||
@@ -271,19 +286,4 @@ class OpcDaDriverCustomServiceImplTest {
|
||||
field.setAccessible(true);
|
||||
field.set(service, value);
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> pointConfig(String group, String tag) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("group", AttributeBO.builder().value(group).type(AttributeTypeFlagEnum.STRING).build());
|
||||
m.put("tag", AttributeBO.builder().value(tag).type(AttributeTypeFlagEnum.STRING).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
}
|
||||
|
||||
+50
-50
@@ -35,9 +35,9 @@ import org.eclipse.milo.opcua.stack.core.types.structured.EndpointDescription;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
@@ -71,6 +71,54 @@ class OpcUaDriverCustomServiceImplTest {
|
||||
|
||||
private OpcUaDriverCustomServiceImpl service;
|
||||
|
||||
private static Map<String, AttributeBO> driverConfig(String host, int port, String path) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("host", AttributeBO.builder().value(host).type(AttributeTypeFlagEnum.STRING).build());
|
||||
m.put("port", AttributeBO.builder().value(String.valueOf(port)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("path", AttributeBO.builder().value(path).type(AttributeTypeFlagEnum.STRING).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> pointConfig(int namespace, String tag) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("namespace",
|
||||
AttributeBO.builder().value(String.valueOf(namespace)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("tag", AttributeBO.builder().value(tag).type(AttributeTypeFlagEnum.STRING).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(PointTypeFlagEnum type) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(1L);
|
||||
point.setPointTypeFlag(type);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
|
||||
// Reference unused to keep imports stable for future expansion.
|
||||
@SuppressWarnings("unused")
|
||||
private static List<EndpointDescription> sampleEndpoints() {
|
||||
return List.of();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static Optional<EndpointDescription> sampleSelector() {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
service = new OpcUaDriverCustomServiceImpl();
|
||||
@@ -144,7 +192,7 @@ class OpcUaDriverCustomServiceImplTest {
|
||||
|
||||
assertThatThrownBy(() -> service.read(driverConfig("h", 4840, "/"), pointConfig(2, "tag.x"),
|
||||
device(1L), point(PointTypeFlagEnum.STRING))).isInstanceOf(ConnectorException.class)
|
||||
.hasMessageContaining("endpoint refused");
|
||||
.hasMessageContaining("endpoint refused");
|
||||
assertThat(connectionMap()).doesNotContainKey(1L);
|
||||
}
|
||||
}
|
||||
@@ -188,52 +236,4 @@ class OpcUaDriverCustomServiceImplTest {
|
||||
field.setAccessible(true);
|
||||
field.set(service, value);
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> driverConfig(String host, int port, String path) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("host", AttributeBO.builder().value(host).type(AttributeTypeFlagEnum.STRING).build());
|
||||
m.put("port", AttributeBO.builder().value(String.valueOf(port)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("path", AttributeBO.builder().value(path).type(AttributeTypeFlagEnum.STRING).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> pointConfig(int namespace, String tag) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("namespace",
|
||||
AttributeBO.builder().value(String.valueOf(namespace)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("tag", AttributeBO.builder().value(tag).type(AttributeTypeFlagEnum.STRING).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(PointTypeFlagEnum type) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(1L);
|
||||
point.setPointTypeFlag(type);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
|
||||
// Reference unused to keep imports stable for future expansion.
|
||||
@SuppressWarnings("unused")
|
||||
private static List<EndpointDescription> sampleEndpoints() {
|
||||
return List.of();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static Optional<EndpointDescription> sampleSelector() {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
+46
-46
@@ -37,9 +37,9 @@ import io.github.pnoker.driver.bean.PlcS7PointVariable;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
@@ -75,6 +75,51 @@ class PlcS7DriverCustomServiceImplTest {
|
||||
|
||||
private PlcS7DriverCustomServiceImpl service;
|
||||
|
||||
private static Map<String, AttributeBO> driverConfig(String host, int port) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("host", AttributeBO.builder().value(host).type(AttributeTypeFlagEnum.STRING).build());
|
||||
m.put("port", AttributeBO.builder().value(String.valueOf(port)).type(AttributeTypeFlagEnum.INT).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> pointConfig(int dbNum, int byteOffset, int bitOffset, int blockSize) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("dbNum", AttributeBO.builder().value(String.valueOf(dbNum)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("byteOffset",
|
||||
AttributeBO.builder().value(String.valueOf(byteOffset)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("bitOffset",
|
||||
AttributeBO.builder().value(String.valueOf(bitOffset)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("blockSize",
|
||||
AttributeBO.builder().value(String.valueOf(blockSize)).type(AttributeTypeFlagEnum.INT).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(PointTypeFlagEnum type, String pointName) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(1L);
|
||||
point.setPointTypeFlag(type);
|
||||
point.setPointName(pointName);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static WValue wValue(String value, PointTypeFlagEnum type) {
|
||||
return WValue.builder().value(value).type(type).build();
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
service = new PlcS7DriverCustomServiceImpl();
|
||||
@@ -235,49 +280,4 @@ class PlcS7DriverCustomServiceImplTest {
|
||||
field.setAccessible(true);
|
||||
field.set(service, value);
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> driverConfig(String host, int port) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("host", AttributeBO.builder().value(host).type(AttributeTypeFlagEnum.STRING).build());
|
||||
m.put("port", AttributeBO.builder().value(String.valueOf(port)).type(AttributeTypeFlagEnum.INT).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static Map<String, AttributeBO> pointConfig(int dbNum, int byteOffset, int bitOffset, int blockSize) {
|
||||
Map<String, AttributeBO> m = new HashMap<>();
|
||||
m.put("dbNum", AttributeBO.builder().value(String.valueOf(dbNum)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("byteOffset",
|
||||
AttributeBO.builder().value(String.valueOf(byteOffset)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("bitOffset",
|
||||
AttributeBO.builder().value(String.valueOf(bitOffset)).type(AttributeTypeFlagEnum.INT).build());
|
||||
m.put("blockSize",
|
||||
AttributeBO.builder().value(String.valueOf(blockSize)).type(AttributeTypeFlagEnum.INT).build());
|
||||
return m;
|
||||
}
|
||||
|
||||
private static DeviceBO device(Long id) {
|
||||
DeviceBO device = new DeviceBO();
|
||||
device.setId(id);
|
||||
return device;
|
||||
}
|
||||
|
||||
private static PointBO point(PointTypeFlagEnum type, String pointName) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(1L);
|
||||
point.setPointTypeFlag(type);
|
||||
point.setPointName(pointName);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static WValue wValue(String value, PointTypeFlagEnum type) {
|
||||
return WValue.builder().value(value).type(type).build();
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
}
|
||||
|
||||
+17
-17
@@ -58,6 +58,22 @@ class VirtualDriverCustomServiceImplTest {
|
||||
@InjectMocks
|
||||
private VirtualDriverCustomServiceImpl service;
|
||||
|
||||
private static PointBO pointOfType(PointTypeFlagEnum type) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(1L);
|
||||
point.setPointName("p");
|
||||
point.setPointTypeFlag(type);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
// @InjectMocks resolves @Resource via reflection in the same class — re-assert
|
||||
@@ -123,7 +139,7 @@ class VirtualDriverCustomServiceImplTest {
|
||||
|
||||
@Test
|
||||
void readProducesNumericValueInRangeForOtherPointTypes() {
|
||||
for (PointTypeFlagEnum type : new PointTypeFlagEnum[] {
|
||||
for (PointTypeFlagEnum type : new PointTypeFlagEnum[]{
|
||||
PointTypeFlagEnum.INT, PointTypeFlagEnum.LONG, PointTypeFlagEnum.FLOAT, PointTypeFlagEnum.DOUBLE,
|
||||
PointTypeFlagEnum.BYTE, PointTypeFlagEnum.SHORT
|
||||
}) {
|
||||
@@ -141,20 +157,4 @@ class VirtualDriverCustomServiceImplTest {
|
||||
assertThat(result).isFalse();
|
||||
verify(driverSenderService, never()).pointValueSender(org.mockito.ArgumentMatchers.anyList());
|
||||
}
|
||||
|
||||
private static PointBO pointOfType(PointTypeFlagEnum type) {
|
||||
PointBO point = new PointBO();
|
||||
point.setId(1L);
|
||||
point.setPointName("p");
|
||||
point.setPointTypeFlag(type);
|
||||
return point;
|
||||
}
|
||||
|
||||
private static MetadataEventDTO metadataEvent(MetadataTypeEnum type, MetadataOperateTypeEnum op, Long id) {
|
||||
MetadataEventDTO event = new MetadataEventDTO();
|
||||
event.setMetadataType(type);
|
||||
event.setOperateType(op);
|
||||
event.setId(id);
|
||||
return event;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,8 +43,8 @@ class HarnessSmokeIT extends BaseE2eIT {
|
||||
void postgresIsReachableAndAcceptsSimpleQueries() throws Exception {
|
||||
try (java.sql.Connection conn = DriverManager.getConnection(
|
||||
E2eStack.postgresJdbcUrl(), E2eStack.postgresUsername(), E2eStack.postgresPassword());
|
||||
Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("SELECT 1")) {
|
||||
Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("SELECT 1")) {
|
||||
assertThat(rs.next()).isTrue();
|
||||
assertThat(rs.getInt(1)).isEqualTo(1);
|
||||
}
|
||||
|
||||
@@ -35,12 +35,12 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Validates the assumptions production point-value persistence relies on:
|
||||
* - the dc3 schema can mount the timescaledb extension
|
||||
* - the dc3 schema can mount the pgvector extension
|
||||
* - a hypertable on (time, device_id, point_id) accepts batched inserts and
|
||||
* retains them across queries
|
||||
* - a continuous-aggregate-style time_bucket query returns expected aggregates
|
||||
*
|
||||
* - the dc3 schema can mount the timescaledb extension
|
||||
* - the dc3 schema can mount the pgvector extension
|
||||
* - a hypertable on (time, device_id, point_id) accepts batched inserts and
|
||||
* retains them across queries
|
||||
* - a continuous-aggregate-style time_bucket query returns expected aggregates
|
||||
* <p>
|
||||
* Disabled by default; opt in with {@code DC3_E2E=true}.
|
||||
*/
|
||||
@EnabledIfEnvironmentVariable(named = "DC3_E2E", matches = "(?i)true|1|yes|on")
|
||||
@@ -80,10 +80,10 @@ class PostgresHypertableIT extends BaseE2eIT {
|
||||
}
|
||||
|
||||
try (Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT time_bucket('1 minute', time), count(*), avg(cal_value), min(cal_value),"
|
||||
+ " max(cal_value) FROM dc3_point_value_e2e"
|
||||
+ " WHERE device_id = 1 AND point_id = 100 GROUP BY 1")) {
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT time_bucket('1 minute', time), count(*), avg(cal_value), min(cal_value),"
|
||||
+ " max(cal_value) FROM dc3_point_value_e2e"
|
||||
+ " WHERE device_id = 1 AND point_id = 100 GROUP BY 1")) {
|
||||
assertThat(rs.next()).isTrue();
|
||||
assertThat(rs.getInt(2)).isEqualTo(10);
|
||||
assertThat(rs.getDouble(3)).isEqualTo(24.5, org.assertj.core.data.Offset.offset(0.0001));
|
||||
@@ -93,9 +93,9 @@ class PostgresHypertableIT extends BaseE2eIT {
|
||||
}
|
||||
|
||||
try (Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT count(*) FROM timescaledb_information.hypertables"
|
||||
+ " WHERE hypertable_name = 'dc3_point_value_e2e'")) {
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT count(*) FROM timescaledb_information.hypertables"
|
||||
+ " WHERE hypertable_name = 'dc3_point_value_e2e'")) {
|
||||
assertThat(rs.next()).isTrue();
|
||||
assertThat(rs.getInt(1)).isEqualTo(1);
|
||||
}
|
||||
@@ -143,34 +143,34 @@ class PostgresHypertableIT extends BaseE2eIT {
|
||||
}
|
||||
|
||||
try (Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT count(*) FROM pg_extension WHERE extname IN ('timescaledb', 'vector')")) {
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT count(*) FROM pg_extension WHERE extname IN ('timescaledb', 'vector')")) {
|
||||
assertThat(rs.next()).isTrue();
|
||||
assertThat(rs.getInt(1)).isEqualTo(2);
|
||||
}
|
||||
|
||||
try (Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT vector_dims(embedding) FROM dc3_embedding_e2e WHERE id = 1")) {
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT vector_dims(embedding) FROM dc3_embedding_e2e WHERE id = 1")) {
|
||||
assertThat(rs.next()).isTrue();
|
||||
assertThat(rs.getInt(1)).isEqualTo(3);
|
||||
}
|
||||
|
||||
try (Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT name, embedding <-> '[0.11,0.19,0.31]'::vector AS distance"
|
||||
+ " FROM dc3_embedding_e2e ORDER BY embedding <-> '[0.11,0.19,0.31]'::vector"
|
||||
+ " LIMIT 1")) {
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT name, embedding <-> '[0.11,0.19,0.31]'::vector AS distance"
|
||||
+ " FROM dc3_embedding_e2e ORDER BY embedding <-> '[0.11,0.19,0.31]'::vector"
|
||||
+ " LIMIT 1")) {
|
||||
assertThat(rs.next()).isTrue();
|
||||
assertThat(rs.getString(1)).isEqualTo("temperature");
|
||||
assertThat(rs.getDouble(2)).isLessThan(0.03);
|
||||
}
|
||||
|
||||
try (Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT indexdef FROM pg_indexes"
|
||||
+ " WHERE tablename = 'dc3_embedding_e2e'"
|
||||
+ " AND indexname = 'dc3_embedding_e2e_hnsw_idx'")) {
|
||||
ResultSet rs = stmt.executeQuery(
|
||||
"SELECT indexdef FROM pg_indexes"
|
||||
+ " WHERE tablename = 'dc3_embedding_e2e'"
|
||||
+ " AND indexname = 'dc3_embedding_e2e_hnsw_idx'")) {
|
||||
assertThat(rs.next()).isTrue();
|
||||
assertThat(rs.getString(1)).contains("USING hnsw", "vector_l2_ops");
|
||||
}
|
||||
|
||||
@@ -35,25 +35,34 @@ import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import static org.awaitility.Awaitility.await;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.awaitility.Awaitility.await;
|
||||
|
||||
/**
|
||||
* Locks the RabbitMQ delivery contract DC3 relies on:
|
||||
* - publisher-confirm-mode=correlated guarantees the broker acks every routed message
|
||||
* - mandatory=true with a return listener fires on unroutable messages
|
||||
* - manual consumer ack drains a queue exactly once
|
||||
*
|
||||
* - publisher-confirm-mode=correlated guarantees the broker acks every routed message
|
||||
* - mandatory=true with a return listener fires on unroutable messages
|
||||
* - manual consumer ack drains a queue exactly once
|
||||
* <p>
|
||||
* Disabled by default; opt in with {@code DC3_E2E=true}.
|
||||
*/
|
||||
@EnabledIfEnvironmentVariable(named = "DC3_E2E", matches = "(?i)true|1|yes|on")
|
||||
class RabbitDeliveryIT extends BaseE2eIT {
|
||||
|
||||
private static Connection newConnection() throws Exception {
|
||||
ConnectionFactory factory = new ConnectionFactory();
|
||||
factory.setHost(E2eStack.rabbitHost());
|
||||
factory.setPort(E2eStack.rabbitAmqpPort());
|
||||
factory.setUsername(E2eStack.rabbitUsername());
|
||||
factory.setPassword(E2eStack.rabbitPassword());
|
||||
return factory.newConnection();
|
||||
}
|
||||
|
||||
@Test
|
||||
void confirmedPublishRoutesMessageToBoundQueue() throws Exception {
|
||||
try (Connection conn = newConnection();
|
||||
Channel channel = conn.createChannel()) {
|
||||
Channel channel = conn.createChannel()) {
|
||||
channel.confirmSelect();
|
||||
String exchange = "dc3.e2e.exchange." + UUID.randomUUID();
|
||||
String queue = "dc3.e2e.queue." + UUID.randomUUID();
|
||||
@@ -72,7 +81,7 @@ class RabbitDeliveryIT extends BaseE2eIT {
|
||||
@Test
|
||||
void mandatoryReturnsUnroutableMessageThroughReturnListener() throws Exception {
|
||||
try (Connection conn = newConnection();
|
||||
Channel channel = conn.createChannel()) {
|
||||
Channel channel = conn.createChannel()) {
|
||||
CompletableFuture<String> returned = new CompletableFuture<>();
|
||||
channel.addReturnListener(ret -> returned.complete(new String(ret.getBody(), StandardCharsets.UTF_8)));
|
||||
|
||||
@@ -90,7 +99,7 @@ class RabbitDeliveryIT extends BaseE2eIT {
|
||||
@Test
|
||||
void manualAckDrainsQueueExactlyOnce() throws Exception {
|
||||
try (Connection conn = newConnection();
|
||||
Channel channel = conn.createChannel()) {
|
||||
Channel channel = conn.createChannel()) {
|
||||
String exchange = "dc3.e2e.exchange." + UUID.randomUUID();
|
||||
String queue = "dc3.e2e.queue." + UUID.randomUUID();
|
||||
channel.exchangeDeclare(exchange, BuiltinExchangeType.DIRECT, false, true, null);
|
||||
@@ -131,7 +140,7 @@ class RabbitDeliveryIT extends BaseE2eIT {
|
||||
@Test
|
||||
void waitForConfirmsWithoutPendingPublishesCompletesImmediately() throws Exception {
|
||||
try (Connection conn = newConnection();
|
||||
Channel channel = conn.createChannel()) {
|
||||
Channel channel = conn.createChannel()) {
|
||||
channel.confirmSelect();
|
||||
assertThat(channel.waitForConfirms(50L)).isTrue();
|
||||
}
|
||||
@@ -140,15 +149,19 @@ class RabbitDeliveryIT extends BaseE2eIT {
|
||||
@Test
|
||||
void exclusiveQueueRejectsConsumerOnDifferentConnection() throws Exception {
|
||||
try (Connection owner = newConnection();
|
||||
Connection other = newConnection();
|
||||
Channel first = owner.createChannel()) {
|
||||
Connection other = newConnection();
|
||||
Channel first = owner.createChannel()) {
|
||||
String queue = "dc3.e2e.exclusive." + UUID.randomUUID();
|
||||
first.queueDeclare(queue, false, true, false, null);
|
||||
first.basicConsume(queue, true, "c1", (tag, delivery) -> {}, tag -> {});
|
||||
first.basicConsume(queue, true, "c1", (tag, delivery) -> {
|
||||
}, tag -> {
|
||||
});
|
||||
|
||||
Channel second = other.createChannel();
|
||||
try {
|
||||
assertThatThrownBy(() -> second.basicConsume(queue, true, "c2", (tag, delivery) -> {}, tag -> {}))
|
||||
assertThatThrownBy(() -> second.basicConsume(queue, true, "c2", (tag, delivery) -> {
|
||||
}, tag -> {
|
||||
}))
|
||||
.isInstanceOf(java.io.IOException.class)
|
||||
.hasRootCauseInstanceOf(com.rabbitmq.client.ShutdownSignalException.class)
|
||||
.hasStackTraceContaining("RESOURCE_LOCKED");
|
||||
@@ -172,13 +185,4 @@ class RabbitDeliveryIT extends BaseE2eIT {
|
||||
assertThatThrownBy(factory::newConnection)
|
||||
.isInstanceOfAny(java.io.IOException.class, TimeoutException.class);
|
||||
}
|
||||
|
||||
private static Connection newConnection() throws Exception {
|
||||
ConnectionFactory factory = new ConnectionFactory();
|
||||
factory.setHost(E2eStack.rabbitHost());
|
||||
factory.setPort(E2eStack.rabbitAmqpPort());
|
||||
factory.setUsername(E2eStack.rabbitUsername());
|
||||
factory.setPassword(E2eStack.rabbitPassword());
|
||||
return factory.newConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
|
||||
package io.github.pnoker.e2e;
|
||||
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
import com.sun.net.httpserver.HttpServer;
|
||||
import io.github.pnoker.e2e.harness.BaseE2eIT;
|
||||
import io.restassured.RestAssured;
|
||||
import io.restassured.config.RestAssuredConfig;
|
||||
@@ -30,9 +32,6 @@ import java.io.OutputStream;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
import com.sun.net.httpserver.HttpServer;
|
||||
|
||||
import static io.restassured.RestAssured.given;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
@@ -40,17 +39,17 @@ import static org.hamcrest.Matchers.notNullValue;
|
||||
|
||||
/**
|
||||
* Pins the rest-assured wiring shape that the platform-driven E2E flows will use:
|
||||
* - JSON request and response shaping
|
||||
* - status code + body matchers
|
||||
* - {@link io.restassured.config.RestAssuredConfig} default content type override so
|
||||
* non-JSON content types do not silently parse as form
|
||||
*
|
||||
* - JSON request and response shaping
|
||||
* - status code + body matchers
|
||||
* - {@link io.restassured.config.RestAssuredConfig} default content type override so
|
||||
* non-JSON content types do not silently parse as form
|
||||
* <p>
|
||||
* The platform-image-driven user-flow scenarios (login, driver registration, write
|
||||
* point value, gateway 401, cross-tenant isolation, OFFLINE auto-status, command
|
||||
* round-trip, DLX requeue, agentic via WireMock, CSV import, token rotation) will
|
||||
* extend this harness once dc3-center-* and dc3-driver-* publish immutable image
|
||||
* tags suitable for CI. Until then the dependency on rest-assured is locked here.
|
||||
*
|
||||
* <p>
|
||||
* Disabled by default; opt in with {@code DC3_E2E=true}.
|
||||
*/
|
||||
@EnabledIfEnvironmentVariable(named = "DC3_E2E", matches = "(?i)true|1|yes|on")
|
||||
|
||||
Reference in New Issue
Block a user