diff --git a/common/proto/src/test/java/org/thingsboard/server/common/util/KvProtoUtilTest.java b/common/proto/src/test/java/org/thingsboard/server/common/util/KvProtoUtilTest.java index 603d4b3aa6..0fad4e48a2 100644 --- a/common/proto/src/test/java/org/thingsboard/server/common/util/KvProtoUtilTest.java +++ b/common/proto/src/test/java/org/thingsboard/server/common/util/KvProtoUtilTest.java @@ -16,6 +16,10 @@ package org.thingsboard.server.common.util; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; import org.thingsboard.server.common.data.kv.AggTsKvEntry; import org.thingsboard.server.common.data.kv.AttributeKvEntry; import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; @@ -30,102 +34,81 @@ import org.thingsboard.server.common.data.kv.StringDataEntry; import org.thingsboard.server.common.data.kv.TsKvEntry; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; class KvProtoUtilTest { - @Test - void protoDataTypeSerialization() { - for (DataType dataType : DataType.values()) { - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(dataType))).as(dataType.name()).isEqualTo(dataType); - } - } + private static final long TS = System.currentTimeMillis(); - @Test - void protoKeyValueProtoSerialization() { + private static Stream kvEntryData() { String key = "key"; - KvEntry kvEntry = new BooleanDataEntry(key, true); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(kvEntry))).as("deserialized").isEqualTo(kvEntry); - - kvEntry = new LongDataEntry(key, 23L); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(kvEntry))).as("deserialized").isEqualTo(kvEntry); - - kvEntry = new DoubleDataEntry(key, 23.0); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(kvEntry))).as("deserialized").isEqualTo(kvEntry); - - kvEntry = new StringDataEntry(key, "stringValue"); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(kvEntry))).as("deserialized").isEqualTo(kvEntry); - - kvEntry = new JsonDataEntry(key, "jsonValue"); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(kvEntry))).as("deserialized").isEqualTo(kvEntry); + return Stream.of( + new BooleanDataEntry(key, true), + new LongDataEntry(key, 23L), + new DoubleDataEntry(key, 23.0), + new StringDataEntry(key, "stringValue"), + new JsonDataEntry(key, "jsonValue") + ); } - @Test - void protoTsKvEntrySerialization() { - String key = "key"; - long ts = System.currentTimeMillis(); - KvEntry kvEntry = new BasicTsKvEntry(ts, new BooleanDataEntry(key, true)); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(ts, kvEntry))).as("deserialized").isEqualTo(kvEntry); + private static Stream basicTsKvEntryData() { + return kvEntryData().map(kvEntry -> new BasicTsKvEntry(TS, kvEntry)); + } - kvEntry = new BasicTsKvEntry(ts, new LongDataEntry(key, 23L)); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(ts, kvEntry))).as("deserialized").isEqualTo(kvEntry); + private static Stream attributeKvEntryData() { + return kvEntryData().map(kvEntry -> new BaseAttributeKvEntry(TS, kvEntry)); + } - kvEntry = new BasicTsKvEntry(ts, new DoubleDataEntry(key, 23.0)); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(ts, kvEntry))).as("deserialized").isEqualTo(kvEntry); + private static List createTsKvEntryList(boolean withAggregation) { + return kvEntryData().map(kvEntry -> { + if (withAggregation) { + return new AggTsKvEntry(TS, kvEntry, 0); + } else { + return new BasicTsKvEntry(TS, kvEntry); + } + }).collect(Collectors.toList()); + } - kvEntry = new BasicTsKvEntry(ts, new StringDataEntry(key, "stringValue")); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(ts, kvEntry))).as("deserialized").isEqualTo(kvEntry); + @ParameterizedTest + @EnumSource(DataType.class) + void protoDataTypeSerialization(DataType dataType) { + assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(dataType))).as(dataType.name()).isEqualTo(dataType); + } - kvEntry = new BasicTsKvEntry(ts, new JsonDataEntry(key, "jsonValue")); - assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(ts, kvEntry))).as("deserialized").isEqualTo(kvEntry); + @ParameterizedTest + @MethodSource("kvEntryData") + void protoKeyValueProtoSerialization(KvEntry kvEntry) { + assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(kvEntry))) + .as("deserialized") + .isEqualTo(kvEntry); } - @Test - void protoListTsKvEntrySerialization() { - String key = "key"; - long ts = System.currentTimeMillis(); - KvEntry booleanDataEntry = new BooleanDataEntry(key, true); - KvEntry longDataEntry = new LongDataEntry(key, 23L); - KvEntry doubleDataEntry = new DoubleDataEntry(key, 23.0); - KvEntry stringDataEntry = new StringDataEntry(key, "stringValue"); - KvEntry jsonDataEntry = new JsonDataEntry(key, "jsonValue"); - List protoList = List.of( - new BasicTsKvEntry(ts, booleanDataEntry), - new BasicTsKvEntry(ts, longDataEntry), - new BasicTsKvEntry(ts, doubleDataEntry), - new BasicTsKvEntry(ts, stringDataEntry), - new BasicTsKvEntry(ts, jsonDataEntry) - ); - assertThat(KvProtoUtil.fromProtoList(KvProtoUtil.toProtoList(protoList))).as("deserialized").isEqualTo(protoList); + @ParameterizedTest + @MethodSource("basicTsKvEntryData") + void protoTsKvEntrySerialization(KvEntry kvEntry) { + assertThat(KvProtoUtil.fromProto(KvProtoUtil.toProto(TS, kvEntry))) + .as("deserialized") + .isEqualTo(kvEntry); + } - protoList = List.of( - new AggTsKvEntry(ts, booleanDataEntry, 3), - new AggTsKvEntry(ts, longDataEntry, 5), - new AggTsKvEntry(ts, doubleDataEntry, 2), - new AggTsKvEntry(ts, stringDataEntry, 1), - new AggTsKvEntry(ts, jsonDataEntry, 0) - ); - assertThat(KvProtoUtil.fromProtoList(KvProtoUtil.toProtoList(protoList))).as("deserialized").isEqualTo(protoList); + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void protoListTsKvEntrySerialization(boolean withAggregation) { + List tsKvEntries = createTsKvEntryList(withAggregation); + assertThat(KvProtoUtil.fromProtoList(KvProtoUtil.toProtoList(tsKvEntries))) + .as("deserialized") + .isEqualTo(tsKvEntries); } @Test void protoListAttributeKvSerialization() { - String key = "key"; - long ts = System.currentTimeMillis(); - KvEntry booleanDataEntry = new BooleanDataEntry(key, true); - KvEntry longDataEntry = new LongDataEntry(key, 23L); - KvEntry doubleDataEntry = new DoubleDataEntry(key, 23.0); - KvEntry stringDataEntry = new StringDataEntry(key, "stringValue"); - KvEntry jsonDataEntry = new JsonDataEntry(key, "jsonValue"); - List protoList = List.of( - new BaseAttributeKvEntry(ts, booleanDataEntry), - new BaseAttributeKvEntry(ts, longDataEntry), - new BaseAttributeKvEntry(ts, doubleDataEntry), - new BaseAttributeKvEntry(ts, stringDataEntry), - new BaseAttributeKvEntry(ts, jsonDataEntry) - ); - assertThat(KvProtoUtil.toAttributeKvList(KvProtoUtil.attrToTsKvProtos(protoList))).as("deserialized").isEqualTo(protoList); + List protoList = attributeKvEntryData().toList(); + assertThat(KvProtoUtil.toAttributeKvList(KvProtoUtil.attrToTsKvProtos(protoList))) + .as("deserialized") + .isEqualTo(protoList); } }