removed check for timeseries keys existence
This commit is contained in:
		
							parent
							
								
									61254a6850
								
							
						
					
					
						commit
						a5ce56fe4c
					
				@ -88,12 +88,6 @@ class AlarmRuleState {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean validateAttrUpdate(Set<AlarmConditionFilterKey> changedKeys) {
 | 
					    public boolean validateAttrUpdate(Set<AlarmConditionFilterKey> changedKeys) {
 | 
				
			||||||
        //If the attribute was updated, but no new telemetry arrived - we ignore this until new telemetry is there.
 | 
					 | 
				
			||||||
        for (AlarmConditionFilterKey key : entityKeys) {
 | 
					 | 
				
			||||||
            if (key.getType().equals(AlarmConditionKeyType.TIME_SERIES)) {
 | 
					 | 
				
			||||||
                return false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        for (AlarmConditionFilterKey key : changedKeys) {
 | 
					        for (AlarmConditionFilterKey key : changedKeys) {
 | 
				
			||||||
            if (entityKeys.contains(key)) {
 | 
					            if (entityKeys.contains(key)) {
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
 | 
				
			|||||||
@ -58,6 +58,8 @@ import org.thingsboard.server.common.data.id.DeviceId;
 | 
				
			|||||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
 | 
					import org.thingsboard.server.common.data.id.DeviceProfileId;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
					import org.thingsboard.server.common.data.id.TenantId;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 | 
					import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.kv.TsKvEntry;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.kv.TsKvEntryAggWrapper;
 | 
				
			||||||
import org.thingsboard.server.common.data.msg.TbMsgType;
 | 
					import org.thingsboard.server.common.data.msg.TbMsgType;
 | 
				
			||||||
import org.thingsboard.server.common.data.query.BooleanFilterPredicate;
 | 
					import org.thingsboard.server.common.data.query.BooleanFilterPredicate;
 | 
				
			||||||
import org.thingsboard.server.common.data.query.DynamicValue;
 | 
					import org.thingsboard.server.common.data.query.DynamicValue;
 | 
				
			||||||
@ -65,6 +67,7 @@ import org.thingsboard.server.common.data.query.DynamicValueSourceType;
 | 
				
			|||||||
import org.thingsboard.server.common.data.query.EntityKeyValueType;
 | 
					import org.thingsboard.server.common.data.query.EntityKeyValueType;
 | 
				
			||||||
import org.thingsboard.server.common.data.query.FilterPredicateValue;
 | 
					import org.thingsboard.server.common.data.query.FilterPredicateValue;
 | 
				
			||||||
import org.thingsboard.server.common.data.query.NumericFilterPredicate;
 | 
					import org.thingsboard.server.common.data.query.NumericFilterPredicate;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.query.NumericFilterPredicate.NumericOperation;
 | 
				
			||||||
import org.thingsboard.server.common.msg.TbMsg;
 | 
					import org.thingsboard.server.common.msg.TbMsg;
 | 
				
			||||||
import org.thingsboard.server.common.msg.TbMsgDataType;
 | 
					import org.thingsboard.server.common.msg.TbMsgDataType;
 | 
				
			||||||
import org.thingsboard.server.common.msg.TbMsgMetaData;
 | 
					import org.thingsboard.server.common.msg.TbMsgMetaData;
 | 
				
			||||||
@ -72,6 +75,7 @@ import org.thingsboard.server.dao.attributes.AttributesService;
 | 
				
			|||||||
import org.thingsboard.server.dao.device.DeviceService;
 | 
					import org.thingsboard.server.dao.device.DeviceService;
 | 
				
			||||||
import org.thingsboard.server.dao.model.sql.AttributeKvCompositeKey;
 | 
					import org.thingsboard.server.dao.model.sql.AttributeKvCompositeKey;
 | 
				
			||||||
import org.thingsboard.server.dao.model.sql.AttributeKvEntity;
 | 
					import org.thingsboard.server.dao.model.sql.AttributeKvEntity;
 | 
				
			||||||
 | 
					import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity;
 | 
				
			||||||
import org.thingsboard.server.dao.timeseries.TimeseriesService;
 | 
					import org.thingsboard.server.dao.timeseries.TimeseriesService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.math.BigDecimal;
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
@ -81,15 +85,22 @@ import java.util.Arrays;
 | 
				
			|||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Optional;
 | 
					import java.util.Optional;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
import java.util.TreeMap;
 | 
					import java.util.TreeMap;
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
import java.util.concurrent.TimeUnit;
 | 
					import java.util.concurrent.TimeUnit;
 | 
				
			||||||
import java.util.stream.Stream;
 | 
					import java.util.stream.Stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.mockito.ArgumentMatchers.any;
 | 
					import static org.mockito.ArgumentMatchers.any;
 | 
				
			||||||
 | 
					import static org.mockito.ArgumentMatchers.anyLong;
 | 
				
			||||||
 | 
					import static org.mockito.ArgumentMatchers.anySet;
 | 
				
			||||||
import static org.mockito.ArgumentMatchers.eq;
 | 
					import static org.mockito.ArgumentMatchers.eq;
 | 
				
			||||||
import static org.mockito.Mockito.verify;
 | 
					import static org.mockito.Mockito.verify;
 | 
				
			||||||
import static org.mockito.Mockito.when;
 | 
					import static org.mockito.Mockito.when;
 | 
				
			||||||
 | 
					import static org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType.ATTRIBUTE;
 | 
				
			||||||
 | 
					import static org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType.TIME_SERIES;
 | 
				
			||||||
 | 
					import static org.thingsboard.server.common.data.query.NumericFilterPredicate.NumericOperation.GREATER;
 | 
				
			||||||
 | 
					import static org.thingsboard.server.common.data.query.NumericFilterPredicate.NumericOperation.LESS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ExtendWith(MockitoExtension.class)
 | 
					@ExtendWith(MockitoExtension.class)
 | 
				
			||||||
public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
					public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			||||||
@ -170,32 +181,16 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
        DeviceProfile deviceProfile = new DeviceProfile();
 | 
					        DeviceProfile deviceProfile = new DeviceProfile();
 | 
				
			||||||
        DeviceProfileData deviceProfileData = new DeviceProfileData();
 | 
					        DeviceProfileData deviceProfileData = new DeviceProfileData();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmCondition alarmCreateCondition = getNumericAlarmCondition(TIME_SERIES, "temperature", GREATER, 30.0);
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(30.0));
 | 
					 | 
				
			||||||
        highTempFilter.setPredicate(highTemperaturePredicate);
 | 
					 | 
				
			||||||
        AlarmCondition alarmCondition = new AlarmCondition();
 | 
					 | 
				
			||||||
        alarmCondition.setCondition(Collections.singletonList(highTempFilter));
 | 
					 | 
				
			||||||
        AlarmRule alarmRule = new AlarmRule();
 | 
					        AlarmRule alarmRule = new AlarmRule();
 | 
				
			||||||
        alarmRule.setCondition(alarmCondition);
 | 
					        alarmRule.setCondition(alarmCreateCondition);
 | 
				
			||||||
        DeviceProfileAlarm dpa = new DeviceProfileAlarm();
 | 
					        DeviceProfileAlarm dpa = new DeviceProfileAlarm();
 | 
				
			||||||
        dpa.setId("highTemperatureAlarmID");
 | 
					        dpa.setId("highTemperatureAlarmID");
 | 
				
			||||||
        dpa.setAlarmType("highTemperatureAlarm");
 | 
					        dpa.setAlarmType("highTemperatureAlarm");
 | 
				
			||||||
        dpa.setCreateRules(new TreeMap<>(Collections.singletonMap(AlarmSeverity.CRITICAL, alarmRule)));
 | 
					        dpa.setCreateRules(new TreeMap<>(Collections.singletonMap(AlarmSeverity.CRITICAL, alarmRule)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
 | 
					 | 
				
			||||||
        lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					 | 
				
			||||||
        lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					 | 
				
			||||||
        NumericFilterPredicate lowTemperaturePredicate = new NumericFilterPredicate();
 | 
					 | 
				
			||||||
        lowTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.LESS);
 | 
					 | 
				
			||||||
        lowTemperaturePredicate.setValue(new FilterPredicateValue<>(10.0));
 | 
					 | 
				
			||||||
        lowTempFilter.setPredicate(lowTemperaturePredicate);
 | 
					 | 
				
			||||||
        AlarmRule clearRule = new AlarmRule();
 | 
					        AlarmRule clearRule = new AlarmRule();
 | 
				
			||||||
        AlarmCondition clearCondition = new AlarmCondition();
 | 
					        AlarmCondition clearCondition = getNumericAlarmCondition(TIME_SERIES, "temperature", LESS, 10.0);
 | 
				
			||||||
        clearCondition.setCondition(Collections.singletonList(lowTempFilter));
 | 
					 | 
				
			||||||
        clearRule.setCondition(clearCondition);
 | 
					        clearRule.setCondition(clearCondition);
 | 
				
			||||||
        dpa.setClearRule(clearRule);
 | 
					        dpa.setClearRule(clearRule);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -261,25 +256,11 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
        DeviceProfile deviceProfile = new DeviceProfile();
 | 
					        DeviceProfile deviceProfile = new DeviceProfile();
 | 
				
			||||||
        DeviceProfileData deviceProfileData = new DeviceProfileData();
 | 
					        DeviceProfileData deviceProfileData = new DeviceProfileData();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter tempFilter = new AlarmConditionFilter();
 | 
					        AlarmCondition alarmTempCondition = getNumericAlarmCondition(TIME_SERIES, "temperature", GREATER, 30.0);
 | 
				
			||||||
        tempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					 | 
				
			||||||
        tempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					 | 
				
			||||||
        NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
 | 
					 | 
				
			||||||
        temperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					 | 
				
			||||||
        temperaturePredicate.setValue(new FilterPredicateValue<>(30.0));
 | 
					 | 
				
			||||||
        tempFilter.setPredicate(temperaturePredicate);
 | 
					 | 
				
			||||||
        AlarmCondition alarmTempCondition = new AlarmCondition();
 | 
					 | 
				
			||||||
        alarmTempCondition.setCondition(Collections.singletonList(tempFilter));
 | 
					 | 
				
			||||||
        AlarmRule alarmTempRule = new AlarmRule();
 | 
					        AlarmRule alarmTempRule = new AlarmRule();
 | 
				
			||||||
        alarmTempRule.setCondition(alarmTempCondition);
 | 
					        alarmTempRule.setCondition(alarmTempCondition);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = getAlarmConditionFilter(TIME_SERIES, "temperature", GREATER, 50.0);
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(50.0));
 | 
					 | 
				
			||||||
        highTempFilter.setPredicate(highTemperaturePredicate);
 | 
					 | 
				
			||||||
        AlarmCondition alarmHighTempCondition = new AlarmCondition();
 | 
					        AlarmCondition alarmHighTempCondition = new AlarmCondition();
 | 
				
			||||||
        alarmHighTempCondition.setCondition(Collections.singletonList(highTempFilter));
 | 
					        alarmHighTempCondition.setCondition(Collections.singletonList(highTempFilter));
 | 
				
			||||||
        AlarmRule alarmHighTempRule = new AlarmRule();
 | 
					        AlarmRule alarmHighTempRule = new AlarmRule();
 | 
				
			||||||
@ -401,10 +382,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
        alarmEnabledFilter.setPredicate(alarmEnabledPredicate);
 | 
					        alarmEnabledFilter.setPredicate(alarmEnabledPredicate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter temperatureFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter temperatureFilter = new AlarmConditionFilter();
 | 
				
			||||||
        temperatureFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        temperatureFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        temperatureFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        temperatureFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        temperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        temperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        temperaturePredicate.setValue(new FilterPredicateValue<>(20.0, null, null));
 | 
					        temperaturePredicate.setValue(new FilterPredicateValue<>(20.0, null, null));
 | 
				
			||||||
        temperatureFilter.setPredicate(temperaturePredicate);
 | 
					        temperatureFilter.setPredicate(temperaturePredicate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -494,10 +475,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
        alarmEnabledFilter.setPredicate(alarmEnabledPredicate);
 | 
					        alarmEnabledFilter.setPredicate(alarmEnabledPredicate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter temperatureFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter temperatureFilter = new AlarmConditionFilter();
 | 
				
			||||||
        temperatureFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        temperatureFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        temperatureFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        temperatureFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        temperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        temperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        temperaturePredicate.setValue(new FilterPredicateValue<>(20.0, null, null));
 | 
					        temperaturePredicate.setValue(new FilterPredicateValue<>(20.0, null, null));
 | 
				
			||||||
        temperatureFilter.setPredicate(temperaturePredicate);
 | 
					        temperatureFilter.setPredicate(temperaturePredicate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -576,10 +557,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Collections.singletonList(entry));
 | 
					                Futures.immediateFuture(Collections.singletonList(entry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        highTemperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
				
			||||||
                0.0,
 | 
					                0.0,
 | 
				
			||||||
                null,
 | 
					                null,
 | 
				
			||||||
@ -670,10 +651,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Arrays.asList(entry, alarmDelayAttributeKvEntry));
 | 
					                Futures.immediateFuture(Arrays.asList(entry, alarmDelayAttributeKvEntry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        highTemperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
				
			||||||
                0.0,
 | 
					                0.0,
 | 
				
			||||||
                null,
 | 
					                null,
 | 
				
			||||||
@ -805,10 +786,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Optional.empty());
 | 
					                Futures.immediateFuture(Optional.empty());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        highTemperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
				
			||||||
                0.0,
 | 
					                0.0,
 | 
				
			||||||
                null,
 | 
					                null,
 | 
				
			||||||
@ -937,10 +918,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Arrays.asList(entry, alarmDelayAttributeKvEntry));
 | 
					                Futures.immediateFuture(Arrays.asList(entry, alarmDelayAttributeKvEntry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        highTemperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
				
			||||||
                0.0,
 | 
					                0.0,
 | 
				
			||||||
                null,
 | 
					                null,
 | 
				
			||||||
@ -1065,10 +1046,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Optional.empty());
 | 
					                Futures.immediateFuture(Optional.empty());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        highTemperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
				
			||||||
                0.0,
 | 
					                0.0,
 | 
				
			||||||
                null,
 | 
					                null,
 | 
				
			||||||
@ -1182,10 +1163,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Collections.singletonList(entry));
 | 
					                Futures.immediateFuture(Collections.singletonList(entry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        highTemperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
				
			||||||
                0.0,
 | 
					                0.0,
 | 
				
			||||||
                null,
 | 
					                null,
 | 
				
			||||||
@ -1299,10 +1280,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Collections.singletonList(entry));
 | 
					                Futures.immediateFuture(Collections.singletonList(entry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        highTemperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
				
			||||||
                0.0,
 | 
					                0.0,
 | 
				
			||||||
                null,
 | 
					                null,
 | 
				
			||||||
@ -1395,10 +1376,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Collections.singletonList(entryActiveSchedule));
 | 
					                Futures.immediateFuture(Collections.singletonList(entryActiveSchedule));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        highTemperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
				
			||||||
                0.0,
 | 
					                0.0,
 | 
				
			||||||
                null,
 | 
					                null,
 | 
				
			||||||
@ -1492,10 +1473,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Collections.singletonList(entryInactiveSchedule));
 | 
					                Futures.immediateFuture(Collections.singletonList(entryInactiveSchedule));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter highTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        highTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        highTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
        highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        highTemperaturePredicate.setOperation(GREATER);
 | 
				
			||||||
        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(
 | 
				
			||||||
                0.0,
 | 
					                0.0,
 | 
				
			||||||
                null,
 | 
					                null,
 | 
				
			||||||
@ -1593,10 +1574,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Optional.of(entry));
 | 
					                Futures.immediateFuture(Optional.of(entry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        lowTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
 | 
				
			||||||
        lowTempPredicate.setOperation(NumericFilterPredicate.NumericOperation.LESS);
 | 
					        lowTempPredicate.setOperation(LESS);
 | 
				
			||||||
        lowTempPredicate.setValue(
 | 
					        lowTempPredicate.setValue(
 | 
				
			||||||
                new FilterPredicateValue<>(
 | 
					                new FilterPredicateValue<>(
 | 
				
			||||||
                        20.0,
 | 
					                        20.0,
 | 
				
			||||||
@ -1679,10 +1660,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Optional.of(entry));
 | 
					                Futures.immediateFuture(Optional.of(entry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        lowTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
 | 
				
			||||||
        lowTempPredicate.setOperation(NumericFilterPredicate.NumericOperation.LESS);
 | 
					        lowTempPredicate.setOperation(LESS);
 | 
				
			||||||
        lowTempPredicate.setValue(
 | 
					        lowTempPredicate.setValue(
 | 
				
			||||||
                new FilterPredicateValue<>(
 | 
					                new FilterPredicateValue<>(
 | 
				
			||||||
                        32.0,
 | 
					                        32.0,
 | 
				
			||||||
@ -1769,10 +1750,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Optional.of(entry));
 | 
					                Futures.immediateFuture(Optional.of(entry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        lowTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
 | 
				
			||||||
        lowTempPredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        lowTempPredicate.setOperation(GREATER);
 | 
				
			||||||
        lowTempPredicate.setValue(
 | 
					        lowTempPredicate.setValue(
 | 
				
			||||||
                new FilterPredicateValue<>(
 | 
					                new FilterPredicateValue<>(
 | 
				
			||||||
                        0.0,
 | 
					                        0.0,
 | 
				
			||||||
@ -1865,10 +1846,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                Futures.immediateFuture(Optional.of(entry));
 | 
					                Futures.immediateFuture(Optional.of(entry));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
 | 
					        AlarmConditionFilter lowTempFilter = new AlarmConditionFilter();
 | 
				
			||||||
        lowTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature"));
 | 
					        lowTempFilter.setKey(new AlarmConditionFilterKey(TIME_SERIES, "temperature"));
 | 
				
			||||||
        lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
					        lowTempFilter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
        NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
 | 
					        NumericFilterPredicate lowTempPredicate = new NumericFilterPredicate();
 | 
				
			||||||
        lowTempPredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER);
 | 
					        lowTempPredicate.setOperation(GREATER);
 | 
				
			||||||
        lowTempPredicate.setValue(
 | 
					        lowTempPredicate.setValue(
 | 
				
			||||||
                new FilterPredicateValue<>(
 | 
					                new FilterPredicateValue<>(
 | 
				
			||||||
                        0.0,
 | 
					                        0.0,
 | 
				
			||||||
@ -1942,6 +1923,10 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void registerCreateAlarmMock(AlarmApiCallResult a, boolean created) {
 | 
					    private void registerCreateAlarmMock(AlarmApiCallResult a, boolean created) {
 | 
				
			||||||
 | 
					        registerCreateAlarmMock(a, created, false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void registerCreateAlarmMock(AlarmApiCallResult a, boolean created, boolean cleared) {
 | 
				
			||||||
        when(a).thenAnswer(invocationOnMock -> {
 | 
					        when(a).thenAnswer(invocationOnMock -> {
 | 
				
			||||||
            AlarmInfo alarm = new AlarmInfo(new Alarm(new AlarmId(UUID.randomUUID())));
 | 
					            AlarmInfo alarm = new AlarmInfo(new Alarm(new AlarmId(UUID.randomUUID())));
 | 
				
			||||||
            AlarmModificationRequest request = invocationOnMock.getArgument(0);
 | 
					            AlarmModificationRequest request = invocationOnMock.getArgument(0);
 | 
				
			||||||
@ -1950,6 +1935,7 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
                    .successful(true)
 | 
					                    .successful(true)
 | 
				
			||||||
                    .created(created)
 | 
					                    .created(created)
 | 
				
			||||||
                    .modified(true)
 | 
					                    .modified(true)
 | 
				
			||||||
 | 
					                    .cleared(cleared)
 | 
				
			||||||
                    .alarm(alarm)
 | 
					                    .alarm(alarm)
 | 
				
			||||||
                    .build();
 | 
					                    .build();
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
@ -1981,6 +1967,100 @@ public class TbDeviceProfileNodeTest extends AbstractRuleNodeUpgradeTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void testAlarmCreateWithAttrAndTsCondition() throws Exception {
 | 
				
			||||||
 | 
					        init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        DeviceProfile deviceProfile = new DeviceProfile();
 | 
				
			||||||
 | 
					        DeviceProfileData deviceProfileData = new DeviceProfileData();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        AlarmConditionFilter filter = getAlarmConditionFilter(TIME_SERIES, "temperature", GREATER, 30.0);
 | 
				
			||||||
 | 
					        AlarmConditionFilter filter2 = getAlarmConditionFilter(ATTRIBUTE, "battery", LESS, 10.0);
 | 
				
			||||||
 | 
					        AlarmCondition alarmCondition = new AlarmCondition();
 | 
				
			||||||
 | 
					        alarmCondition.setCondition(List.of(filter, filter2));
 | 
				
			||||||
 | 
					        AlarmRule createRule = new AlarmRule();
 | 
				
			||||||
 | 
					        createRule.setCondition(alarmCondition);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        AlarmConditionFilter filter3 = getAlarmConditionFilter(TIME_SERIES, "temperature", LESS, 10.0);
 | 
				
			||||||
 | 
					        AlarmConditionFilter filter4 = getAlarmConditionFilter(ATTRIBUTE, "battery", GREATER, 50.0);
 | 
				
			||||||
 | 
					        AlarmCondition clearCondition = new AlarmCondition();
 | 
				
			||||||
 | 
					        clearCondition.setCondition(List.of(filter3, filter4));
 | 
				
			||||||
 | 
					        AlarmRule clearRule = new AlarmRule();
 | 
				
			||||||
 | 
					        clearRule.setCondition(clearCondition);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        DeviceProfileAlarm dpa = new DeviceProfileAlarm();
 | 
				
			||||||
 | 
					        dpa.setId("highTemperatureAlarmID");
 | 
				
			||||||
 | 
					        dpa.setAlarmType("highTemperatureAlarm");
 | 
				
			||||||
 | 
					        dpa.setCreateRules(new TreeMap<>(Collections.singletonMap(AlarmSeverity.CRITICAL, createRule)));
 | 
				
			||||||
 | 
					        dpa.setClearRule(clearRule);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        deviceProfileData.setAlarms(Collections.singletonList(dpa));
 | 
				
			||||||
 | 
					        deviceProfile.setProfileData(deviceProfileData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ListenableFuture<List<TsKvEntry>> tsKvList =
 | 
				
			||||||
 | 
					                Futures.immediateFuture(Collections.singletonList(getTsKvEntry("temperature", 35L)));
 | 
				
			||||||
 | 
					        ListenableFuture<List<AttributeKvEntry>> attrList =
 | 
				
			||||||
 | 
					                Futures.immediateFuture(Collections.emptyList());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Mockito.when(cache.get(tenantId, deviceId)).thenReturn(deviceProfile);
 | 
				
			||||||
 | 
					        Mockito.when(timeseriesService.findLatest(tenantId, deviceId, Collections.singleton("temperature")))
 | 
				
			||||||
 | 
					                .thenReturn(tsKvList);
 | 
				
			||||||
 | 
					        Mockito.when(attributesService.find(eq(tenantId), eq(deviceId), any(), anySet()))
 | 
				
			||||||
 | 
					                .thenReturn(attrList);
 | 
				
			||||||
 | 
					        Mockito.when(alarmService.findLatestActiveByOriginatorAndType(tenantId, deviceId, "highTemperatureAlarm")).thenReturn(null);
 | 
				
			||||||
 | 
					        registerCreateAlarmMock(alarmService.createAlarm(any()), true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        TbMsg theMsg = TbMsg.newMsg()
 | 
				
			||||||
 | 
					                .type(TbMsgType.ALARM)
 | 
				
			||||||
 | 
					                .originator(deviceId)
 | 
				
			||||||
 | 
					                .copyMetaData(TbMsgMetaData.EMPTY)
 | 
				
			||||||
 | 
					                .data(TbMsg.EMPTY_STRING)
 | 
				
			||||||
 | 
					                .build();
 | 
				
			||||||
 | 
					        when(ctx.newMsg(any(), any(TbMsgType.class), any(), any(), any(), Mockito.anyString())).thenReturn(theMsg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // send attribute
 | 
				
			||||||
 | 
					        ObjectNode data = JacksonUtil.newObjectNode();
 | 
				
			||||||
 | 
					        data.put("battery", 8);
 | 
				
			||||||
 | 
					        TbMsg msg = TbMsg.newMsg()
 | 
				
			||||||
 | 
					                .type(TbMsgType.POST_ATTRIBUTES_REQUEST)
 | 
				
			||||||
 | 
					                .originator(deviceId)
 | 
				
			||||||
 | 
					                .copyMetaData(TbMsgMetaData.EMPTY)
 | 
				
			||||||
 | 
					                .dataType(TbMsgDataType.JSON)
 | 
				
			||||||
 | 
					                .data(JacksonUtil.toString(data))
 | 
				
			||||||
 | 
					                .build();
 | 
				
			||||||
 | 
					        node.onMsg(ctx, msg);
 | 
				
			||||||
 | 
					        verify(ctx).tellSuccess(msg);
 | 
				
			||||||
 | 
					        verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
 | 
				
			||||||
 | 
					        verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private TsKvEntry getTsKvEntry(String key, Long value) {
 | 
				
			||||||
 | 
					        TsKvEntity tsKv = new TsKvEntity();
 | 
				
			||||||
 | 
					        tsKv.setKey(10);
 | 
				
			||||||
 | 
					        tsKv.setLongValue(value);
 | 
				
			||||||
 | 
					        tsKv.setStrKey(key);
 | 
				
			||||||
 | 
					        tsKv.setTs(System.currentTimeMillis());
 | 
				
			||||||
 | 
					        return tsKv.toData();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private AlarmCondition getNumericAlarmCondition(AlarmConditionKeyType alarmConditionKeyType, String key, NumericOperation operation, Double value) {
 | 
				
			||||||
 | 
					        AlarmConditionFilter filter = getAlarmConditionFilter(alarmConditionKeyType, key, operation, value);
 | 
				
			||||||
 | 
					        AlarmCondition alarmCondition = new AlarmCondition();
 | 
				
			||||||
 | 
					        alarmCondition.setCondition(Collections.singletonList(filter));
 | 
				
			||||||
 | 
					        return alarmCondition;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private AlarmConditionFilter getAlarmConditionFilter(AlarmConditionKeyType alarmConditionKeyType, String key, NumericOperation operation, Double value) {
 | 
				
			||||||
 | 
					        AlarmConditionFilter filter = new AlarmConditionFilter();
 | 
				
			||||||
 | 
					        filter.setKey(new AlarmConditionFilterKey(alarmConditionKeyType, key));
 | 
				
			||||||
 | 
					        filter.setValueType(EntityKeyValueType.NUMERIC);
 | 
				
			||||||
 | 
					        NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate();
 | 
				
			||||||
 | 
					        highTemperaturePredicate.setOperation(operation);
 | 
				
			||||||
 | 
					        highTemperaturePredicate.setValue(new FilterPredicateValue<>(value));
 | 
				
			||||||
 | 
					        filter.setPredicate(highTemperaturePredicate);
 | 
				
			||||||
 | 
					        return filter;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected TbNode getTestNode() {
 | 
					    protected TbNode getTestNode() {
 | 
				
			||||||
        return node;
 | 
					        return node;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user