add test for getting rpcs by device_id; refactor test class for RpcController

This commit is contained in:
desoliture 2021-11-30 17:55:30 +02:00
parent 4c05c48cc9
commit aa395e3c51

View File

@ -15,43 +15,24 @@
*/
package org.thingsboard.server.controller;
import com.datastax.oss.driver.api.core.uuid.Uuids;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.util.ReflectionUtils;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.*;
import org.thingsboard.server.common.data.edge.Edge;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DeviceCredentialsId;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.relation.EntityRelation;
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
import org.thingsboard.server.common.data.rpc.Rpc;
import org.thingsboard.server.common.data.rpc.RpcStatus;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.security.DeviceCredentials;
import org.thingsboard.server.common.data.security.DeviceCredentialsType;
import org.thingsboard.server.dao.model.ModelConstants;
import java.lang.reflect.Method;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.List;
import static org.hamcrest.Matchers.containsString;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
public abstract class BaseRpcControllerTest extends AbstractControllerTest {
@ -85,14 +66,15 @@ public abstract class BaseRpcControllerTest extends AbstractControllerTest {
.andExpect(status().isOk());
}
@Test
public void testSaveRpc() throws Exception {
private Device createDefaultDevice() {
Device device = new Device();
device.setName("My device");
device.setType("default");
Device savedDevice = doPost("/api/device", device, Device.class);
//Creating RPC
return device;
}
private ObjectNode createDefaultRpc() {
ObjectNode rpc = JacksonUtil.newObjectNode();
rpc.put("method", "setGpio");
@ -105,17 +87,41 @@ public abstract class BaseRpcControllerTest extends AbstractControllerTest {
rpc.put("persistent", true);
rpc.put("timeout", 5000);
String url = "/api/rpc/oneway/" + savedDevice.getId().getId().toString();
return rpc;
}
//Send one-way RPC
String result = doPostAsync(url, JacksonUtil.toString(rpc), String.class, status().isOk());
private Rpc getRpcById(String rpcId) throws Exception {
return doGet("/api/rpc/persistent/" + rpcId, Rpc.class);
}
private MvcResult removeRpcById(String rpcId) throws Exception {
return doDelete("/api/rpc/persistent/" + rpcId).andReturn();
}
private MvcResult getRpcByDeviceId(String deviceId) throws Exception {
String url = "/api/rpc/persistent/device/" + deviceId
+ "?" + "page=0" + "&" +
"pageSize=" + Integer.MAX_VALUE + "&" +
"rpcStatus=" + RpcStatus.DELETED.name();
return doGet(url).andReturn();
}
@Test
public void testSaveRpc() throws Exception {
Device device = createDefaultDevice();
Device savedDevice = doPost("/api/device", device, Device.class);
ObjectNode rpc = createDefaultRpc();
String result = doPostAsync(
"/api/rpc/oneway/" + savedDevice.getId().getId().toString(),
JacksonUtil.toString(rpc),
String.class,
status().isOk()
);
String rpcId = JacksonUtil.fromString(result, JsonNode.class)
.get("rpcId")
.asText();
//Get RPC by id
url = "/api/rpc/persistent/" + rpcId;
Rpc savedRpc = doGet(url, Rpc.class);
Rpc savedRpc = getRpcById(rpcId);
//Assertion
Assert.assertNotNull(savedRpc);
@ -124,61 +130,69 @@ public abstract class BaseRpcControllerTest extends AbstractControllerTest {
@Test
public void testDeleteRpc() throws Exception {
Device device = new Device();
device.setName("My device");
device.setType("default");
Device device = createDefaultDevice();
Device savedDevice = doPost("/api/device", device, Device.class);
//Creating RPC
ObjectNode rpc = JacksonUtil.newObjectNode();
rpc.put("method", "setGpio");
ObjectNode rpc = createDefaultRpc();
String result = doPostAsync(
"/api/rpc/oneway/" + savedDevice.getId().getId().toString(),
JacksonUtil.toString(rpc),
String.class,
status().isOk()
);
String rpcId = JacksonUtil.fromString(result, JsonNode.class)
.get("rpcId")
.asText();
Rpc savedRpc = getRpcById(rpcId);
ObjectNode params = JacksonUtil.newObjectNode();
MvcResult mvcResult = removeRpcById(savedRpc.getId().getId().toString());
MvcResult res = doGet("/api/rpc/persistent/" + rpcId)
.andExpect(status().isNotFound())
.andReturn();
params.put("pin", 7);
params.put("value", 1);
JsonNode deleteResponse = JacksonUtil.fromString(res.getResponse().getContentAsString(), JsonNode.class);
Assert.assertEquals(404, deleteResponse.get("status").asInt());
rpc.set("params", params);
rpc.put("persistent", true);
rpc.put("timeout", 5000);
MvcResult byDeviceResult = getRpcByDeviceId(savedDevice.getUuidId().toString());
JsonNode byDeviceResponse = JacksonUtil.fromString(byDeviceResult.getResponse().getContentAsString(), JsonNode.class);
String url = "/api/rpc/oneway/" + savedDevice.getId().getId().toString();
Assert.assertEquals(500, byDeviceResponse.get("status").asInt());
}
//Send one-way RPC
String result = doPostAsync(url, JacksonUtil.toString(rpc), String.class, status().isOk());
@Test
public void testGetRpcsByDeviceId() throws Exception {
Device device = createDefaultDevice();
Device savedDevice = doPost("/api/device", device, Device.class);
ObjectNode rpc = createDefaultRpc();
String result = doPostAsync(
"/api/rpc/oneway/" + savedDevice.getId().getId().toString(),
JacksonUtil.toString(rpc),
String.class,
status().isOk()
);
String rpcId = JacksonUtil.fromString(result, JsonNode.class)
.get("rpcId")
.asText();
//Get RPC by id
url = "/api/rpc/persistent/" + rpcId;
Rpc savedRpc = doGet(url, Rpc.class);
//Deleting RPC
url = "/api/rpc/persistent/" + savedRpc.getId().getId().toString();
MvcResult mvcResult = doDelete(url).andReturn();
//Try to get deleted RPC
url = "/api/rpc/persistent/" + rpcId;
MvcResult res = doGet(url).andExpect(status().isNotFound()).andReturn();
//Getting statusCode from delete-response
JsonNode deleteResponse = JacksonUtil.fromString(res.getResponse().getContentAsString(), JsonNode.class);
int status = deleteResponse.get("status").asInt();
//Assert it
Assert.assertEquals(404, status);
//Try to get deleted RPC by device
url = "/api/rpc/persistent/device/" + savedDevice.getUuidId()
String url = "/api/rpc/persistent/device/" + savedDevice.getId().getId()
+ "?" + "page=0" + "&" +
"pageSize=" + Integer.MAX_VALUE + "&" +
"rpcStatus=" + RpcStatus.DELETED.name();
MvcResult byDeviceResult = doGet(url).andReturn();
JsonNode byDeviceResponse = JacksonUtil.fromString(byDeviceResult.getResponse().getContentAsString(), JsonNode.class);
status = byDeviceResponse.get("status").asInt();
"rpcStatus=" + RpcStatus.QUEUED;
//Assert 2
Assert.assertEquals(500, status);
MvcResult byDeviceResult = doGetAsync(url).andReturn();
String rpcs = byDeviceResult.getResponse().getContentAsString();
PageData<Rpc> byDeviceResponse = JacksonUtil.fromString(byDeviceResult.getResponse().getContentAsString(), new TypeReference<PageData<Rpc>>() {});
List<Rpc> byDeviceRpcs = byDeviceResponse.getData();
boolean found = byDeviceRpcs.stream().anyMatch(r ->
r.getUuidId().toString().equals(rpcId)
&& r.getDeviceId().equals(savedDevice.getId())
);
Assert.assertTrue(found);
}
}