147 lines
8.7 KiB
Java
147 lines
8.7 KiB
Java
package com.yfd.business.css;
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.Assertions;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.test.web.servlet.MockMvc;
|
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
|
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
|
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
|
|
|
@SpringBootTest
|
|
@AutoConfigureMockMvc
|
|
public class SimulationInitTest {
|
|
|
|
@Autowired
|
|
private MockMvc mockMvc;
|
|
@Autowired
|
|
private ObjectMapper objectMapper;
|
|
|
|
@Test
|
|
public void initSimulation_and_queryResults() throws Exception {
|
|
String projectId = "proj-0001-uuid";
|
|
String scenarioId = "scen-001-uuid";
|
|
|
|
String projectJson = "{\"projectId\":\"" + projectId + "\",\"name\":\"测试项目\"}";
|
|
mockMvc.perform(MockMvcRequestBuilders.post("/projects")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(projectJson))
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
String topology = "{\"devices\":[{\"deviceId\":\"dev-002-uuid\",\"name\":\"设备01\",\"type\":\"CylindricalTank\",\"static\":{\"diameter\":120,\"unit\":\"cm\"},\"properties\":{\"height\":{\"type\":\"influence\",\"unit\":\"cm\",\"bias\":0,\"sources\":[{\"entityType\":\"device\",\"entityId\":\"dev-002-uuid\",\"property\":\"diameter\",\"coefficient\":1,\"delay\":{\"enabled\":true,\"time\":0,\"unit\":\"s\"}}]}}},"
|
|
+ "{\"deviceId\":\"dev-003-uuid\",\"name\":\"设备02\",\"type\":\"AnnularTank\",\"static\":{\"diameter\":130,\"unit\":\"cm\"},\"properties\":{\"height\":{\"type\":\"influence\",\"unit\":\"cm\",\"bias\":0,\"sources\":[{\"entityType\":\"device\",\"entityId\":\"dev-003-uuid\",\"property\":\"diameter\",\"coefficient\":1,\"delay\":{\"enabled\":true,\"time\":0,\"unit\":\"s\"}}]}}}],\"pipelines\":[]}";
|
|
String topologyBody = "{\"topology\":" + objectMapper.writeValueAsString(objectMapper.readTree(topology)) + "}";
|
|
mockMvc.perform(MockMvcRequestBuilders.put("/projects/" + projectId + "/topology")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(topologyBody))
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
String createEventBody = "{\"scenarioId\":\"" + scenarioId + "\"}";
|
|
String eventResp = mockMvc.perform(MockMvcRequestBuilders.post("/events")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(createEventBody))
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
.andReturn().getResponse().getContentAsString();
|
|
JsonNode eventNode = objectMapper.readTree(eventResp).path("data");
|
|
String eventId = eventNode.path("eventId").asText();
|
|
|
|
String attrChanges = "{"
|
|
+ "\"attr_changes\":{"
|
|
+ "\"target\":{\"entityType\":\"device\",\"entityId\":\"dev-002-uuid\",\"property\":\"diameter\"},"
|
|
+ "\"unit\":\"cm\","
|
|
+ "\"segments\":[{"
|
|
+ "\"segmentId\":\"segment-1\",\"start\":0,\"end\":18,"
|
|
+ "\"timeline\":["
|
|
+ "{\"t\":0,\"value\":20},{\"t\":2,\"value\":50},{\"t\":4,\"value\":70},{\"t\":6,\"value\":100},"
|
|
+ "{\"t\":8,\"value\":120},{\"t\":10,\"value\":150},{\"t\":12,\"value\":200},{\"t\":14,\"value\":220},"
|
|
+ "{\"t\":16,\"value\":250},{\"t\":18,\"value\":300}"
|
|
+ "]"
|
|
+ "}]"
|
|
+ "}"
|
|
+ "}";
|
|
mockMvc.perform(MockMvcRequestBuilders.put("/events/" + eventId + "/attr-changes")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(attrChanges))
|
|
.andExpect(MockMvcResultMatchers.status().isOk());
|
|
|
|
String initBody = "{\"startTime\":0,\"endTime\":18,\"step\":2}";
|
|
String initResp = mockMvc.perform(MockMvcRequestBuilders.post("/projects/" + projectId + "/scenarios/" + scenarioId + "/simulation/init")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(initBody))
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0))
|
|
.andReturn().getResponse().getContentAsString();
|
|
JsonNode initNode = objectMapper.readTree(initResp).path("data");
|
|
int generatedEvents = initNode.path("generated").path("events").asInt();
|
|
int generatedSnapshots = initNode.path("generated").path("snapshots").asInt();
|
|
Assertions.assertTrue(generatedEvents >= 0);
|
|
Assertions.assertTrue(generatedSnapshots >= 0);
|
|
|
|
mockMvc.perform(MockMvcRequestBuilders.get("/scenario-results/by-scenario")
|
|
.param("scenarioId", scenarioId)
|
|
.param("pageNum", "1")
|
|
.param("pageSize", "50"))
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0))
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$.data.records").isArray());
|
|
}
|
|
|
|
@Test
|
|
public void initSimulation_direct() throws Exception {
|
|
String projectId = "proj-0001-uuid";
|
|
String scenarioId = "scen-001-uuid";
|
|
String initBody = "{\"startTime\":0,\"endTime\":10,\"step\":2}";
|
|
String initResp = mockMvc.perform(MockMvcRequestBuilders.post("/projects/" + projectId + "/scenarios/" + scenarioId + "/simulation/init")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(initBody))
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0))
|
|
.andReturn().getResponse().getContentAsString();
|
|
JsonNode initNode = objectMapper.readTree(initResp).path("data");
|
|
int generatedEvents = initNode.path("generated").path("events").asInt();
|
|
int generatedSnapshots = initNode.path("generated").path("snapshots").asInt();
|
|
Assertions.assertTrue(generatedEvents >= 0);
|
|
Assertions.assertTrue(generatedSnapshots >= 0);
|
|
mockMvc.perform(MockMvcRequestBuilders.get("/scenario-results/by-scenario")
|
|
.param("scenarioId", scenarioId)
|
|
.param("pageNum", "1")
|
|
.param("pageSize", "50"))
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0))
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$.data.records").isArray());
|
|
}
|
|
|
|
@Test
|
|
public void initSimulation_returnData() throws Exception {
|
|
String projectId = "proj-0001-uuid";
|
|
String scenarioId = "scen-001-uuid";
|
|
String initBody = "{\"startTime\":0,\"endTime\":12,\"step\":3}";
|
|
String initResp = mockMvc.perform(MockMvcRequestBuilders.post("/projects/" + projectId + "/scenarios/" + scenarioId + "/simulation/init")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(initBody))
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0))
|
|
.andReturn().getResponse().getContentAsString();
|
|
System.out.println("initResp=" + initResp);
|
|
JsonNode initNode = objectMapper.readTree(initResp).path("data");
|
|
int eventsCount = initNode.path("generated").path("events").asInt();
|
|
int snapshotsCount = initNode.path("generated").path("snapshots").asInt();
|
|
System.out.println("eventsCount=" + eventsCount + ", snapshotsCount=" + snapshotsCount);
|
|
String resultResp = mockMvc.perform(MockMvcRequestBuilders.get("/scenario-results/by-scenario")
|
|
.param("scenarioId", scenarioId)
|
|
.param("pageNum", "1")
|
|
.param("pageSize", "20"))
|
|
.andExpect(MockMvcResultMatchers.status().isOk())
|
|
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value(0))
|
|
.andReturn().getResponse().getContentAsString();
|
|
System.out.println("resultResp=" + resultResp);
|
|
JsonNode resultNode = objectMapper.readTree(resultResp).path("data").path("records");
|
|
Assertions.assertTrue(resultNode.isArray());
|
|
System.out.println("recordsSize=" + resultNode.size());
|
|
}
|
|
}
|