added test for the default measurements
This commit is contained in:
parent
ae49824eba
commit
2ad0f0519f
@ -23,12 +23,15 @@ import org.junit.jupiter.params.provider.Arguments;
|
|||||||
import org.junit.jupiter.params.provider.MethodSource;
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
import org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.MeasurementType;
|
import org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.MeasurementType;
|
||||||
import org.thingsboard.server.gen.transport.coap.MeasurementsProtos;
|
import org.thingsboard.server.gen.transport.coap.MeasurementsProtos;
|
||||||
|
import org.thingsboard.server.gen.transport.coap.MeasurementsProtos.ProtoMeasurements;
|
||||||
import org.thingsboard.server.transport.coap.CoapTransportContext;
|
import org.thingsboard.server.transport.coap.CoapTransportContext;
|
||||||
|
import org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
@ -65,6 +68,7 @@ import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.Me
|
|||||||
import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.MeasurementType.MEASUREMENT_TYPE_WATER_METER;
|
import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.MeasurementType.MEASUREMENT_TYPE_WATER_METER;
|
||||||
import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.MeasurementType.MEASUREMENT_TYPE_WATER_METER_ACC_MAJOR;
|
import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.MeasurementType.MEASUREMENT_TYPE_WATER_METER_ACC_MAJOR;
|
||||||
import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.MeasurementType.MEASUREMENT_TYPE_WATER_METER_ACC_MINOR;
|
import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.MeasurementType.MEASUREMENT_TYPE_WATER_METER_ACC_MINOR;
|
||||||
|
import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.convertTimestampToUtcString;
|
||||||
|
|
||||||
class CoapEfentTransportResourceTest {
|
class CoapEfentTransportResourceTest {
|
||||||
|
|
||||||
@ -76,11 +80,47 @@ class CoapEfentTransportResourceTest {
|
|||||||
coapEfentoTransportResource = new CoapEfentoTransportResource(ctxMock, "testName");
|
coapEfentoTransportResource = new CoapEfentoTransportResource(ctxMock, "testName");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void checkContinuousSensorWithSomeMeasurements() {
|
||||||
|
long tsInSec = Instant.now().getEpochSecond();
|
||||||
|
ProtoMeasurements measurements = ProtoMeasurements.newBuilder()
|
||||||
|
.setSerialNum(integerToByteString(1234))
|
||||||
|
.setCloudToken("test_token")
|
||||||
|
.setMeasurementPeriodBase(180)
|
||||||
|
.setMeasurementPeriodFactor(5)
|
||||||
|
.setBatteryStatus(true)
|
||||||
|
.setSignal(0)
|
||||||
|
.setNextTransmissionAt(1000)
|
||||||
|
.setTransferReason(0)
|
||||||
|
.setHash(0)
|
||||||
|
.addAllChannels(List.of(MeasurementsProtos.ProtoChannel.newBuilder()
|
||||||
|
.setType(MeasurementType.MEASUREMENT_TYPE_TEMPERATURE)
|
||||||
|
.setTimestamp(Math.toIntExact(tsInSec))
|
||||||
|
.addAllSampleOffsets(List.of(223, 224))
|
||||||
|
.build(),
|
||||||
|
MeasurementsProtos.ProtoChannel.newBuilder()
|
||||||
|
.setType(MeasurementType.MEASUREMENT_TYPE_HUMIDITY)
|
||||||
|
.setTimestamp(Math.toIntExact(tsInSec))
|
||||||
|
.addAllSampleOffsets(List.of(20, 30))
|
||||||
|
.build()
|
||||||
|
))
|
||||||
|
.build();
|
||||||
|
List<CoapEfentoTransportResource.EfentoTelemetry> efentoMeasurements = coapEfentoTransportResource.getEfentoMeasurements(measurements, UUID.randomUUID());
|
||||||
|
assertThat(efentoMeasurements).hasSize(2);
|
||||||
|
assertThat(efentoMeasurements.get(0).getTs()).isEqualTo(tsInSec * 1000);
|
||||||
|
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get("temperature_1").getAsDouble()).isEqualTo(22.3);
|
||||||
|
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get("humidity_2").getAsDouble()).isEqualTo(20);
|
||||||
|
assertThat(efentoMeasurements.get(1).getTs()).isEqualTo((tsInSec + 180 * 5) * 1000);
|
||||||
|
assertThat(efentoMeasurements.get(1).getValues().getAsJsonObject().get("temperature_1").getAsDouble()).isEqualTo(22.4);
|
||||||
|
assertThat(efentoMeasurements.get(1).getValues().getAsJsonObject().get("humidity_2").getAsDouble()).isEqualTo(30);
|
||||||
|
checkDefaultMeasurements(measurements, efentoMeasurements,180 * 5, false);
|
||||||
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@MethodSource
|
@MethodSource
|
||||||
void checkContinuousSensor(MeasurementType measurementType, List<Integer> sampleOffsets, String property, double expectedValue) {
|
void checkContinuousSensor(MeasurementType measurementType, List<Integer> sampleOffsets, String property, double expectedValue) {
|
||||||
long tsInSec = Instant.now().getEpochSecond();
|
long tsInSec = Instant.now().getEpochSecond();
|
||||||
MeasurementsProtos.ProtoMeasurements measurements = MeasurementsProtos.ProtoMeasurements.newBuilder()
|
ProtoMeasurements measurements = ProtoMeasurements.newBuilder()
|
||||||
.setSerialNum(integerToByteString(1234))
|
.setSerialNum(integerToByteString(1234))
|
||||||
.setCloudToken("test_token")
|
.setCloudToken("test_token")
|
||||||
.setMeasurementPeriodBase(180)
|
.setMeasurementPeriodBase(180)
|
||||||
@ -101,7 +141,7 @@ class CoapEfentTransportResourceTest {
|
|||||||
assertThat(efentoMeasurements).hasSize(1);
|
assertThat(efentoMeasurements).hasSize(1);
|
||||||
assertThat(efentoMeasurements.get(0).getTs()).isEqualTo(tsInSec * 1000);
|
assertThat(efentoMeasurements.get(0).getTs()).isEqualTo(tsInSec * 1000);
|
||||||
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get(property).getAsDouble()).isEqualTo(expectedValue);
|
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get(property).getAsDouble()).isEqualTo(expectedValue);
|
||||||
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get("measurement_interval").getAsDouble()).isEqualTo(180);
|
checkDefaultMeasurements(measurements, efentoMeasurements, 180, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Stream<Arguments> checkContinuousSensor() {
|
private static Stream<Arguments> checkContinuousSensor() {
|
||||||
@ -140,7 +180,7 @@ class CoapEfentTransportResourceTest {
|
|||||||
@Test
|
@Test
|
||||||
void checkBinarySensor() {
|
void checkBinarySensor() {
|
||||||
long tsInSec = Instant.now().getEpochSecond();
|
long tsInSec = Instant.now().getEpochSecond();
|
||||||
MeasurementsProtos.ProtoMeasurements measurements = MeasurementsProtos.ProtoMeasurements.newBuilder()
|
ProtoMeasurements measurements = ProtoMeasurements.newBuilder()
|
||||||
.setSerialNum(integerToByteString(1234))
|
.setSerialNum(integerToByteString(1234))
|
||||||
.setCloudToken("test_token")
|
.setCloudToken("test_token")
|
||||||
.setMeasurementPeriodBase(180)
|
.setMeasurementPeriodBase(180)
|
||||||
@ -160,14 +200,14 @@ class CoapEfentTransportResourceTest {
|
|||||||
assertThat(efentoMeasurements).hasSize(1);
|
assertThat(efentoMeasurements).hasSize(1);
|
||||||
assertThat(efentoMeasurements.get(0).getTs()).isEqualTo(tsInSec * 1000);
|
assertThat(efentoMeasurements.get(0).getTs()).isEqualTo(tsInSec * 1000);
|
||||||
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get("ok_alarm_1").getAsString()).isEqualTo("ALARM");
|
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get("ok_alarm_1").getAsString()).isEqualTo("ALARM");
|
||||||
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get("measurement_interval").getAsDouble()).isEqualTo(180 * 14);
|
checkDefaultMeasurements(measurements, efentoMeasurements, 180 * 14, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@MethodSource
|
@MethodSource
|
||||||
void checkBinarySensorWhenValueIsVarying(MeasurementType measurementType, String property, String expectedValueWhenOffsetOk, String expectedValueWhenOffsetNotOk) {
|
void checkBinarySensorWhenValueIsVarying(MeasurementType measurementType, String property, String expectedValueWhenOffsetNotOk, String expectedValueWhenOffsetOk) {
|
||||||
long tsInSec = Instant.now().getEpochSecond();
|
long tsInSec = Instant.now().getEpochSecond();
|
||||||
MeasurementsProtos.ProtoMeasurements measurements = MeasurementsProtos.ProtoMeasurements.newBuilder()
|
ProtoMeasurements measurements = ProtoMeasurements.newBuilder()
|
||||||
.setSerialNum(integerToByteString(1234))
|
.setSerialNum(integerToByteString(1234))
|
||||||
.setCloudToken("test_token")
|
.setCloudToken("test_token")
|
||||||
.setMeasurementPeriodBase(180)
|
.setMeasurementPeriodBase(180)
|
||||||
@ -189,20 +229,20 @@ class CoapEfentTransportResourceTest {
|
|||||||
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get(property).getAsString()).isEqualTo(expectedValueWhenOffsetNotOk);
|
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get(property).getAsString()).isEqualTo(expectedValueWhenOffsetNotOk);
|
||||||
assertThat(efentoMeasurements.get(1).getTs()).isEqualTo((tsInSec + 9) * 1000);
|
assertThat(efentoMeasurements.get(1).getTs()).isEqualTo((tsInSec + 9) * 1000);
|
||||||
assertThat(efentoMeasurements.get(1).getValues().getAsJsonObject().get(property).getAsString()).isEqualTo(expectedValueWhenOffsetOk);
|
assertThat(efentoMeasurements.get(1).getValues().getAsJsonObject().get(property).getAsString()).isEqualTo(expectedValueWhenOffsetOk);
|
||||||
assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get("measurement_interval").getAsDouble()).isEqualTo(180);
|
checkDefaultMeasurements(measurements, efentoMeasurements, 180, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Stream<Arguments> checkBinarySensorWhenValueIsVarying() {
|
private static Stream<Arguments> checkBinarySensorWhenValueIsVarying() {
|
||||||
return Stream.of(
|
return Stream.of(
|
||||||
Arguments.of(MEASUREMENT_TYPE_OK_ALARM, "ok_alarm_1", "OK", "ALARM"),
|
Arguments.of(MEASUREMENT_TYPE_OK_ALARM, "ok_alarm_1", "ALARM", "OK"),
|
||||||
Arguments.of(MEASUREMENT_TYPE_FLOODING, "flooding_1", "OK", "WATER_DETECTED"),
|
Arguments.of(MEASUREMENT_TYPE_FLOODING, "flooding_1", "WATER_DETECTED", "OK"),
|
||||||
Arguments.of(MEASUREMENT_TYPE_OUTPUT_CONTROL, "output_control_1", "OFF", "ON")
|
Arguments.of(MEASUREMENT_TYPE_OUTPUT_CONTROL, "output_control_1", "ON", "OFF")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void checkExceptionWhenChannelsListIsEmpty() {
|
void checkExceptionWhenChannelsListIsEmpty() {
|
||||||
MeasurementsProtos.ProtoMeasurements measurements = MeasurementsProtos.ProtoMeasurements.newBuilder()
|
ProtoMeasurements measurements = ProtoMeasurements.newBuilder()
|
||||||
.setSerialNum(integerToByteString(1234))
|
.setSerialNum(integerToByteString(1234))
|
||||||
.setCloudToken("test_token")
|
.setCloudToken("test_token")
|
||||||
.setMeasurementPeriodBase(180)
|
.setMeasurementPeriodBase(180)
|
||||||
@ -223,7 +263,7 @@ class CoapEfentTransportResourceTest {
|
|||||||
@Test
|
@Test
|
||||||
void checkExceptionWhenValuesMapIsEmpty() {
|
void checkExceptionWhenValuesMapIsEmpty() {
|
||||||
long tsInSec = Instant.now().getEpochSecond();
|
long tsInSec = Instant.now().getEpochSecond();
|
||||||
MeasurementsProtos.ProtoMeasurements measurements = MeasurementsProtos.ProtoMeasurements.newBuilder()
|
ProtoMeasurements measurements = ProtoMeasurements.newBuilder()
|
||||||
.setSerialNum(integerToByteString(1234))
|
.setSerialNum(integerToByteString(1234))
|
||||||
.setCloudToken("test_token")
|
.setCloudToken("test_token")
|
||||||
.setMeasurementPeriodBase(180)
|
.setMeasurementPeriodBase(180)
|
||||||
@ -259,4 +299,23 @@ class CoapEfentTransportResourceTest {
|
|||||||
return ByteString.copyFrom(byteArray);
|
return ByteString.copyFrom(byteArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkDefaultMeasurements(ProtoMeasurements incomingMeasurements,
|
||||||
|
List<CoapEfentoTransportResource.EfentoTelemetry> actualEfentoMeasurements,
|
||||||
|
long expectedMeasurementInterval,
|
||||||
|
boolean isBinarySensor) {
|
||||||
|
for (int i = 0; i < actualEfentoMeasurements.size(); i++) {
|
||||||
|
CoapEfentoTransportResource.EfentoTelemetry actualEfentoMeasurement = actualEfentoMeasurements.get(i);
|
||||||
|
assertThat(actualEfentoMeasurement.getValues().getAsJsonObject().get("serial").getAsString()).isEqualTo(CoapEfentoUtils.convertByteArrayToString(incomingMeasurements.getSerialNum().toByteArray()));
|
||||||
|
assertThat(actualEfentoMeasurement.getValues().getAsJsonObject().get("battery").getAsString()).isEqualTo(incomingMeasurements.getBatteryStatus() ? "ok" : "low");
|
||||||
|
MeasurementsProtos.ProtoChannel protoChannel = incomingMeasurements.getChannelsList().get(0);
|
||||||
|
long measuredAtWhenBinarySensor = TimeUnit.SECONDS.toMillis(protoChannel.getTimestamp()) + Math.abs(TimeUnit.SECONDS.toMillis(protoChannel.getSampleOffsetsList().get(i))) - 1000;
|
||||||
|
long measuredAtWhenContinuousSensor = TimeUnit.SECONDS.toMillis(protoChannel.getTimestamp() + i * expectedMeasurementInterval);
|
||||||
|
long measuredAt = isBinarySensor ? measuredAtWhenBinarySensor : measuredAtWhenContinuousSensor;
|
||||||
|
assertThat(actualEfentoMeasurement.getValues().getAsJsonObject().get("measured_at").getAsString()).isEqualTo(convertTimestampToUtcString(measuredAt));
|
||||||
|
assertThat(actualEfentoMeasurement.getValues().getAsJsonObject().get("next_transmission_at").getAsString()).isEqualTo(convertTimestampToUtcString(TimeUnit.SECONDS.toMillis(incomingMeasurements.getNextTransmissionAt())));
|
||||||
|
assertThat(actualEfentoMeasurement.getValues().getAsJsonObject().get("signal").getAsLong()).isEqualTo(incomingMeasurements.getSignal());
|
||||||
|
assertThat(actualEfentoMeasurement.getValues().getAsJsonObject().get("measurement_interval").getAsDouble()).isEqualTo(expectedMeasurementInterval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user