Improve test for KvProtoUtil

This commit is contained in:
Andrii Landiak 2024-03-25 12:47:20 +02:00
parent ee1209b19f
commit 7edb18673c

View File

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