From 045fbf5b5e4d171baeccd47597b37e8b3155325d Mon Sep 17 00:00:00 2001 From: desoliture Date: Mon, 29 Nov 2021 19:01:22 +0200 Subject: [PATCH 1/5] add rpcStatus:deleted, add throwing bad_request when getting the rpc entity with status:deleted --- .../org/thingsboard/server/controller/RpcV2Controller.java | 6 ++++++ .../org/thingsboard/server/common/data/rpc/RpcStatus.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java b/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java index 389a767cdf..cd3195c9f1 100644 --- a/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java +++ b/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java @@ -32,6 +32,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.context.request.async.DeferredResult; +import org.springframework.web.server.ResponseStatusException; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.exception.ThingsboardException; import org.thingsboard.server.common.data.id.DeviceId; @@ -187,10 +188,15 @@ public class RpcV2Controller extends AbstractRpcController { @RequestParam(required = false) String sortOrder) throws ThingsboardException { checkParameter("DeviceId", strDeviceId); try { + if (rpcStatus.equals(RpcStatus.DELETED)) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "RpcStatus: DELETED"); + } + TenantId tenantId = getCurrentUser().getTenantId(); PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); DeviceId deviceId = new DeviceId(UUID.fromString(strDeviceId)); final DeferredResult response = new DeferredResult<>(); + accessValidator.validate(getCurrentUser(), Operation.RPC_CALL, deviceId, new HttpValidationCallback(response, new FutureCallback<>() { @Override public void onSuccess(@Nullable DeferredResult result) { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/rpc/RpcStatus.java b/common/data/src/main/java/org/thingsboard/server/common/data/rpc/RpcStatus.java index 43592fde0c..5ebf33d551 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/rpc/RpcStatus.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/rpc/RpcStatus.java @@ -16,5 +16,5 @@ package org.thingsboard.server.common.data.rpc; public enum RpcStatus { - QUEUED, SENT, DELIVERED, SUCCESSFUL, TIMEOUT, EXPIRED, FAILED + QUEUED, SENT, DELIVERED, SUCCESSFUL, TIMEOUT, EXPIRED, FAILED, DELETED } From 4c05c48cc90178eb7340747ea79643b9bf7924cf Mon Sep 17 00:00:00 2001 From: desoliture Date: Tue, 30 Nov 2021 16:20:44 +0200 Subject: [PATCH 2/5] add tests to RpcV2Controller --- .../server/controller/RpcV2Controller.java | 2 +- .../controller/BaseRpcControllerTest.java | 184 ++++++++++++++++++ .../controller/ControllerSqlTestSuite.java | 2 +- .../ComponentDescriptorControllerSqlTest.java | 3 - .../controller/sql/RpcControllerTest.java | 23 +++ 5 files changed, 209 insertions(+), 5 deletions(-) create mode 100644 application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java create mode 100644 application/src/test/java/org/thingsboard/server/controller/sql/RpcControllerTest.java diff --git a/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java b/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java index cd3195c9f1..6eb5eb3f6a 100644 --- a/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java +++ b/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java @@ -225,7 +225,7 @@ public class RpcV2Controller extends AbstractRpcController { @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") @RequestMapping(value = "/persistent/{rpcId}", method = RequestMethod.DELETE) @ResponseBody - public void deleteResource( + public void deleteRpc( @ApiParam(value = RPC_ID_PARAM_DESCRIPTION, required = true) @PathVariable(RPC_ID) String strRpc) throws ThingsboardException { checkParameter("RpcId", strRpc); diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java new file mode 100644 index 0000000000..106bfcb238 --- /dev/null +++ b/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java @@ -0,0 +1,184 @@ +/** + * Copyright © 2016-2021 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +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 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 { + + private Tenant savedTenant; + private User tenantAdmin; + + @Before + public void beforeTest() throws Exception { + loginSysAdmin(); + + Tenant tenant = new Tenant(); + tenant.setTitle("My tenant"); + savedTenant = doPost("/api/tenant", tenant, Tenant.class); + Assert.assertNotNull(savedTenant); + + tenantAdmin = new User(); + tenantAdmin.setAuthority(Authority.TENANT_ADMIN); + tenantAdmin.setTenantId(savedTenant.getId()); + tenantAdmin.setEmail("tenant2@thingsboard.org"); + tenantAdmin.setFirstName("Joe"); + tenantAdmin.setLastName("Downs"); + + tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1"); + } + + @After + public void afterTest() throws Exception { + loginSysAdmin(); + + doDelete("/api/tenant/" + savedTenant.getId().getId().toString()) + .andExpect(status().isOk()); + } + + @Test + public void testSaveRpc() throws Exception { + Device device = new Device(); + device.setName("My device"); + device.setType("default"); + Device savedDevice = doPost("/api/device", device, Device.class); + + //Creating RPC + ObjectNode rpc = JacksonUtil.newObjectNode(); + rpc.put("method", "setGpio"); + + ObjectNode params = JacksonUtil.newObjectNode(); + + params.put("pin", 7); + params.put("value", 1); + + rpc.set("params", params); + rpc.put("persistent", true); + rpc.put("timeout", 5000); + + String url = "/api/rpc/oneway/" + savedDevice.getId().getId().toString(); + + //Send one-way RPC + String result = doPostAsync(url, 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); + + //Assertion + Assert.assertNotNull(savedRpc); + Assert.assertEquals(savedDevice.getId(), savedRpc.getDeviceId()); + } + + @Test + public void testDeleteRpc() throws Exception { + Device device = new Device(); + device.setName("My device"); + device.setType("default"); + Device savedDevice = doPost("/api/device", device, Device.class); + + //Creating RPC + ObjectNode rpc = JacksonUtil.newObjectNode(); + rpc.put("method", "setGpio"); + + ObjectNode params = JacksonUtil.newObjectNode(); + + params.put("pin", 7); + params.put("value", 1); + + rpc.set("params", params); + rpc.put("persistent", true); + rpc.put("timeout", 5000); + + String url = "/api/rpc/oneway/" + savedDevice.getId().getId().toString(); + + //Send one-way RPC + String result = doPostAsync(url, 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() + + "?" + "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(); + + //Assert 2 + Assert.assertEquals(500, status); + } +} diff --git a/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java b/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java index e30ef07b5b..1973cccc46 100644 --- a/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java +++ b/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java @@ -30,7 +30,7 @@ import java.util.Arrays; // "org.thingsboard.server.controller.sql.EntityQueryControllerSqlTest", // "org.thingsboard.server.controller.sql.TbResourceControllerSqlTest", // "org.thingsboard.server.controller.sql.DeviceProfileControllerSqlTest", - "org.thingsboard.server.controller.sql.*Test", + "org.thingsboard.server.controller.sql.RpcControllerTest", }) public class ControllerSqlTestSuite { diff --git a/application/src/test/java/org/thingsboard/server/controller/sql/ComponentDescriptorControllerSqlTest.java b/application/src/test/java/org/thingsboard/server/controller/sql/ComponentDescriptorControllerSqlTest.java index 48a6dd0fc4..8ebf01f48a 100644 --- a/application/src/test/java/org/thingsboard/server/controller/sql/ComponentDescriptorControllerSqlTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/sql/ComponentDescriptorControllerSqlTest.java @@ -18,9 +18,6 @@ package org.thingsboard.server.controller.sql; import org.thingsboard.server.controller.BaseComponentDescriptorControllerTest; import org.thingsboard.server.dao.service.DaoSqlTest; -/** - * Created by Valerii Sosliuk on 6/28/2017. - */ @DaoSqlTest public class ComponentDescriptorControllerSqlTest extends BaseComponentDescriptorControllerTest { } diff --git a/application/src/test/java/org/thingsboard/server/controller/sql/RpcControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/sql/RpcControllerTest.java new file mode 100644 index 0000000000..2d2b58e41d --- /dev/null +++ b/application/src/test/java/org/thingsboard/server/controller/sql/RpcControllerTest.java @@ -0,0 +1,23 @@ +/** + * Copyright © 2016-2021 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.controller.sql; + +import org.thingsboard.server.controller.BaseRpcControllerTest; +import org.thingsboard.server.dao.service.DaoSqlTest; + +@DaoSqlTest +public class RpcControllerTest extends BaseRpcControllerTest { +} From aa395e3c513fa6595083a34465cf9a1b4951c228 Mon Sep 17 00:00:00 2001 From: desoliture Date: Tue, 30 Nov 2021 17:55:30 +0200 Subject: [PATCH 3/5] add test for getting rpcs by device_id; refactor test class for RpcController --- .../controller/BaseRpcControllerTest.java | 160 ++++++++++-------- 1 file changed, 87 insertions(+), 73 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java index 106bfcb238..69db64eeae 100644 --- a/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java @@ -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 byDeviceResponse = JacksonUtil.fromString(byDeviceResult.getResponse().getContentAsString(), new TypeReference>() {}); + + List byDeviceRpcs = byDeviceResponse.getData(); + + boolean found = byDeviceRpcs.stream().anyMatch(r -> + r.getUuidId().toString().equals(rpcId) + && r.getDeviceId().equals(savedDevice.getId()) + ); + + Assert.assertTrue(found); } } From d854bab8cbd1861fd1ba3939a7156c373317dcdd Mon Sep 17 00:00:00 2001 From: desoliture Date: Wed, 1 Dec 2021 11:13:39 +0200 Subject: [PATCH 4/5] refactor RpcController tests --- .../controller/BaseRpcControllerTest.java | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java index 69db64eeae..2881a5194a 100644 --- a/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/BaseRpcControllerTest.java @@ -98,14 +98,6 @@ public abstract class BaseRpcControllerTest extends AbstractControllerTest { 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(); @@ -123,7 +115,6 @@ public abstract class BaseRpcControllerTest extends AbstractControllerTest { .asText(); Rpc savedRpc = getRpcById(rpcId); - //Assertion Assert.assertNotNull(savedRpc); Assert.assertEquals(savedDevice.getId(), savedRpc.getDeviceId()); } @@ -153,7 +144,11 @@ public abstract class BaseRpcControllerTest extends AbstractControllerTest { JsonNode deleteResponse = JacksonUtil.fromString(res.getResponse().getContentAsString(), JsonNode.class); Assert.assertEquals(404, deleteResponse.get("status").asInt()); - MvcResult byDeviceResult = getRpcByDeviceId(savedDevice.getUuidId().toString()); + String url = "/api/rpc/persistent/device/" + savedDevice.getUuidId().toString() + + "?" + "page=0" + "&" + + "pageSize=" + Integer.MAX_VALUE + "&" + + "rpcStatus=" + RpcStatus.DELETED.name(); + MvcResult byDeviceResult = doGet(url).andReturn(); JsonNode byDeviceResponse = JacksonUtil.fromString(byDeviceResult.getResponse().getContentAsString(), JsonNode.class); Assert.assertEquals(500, byDeviceResponse.get("status").asInt()); @@ -183,10 +178,13 @@ public abstract class BaseRpcControllerTest extends AbstractControllerTest { MvcResult byDeviceResult = doGetAsync(url).andReturn(); - String rpcs = byDeviceResult.getResponse().getContentAsString(); - PageData byDeviceResponse = JacksonUtil.fromString(byDeviceResult.getResponse().getContentAsString(), new TypeReference>() {}); + List byDeviceRpcs = JacksonUtil.fromString( + byDeviceResult + .getResponse() + .getContentAsString(), + new TypeReference>() {} + ).getData(); - List byDeviceRpcs = byDeviceResponse.getData(); boolean found = byDeviceRpcs.stream().anyMatch(r -> r.getUuidId().toString().equals(rpcId) From 3f67de38426dd649a1611c74eb50dddef8c5112f Mon Sep 17 00:00:00 2001 From: desoliture Date: Wed, 1 Dec 2021 11:30:16 +0200 Subject: [PATCH 5/5] refactor --- .../java/org/thingsboard/server/controller/RpcV2Controller.java | 1 + .../thingsboard/server/controller/ControllerSqlTestSuite.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java b/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java index 6eb5eb3f6a..35968fed22 100644 --- a/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java +++ b/application/src/main/java/org/thingsboard/server/controller/RpcV2Controller.java @@ -241,6 +241,7 @@ public class RpcV2Controller extends AbstractRpcController { } rpcService.deleteRpc(getTenantId(), rpcId); + rpc.setStatus(RpcStatus.DELETED); TbMsg msg = TbMsg.newMsg(RPC_DELETED, rpc.getDeviceId(), TbMsgMetaData.EMPTY, JacksonUtil.toString(rpc)); tbClusterService.pushMsgToRuleEngine(getTenantId(), rpc.getDeviceId(), msg, null); diff --git a/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java b/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java index 1973cccc46..e30ef07b5b 100644 --- a/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java +++ b/application/src/test/java/org/thingsboard/server/controller/ControllerSqlTestSuite.java @@ -30,7 +30,7 @@ import java.util.Arrays; // "org.thingsboard.server.controller.sql.EntityQueryControllerSqlTest", // "org.thingsboard.server.controller.sql.TbResourceControllerSqlTest", // "org.thingsboard.server.controller.sql.DeviceProfileControllerSqlTest", - "org.thingsboard.server.controller.sql.RpcControllerTest", + "org.thingsboard.server.controller.sql.*Test", }) public class ControllerSqlTestSuite {