From 55fc7131fbbbe6dcaadffbf1c4633a37c5d1bb8d Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Sat, 17 Dec 2022 16:58:58 +0200 Subject: [PATCH] Validation for rule node configuration; improve validation error message --- .../controller/AbstractNotifyEntityTest.java | 2 +- .../BaseRuleChainControllerTest.java | 31 +++++++++ .../server/common/data/alarm/Alarm.java | 2 + .../common/data/rule/RuleChainMetaData.java | 1 - .../common/data/util/ReflectionUtils.java | 31 +++++++++ .../server/common/data/validation/Length.java | 2 +- .../server/common/data/validation/NoXss.java | 2 +- .../server/dao/audit/AuditLogServiceImpl.java | 2 +- .../server/dao/rule/BaseRuleChainService.java | 37 +---------- .../dao/service/ConstraintValidator.java | 28 +++++--- .../validator/RuleChainDataValidator.java | 65 +++++++++++++++++++ .../service/BaseOtaPackageServiceTest.java | 4 +- .../dao/service/NoXssValidatorTest.java | 4 +- .../TbAbstractAlarmNodeConfiguration.java | 2 + .../TbCreateAlarmNodeConfiguration.java | 2 + 15 files changed, 164 insertions(+), 51 deletions(-) create mode 100644 common/data/src/main/java/org/thingsboard/server/common/data/util/ReflectionUtils.java diff --git a/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java b/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java index 39421a4364..8de7157b52 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java @@ -597,7 +597,7 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { } protected String msgErrorFieldLength(String fieldName) { - return "length of " + fieldName + " must be equal or less than 255"; + return fieldName + " length must be equal or less than 255"; } protected String msgErrorNoFound(String entityClassName, String assetIdStr) { diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseRuleChainControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseRuleChainControllerTest.java index d32b1baa6b..8daf8356ea 100644 --- a/application/src/test/java/org/thingsboard/server/controller/BaseRuleChainControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/BaseRuleChainControllerTest.java @@ -26,6 +26,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.test.context.ContextConfiguration; +import org.thingsboard.rule.engine.action.TbCreateAlarmNode; +import org.thingsboard.rule.engine.action.TbCreateAlarmNodeConfiguration; import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.User; @@ -35,7 +37,9 @@ import org.thingsboard.server.common.data.id.RuleChainId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.rule.RuleChain; +import org.thingsboard.server.common.data.rule.RuleChainMetaData; import org.thingsboard.server.common.data.rule.RuleChainType; +import org.thingsboard.server.common.data.rule.RuleNode; import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.rule.RuleChainDao; @@ -44,6 +48,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.Matchers.containsString; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -254,9 +259,35 @@ public abstract class BaseRuleChainControllerTest extends AbstractControllerTest testEntityDaoWithRelationsTransactionalException(ruleChainDao, savedTenant.getId(), ruleChainId, "/api/ruleChain/" + ruleChainId); } + @Test + public void givenRuleNodeWithInvalidConfiguration_thenReturnError() throws Exception { + RuleChain ruleChain = createRuleChain("Rule chain with invalid nodes"); + RuleChainMetaData ruleChainMetaData = new RuleChainMetaData(); + ruleChainMetaData.setRuleChainId(ruleChain.getId()); + + RuleNode createAlarmNode = new RuleNode(); + createAlarmNode.setName("Create alarm"); + createAlarmNode.setType(TbCreateAlarmNode.class.getName()); + TbCreateAlarmNodeConfiguration invalidCreateAlarmNodeConfiguration = new TbCreateAlarmNodeConfiguration(); + invalidCreateAlarmNodeConfiguration.setSeverity("