From a639180e93df6ba022308dcc2b17ca4b9c4d1dca Mon Sep 17 00:00:00 2001
From: Kong
Date: Sat, 10 Dec 2022 23:45:50 +0100
Subject: [PATCH 01/15] test(CM-27): add more test cases
Add more test cases and upgrade the module to Java 17
---
pom.xml | 12 +-
.../com/tenio/common/data/DataUtility.java | 15 +-
.../data/zero/implement/ZeroArrayImpl.java | 10 +-
.../data/zero/implement/ZeroElementImpl.java | 34 +--
.../data/zero/implement/ZeroMapImpl.java | 3 +-
.../common/data/zero/utility/ZeroUtility.java | 98 +++-----
.../com/tenio/common/TenIOCommonTest.java | 1 +
.../DefaultConfigurationType.java | 3 +-
.../tenio/common/constant/ConstantTest.java | 50 ++++
.../tenio/common/data/ZeroUtilityTest.java | 229 +++++++++++++++++-
10 files changed, 317 insertions(+), 138 deletions(-)
create mode 100644 src/test/java/com/tenio/common/constant/ConstantTest.java
diff --git a/pom.xml b/pom.xml
index 995617e..41305d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,14 +41,14 @@
31.1-jre0.6.12
- 2.17.2
+ 2.19.00.10.2UTF-8
- 5.8.2
- 1.8.2
- 4.4.0
+ 5.9.0
+ 1.9.0
+ 4.8.03.8.011
@@ -61,8 +61,8 @@
0.8.74.3.0
- 11
- 11
+ 17
+ 17
diff --git a/src/main/java/com/tenio/common/data/DataUtility.java b/src/main/java/com/tenio/common/data/DataUtility.java
index 82a3db1..8102972 100644
--- a/src/main/java/com/tenio/common/data/DataUtility.java
+++ b/src/main/java/com/tenio/common/data/DataUtility.java
@@ -86,16 +86,9 @@ public static MsgPackMap newMsgMap() {
* @return a new collection instance
*/
public static DataCollection binaryToCollection(DataType type, byte[] binary) {
- switch (type) {
- case ZERO:
- return ZeroUtility.binaryToCollection(binary);
-
- case MSG_PACK:
- return MsgPackUtility.deserialize(binary);
-
- default:
- throw new UnsupportedOperationException(String.format("Unsupported serialization type: " +
- "%s", type));
- }
+ return switch (type) {
+ case ZERO -> ZeroUtility.binaryToCollection(binary);
+ case MSG_PACK -> MsgPackUtility.deserialize(binary);
+ };
}
}
diff --git a/src/main/java/com/tenio/common/data/zero/implement/ZeroArrayImpl.java b/src/main/java/com/tenio/common/data/zero/implement/ZeroArrayImpl.java
index df16051..82b91d0 100644
--- a/src/main/java/com/tenio/common/data/zero/implement/ZeroArrayImpl.java
+++ b/src/main/java/com/tenio/common/data/zero/implement/ZeroArrayImpl.java
@@ -62,8 +62,13 @@ public byte[] toBinary() {
@Override
public boolean contains(Object data) {
+ if (Objects.isNull(data)) {
+ return array.stream().anyMatch(element -> Objects.isNull(element.getData()));
+ }
var match =
- array.stream().filter(element -> element.getData().equals(data)).findFirst();
+ array.stream()
+ .filter(element -> Objects.nonNull(element.getData()) && element.getData().equals(data))
+ .findFirst();
return match.orElse(null) != null;
}
@@ -347,7 +352,8 @@ public String toString() {
} else if (zeroElement.getType() == ZeroType.BYTE_ARRAY) {
toString = String.format("byte[%d]", ((byte[]) zeroElement.getData()).length);
} else {
- toString = zeroElement.getData().toString();
+ toString = Objects.nonNull(zeroElement.getData()) ? zeroElement.getData().toString() :
+ "null";
}
}
diff --git a/src/main/java/com/tenio/common/data/zero/implement/ZeroElementImpl.java b/src/main/java/com/tenio/common/data/zero/implement/ZeroElementImpl.java
index c74421b..3e447b6 100644
--- a/src/main/java/com/tenio/common/data/zero/implement/ZeroElementImpl.java
+++ b/src/main/java/com/tenio/common/data/zero/implement/ZeroElementImpl.java
@@ -26,26 +26,11 @@ of this software and associated documentation files (the "Software"), to deal
import com.tenio.common.data.zero.ZeroElement;
import com.tenio.common.data.zero.ZeroType;
-import java.util.Objects;
/**
* This class holds a relationship between a self-definition data type and its value.
*/
-public final class ZeroElementImpl implements ZeroElement {
-
- private final ZeroType type;
- private final Object data;
-
- /**
- * Creates a new instance.
- *
- * @param type the {@link ZeroType}
- * @param data the {@link Object} value
- */
- public ZeroElementImpl(ZeroType type, Object data) {
- this.type = type;
- this.data = data;
- }
+public record ZeroElementImpl(ZeroType type, Object data) implements ZeroElement {
@Override
public ZeroType getType() {
@@ -57,23 +42,6 @@ public Object getData() {
return data;
}
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- ZeroElementImpl zeroDataImpl = (ZeroElementImpl) o;
- return type == zeroDataImpl.type && Objects.equals(data, zeroDataImpl.data);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(type, data);
- }
-
@Override
public String toString() {
return "ZeroElement{" +
diff --git a/src/main/java/com/tenio/common/data/zero/implement/ZeroMapImpl.java b/src/main/java/com/tenio/common/data/zero/implement/ZeroMapImpl.java
index 4d59194..42b390c 100644
--- a/src/main/java/com/tenio/common/data/zero/implement/ZeroMapImpl.java
+++ b/src/main/java/com/tenio/common/data/zero/implement/ZeroMapImpl.java
@@ -351,7 +351,8 @@ public String toString() {
} else if (zeroElement.getType() == ZeroType.BYTE_ARRAY) {
builder.append(String.format("byte[%d]", ((byte[]) zeroElement.getData()).length));
} else {
- builder.append(zeroElement.getData().toString());
+ builder.append(Objects.nonNull(zeroElement.getData()) ? zeroElement.getData().toString()
+ : "null");
}
}
diff --git a/src/main/java/com/tenio/common/data/zero/utility/ZeroUtility.java b/src/main/java/com/tenio/common/data/zero/utility/ZeroUtility.java
index d7674a5..ba7a200 100644
--- a/src/main/java/com/tenio/common/data/zero/utility/ZeroUtility.java
+++ b/src/main/java/com/tenio/common/data/zero/utility/ZeroUtility.java
@@ -106,17 +106,12 @@ public static ZeroMap newZeroMap() {
* @return a new zero collection instance
*/
public static DataCollection binaryToCollection(byte[] binary) {
- switch (ZeroType.getByValue(binary[0])) {
- case ZERO_MAP:
- return binaryToMap(binary);
-
- case ZERO_ARRAY:
- return binaryToArray(binary);
-
- default:
- throw new UnsupportedOperationException(
- String.format("Unsupported value: %s", ZeroType.getByValue(binary[0])));
- }
+ return switch (ZeroType.getByValue(binary[0])) {
+ case ZERO_MAP -> binaryToMap(binary);
+ case ZERO_ARRAY -> binaryToArray(binary);
+ default -> throw new UnsupportedOperationException(
+ String.format("Unsupported value: %s", ZeroType.getByValue(binary[0])));
+ };
}
/**
@@ -281,66 +276,27 @@ private static ZeroElement decodeElement(ByteBuffer buffer) throws RuntimeExcept
@SuppressWarnings("unchecked")
private static ByteBuffer encodeElement(ByteBuffer buffer, ZeroType type, Object data) {
switch (type) {
- case NULL:
- buffer = encodeNull(buffer);
- break;
- case BOOLEAN:
- buffer = encodeBoolean(buffer, (Boolean) data);
- break;
- case BYTE:
- buffer = encodeByte(buffer, (Byte) data);
- break;
- case SHORT:
- buffer = encodeShort(buffer, (Short) data);
- break;
- case INTEGER:
- buffer = encodeInteger(buffer, (Integer) data);
- break;
- case LONG:
- buffer = encodeLong(buffer, (Long) data);
- break;
- case FLOAT:
- buffer = encodeFloat(buffer, (Float) data);
- break;
- case DOUBLE:
- buffer = encodeDouble(buffer, (Double) data);
- break;
- case STRING:
- buffer = encodeString(buffer, (String) data);
- break;
- case BOOLEAN_ARRAY:
- buffer = encodeBooleanArray(buffer, (Collection) data);
- break;
- case BYTE_ARRAY:
- buffer = encodeByteArray(buffer, (byte[]) data);
- break;
- case SHORT_ARRAY:
- buffer = encodeShortArray(buffer, (Collection) data);
- break;
- case INTEGER_ARRAY:
- buffer = encodeIntegerArray(buffer, (Collection) data);
- break;
- case LONG_ARRAY:
- buffer = encodeLongArray(buffer, (Collection) data);
- break;
- case FLOAT_ARRAY:
- buffer = encodeFloatArray(buffer, (Collection) data);
- break;
- case DOUBLE_ARRAY:
- buffer = encodeDoubleArray(buffer, (Collection) data);
- break;
- case STRING_ARRAY:
- buffer = encodeStringArray(buffer, (Collection) data);
- break;
- case ZERO_ARRAY:
- buffer = appendBinaryToBuffer(buffer, arrayToBinary((ZeroArray) data));
- break;
- case ZERO_MAP:
- buffer = appendBinaryToBuffer(buffer, mapToBinary((ZeroMap) data));
- break;
- default:
- throw new IllegalArgumentException(
- String.format("Unsupported data type: %s", type));
+ case NULL -> buffer = encodeNull(buffer);
+ case BOOLEAN -> buffer = encodeBoolean(buffer, (Boolean) data);
+ case BYTE -> buffer = encodeByte(buffer, (Byte) data);
+ case SHORT -> buffer = encodeShort(buffer, (Short) data);
+ case INTEGER -> buffer = encodeInteger(buffer, (Integer) data);
+ case LONG -> buffer = encodeLong(buffer, (Long) data);
+ case FLOAT -> buffer = encodeFloat(buffer, (Float) data);
+ case DOUBLE -> buffer = encodeDouble(buffer, (Double) data);
+ case STRING -> buffer = encodeString(buffer, (String) data);
+ case BOOLEAN_ARRAY -> buffer = encodeBooleanArray(buffer, (Collection) data);
+ case BYTE_ARRAY -> buffer = encodeByteArray(buffer, (byte[]) data);
+ case SHORT_ARRAY -> buffer = encodeShortArray(buffer, (Collection) data);
+ case INTEGER_ARRAY -> buffer = encodeIntegerArray(buffer, (Collection) data);
+ case LONG_ARRAY -> buffer = encodeLongArray(buffer, (Collection) data);
+ case FLOAT_ARRAY -> buffer = encodeFloatArray(buffer, (Collection) data);
+ case DOUBLE_ARRAY -> buffer = encodeDoubleArray(buffer, (Collection) data);
+ case STRING_ARRAY -> buffer = encodeStringArray(buffer, (Collection) data);
+ case ZERO_ARRAY -> buffer = appendBinaryToBuffer(buffer, arrayToBinary((ZeroArray) data));
+ case ZERO_MAP -> buffer = appendBinaryToBuffer(buffer, mapToBinary((ZeroMap) data));
+ default -> throw new IllegalArgumentException(
+ String.format("Unsupported data type: %s", type));
}
return buffer;
diff --git a/src/test/java/com/tenio/common/TenIOCommonTest.java b/src/test/java/com/tenio/common/TenIOCommonTest.java
index 279f8b7..27dc6bb 100644
--- a/src/test/java/com/tenio/common/TenIOCommonTest.java
+++ b/src/test/java/com/tenio/common/TenIOCommonTest.java
@@ -34,6 +34,7 @@ of this software and associated documentation files (the "Software"), to deal
@SuiteDisplayName("Test all unit test cases for tenio-common module")
@SelectPackages({
"com.tenio.common.configuration",
+ "com.tenio.common.constant",
"com.tenio.common.data",
"com.tenio.common.pool",
"com.tenio.common.task",
diff --git a/src/test/java/com/tenio/common/configuration/DefaultConfigurationType.java b/src/test/java/com/tenio/common/configuration/DefaultConfigurationType.java
index 414b526..8252f1a 100644
--- a/src/test/java/com/tenio/common/configuration/DefaultConfigurationType.java
+++ b/src/test/java/com/tenio/common/configuration/DefaultConfigurationType.java
@@ -37,8 +37,7 @@ enum DefaultConfigurationType implements ConfigurationType {
NULL_DEFINED("NULL_DEFINED");
// Reverse-lookup map for getting a type from a value
- private static final Map lookup =
- new HashMap();
+ private static final Map lookup = new HashMap<>();
static {
for (var configurationType : DefaultConfigurationType.values()) {
diff --git a/src/test/java/com/tenio/common/constant/ConstantTest.java b/src/test/java/com/tenio/common/constant/ConstantTest.java
new file mode 100644
index 0000000..5ec67e0
--- /dev/null
+++ b/src/test/java/com/tenio/common/constant/ConstantTest.java
@@ -0,0 +1,50 @@
+/*
+The MIT License
+
+Copyright (c) 2016-2022 kong
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+package com.tenio.common.constant;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertThrowsExactly;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+@DisplayName("Unit Test Cases For Constant")
+class ConstantTest {
+
+ @Test
+ @DisplayName("Throw an exception when the class's instance is attempted creating")
+ void createNewInstanceShouldThrowException() throws NoSuchMethodException {
+ var constructor = CommonConstant.class.getDeclaredConstructor();
+ assertTrue(Modifier.isPrivate(constructor.getModifiers()));
+ assertThrows(InvocationTargetException.class, () -> {
+ constructor.setAccessible(true);
+ constructor.newInstance();
+ });
+ }
+}
diff --git a/src/test/java/com/tenio/common/data/ZeroUtilityTest.java b/src/test/java/com/tenio/common/data/ZeroUtilityTest.java
index 75a60f5..8cc80e6 100644
--- a/src/test/java/com/tenio/common/data/ZeroUtilityTest.java
+++ b/src/test/java/com/tenio/common/data/ZeroUtilityTest.java
@@ -27,10 +27,14 @@ of this software and associated documentation files (the "Software"), to deal
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import com.tenio.common.data.zero.utility.ZeroUtility;
import com.tenio.common.data.zero.ZeroType;
+import com.tenio.common.data.zero.utility.ZeroUtility;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
import org.junit.jupiter.api.AfterAll;
@@ -42,6 +46,7 @@ of this software and associated documentation files (the "Software"), to deal
class ZeroUtilityTest {
private static Collection booleans;
+ private static byte[] binaries;
private static Collection shorts;
private static Collection integers;
private static Collection longs;
@@ -51,12 +56,17 @@ class ZeroUtilityTest {
@BeforeAll
static void initialization() {
- booleans = new ArrayList<>();
+ booleans = new ArrayList<>(3);
booleans.add(true);
booleans.add(false);
booleans.add(true);
- shorts = new ArrayList<>();
+ binaries = new byte[3];
+ binaries[0] = (byte) 1;
+ binaries[1] = (byte) 2;
+ binaries[2] = (byte) 3;
+
+ shorts = new ArrayList<>(6);
shorts.add((short) 10);
shorts.add((short) 11);
shorts.add((short) 12);
@@ -64,17 +74,17 @@ static void initialization() {
shorts.add((short) 14);
shorts.add((short) 15);
- integers = new ArrayList<>();
+ integers = new ArrayList<>(4);
integers.add(100);
integers.add(101);
integers.add(102);
integers.add(103);
- longs = new ArrayList<>();
+ longs = new ArrayList<>(2);
longs.add(1000L);
longs.add(2000L);
- floats = new ArrayList<>();
+ floats = new ArrayList<>(6);
floats.add(1001.1f);
floats.add(1002.2f);
floats.add(1003.3f);
@@ -82,10 +92,10 @@ static void initialization() {
floats.add(1005.5f);
floats.add(1006.6f);
- doubles = new ArrayList<>();
+ doubles = new ArrayList<>(1);
doubles.add(1000000.11111);
- strings = new ArrayList<>();
+ strings = new ArrayList<>(5);
strings.add("zero");
strings.add("data");
strings.add("testing");
@@ -104,6 +114,30 @@ static void finish() {
strings.clear();
}
+ @Test
+ @DisplayName("Throw an exception when the class's instance is attempted creating")
+ void createNewInstanceShouldThrowException() throws NoSuchMethodException {
+ var constructor = ZeroUtility.class.getDeclaredConstructor();
+ assertTrue(Modifier.isPrivate(constructor.getModifiers()));
+ assertThrows(InvocationTargetException.class, () -> {
+ constructor.setAccessible(true);
+ constructor.newInstance();
+ });
+ }
+
+ @Test
+ @DisplayName("Checking whether binaries data is a collect should work")
+ void itShouldReturnCorrectDataCollection() {
+ var zeroMap = ZeroUtility.newZeroMap().putBoolean("a", true);
+ var checkZeroMap = ZeroUtility.binaryToCollection(zeroMap.toBinary());
+ assertEquals(checkZeroMap.toString(), zeroMap.toString());
+ var zeroArray = ZeroUtility.newZeroArray().addBoolean(true);
+ var checkZeroArray = ZeroUtility.binaryToCollection(zeroArray.toBinary());
+ assertEquals(checkZeroArray.toString(), zeroArray.toString());
+ assertThrows(UnsupportedOperationException.class,
+ () -> ZeroUtility.binaryToCollection(new byte[] {(byte) 1}));
+ }
+
@Test
@DisplayName("Allow adding and fetching primitive data to/from ZeroArray")
void primitiveDataInArrayShouldMatch() {
@@ -146,8 +180,10 @@ void instanceDataInArrayShouldMatch() {
@DisplayName("Allow adding and fetching arrays of primitive data to/from ZeroArray")
void collectionDataInArrayShouldMatch() {
var origin = ZeroUtility.newZeroArray();
+ var zeroArray = ZeroUtility.newZeroArray().addString("newZeroArray");
origin.addBooleanArray(booleans).addShortArray(shorts).addIntegerArray(integers)
- .addLongArray(longs).addFloatArray(floats).addDoubleArray(doubles).addStringArray(strings);
+ .addLongArray(longs).addFloatArray(floats).addDoubleArray(doubles).addStringArray(strings)
+ .addZeroArray(zeroArray);
var binary = origin.toBinary();
var newOne = ZeroUtility.binaryToArray(binary);
@@ -158,7 +194,8 @@ void collectionDataInArrayShouldMatch() {
() -> assertEquals(newOne.getLongArray(3).toString(), longs.toString()),
() -> assertEquals(newOne.getFloatArray(4).toString(), floats.toString()),
() -> assertEquals(newOne.getDoubleArray(5).toString(), doubles.toString()),
- () -> assertEquals(newOne.getStringArray(6).toString(), strings.toString())
+ () -> assertEquals(newOne.getStringArray(6).toString(), strings.toString()),
+ () -> assertEquals(newOne.getZeroArray(7).toString(), zeroArray.toString())
);
}
@@ -243,13 +280,15 @@ void instanceDataInMapShouldMatch() {
@DisplayName("Allow adding and fetching arrays of primitive data to/from ZeroMap")
void collectionDataInMapShouldMatch() {
var origin = ZeroUtility.newZeroMap();
+ var zeroArray = ZeroUtility.newZeroArray().addString("newZeroArray");
origin.putBooleanArray("b", booleans)
.putShortArray("s", shorts)
.putIntegerArray("i", integers)
.putLongArray("l", longs)
.putFloatArray("f", floats)
.putDoubleArray("d", doubles)
- .putStringArray("ss", strings);
+ .putStringArray("ss", strings)
+ .putZeroArray("za", zeroArray);
var binary = origin.toBinary();
var newOne = ZeroUtility.binaryToMap(binary);
@@ -260,7 +299,8 @@ void collectionDataInMapShouldMatch() {
() -> assertEquals(newOne.getLongArray("l").toString(), longs.toString()),
() -> assertEquals(newOne.getFloatArray("f").toString(), floats.toString()),
() -> assertEquals(newOne.getDoubleArray("d").toString(), doubles.toString()),
- () -> assertEquals(newOne.getStringArray("ss").toString(), strings.toString())
+ () -> assertEquals(newOne.getStringArray("ss").toString(), strings.toString()),
+ () -> assertEquals(newOne.getZeroArray("za").toString(), zeroArray.toString())
);
}
@@ -297,4 +337,169 @@ void zeroMapInMapShouldMatch() {
assertEquals(zeroMap.toString(), newOne.getZeroMap("z").toString());
}
+
+ @Test
+ @DisplayName("The list of elements when using getReadonlyZeroArray() method should be correct")
+ void getReadonlyZeroArrayShouldReturnTheSameElements() {
+ var origin = ZeroUtility.newZeroArray();
+ origin.addInteger(10).addInteger(20).addInteger(30);
+ var readonlyOrigin = origin.getReadonlyZeroArray();
+
+ assertAll("getReadonlyZeroArrayShouldReturnTheSameElements",
+ () -> assertEquals(origin.getInteger(0), readonlyOrigin.getInteger(0)),
+ () -> assertEquals(origin.getInteger(1), readonlyOrigin.getInteger(1)),
+ () -> assertEquals(origin.getInteger(2), readonlyOrigin.getInteger(2)));
+ }
+
+ @Test
+ @DisplayName("Fetching elements from a zero array should give expected results")
+ void fetchElementsFromZeroArrayShouldHaveExpectedResults() {
+ var origin = ZeroUtility.newZeroArray();
+ origin.addInteger(10).addInteger(20).addInteger(30).addNull();
+ assertAll("fetchElementsFromZeroArrayShouldHaveExpectedResults",
+ () -> assertEquals(10, (int) origin.getDataForElementAt(0)),
+ () -> assertNull(origin.getDataForElementAt(3)),
+ () -> assertTrue(origin.contains(20)),
+ () -> assertFalse(origin.contains(40)),
+ () -> assertTrue(origin.contains(null)));
+
+ origin.removeElementAt(3);
+ assertEquals(3, origin.size());
+ origin.removeElementAt(0);
+ assertFalse(origin.contains(10));
+ }
+
+ @Test
+ @DisplayName("Working with binaries in ZeroArray should deliver expected results")
+ void workingWithBinariesInZeroArrayShouldReturnExpectedResults() {
+ var origin = ZeroUtility.newZeroArray();
+ origin.addByte((byte) 1).addByteArray(new byte[] {(byte) 1, (byte) 2, (byte) 3});
+ assertAll("workingWithBinariesInZeroArrayShouldReturnExpectedResults",
+ () -> assertEquals((byte) 1, origin.getByte(0)),
+ () -> assertEquals((byte) 1, origin.getByteArray(1)[0]),
+ () -> assertEquals((byte) 2, origin.getByteArray(1)[1]),
+ () -> assertEquals((byte) 3, origin.getByteArray(1)[2]));
+
+ var iterator = origin.iterator();
+ while (iterator.hasNext()) {
+ var element = iterator.next();
+ if (element.getType() == ZeroType.BYTE) {
+ assertEquals((byte) 1, element.getData());
+ } else {
+ assertEquals(3, ((byte[]) element.getData()).length);
+ }
+ }
+ }
+
+ @Test
+ @DisplayName("The map of elements when using getReadonlyZeroMap() method should be correct")
+ void getReadonlyZeroMapShouldReturnTheSameElements() {
+ var origin = ZeroUtility.newZeroMap();
+ origin.putInteger("a", 10).putInteger("b", 20).putInteger("c", 30);
+ var readonlyOrigin = origin.getReadonlyZeroMap();
+ var readonlyKeyOrigin = origin.getReadonlyKeys();
+
+ assertAll("getReadonlyZeroMapShouldReturnTheSameElements",
+ () -> assertEquals(origin.getInteger("a"), readonlyOrigin.getInteger("a")),
+ () -> assertEquals(origin.getInteger("b"), readonlyOrigin.getInteger("b")),
+ () -> assertEquals(origin.getInteger("c"), readonlyOrigin.getInteger("c")));
+
+ assertTrue(readonlyKeyOrigin.contains("a"));
+ assertTrue(readonlyKeyOrigin.contains("b"));
+ assertTrue(readonlyKeyOrigin.contains("c"));
+ assertFalse(readonlyKeyOrigin.contains("d"));
+ }
+
+ @Test
+ @DisplayName("Fetching elements from a zero map should give expected results")
+ void fetchElementsFromZeroMapShouldHaveExpectedResults() {
+ var origin = ZeroUtility.newZeroMap();
+ origin.putInteger("a", 10).putInteger("b", 20).putInteger("c", 30)
+ .putNull("d");
+ assertAll("fetchElementsFromZeroMapShouldHaveExpectedResults",
+ () -> assertEquals(10, (int) origin.getZeroElement("a").getData()),
+ () -> assertNull(origin.getZeroElement("d").getData()),
+ () -> assertTrue(origin.containsKey("a")),
+ () -> assertFalse(origin.containsKey("f")));
+
+ origin.removeElement("d");
+ assertEquals(3, origin.size());
+ origin.removeElement("a");
+ assertFalse(origin.containsKey("a"));
+ }
+
+ @Test
+ @DisplayName("Working with binaries in ZeroMap should deliver expected results")
+ void workingWithBinariesInZeroMapShouldReturnExpectedResults() {
+ var origin = ZeroUtility.newZeroMap();
+ origin.putByte("a", (byte) 1).putByteArray("b", new byte[] {(byte) 1, (byte) 2, (byte) 3});
+ assertAll("workingWithBinariesInZeroMapShouldReturnExpectedResults",
+ () -> assertEquals((byte) 1, origin.getByte("a")),
+ () -> assertEquals((byte) 1, origin.getByteArray("b")[0]),
+ () -> assertEquals((byte) 2, origin.getByteArray("b")[1]),
+ () -> assertEquals((byte) 3, origin.getByteArray("b")[2]));
+
+ var iterator = origin.iterator();
+ while (iterator.hasNext()) {
+ var element = iterator.next();
+ if (element.getKey().equals("a")) {
+ assertEquals((byte) 1, element.getValue().getData());
+ } else {
+ assertEquals(3, ((byte[]) element.getValue().getData()).length);
+ }
+ }
+ }
+
+ @Test
+ @DisplayName("Test ZeroArray toString()")
+ void testZeroArrayToStringShouldGiveExpectedResult() {
+ var origin = ZeroUtility.newZeroArray();
+ var zeroArray = ZeroUtility.newZeroArray();
+ zeroArray.addString("newZeroArray");
+ var zeroMap = ZeroUtility.newZeroMap();
+ zeroMap.putBoolean("b", true)
+ .putShort("s", (short) 10)
+ .putInteger("i", 100)
+ .putBooleanArray("ba", booleans)
+ .putZeroArray("za", ZeroUtility.newZeroArray().addDoubleArray(doubles));
+
+ origin.addBoolean(true).addByte((byte) 1).addShort((short) 2).addInteger(3).addLong(4L)
+ .addFloat(5.0f).addDouble(6.0).addString("7").addNull();
+ origin.addBooleanArray(booleans).addByteArray(binaries).addShortArray(shorts)
+ .addIntegerArray(integers).addLongArray(longs).addFloatArray(floats).addDoubleArray(doubles)
+ .addStringArray(strings);
+ origin.addZeroArray(zeroArray);
+ origin.addZeroMap(zeroMap);
+
+ assertEquals("""
+ ZeroArray{ (boolean) true; (byte) 1; (short) 2; (integer) 3; (long) 4; (float) 5.0; (double) 6.0; (string) 7; (null) null; (boolean_array) [true, false, true]; (byte_array) byte[3]; (short_array) [10, 11, 12, 13, 14, 15]; (integer_array) [100, 101, 102, 103]; (long_array) [1000, 2000]; (float_array) [1001.1, 1002.2, 1003.3, 1004.4, 1005.5, 1006.6]; (double_array) [1000000.11111]; (string_array) [zero, data, testing, is, awesome]; (zero_array) ZeroArray{ (string) newZeroArray }; (zero_map) ZeroMap{ (boolean) b: true; (short) s: 10; (zero_array) za: ZeroArray{ (double_array) [1000000.11111] }; (integer) i: 100; (boolean_array) ba: [true, false, true] } }
+ """.trim(), origin.toString());
+ }
+
+ @Test
+ @DisplayName("Test ZeroMap toString()")
+ void testZeroMapToStringShouldGiveExpectedResult() {
+ var origin = ZeroUtility.newZeroMap();
+ var zeroArray = ZeroUtility.newZeroArray();
+ zeroArray.addString("newZeroArray");
+ var zeroMap = ZeroUtility.newZeroMap();
+ zeroMap.putBoolean("b", true)
+ .putShort("s", (short) 10)
+ .putInteger("i", 100)
+ .putBooleanArray("ba", booleans)
+ .putZeroArray("za", ZeroUtility.newZeroArray().addDoubleArray(doubles));
+
+ origin.putBoolean("a", true).putByte("b", (byte) 1).putShort("c", (short) 2).putInteger("d",
+ 3).putLong("e", 4L).putFloat("f", 5.0f).putDouble("g", 6.0).putString("h", "7")
+ .putNull("i");
+ origin.putBooleanArray("k", booleans).putByteArray("l", binaries).putShortArray("m", shorts)
+ .putIntegerArray("n", integers).putLongArray("o", longs).putFloatArray("p", floats)
+ .putDoubleArray("q", doubles).putStringArray("r", strings);
+ origin.putZeroArray("r", zeroArray);
+ origin.putZeroMap("s", zeroMap);
+
+ assertEquals("""
+ ZeroMap{ (boolean) a: true; (byte) b: 1; (short) c: 2; (integer) d: 3; (long) e: 4; (float) f: 5.0; (double) g: 6.0; (string) h: 7; (null) i: null; (boolean_array) k: [true, false, true]; (byte_array) l: byte[3]; (short_array) m: [10, 11, 12, 13, 14, 15]; (integer_array) n: [100, 101, 102, 103]; (long_array) o: [1000, 2000]; (float_array) p: [1001.1, 1002.2, 1003.3, 1004.4, 1005.5, 1006.6]; (double_array) q: [1000000.11111]; (zero_array) r: ZeroArray{ (string) newZeroArray }; (zero_map) s: ZeroMap{ (boolean) b: true; (short) s: 10; (zero_array) za: ZeroArray{ (double_array) [1000000.11111] }; (integer) i: 100; (boolean_array) ba: [true, false, true] } }
+ """.trim(), origin.toString());
+ }
}
From 6525c54a9a35751962eb84fa8ea4291acc7727bb Mon Sep 17 00:00:00 2001
From: Kong
Date: Sun, 11 Dec 2022 09:39:20 +0100
Subject: [PATCH 02/15] test(CM-27): add more test cases
---
.../common/data/msgpack/MsgPackUtility.java | 47 +++---
.../data/msgpack/element/MsgPackMap.java | 36 ++++-
.../common/data/zero/utility/ZeroUtility.java | 11 +-
.../com/tenio/common/data/DataTypeTest.java | 50 ++++++
.../tenio/common/data/DataUtilityTest.java | 72 +++++++++
.../tenio/common/data/MsgPackUtilityTest.java | 138 ++++++++++++++++
.../data/{common => }/ZeroElementTest.java | 2 +-
.../tenio/common/data/ZeroUtilityTest.java | 148 ++++++++++++++++--
8 files changed, 450 insertions(+), 54 deletions(-)
create mode 100644 src/test/java/com/tenio/common/data/DataTypeTest.java
create mode 100644 src/test/java/com/tenio/common/data/DataUtilityTest.java
create mode 100644 src/test/java/com/tenio/common/data/MsgPackUtilityTest.java
rename src/test/java/com/tenio/common/data/{common => }/ZeroElementTest.java (97%)
diff --git a/src/main/java/com/tenio/common/data/msgpack/MsgPackUtility.java b/src/main/java/com/tenio/common/data/msgpack/MsgPackUtility.java
index b2265df..8b32f85 100644
--- a/src/main/java/com/tenio/common/data/msgpack/MsgPackUtility.java
+++ b/src/main/java/com/tenio/common/data/msgpack/MsgPackUtility.java
@@ -45,6 +45,10 @@ of this software and associated documentation files (the "Software"), to deal
*/
public final class MsgPackUtility {
+ private MsgPackUtility() {
+ throw new UnsupportedOperationException("This class does not support creating a new instance");
+ }
+
/**
* Serialize an object to an array of bytes data.
*
@@ -55,31 +59,6 @@ public static byte[] serialize(MsgPackMap msgPackMap) {
return MsgPackConverter.pack(msgPackMap);
}
- /**
- * Deserialize an array of bytes data to a {@link MsgPackMap} object.
- *
- * @param msgPackMap the message container which is using in the system
- * @param byteArrayInput the object for converting raw binaries' data to msgpack
- * using one
- * @param binaries an array of bytes data
- * @return an message object in {@link MsgPackMap} type
- */
- public static MsgPackMap deserialize(MsgPackMap msgPackMap, ByteArrayInputStream byteArrayInput,
- byte[] binaries) {
- var dstMap = MsgPackConverter.unpack(byteArrayInput, binaries);
- if (dstMap == null || dstMap.isEmpty()) {
- return null;
- }
- dstMap.forEach((key, value) -> {
- try {
- msgPackMap.put(key, MsgPackConverter.valueToObject(value));
- } catch (IOException e) {
- e.printStackTrace();
- }
- });
- return msgPackMap;
- }
-
/**
* Deserialize an array of bytes data to a {@link MsgPackMap} object.
*
@@ -102,6 +81,24 @@ public static MsgPackMap deserialize(byte[] binaries) {
});
return msgObject;
}
+
+ /**
+ * Retrieves new instance of the {@link MsgPackMap} class.
+ *
+ * @return an instance
+ */
+ public static MsgPackMap newMsgPackMap() {
+ return MsgPackMap.newInstance();
+ }
+
+ /**
+ * Retrieves new instance of the {@link MsgPackArray} class.
+ *
+ * @return an instance
+ */
+ public static MsgPackArray newMsgPackArray() {
+ return MsgPackArray.newInstance();
+ }
}
class MsgPackConverter {
diff --git a/src/main/java/com/tenio/common/data/msgpack/element/MsgPackMap.java b/src/main/java/com/tenio/common/data/msgpack/element/MsgPackMap.java
index 4fe30f8..62ced54 100644
--- a/src/main/java/com/tenio/common/data/msgpack/element/MsgPackMap.java
+++ b/src/main/java/com/tenio/common/data/msgpack/element/MsgPackMap.java
@@ -54,6 +54,16 @@ public static MsgPackMap newInstance() {
return new MsgPackMap();
}
+ /**
+ * Determines whether the data can be fetched by its key in the map.
+ *
+ * @param key the {@link String} key needs to be checked
+ * @return true if a value is available, otherwise false
+ */
+ public boolean contains(String key) {
+ return containsKey(key);
+ }
+
/**
* Retrieves value in the map by its key.
*
@@ -105,23 +115,35 @@ public MsgPackArray getMsgPackArray(String key) {
}
/**
- * Determines whether the data can be fetched by its key in the map.
+ * Adds new data into the map with its key.
*
- * @param key the {@link String} key needs to be checked
- * @return true if a value is available, otherwise false
+ * @param key the {@link String} key of data
+ * @param value the {@link MsgPackArray} value needs to be inserted
+ * @return the pointer of this instance
*/
- public boolean contains(String key) {
- return containsKey(key);
+ public MsgPackMap putMsgPackArray(String key, MsgPackArray value) {
+ put(key, value);
+ return this;
+ }
+
+ /**
+ * Retrieves value in the map by its key.
+ *
+ * @param key the {@link String} key in the map
+ * @return the value converted in {@link MsgPackMap} type fetched by its key in the map
+ */
+ public MsgPackMap getMsgPackMap(String key) {
+ return (MsgPackMap) get(key);
}
/**
* Adds new data into the map with its key.
*
* @param key the {@link String} key of data
- * @param value the {@link MsgPackArray} value needs to be inserted
+ * @param value the {@link MsgPackMap} value needs to be inserted
* @return the pointer of this instance
*/
- public MsgPackMap putMsgPackArray(String key, MsgPackArray value) {
+ public MsgPackMap putMsgPackMap(String key, MsgPackMap value) {
put(key, value);
return this;
}
diff --git a/src/main/java/com/tenio/common/data/zero/utility/ZeroUtility.java b/src/main/java/com/tenio/common/data/zero/utility/ZeroUtility.java
index ba7a200..a28a5aa 100644
--- a/src/main/java/com/tenio/common/data/zero/utility/ZeroUtility.java
+++ b/src/main/java/com/tenio/common/data/zero/utility/ZeroUtility.java
@@ -226,6 +226,9 @@ private static byte[] arrayToBinary(ZeroArray array, ByteBuffer buffer) {
private static ZeroElement decodeElement(ByteBuffer buffer) throws RuntimeException {
var headerByte = buffer.get();
var type = ZeroType.getByValue(headerByte);
+ if (Objects.isNull(type)) {
+ return null;
+ }
switch (type) {
case NULL:
@@ -268,9 +271,8 @@ private static ZeroElement decodeElement(ByteBuffer buffer) throws RuntimeExcept
case ZERO_MAP:
buffer.position(buffer.position() - Byte.BYTES);
return newZeroElement(ZeroType.ZERO_MAP, decodeZeroMap(buffer));
- default:
- return null;
}
+ return null;
}
@SuppressWarnings("unchecked")
@@ -295,8 +297,6 @@ private static ByteBuffer encodeElement(ByteBuffer buffer, ZeroType type, Object
case STRING_ARRAY -> buffer = encodeStringArray(buffer, (Collection) data);
case ZERO_ARRAY -> buffer = appendBinaryToBuffer(buffer, arrayToBinary((ZeroArray) data));
case ZERO_MAP -> buffer = appendBinaryToBuffer(buffer, mapToBinary((ZeroMap) data));
- default -> throw new IllegalArgumentException(
- String.format("Unsupported data type: %s", type));
}
return buffer;
@@ -491,7 +491,8 @@ private static ZeroArray decodeZeroArray(ByteBuffer buffer) {
throw new IllegalStateException(
String.format("Invalid ZeroType. Expected: %s, value: %d, but found: %s, value: %d",
ZeroType.ZERO_ARRAY, ZeroType.ZERO_ARRAY.getValue(),
- ZeroType.getByValue(headerByte).toString(), headerByte));
+ Objects.nonNull(ZeroType.getByValue(headerByte)) ?
+ ZeroType.getByValue(headerByte).toString() : "null", headerByte));
}
var arraySize = buffer.getShort();
diff --git a/src/test/java/com/tenio/common/data/DataTypeTest.java b/src/test/java/com/tenio/common/data/DataTypeTest.java
new file mode 100644
index 0000000..0b9730c
--- /dev/null
+++ b/src/test/java/com/tenio/common/data/DataTypeTest.java
@@ -0,0 +1,50 @@
+/*
+The MIT License
+
+Copyright (c) 2016-2022 kong
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+package com.tenio.common.data;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+
+@DisplayName("Unit Test Cases For Data Type")
+class DataTypeTest {
+
+ @ParameterizedTest
+ @CsvSource({
+ "ZERO, zero",
+ "MSG_PACK, msgpack"
+ })
+ @DisplayName("Test All Enumerated Values")
+ void testAllEnumValues(String name, String value) {
+ DataType dataType = DataType.valueOf(name);
+ DataType dataTypeByValue = DataType.getByValue(value);
+ assertEquals(dataType, dataTypeByValue);
+ assertEquals(value, dataType.getValue());
+ assertEquals(value, dataType.toString());
+ assertEquals(name, dataType.name());
+ }
+}
diff --git a/src/test/java/com/tenio/common/data/DataUtilityTest.java b/src/test/java/com/tenio/common/data/DataUtilityTest.java
new file mode 100644
index 0000000..111bfd4
--- /dev/null
+++ b/src/test/java/com/tenio/common/data/DataUtilityTest.java
@@ -0,0 +1,72 @@
+/*
+The MIT License
+
+Copyright (c) 2016-2022 kong
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+package com.tenio.common.data;
+
+import static org.junit.jupiter.api.Assertions.assertAll;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import com.tenio.common.data.msgpack.MsgPackUtility;
+import com.tenio.common.data.msgpack.element.MsgPackArray;
+import com.tenio.common.data.msgpack.element.MsgPackMap;
+import com.tenio.common.data.zero.ZeroArray;
+import com.tenio.common.data.zero.ZeroMap;
+import com.tenio.common.data.zero.utility.ZeroUtility;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+@DisplayName("Unit Test Cases For Data Utility")
+class DataUtilityTest {
+
+ @Test
+ @DisplayName("Throw an exception when the class's instance is attempted creating")
+ void createNewInstanceShouldThrowException() throws NoSuchMethodException {
+ var constructor = DataUtility.class.getDeclaredConstructor();
+ assertTrue(Modifier.isPrivate(constructor.getModifiers()));
+ assertThrows(InvocationTargetException.class, () -> {
+ constructor.setAccessible(true);
+ constructor.newInstance();
+ });
+ }
+
+ @Test
+ @DisplayName("Provided creation methods should work properly")
+ void instancesCreationShouldWork() {
+ assertAll("instancesCreationShouldWork",
+ () -> assertInstanceOf(ZeroArray.class, DataUtility.newZeroArray()),
+ () -> assertInstanceOf(ZeroMap.class, DataUtility.newZeroMap()),
+ () -> assertInstanceOf(MsgPackArray.class, DataUtility.newMsgArray()),
+ () -> assertInstanceOf(MsgPackMap.class, DataUtility.newMsgMap()));
+
+ var zeroMapBinaries = ZeroUtility.mapToBinary(ZeroUtility.newZeroMap());
+ var msgPackBinaries = MsgPackUtility.serialize(MsgPackMap.newInstance().putBoolean("a", true));
+ assertInstanceOf(ZeroMap.class, DataUtility.binaryToCollection(DataType.ZERO, zeroMapBinaries));
+ assertInstanceOf(MsgPackMap.class, DataUtility.binaryToCollection(DataType.MSG_PACK,
+ msgPackBinaries));
+ }
+}
diff --git a/src/test/java/com/tenio/common/data/MsgPackUtilityTest.java b/src/test/java/com/tenio/common/data/MsgPackUtilityTest.java
new file mode 100644
index 0000000..3a9596f
--- /dev/null
+++ b/src/test/java/com/tenio/common/data/MsgPackUtilityTest.java
@@ -0,0 +1,138 @@
+/*
+The MIT License
+
+Copyright (c) 2016-2022 kong
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+package com.tenio.common.data;
+
+import static org.junit.jupiter.api.Assertions.assertAll;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import com.tenio.common.data.msgpack.MsgPackUtility;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+@DisplayName("Unit Test Cases For MsgPack Utility")
+class MsgPackUtilityTest {
+
+ @Test
+ @DisplayName("Throw an exception when the class's instance is attempted creating")
+ void createNewInstanceShouldThrowException() throws NoSuchMethodException {
+ var constructor = MsgPackUtility.class.getDeclaredConstructor();
+ assertTrue(Modifier.isPrivate(constructor.getModifiers()));
+ assertThrows(InvocationTargetException.class, () -> {
+ constructor.setAccessible(true);
+ constructor.newInstance();
+ });
+ }
+
+ @Test
+ @DisplayName("Checking whether binaries data is a collection should work")
+ void itShouldReturnCorrectDataCollection() {
+ var msgpackMap = MsgPackUtility.newMsgPackMap().putBoolean("a", true).putMsgPackArray("b",
+ MsgPackUtility.newMsgPackArray().addBoolean(true));
+ var checkMsgPackMap = MsgPackUtility.deserialize(msgpackMap.toBinary());
+ assert checkMsgPackMap != null;
+ assertEquals(checkMsgPackMap.toString(), msgpackMap.toString());
+ }
+
+ @Test
+ @DisplayName("Allow adding and fetching primitive data to/from MsgPackArray")
+ void primitiveDataInArrayShouldMatch() {
+ var origin = MsgPackUtility.newMsgPackArray();
+ origin.addBoolean(true).addInteger(1000).addFloat(101.1f).addString("msgpack")
+ .addBoolean(false);
+ var carry = MsgPackUtility.newMsgPackMap().putMsgPackArray("k", origin);
+ var binary = carry.toBinary();
+ var newOne = MsgPackUtility.deserialize(binary);
+ assert newOne != null;
+
+ assertAll("primitiveDataInArrayShouldMatch",
+ () -> assertTrue(newOne.getMsgPackArray("k").getBoolean(0)),
+ () -> assertEquals(newOne.getMsgPackArray("k").getInteger(1), 1000),
+ () -> assertEquals(newOne.getMsgPackArray("k").getFloat(2), 101.1f),
+ () -> assertEquals(newOne.getMsgPackArray("k").getString(3), "msgpack"),
+ () -> assertFalse(newOne.getMsgPackArray("k").getBoolean(4))
+ );
+ }
+
+ @Test
+ @DisplayName("Allow adding and fetching MsgPackArray data to/from MsgPackArray")
+ void zeroMapInArrayShouldMatch() {
+ var origin = MsgPackUtility.newMsgPackArray();
+ var msgPackArray = MsgPackUtility.newMsgPackArray();
+ msgPackArray.addBoolean(true)
+ .addInteger(100)
+ .addString("msgpack");
+ origin.addMsgPackArray(msgPackArray);
+ var carry = MsgPackUtility.newMsgPackMap().putMsgPackArray("k", origin);
+ var binary = carry.toBinary();
+ var newOne = MsgPackUtility.deserialize(binary);
+ assert newOne != null;
+
+ assertEquals(carry.getMsgPackArray("k").toString(), newOne.getMsgPackArray("k").toString());
+ }
+
+ @Test
+ @DisplayName("Allow adding and fetching data to/from MsgPackMap")
+ void putDataInMapShouldMatch() {
+ var origin = MsgPackUtility.newMsgPackMap();
+ origin.putBoolean("b", true)
+ .putInteger("i", 1000)
+ .putFloat("f", 101.1f)
+ .putString("s", "msgpack")
+ .putMsgPackArray("ma", MsgPackUtility.newMsgPackArray().addBoolean(true))
+ .putMsgPackMap("mm", MsgPackUtility.newMsgPackMap().putBoolean("b", true));
+ var binary = origin.toBinary();
+ var newOne = MsgPackUtility.deserialize(binary);
+ assert newOne != null;
+
+ assertAll("putDataInMapShouldMatch",
+ () -> assertFalse(newOne.contains("out")),
+ () -> assertTrue(newOne.getBoolean("b")),
+ () -> assertEquals(newOne.getInteger("i"), 1000),
+ () -> assertEquals(newOne.getFloat("f"), 101.1f),
+ () -> assertEquals(newOne.getString("s"), "msgpack"),
+ () -> assertEquals(newOne.getMsgPackArray("ma").toString(),
+ MsgPackUtility.newMsgPackArray().addBoolean(true).toString()),
+ () -> assertEquals(newOne.getMsgPackMap("mm").toString(),
+ MsgPackUtility.newMsgPackMap().putBoolean("b", true).toString())
+ );
+
+ var readonlyMap = origin.getReadonlyMap();
+ assertAll("readonlyDataInMapShouldMatch",
+ () -> assertTrue((boolean) readonlyMap.get("b")),
+ () -> assertEquals((int) readonlyMap.get("i"), 1000),
+ () -> assertEquals((float) readonlyMap.get("f"), 101.1f),
+ () -> assertEquals(readonlyMap.get("s"), "msgpack"),
+ () -> assertEquals(newOne.get("ma").toString(),
+ MsgPackUtility.newMsgPackArray().addBoolean(true).toString()),
+ () -> assertEquals(newOne.get("mm").toString(),
+ MsgPackUtility.newMsgPackMap().putBoolean("b", true).toString())
+ );
+ }
+}
diff --git a/src/test/java/com/tenio/common/data/common/ZeroElementTest.java b/src/test/java/com/tenio/common/data/ZeroElementTest.java
similarity index 97%
rename from src/test/java/com/tenio/common/data/common/ZeroElementTest.java
rename to src/test/java/com/tenio/common/data/ZeroElementTest.java
index 0e6bce0..114761b 100644
--- a/src/test/java/com/tenio/common/data/common/ZeroElementTest.java
+++ b/src/test/java/com/tenio/common/data/ZeroElementTest.java
@@ -22,7 +22,7 @@ of this software and associated documentation files (the "Software"), to deal
THE SOFTWARE.
*/
-package com.tenio.common.data.common;
+package com.tenio.common.data;
import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/src/test/java/com/tenio/common/data/ZeroUtilityTest.java b/src/test/java/com/tenio/common/data/ZeroUtilityTest.java
index 8cc80e6..0420265 100644
--- a/src/test/java/com/tenio/common/data/ZeroUtilityTest.java
+++ b/src/test/java/com/tenio/common/data/ZeroUtilityTest.java
@@ -33,6 +33,7 @@ of this software and associated documentation files (the "Software"), to deal
import com.tenio.common.data.zero.ZeroType;
import com.tenio.common.data.zero.utility.ZeroUtility;
+import com.tenio.common.utility.ByteUtility;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
@@ -126,7 +127,7 @@ void createNewInstanceShouldThrowException() throws NoSuchMethodException {
}
@Test
- @DisplayName("Checking whether binaries data is a collect should work")
+ @DisplayName("Checking whether binaries data is a collection should work")
void itShouldReturnCorrectDataCollection() {
var zeroMap = ZeroUtility.newZeroMap().putBoolean("a", true);
var checkZeroMap = ZeroUtility.binaryToCollection(zeroMap.toBinary());
@@ -142,18 +143,19 @@ void itShouldReturnCorrectDataCollection() {
@DisplayName("Allow adding and fetching primitive data to/from ZeroArray")
void primitiveDataInArrayShouldMatch() {
var origin = ZeroUtility.newZeroArray();
- origin.addBoolean(true).addShort((short) 11).addInteger(1000).addFloat(101.1f).addLong(1000L)
- .addDouble(1010101.101);
+ origin.addBoolean(true).addByte((byte) 1).addShort((short) 11).addInteger(1000).addFloat(101.1f)
+ .addLong(1000L).addDouble(1010101.101);
var binary = origin.toBinary();
var newOne = ZeroUtility.binaryToArray(binary);
assertAll("primitiveDataInArrayShouldMatch",
() -> assertTrue(newOne.getBoolean(0)),
- () -> assertEquals(newOne.getShort(1), (short) 11),
- () -> assertEquals(newOne.getInteger(2), 1000),
- () -> assertEquals(newOne.getFloat(3), 101.1f),
- () -> assertEquals(newOne.getLong(4), 1000L),
- () -> assertEquals(newOne.getDouble(5), 1010101.101)
+ () -> assertEquals(newOne.getByte(1), (byte) 1),
+ () -> assertEquals(newOne.getShort(2), (short) 11),
+ () -> assertEquals(newOne.getInteger(3), 1000),
+ () -> assertEquals(newOne.getFloat(4), 101.1f),
+ () -> assertEquals(newOne.getLong(5), 1000L),
+ () -> assertEquals(newOne.getDouble(6), 1010101.101)
);
}
@@ -181,7 +183,8 @@ void instanceDataInArrayShouldMatch() {
void collectionDataInArrayShouldMatch() {
var origin = ZeroUtility.newZeroArray();
var zeroArray = ZeroUtility.newZeroArray().addString("newZeroArray");
- origin.addBooleanArray(booleans).addShortArray(shorts).addIntegerArray(integers)
+ origin.addBooleanArray(booleans).addByteArray(binaries).addShortArray(shorts)
+ .addIntegerArray(integers)
.addLongArray(longs).addFloatArray(floats).addDoubleArray(doubles).addStringArray(strings)
.addZeroArray(zeroArray);
var binary = origin.toBinary();
@@ -189,13 +192,14 @@ void collectionDataInArrayShouldMatch() {
assertAll("collectionDataInArrayShouldMatch",
() -> assertEquals(newOne.getBooleanArray(0).toString(), booleans.toString()),
- () -> assertEquals(newOne.getShortArray(1).toString(), shorts.toString()),
- () -> assertEquals(newOne.getIntegerArray(2).toString(), integers.toString()),
- () -> assertEquals(newOne.getLongArray(3).toString(), longs.toString()),
- () -> assertEquals(newOne.getFloatArray(4).toString(), floats.toString()),
- () -> assertEquals(newOne.getDoubleArray(5).toString(), doubles.toString()),
- () -> assertEquals(newOne.getStringArray(6).toString(), strings.toString()),
- () -> assertEquals(newOne.getZeroArray(7).toString(), zeroArray.toString())
+ () -> assertEquals(newOne.getByteArray(1).length, binaries.length),
+ () -> assertEquals(newOne.getShortArray(2).toString(), shorts.toString()),
+ () -> assertEquals(newOne.getIntegerArray(3).toString(), integers.toString()),
+ () -> assertEquals(newOne.getLongArray(4).toString(), longs.toString()),
+ () -> assertEquals(newOne.getFloatArray(5).toString(), floats.toString()),
+ () -> assertEquals(newOne.getDoubleArray(6).toString(), doubles.toString()),
+ () -> assertEquals(newOne.getStringArray(7).toString(), strings.toString()),
+ () -> assertEquals(newOne.getZeroArray(8).toString(), zeroArray.toString())
);
}
@@ -502,4 +506,116 @@ void testZeroMapToStringShouldGiveExpectedResult() {
ZeroMap{ (boolean) a: true; (byte) b: 1; (short) c: 2; (integer) d: 3; (long) e: 4; (float) f: 5.0; (double) g: 6.0; (string) h: 7; (null) i: null; (boolean_array) k: [true, false, true]; (byte_array) l: byte[3]; (short_array) m: [10, 11, 12, 13, 14, 15]; (integer_array) n: [100, 101, 102, 103]; (long_array) o: [1000, 2000]; (float_array) p: [1001.1, 1002.2, 1003.3, 1004.4, 1005.5, 1006.6]; (double_array) q: [1000000.11111]; (zero_array) r: ZeroArray{ (string) newZeroArray }; (zero_map) s: ZeroMap{ (boolean) b: true; (short) s: 10; (zero_array) za: ZeroArray{ (double_array) [1000000.11111] }; (integer) i: 100; (boolean_array) ba: [true, false, true] } }
""".trim(), origin.toString());
}
+
+ @Test
+ @DisplayName("It should throw exceptions when invalid conversions were called")
+ void itShouldThrowExceptionsWhenInvalidConversionCalled() {
+ // array size is insufficient
+ assertThrows(IllegalStateException.class,
+ () -> ZeroUtility.binaryToArray(new byte[] {(byte) 1}));
+ // it is not the zero array
+ assertThrows(IllegalStateException.class,
+ () -> ZeroUtility.binaryToArray(new byte[] {(byte) 1, (byte) 2, (byte) 3}));
+ // an array with negative size
+ var negativeArraySizeInShort = ByteUtility.shortToBytes((short) -2);
+ assertThrows(NegativeArraySizeException.class,
+ () -> ZeroUtility.binaryToArray(
+ new byte[] {(byte) ZeroType.ZERO_ARRAY.getValue(), negativeArraySizeInShort[0],
+ negativeArraySizeInShort[1]}));
+ // unrecognized zero type
+ var arraySizeInShort = ByteUtility.shortToBytes((short) 2);
+ assertThrows(IllegalArgumentException.class,
+ () -> ZeroUtility.binaryToArray(
+ new byte[] {(byte) ZeroType.ZERO_ARRAY.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1], (byte) 19, (byte) 1}));
+ // failed to decode boolean
+ assertThrows(IllegalArgumentException.class,
+ () -> ZeroUtility.binaryToArray(
+ new byte[] {(byte) ZeroType.ZERO_ARRAY.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1],
+ (byte) ZeroType.BOOLEAN.getValue(), (byte) 2}));
+ // failed to decode string
+ assertThrows(IllegalArgumentException.class,
+ () -> ZeroUtility.binaryToArray(
+ new byte[] {(byte) ZeroType.ZERO_ARRAY.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1],
+ (byte) ZeroType.STRING.getValue(), negativeArraySizeInShort[0],
+ negativeArraySizeInShort[1]}));
+ // failed to decode collection
+ assertThrows(IllegalArgumentException.class,
+ () -> ZeroUtility.binaryToArray(
+ new byte[] {(byte) ZeroType.ZERO_ARRAY.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1],
+ (byte) ZeroType.BOOLEAN_ARRAY.getValue(), negativeArraySizeInShort[0],
+ negativeArraySizeInShort[1]}));
+ // failed to decode boolean array
+ assertThrows(IllegalArgumentException.class,
+ () -> ZeroUtility.binaryToArray(
+ new byte[] {(byte) ZeroType.ZERO_ARRAY.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1],
+ (byte) ZeroType.BOOLEAN_ARRAY.getValue(), arraySizeInShort[0], arraySizeInShort[1],
+ (byte) 2}));
+ // failed to decode byte array
+ var negativeArraySizeInInteger = ByteUtility.intToBytes((short) -1);
+ assertThrows(IllegalArgumentException.class,
+ () -> ZeroUtility.binaryToArray(
+ new byte[] {(byte) ZeroType.ZERO_ARRAY.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1],
+ (byte) ZeroType.BYTE_ARRAY.getValue(), negativeArraySizeInInteger[0],
+ negativeArraySizeInInteger[1], negativeArraySizeInInteger[2],
+ negativeArraySizeInInteger[3]}));
+ // failed to decode string array
+ assertThrows(IllegalArgumentException.class,
+ () -> ZeroUtility.binaryToArray(
+ new byte[] {(byte) ZeroType.ZERO_ARRAY.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1],
+ (byte) ZeroType.STRING_ARRAY.getValue(), negativeArraySizeInShort[0],
+ negativeArraySizeInShort[1]}));
+
+ assertThrows(IllegalStateException.class, () -> ZeroUtility.binaryToMap(new byte[] {(byte) 1}));
+ // it is not the zero map
+ assertThrows(IllegalStateException.class,
+ () -> ZeroUtility.binaryToMap(new byte[] {(byte) 1, (byte) 2, (byte) 3}));
+ // a map with negative size
+ assertThrows(NegativeArraySizeException.class,
+ () -> ZeroUtility.binaryToMap(
+ new byte[] {(byte) ZeroType.ZERO_MAP.getValue(), negativeArraySizeInShort[0],
+ negativeArraySizeInShort[1]}));
+ // unrecognized zero type
+ assertThrows(IllegalStateException.class,
+ () -> ZeroUtility.binaryToMap(
+ new byte[] {(byte) ZeroType.ZERO_ARRAY.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1], (byte) 19, (byte) 1}));
+ // failed to decode boolean
+ assertThrows(IllegalArgumentException.class,
+ () -> ZeroUtility.binaryToMap(
+ new byte[] {(byte) ZeroType.ZERO_MAP.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1], arraySizeInShort[0], arraySizeInShort[1], (byte) 61,
+ (byte) ZeroType.BOOLEAN.getValue(), (byte) 2}));
+ // failed to decode unrecognized element
+ assertThrows(IllegalArgumentException.class,
+ () -> ZeroUtility.binaryToMap(
+ new byte[] {(byte) ZeroType.ZERO_MAP.getValue(), arraySizeInShort[0],
+ arraySizeInShort[1], arraySizeInShort[0], arraySizeInShort[1], (byte) 61,
+ (byte) 0, (byte) 19}));
+ }
+
+ @Test
+ @DisplayName("Insufficient ByteBuffer should be appended")
+ void insufficientByteBufferShouldBeAppended() {
+ var origin = ZeroUtility.newZeroMap();
+ var zeroMap = ZeroUtility.newZeroMap();
+ zeroMap.putBoolean("b", true)
+ .putShort("s", (short) 10)
+ .putInteger("i", 100)
+ .putFloat("f", 10.0f)
+ .putShortArray("sa", shorts);
+ var binaryMap = zeroMap.toBinary();
+ for (char i = 'a'; i <= 'z'; i++) {
+ origin.putZeroMap(String.valueOf(i), ZeroUtility.binaryToMap(binaryMap));
+ }
+
+ origin.toBinary();
+ assertTrue(true);
+ }
}
From ee23b06f22bef08795e5010c3c0f07e414bece04 Mon Sep 17 00:00:00 2001
From: Kong
Date: Sun, 11 Dec 2022 10:23:50 +0100
Subject: [PATCH 03/15] test(CM-27): fix and add more test cases
---
.../configuration/ConfigurationTest.java | 12 +-
.../com/tenio/common/data/DataTypeTest.java | 2 +-
.../tenio/common/data/MsgPackUtilityTest.java | 68 +++--
.../tenio/common/data/ZeroUtilityTest.java | 89 ++++---
.../common/data/common/CommonArrayTest.java | 15 +-
.../common/data/common/CommonMapTest.java | 17 +-
.../common/pool/StringBuilderPoolTest.java | 19 +-
.../com/tenio/common/task/DefaultTask.java | 5 +-
.../tenio/common/task/TaskManagerTest.java | 4 +-
.../tenio/common/utility/ByteUtilityTest.java | 33 ++-
.../utility/ClassLoaderUtilityTest.java | 48 ++++
.../tenio/common/utility/MathUtilityTest.java | 252 +-----------------
.../tenio/common/utility/OsUtilityTest.java | 15 ++
.../common/utility/StringUtilityTest.java | 71 +++++
.../tenio/common/utility/TimeUtilityTest.java | 71 +++++
.../tenio/common/utility/XmlUtilityTest.java | 17 ++
.../common/worker/WorkerPoolRunnableTest.java | 8 +-
.../tenio/common/worker/WorkerPoolTest.java | 3 +-
18 files changed, 391 insertions(+), 358 deletions(-)
create mode 100644 src/test/java/com/tenio/common/utility/ClassLoaderUtilityTest.java
create mode 100644 src/test/java/com/tenio/common/utility/StringUtilityTest.java
create mode 100644 src/test/java/com/tenio/common/utility/TimeUtilityTest.java
diff --git a/src/test/java/com/tenio/common/configuration/ConfigurationTest.java b/src/test/java/com/tenio/common/configuration/ConfigurationTest.java
index 69b6569..e04cd23 100644
--- a/src/test/java/com/tenio/common/configuration/ConfigurationTest.java
+++ b/src/test/java/com/tenio/common/configuration/ConfigurationTest.java
@@ -49,11 +49,11 @@ void initialization() {
void shouldRetrieveImportedData() {
assertAll("shouldRetrieveImportedData",
() -> assertTrue(configuration.getBoolean(DefaultConfigurationType.BOOLEAN)),
- () -> assertEquals(configuration.getFloat(DefaultConfigurationType.FLOAT), 100F),
- () -> assertEquals(configuration.getInt(DefaultConfigurationType.INTEGER), 99),
- () -> assertEquals(configuration.getString(DefaultConfigurationType.STRING), "test"),
- () -> assertEquals(configuration.get(DefaultConfigurationType.OBJECT),
- configuration.dummyObject)
+ () -> assertEquals(100F, configuration.getFloat(DefaultConfigurationType.FLOAT)),
+ () -> assertEquals(99, configuration.getInt(DefaultConfigurationType.INTEGER)),
+ () -> assertEquals("test", configuration.getString(DefaultConfigurationType.STRING)),
+ () -> assertEquals(configuration.dummyObject,
+ configuration.get(DefaultConfigurationType.OBJECT))
);
}
@@ -69,6 +69,6 @@ void checkNonDefinedConfiguredTypeShouldReturnTrue() {
@DisplayName("To be able to clear all configuration data")
void clearAllConfigurationsShouldWork() {
configuration.clear();
- assertEquals(configuration.toString(), "{}");
+ assertEquals("{}", configuration.toString());
}
}
diff --git a/src/test/java/com/tenio/common/data/DataTypeTest.java b/src/test/java/com/tenio/common/data/DataTypeTest.java
index 0b9730c..5beffbb 100644
--- a/src/test/java/com/tenio/common/data/DataTypeTest.java
+++ b/src/test/java/com/tenio/common/data/DataTypeTest.java
@@ -42,7 +42,7 @@ class DataTypeTest {
void testAllEnumValues(String name, String value) {
DataType dataType = DataType.valueOf(name);
DataType dataTypeByValue = DataType.getByValue(value);
- assertEquals(dataType, dataTypeByValue);
+ assertEquals(dataTypeByValue, dataType);
assertEquals(value, dataType.getValue());
assertEquals(value, dataType.toString());
assertEquals(name, dataType.name());
diff --git a/src/test/java/com/tenio/common/data/MsgPackUtilityTest.java b/src/test/java/com/tenio/common/data/MsgPackUtilityTest.java
index 3a9596f..9f31005 100644
--- a/src/test/java/com/tenio/common/data/MsgPackUtilityTest.java
+++ b/src/test/java/com/tenio/common/data/MsgPackUtilityTest.java
@@ -56,27 +56,41 @@ void itShouldReturnCorrectDataCollection() {
var msgpackMap = MsgPackUtility.newMsgPackMap().putBoolean("a", true).putMsgPackArray("b",
MsgPackUtility.newMsgPackArray().addBoolean(true));
var checkMsgPackMap = MsgPackUtility.deserialize(msgpackMap.toBinary());
+
assert checkMsgPackMap != null;
- assertEquals(checkMsgPackMap.toString(), msgpackMap.toString());
+ assertEquals(msgpackMap.toString(), checkMsgPackMap.toString());
}
@Test
- @DisplayName("Allow adding and fetching primitive data to/from MsgPackArray")
- void primitiveDataInArrayShouldMatch() {
+ @DisplayName("Allow adding and fetching data to/from MsgPackArray")
+ void addedDataInArrayShouldMatch() {
var origin = MsgPackUtility.newMsgPackArray();
origin.addBoolean(true).addInteger(1000).addFloat(101.1f).addString("msgpack")
- .addBoolean(false);
+ .addBoolean(false).addMsgPackArray(MsgPackUtility.newMsgPackArray().addBoolean(true));
var carry = MsgPackUtility.newMsgPackMap().putMsgPackArray("k", origin);
var binary = carry.toBinary();
var newOne = MsgPackUtility.deserialize(binary);
- assert newOne != null;
- assertAll("primitiveDataInArrayShouldMatch",
+ assert newOne != null;
+ assertAll("addedDataInArrayShouldMatch",
() -> assertTrue(newOne.getMsgPackArray("k").getBoolean(0)),
- () -> assertEquals(newOne.getMsgPackArray("k").getInteger(1), 1000),
- () -> assertEquals(newOne.getMsgPackArray("k").getFloat(2), 101.1f),
- () -> assertEquals(newOne.getMsgPackArray("k").getString(3), "msgpack"),
- () -> assertFalse(newOne.getMsgPackArray("k").getBoolean(4))
+ () -> assertEquals(1000, newOne.getMsgPackArray("k").getInteger(1)),
+ () -> assertEquals(101.1f, newOne.getMsgPackArray("k").getFloat(2)),
+ () -> assertEquals("msgpack", newOne.getMsgPackArray("k").getString(3)),
+ () -> assertFalse(newOne.getMsgPackArray("k").getBoolean(4)),
+ () -> assertEquals(MsgPackUtility.newMsgPackArray().addBoolean(true).toString(),
+ newOne.getMsgPackArray("k").getMsgPackArray(5).toString())
+ );
+
+ var readonlyArray = origin.getReadonlyList();
+ assertAll("readonlyDataInArrayShouldMatch",
+ () -> assertTrue((boolean) readonlyArray.get(0)),
+ () -> assertEquals(1000, (int) readonlyArray.get(1)),
+ () -> assertEquals(101.1f, (float) readonlyArray.get(2)),
+ () -> assertEquals("msgpack", readonlyArray.get(3)),
+ () -> assertFalse((boolean) readonlyArray.get(4)),
+ () -> assertEquals(MsgPackUtility.newMsgPackArray().addBoolean(true).toString(),
+ readonlyArray.get(5).toString())
);
}
@@ -92,9 +106,9 @@ void zeroMapInArrayShouldMatch() {
var carry = MsgPackUtility.newMsgPackMap().putMsgPackArray("k", origin);
var binary = carry.toBinary();
var newOne = MsgPackUtility.deserialize(binary);
- assert newOne != null;
- assertEquals(carry.getMsgPackArray("k").toString(), newOne.getMsgPackArray("k").toString());
+ assert newOne != null;
+ assertEquals(newOne.getMsgPackArray("k").toString(), carry.getMsgPackArray("k").toString());
}
@Test
@@ -109,30 +123,30 @@ void putDataInMapShouldMatch() {
.putMsgPackMap("mm", MsgPackUtility.newMsgPackMap().putBoolean("b", true));
var binary = origin.toBinary();
var newOne = MsgPackUtility.deserialize(binary);
- assert newOne != null;
+ assert newOne != null;
assertAll("putDataInMapShouldMatch",
() -> assertFalse(newOne.contains("out")),
() -> assertTrue(newOne.getBoolean("b")),
- () -> assertEquals(newOne.getInteger("i"), 1000),
- () -> assertEquals(newOne.getFloat("f"), 101.1f),
- () -> assertEquals(newOne.getString("s"), "msgpack"),
- () -> assertEquals(newOne.getMsgPackArray("ma").toString(),
- MsgPackUtility.newMsgPackArray().addBoolean(true).toString()),
- () -> assertEquals(newOne.getMsgPackMap("mm").toString(),
- MsgPackUtility.newMsgPackMap().putBoolean("b", true).toString())
+ () -> assertEquals(1000, newOne.getInteger("i")),
+ () -> assertEquals(101.1f, newOne.getFloat("f")),
+ () -> assertEquals("msgpack", newOne.getString("s")),
+ () -> assertEquals(MsgPackUtility.newMsgPackArray().addBoolean(true).toString(),
+ newOne.getMsgPackArray("ma").toString()),
+ () -> assertEquals(MsgPackUtility.newMsgPackMap().putBoolean("b", true).toString(),
+ newOne.getMsgPackMap("mm").toString())
);
var readonlyMap = origin.getReadonlyMap();
assertAll("readonlyDataInMapShouldMatch",
() -> assertTrue((boolean) readonlyMap.get("b")),
- () -> assertEquals((int) readonlyMap.get("i"), 1000),
- () -> assertEquals((float) readonlyMap.get("f"), 101.1f),
- () -> assertEquals(readonlyMap.get("s"), "msgpack"),
- () -> assertEquals(newOne.get("ma").toString(),
- MsgPackUtility.newMsgPackArray().addBoolean(true).toString()),
- () -> assertEquals(newOne.get("mm").toString(),
- MsgPackUtility.newMsgPackMap().putBoolean("b", true).toString())
+ () -> assertEquals(1000, (int) readonlyMap.get("i")),
+ () -> assertEquals(101.1f, (float) readonlyMap.get("f")),
+ () -> assertEquals("msgpack", readonlyMap.get("s")),
+ () -> assertEquals(MsgPackUtility.newMsgPackArray().addBoolean(true).toString(),
+ newOne.get("ma").toString()),
+ () -> assertEquals(MsgPackUtility.newMsgPackMap().putBoolean("b", true).toString(),
+ newOne.get("mm").toString())
);
}
}
diff --git a/src/test/java/com/tenio/common/data/ZeroUtilityTest.java b/src/test/java/com/tenio/common/data/ZeroUtilityTest.java
index 0420265..856acdb 100644
--- a/src/test/java/com/tenio/common/data/ZeroUtilityTest.java
+++ b/src/test/java/com/tenio/common/data/ZeroUtilityTest.java
@@ -131,10 +131,12 @@ void createNewInstanceShouldThrowException() throws NoSuchMethodException {
void itShouldReturnCorrectDataCollection() {
var zeroMap = ZeroUtility.newZeroMap().putBoolean("a", true);
var checkZeroMap = ZeroUtility.binaryToCollection(zeroMap.toBinary());
- assertEquals(checkZeroMap.toString(), zeroMap.toString());
+ assertEquals(zeroMap.toString(), checkZeroMap.toString());
+
var zeroArray = ZeroUtility.newZeroArray().addBoolean(true);
var checkZeroArray = ZeroUtility.binaryToCollection(zeroArray.toBinary());
- assertEquals(checkZeroArray.toString(), zeroArray.toString());
+
+ assertEquals(zeroArray.toString(), checkZeroArray.toString());
assertThrows(UnsupportedOperationException.class,
() -> ZeroUtility.binaryToCollection(new byte[] {(byte) 1}));
}
@@ -150,12 +152,12 @@ void primitiveDataInArrayShouldMatch() {
assertAll("primitiveDataInArrayShouldMatch",
() -> assertTrue(newOne.getBoolean(0)),
- () -> assertEquals(newOne.getByte(1), (byte) 1),
- () -> assertEquals(newOne.getShort(2), (short) 11),
- () -> assertEquals(newOne.getInteger(3), 1000),
- () -> assertEquals(newOne.getFloat(4), 101.1f),
- () -> assertEquals(newOne.getLong(5), 1000L),
- () -> assertEquals(newOne.getDouble(6), 1010101.101)
+ () -> assertEquals((byte) 1, newOne.getByte(1)),
+ () -> assertEquals((short) 11, newOne.getShort(2)),
+ () -> assertEquals(1000, newOne.getInteger(3)),
+ () -> assertEquals(101.1f, newOne.getFloat(4)),
+ () -> assertEquals(1000L, newOne.getLong(5)),
+ () -> assertEquals(1010101.101, newOne.getDouble(6))
);
}
@@ -171,10 +173,10 @@ void instanceDataInArrayShouldMatch() {
assertAll("instanceDataInArrayShouldMatch",
() -> assertTrue(newOne.isNull(0)),
() -> assertAll("zeroDataShouldMatch",
- () -> assertEquals(newOne.getZeroElement(1).getType(), ZeroType.BOOLEAN),
+ () -> assertEquals(ZeroType.BOOLEAN, newOne.getZeroElement(1).getType()),
() -> assertFalse((boolean) newOne.getZeroElement(1).getData())
),
- () -> assertEquals(newOne.getString(2), "test")
+ () -> assertEquals("test", newOne.getString(2))
);
}
@@ -191,15 +193,15 @@ void collectionDataInArrayShouldMatch() {
var newOne = ZeroUtility.binaryToArray(binary);
assertAll("collectionDataInArrayShouldMatch",
- () -> assertEquals(newOne.getBooleanArray(0).toString(), booleans.toString()),
- () -> assertEquals(newOne.getByteArray(1).length, binaries.length),
- () -> assertEquals(newOne.getShortArray(2).toString(), shorts.toString()),
- () -> assertEquals(newOne.getIntegerArray(3).toString(), integers.toString()),
- () -> assertEquals(newOne.getLongArray(4).toString(), longs.toString()),
- () -> assertEquals(newOne.getFloatArray(5).toString(), floats.toString()),
- () -> assertEquals(newOne.getDoubleArray(6).toString(), doubles.toString()),
- () -> assertEquals(newOne.getStringArray(7).toString(), strings.toString()),
- () -> assertEquals(newOne.getZeroArray(8).toString(), zeroArray.toString())
+ () -> assertEquals(booleans.toString(), newOne.getBooleanArray(0).toString()),
+ () -> assertEquals(binaries.length, newOne.getByteArray(1).length),
+ () -> assertEquals(shorts.toString(), newOne.getShortArray(2).toString()),
+ () -> assertEquals(integers.toString(), newOne.getIntegerArray(3).toString()),
+ () -> assertEquals(longs.toString(), newOne.getLongArray(4).toString()),
+ () -> assertEquals(floats.toString(), newOne.getFloatArray(5).toString()),
+ () -> assertEquals(doubles.toString(), newOne.getDoubleArray(6).toString()),
+ () -> assertEquals(strings.toString(), newOne.getStringArray(7).toString()),
+ () -> assertEquals(zeroArray.toString(), newOne.getZeroArray(8).toString())
);
}
@@ -213,10 +215,10 @@ void duplicatedValueInArrayShouldWork() {
var newOne = ZeroUtility.binaryToArray(binary);
assertAll("duplicatedValueInArrayShouldWork",
- () -> assertEquals(newOne.getBooleanArray(0).toString(), booleans.toString()),
- () -> assertEquals(newOne.getShortArray(1).toString(), shorts.toString()),
- () -> assertEquals(newOne.getBooleanArray(2).toString(), booleans.toString()),
- () -> assertEquals(newOne.getShortArray(3).toString(), shorts.toString())
+ () -> assertEquals(booleans.toString(), newOne.getBooleanArray(0).toString()),
+ () -> assertEquals(shorts.toString(), newOne.getShortArray(1).toString()),
+ () -> assertEquals(booleans.toString(), newOne.getBooleanArray(2).toString()),
+ () -> assertEquals(shorts.toString(), newOne.getShortArray(3).toString())
);
}
@@ -252,11 +254,11 @@ void primitiveDataInMapShouldMatch() {
assertAll("primitiveDataInObjectShouldMatch",
() -> assertTrue(newOne.getBoolean("b")),
- () -> assertEquals(newOne.getShort("s"), (short) 11),
- () -> assertEquals(newOne.getInteger("i"), 1000),
- () -> assertEquals(newOne.getFloat("f"), 101.1f),
- () -> assertEquals(newOne.getLong("l"), 1000L),
- () -> assertEquals(newOne.getDouble("d"), 1010101.101)
+ () -> assertEquals((short) 11, newOne.getShort("s")),
+ () -> assertEquals(1000, newOne.getInteger("i")),
+ () -> assertEquals(101.1f, newOne.getFloat("f")),
+ () -> assertEquals(1000L, newOne.getLong("l")),
+ () -> assertEquals(1010101.101, newOne.getDouble("d"))
);
}
@@ -273,10 +275,10 @@ void instanceDataInMapShouldMatch() {
assertAll("instanceDataInObjectShouldMatch",
() -> assertTrue(newOne.isNull("n")),
() -> assertAll("zeroDataShouldMatch",
- () -> assertEquals(newOne.getZeroElement("z").getType(), ZeroType.BOOLEAN),
+ () -> assertEquals(ZeroType.BOOLEAN, newOne.getZeroElement("z").getType()),
() -> assertFalse((boolean) newOne.getZeroElement("z").getData())
),
- () -> assertEquals(newOne.getString("s"), "test")
+ () -> assertEquals("test", newOne.getString("s"))
);
}
@@ -297,14 +299,14 @@ void collectionDataInMapShouldMatch() {
var newOne = ZeroUtility.binaryToMap(binary);
assertAll("collectionDataInObjectShouldMatch",
- () -> assertEquals(newOne.getBooleanArray("b").toString(), booleans.toString()),
- () -> assertEquals(newOne.getShortArray("s").toString(), shorts.toString()),
- () -> assertEquals(newOne.getIntegerArray("i").toString(), integers.toString()),
- () -> assertEquals(newOne.getLongArray("l").toString(), longs.toString()),
- () -> assertEquals(newOne.getFloatArray("f").toString(), floats.toString()),
- () -> assertEquals(newOne.getDoubleArray("d").toString(), doubles.toString()),
- () -> assertEquals(newOne.getStringArray("ss").toString(), strings.toString()),
- () -> assertEquals(newOne.getZeroArray("za").toString(), zeroArray.toString())
+ () -> assertEquals(booleans.toString(), newOne.getBooleanArray("b").toString()),
+ () -> assertEquals(shorts.toString(), newOne.getShortArray("s").toString()),
+ () -> assertEquals(integers.toString(), newOne.getIntegerArray("i").toString()),
+ () -> assertEquals(longs.toString(), newOne.getLongArray("l").toString()),
+ () -> assertEquals(floats.toString(), newOne.getFloatArray("f").toString()),
+ () -> assertEquals(doubles.toString(), newOne.getDoubleArray("d").toString()),
+ () -> assertEquals(strings.toString(), newOne.getStringArray("ss").toString()),
+ () -> assertEquals(zeroArray.toString(), newOne.getZeroArray("za").toString())
);
}
@@ -318,10 +320,10 @@ void duplicatedValueInMapShouldWork() {
var newOne = ZeroUtility.binaryToMap(binary);
assertAll("duplicatedValueInObjectShouldWork",
- () -> assertEquals(newOne.getBooleanArray("b1").toString(), booleans.toString()),
- () -> assertEquals(newOne.getShortArray("s1").toString(), shorts.toString()),
- () -> assertEquals(newOne.getBooleanArray("b2").toString(), booleans.toString()),
- () -> assertEquals(newOne.getShortArray("s2").toString(), shorts.toString())
+ () -> assertEquals(booleans.toString(), newOne.getBooleanArray("b1").toString()),
+ () -> assertEquals(shorts.toString(), newOne.getShortArray("s1").toString()),
+ () -> assertEquals(booleans.toString(), newOne.getBooleanArray("b2").toString()),
+ () -> assertEquals(shorts.toString(), newOne.getShortArray("s2").toString())
);
}
@@ -360,6 +362,7 @@ void getReadonlyZeroArrayShouldReturnTheSameElements() {
void fetchElementsFromZeroArrayShouldHaveExpectedResults() {
var origin = ZeroUtility.newZeroArray();
origin.addInteger(10).addInteger(20).addInteger(30).addNull();
+
assertAll("fetchElementsFromZeroArrayShouldHaveExpectedResults",
() -> assertEquals(10, (int) origin.getDataForElementAt(0)),
() -> assertNull(origin.getDataForElementAt(3)),
@@ -378,6 +381,7 @@ void fetchElementsFromZeroArrayShouldHaveExpectedResults() {
void workingWithBinariesInZeroArrayShouldReturnExpectedResults() {
var origin = ZeroUtility.newZeroArray();
origin.addByte((byte) 1).addByteArray(new byte[] {(byte) 1, (byte) 2, (byte) 3});
+
assertAll("workingWithBinariesInZeroArrayShouldReturnExpectedResults",
() -> assertEquals((byte) 1, origin.getByte(0)),
() -> assertEquals((byte) 1, origin.getByteArray(1)[0]),
@@ -420,6 +424,7 @@ void fetchElementsFromZeroMapShouldHaveExpectedResults() {
var origin = ZeroUtility.newZeroMap();
origin.putInteger("a", 10).putInteger("b", 20).putInteger("c", 30)
.putNull("d");
+
assertAll("fetchElementsFromZeroMapShouldHaveExpectedResults",
() -> assertEquals(10, (int) origin.getZeroElement("a").getData()),
() -> assertNull(origin.getZeroElement("d").getData()),
diff --git a/src/test/java/com/tenio/common/data/common/CommonArrayTest.java b/src/test/java/com/tenio/common/data/common/CommonArrayTest.java
index a2973d0..2a2e941 100644
--- a/src/test/java/com/tenio/common/data/common/CommonArrayTest.java
+++ b/src/test/java/com/tenio/common/data/common/CommonArrayTest.java
@@ -26,6 +26,7 @@ of this software and associated documentation files (the "Software"), to deal
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Assertions;
@@ -49,14 +50,14 @@ void initialization() {
@DisplayName("Allow fetching all inserted data from the array")
void itShouldFetchAllInsertedData() {
assertAll("itShouldFetchAllInsertedData",
- () -> assertEquals(commonArray.getDouble(0), 100.0),
- () -> assertEquals(commonArray.getFloat(1), 100.0F),
- () -> assertEquals(commonArray.getLong(2), 100L),
- () -> assertEquals(commonArray.getInt(3), 100),
+ () -> assertEquals(100.0, commonArray.getDouble(0)),
+ () -> assertEquals(100.0f, commonArray.getFloat(1)),
+ () -> assertEquals(100L, commonArray.getLong(2)),
+ () -> assertEquals(100, commonArray.getInt(3)),
() -> assertTrue(commonArray.getBoolean(4)),
- () -> assertEquals(commonArray.getString(5), "test"),
- () -> assertEquals(commonArray.getCommonObjectArray(6), dummyArray),
- () -> assertTrue(commonArray.getObject(7) instanceof CommonArray)
+ () -> assertEquals("test", commonArray.getString(5)),
+ () -> assertEquals(dummyArray, commonArray.getCommonObjectArray(6)),
+ () -> assertInstanceOf(CommonArray.class, commonArray.getObject(7))
);
}
diff --git a/src/test/java/com/tenio/common/data/common/CommonMapTest.java b/src/test/java/com/tenio/common/data/common/CommonMapTest.java
index 2eeb42d..fcff2c8 100644
--- a/src/test/java/com/tenio/common/data/common/CommonMapTest.java
+++ b/src/test/java/com/tenio/common/data/common/CommonMapTest.java
@@ -52,16 +52,15 @@ void initialization() {
@DisplayName("Allow fetching all inserted data")
void itShouldFetchAllInsertedData() {
assertAll("itShouldFetchAllInsertedData",
- () -> assertEquals(commonMap.getDouble("double"), 100.0),
- () -> assertEquals(commonMap.getFloat("float"), 100.0F),
- () -> assertEquals(commonMap.getLong("long"), 100L),
- () -> assertEquals(commonMap.getInt("integer"), 100),
- () -> assertEquals(commonMap.getString("string"), "test"),
+ () -> assertEquals(100.0, commonMap.getDouble("double")),
+ () -> assertEquals(100.0f, commonMap.getFloat("float")),
+ () -> assertEquals(100L, commonMap.getLong("long")),
+ () -> assertEquals(100, commonMap.getInt("integer")),
+ () -> assertEquals("test", commonMap.getString("string")),
() -> assertTrue(commonMap.getBoolean("boolean")),
- () -> assertEquals(commonMap.getCommonObject("common object"), dummyMap),
- () -> assertEquals(commonMap.getCommonObjectArray("common object array"),
- dummyArray),
- () -> assertEquals(commonMap.getObject("object"), dummyMap));
+ () -> assertEquals(dummyMap, commonMap.getCommonObject("common object")),
+ () -> assertEquals(dummyArray, commonMap.getCommonObjectArray("common object array")),
+ () -> assertEquals(dummyMap, commonMap.getObject("object")));
}
@Test
diff --git a/src/test/java/com/tenio/common/pool/StringBuilderPoolTest.java b/src/test/java/com/tenio/common/pool/StringBuilderPoolTest.java
index 686f056..65b93cf 100644
--- a/src/test/java/com/tenio/common/pool/StringBuilderPoolTest.java
+++ b/src/test/java/com/tenio/common/pool/StringBuilderPoolTest.java
@@ -24,13 +24,13 @@ of this software and associated documentation files (the "Software"), to deal
package com.tenio.common.pool;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
import com.tenio.common.constant.CommonConstant;
import com.tenio.common.exception.NullElementPoolException;
import com.tenio.common.logger.pool.StringBuilderPool;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -47,7 +47,7 @@ void initialization() {
@DisplayName("To be able to get a builder instance from pool")
void getBuilderFromPoolShouldWork() {
var builder = StringBuilderPool.getInstance().get();
- assertTrue(builder instanceof StringBuilder);
+ assertNotNull(builder);
}
@Test
@@ -59,7 +59,7 @@ void getAndRePayBuilderShouldWork() {
pool.repay(builder);
var sizeAfter = pool.getAvailableSlot();
- assertTrue(sizeBefore == sizeAfter);
+ assertEquals(sizeBefore, sizeAfter);
}
@Test
@@ -72,8 +72,8 @@ void poolSizeDecreaseShouldBeAsExpected() {
pool.get();
}
var sizeAfter = pool.getAvailableSlot();
-
- assertTrue(sizeAfter == (sizeBefore - takenNumber));
+ var sizeExpected = sizeBefore - takenNumber;
+ assertEquals(sizeExpected, sizeAfter);
}
@Test
@@ -87,9 +87,10 @@ void poolSizeIncreaseShouldBeAsExpected() {
}
var sizeAfter = pool.getPoolSize();
var sizeExpected =
- CommonConstant.DEFAULT_NUMBER_ELEMENTS_POOL + CommonConstant.ADDITIONAL_NUMBER_ELEMENTS_POOL;
+ CommonConstant.DEFAULT_NUMBER_ELEMENTS_POOL +
+ CommonConstant.ADDITIONAL_NUMBER_ELEMENTS_POOL;
- assertTrue(sizeAfter == sizeExpected);
+ assertEquals(sizeExpected, sizeAfter);
}
@Test
@@ -102,7 +103,7 @@ void clearPoolShouldReturnTheAvailableSlotsEqualsSize() {
}
pool.cleanup();
- assertTrue(pool.getAvailableSlot() == pool.getPoolSize());
+ assertEquals(pool.getAvailableSlot(), pool.getPoolSize());
}
@Test
diff --git a/src/test/java/com/tenio/common/task/DefaultTask.java b/src/test/java/com/tenio/common/task/DefaultTask.java
index 802e1b6..ebd490c 100644
--- a/src/test/java/com/tenio/common/task/DefaultTask.java
+++ b/src/test/java/com/tenio/common/task/DefaultTask.java
@@ -34,8 +34,7 @@ class DefaultTask implements Task {
@Override
public ScheduledFuture> run() {
- return Executors.newSingleThreadScheduledExecutor().schedule(() -> {
- System.out.println("test task");
- }, DELAY_SECOND, TimeUnit.SECONDS);
+ return Executors.newSingleThreadScheduledExecutor()
+ .schedule(() -> System.out.println("test task"), DELAY_SECOND, TimeUnit.SECONDS);
}
}
diff --git a/src/test/java/com/tenio/common/task/TaskManagerTest.java b/src/test/java/com/tenio/common/task/TaskManagerTest.java
index 8e550a8..e1ae120 100644
--- a/src/test/java/com/tenio/common/task/TaskManagerTest.java
+++ b/src/test/java/com/tenio/common/task/TaskManagerTest.java
@@ -40,7 +40,7 @@ void createNewTaskShouldWork() {
var taskManager = TaskManagerImpl.newInstance();
taskManager.create("test-task", new DefaultTask().run());
- assertEquals(taskManager.getRemainTime("test-task"), DefaultTask.DELAY_SECOND - 1);
+ assertEquals(DefaultTask.DELAY_SECOND - 1, taskManager.getRemainTime("test-task"));
}
@Test
@@ -50,7 +50,7 @@ void killATaskShouldWork() {
taskManager.create("test-task", new DefaultTask().run());
taskManager.kill("test-task");
- assertEquals(taskManager.getRemainTime("test-task"), -1);
+ assertEquals(-1, taskManager.getRemainTime("test-task"));
}
@Test
diff --git a/src/test/java/com/tenio/common/utility/ByteUtilityTest.java b/src/test/java/com/tenio/common/utility/ByteUtilityTest.java
index f3c3fd9..b94de34 100644
--- a/src/test/java/com/tenio/common/utility/ByteUtilityTest.java
+++ b/src/test/java/com/tenio/common/utility/ByteUtilityTest.java
@@ -26,9 +26,12 @@ of this software and associated documentation files (the "Software"), to deal
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import com.tenio.common.custom.StringArrayConverter;
-import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
+import java.nio.charset.StandardCharsets;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
@@ -38,6 +41,17 @@ of this software and associated documentation files (the "Software"), to deal
@DisplayName("Unit Test Cases For Byte Utility")
class ByteUtilityTest {
+ @Test
+ @DisplayName("Throw an exception when the class's instance is attempted creating")
+ void createNewInstanceShouldThrowException() throws NoSuchMethodException {
+ var constructor = ByteUtility.class.getDeclaredConstructor();
+ assertTrue(Modifier.isPrivate(constructor.getModifiers()));
+ assertThrows(InvocationTargetException.class, () -> {
+ constructor.setAccessible(true);
+ constructor.newInstance();
+ });
+ }
+
@ParameterizedTest
@CsvSource({
"1695609641, '101, 16, -13, 41'",
@@ -53,8 +67,8 @@ void testIntToBytes(int intValue, @ConvertWith(StringArrayConverter.class) Strin
}
@Test
- void testBytesToInt() throws UnsupportedEncodingException {
- assertEquals(1094795585, ByteUtility.bytesToInt("AAAAAAAA".getBytes("UTF-8")));
+ void testBytesToInt() {
+ assertEquals(1094795585, ByteUtility.bytesToInt("AAAAAAAA" .getBytes(StandardCharsets.UTF_8)));
}
@Test
@@ -66,14 +80,15 @@ void testShortToBytes() {
}
@Test
- void testBytesToShort() throws UnsupportedEncodingException {
- assertEquals((short) 16705, ByteUtility.bytesToShort("AAAAAAAA".getBytes("UTF-8")));
+ void testBytesToShort() {
+ assertEquals((short) 16705,
+ ByteUtility.bytesToShort("AAAAAAAA" .getBytes(StandardCharsets.UTF_8)));
}
@Test
- void testResizeBytesArray() throws UnsupportedEncodingException {
+ void testResizeBytesArray() {
byte[] actualResizeBytesArrayResult =
- ByteUtility.resizeBytesArray("AAAAAAAA".getBytes("UTF-8"), 1, 3);
+ ByteUtility.resizeBytesArray("AAAAAAAA" .getBytes(StandardCharsets.UTF_8), 1, 3);
assertEquals(3, actualResizeBytesArrayResult.length);
assertEquals('A', actualResizeBytesArrayResult[0]);
assertEquals('A', actualResizeBytesArrayResult[1]);
@@ -81,8 +96,8 @@ void testResizeBytesArray() throws UnsupportedEncodingException {
}
@Test
- void testResizeBytesArray2() throws UnsupportedEncodingException {
+ void testResizeBytesArray2() {
assertThrows(NegativeArraySizeException.class,
- () -> ByteUtility.resizeBytesArray("AAAAAAAA".getBytes("UTF-8"), 1, -1));
+ () -> ByteUtility.resizeBytesArray("AAAAAAAA" .getBytes(StandardCharsets.UTF_8), 1, -1));
}
}
diff --git a/src/test/java/com/tenio/common/utility/ClassLoaderUtilityTest.java b/src/test/java/com/tenio/common/utility/ClassLoaderUtilityTest.java
new file mode 100644
index 0000000..19e0968
--- /dev/null
+++ b/src/test/java/com/tenio/common/utility/ClassLoaderUtilityTest.java
@@ -0,0 +1,48 @@
+/*
+The MIT License
+
+Copyright (c) 2016-2022 kong
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+package com.tenio.common.utility;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+@DisplayName("Unit Test Cases For Class Loader Utility")
+class ClassLoaderUtilityTest {
+
+ @Test
+ @DisplayName("Throw an exception when the class's instance is attempted creating")
+ void createNewInstanceShouldThrowException() throws NoSuchMethodException {
+ var constructor = ClassLoaderUtility.class.getDeclaredConstructor();
+ assertTrue(Modifier.isPrivate(constructor.getModifiers()));
+ assertThrows(InvocationTargetException.class, () -> {
+ constructor.setAccessible(true);
+ constructor.newInstance();
+ });
+ }
+}
diff --git a/src/test/java/com/tenio/common/utility/MathUtilityTest.java b/src/test/java/com/tenio/common/utility/MathUtilityTest.java
index b0982a6..39681c3 100644
--- a/src/test/java/com/tenio/common/utility/MathUtilityTest.java
+++ b/src/test/java/com/tenio/common/utility/MathUtilityTest.java
@@ -26,16 +26,26 @@ of this software and associated documentation files (the "Software"), to deal
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
+import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
+@DisplayName("Unit Test Cases For Math Utility")
class MathUtilityTest {
@Test
- void testIsNaN() {
- assertFalse(MathUtility.
diff --git a/pom.xml b/pom.xml
index 41305d9..a96b5b2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,14 +41,14 @@
31.1-jre0.6.12
- 2.19.0
+ 2.20.00.10.2UTF-8
- 5.9.0
- 1.9.0
- 4.8.0
+ 5.9.2
+ 1.9.2
+ 5.2.03.8.011
@@ -56,7 +56,7 @@
3.1.23.2.0
- 3.2.0
+ 3.5.01.60.8.74.3.0
@@ -147,6 +147,12 @@
${org.mockito.core.version}test
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${maven.javadoc.plugin.version}
+ maven-plugin
+
@@ -233,18 +239,19 @@
org.apache.maven.pluginsmaven-javadoc-plugin${maven.javadoc.plugin.version}
-
attach-javadocs
+ compilejar
+ javadoc
-
${java.home}/bin/javadoc
+ false
diff --git a/src/main/java/com/tenio/common/data/msgpack/ByteArrayInputStream.java b/src/main/java/com/tenio/common/data/msgpack/ByteArrayInputStream.java
index 16b48ab..fe25699 100644
--- a/src/main/java/com/tenio/common/data/msgpack/ByteArrayInputStream.java
+++ b/src/main/java/com/tenio/common/data/msgpack/ByteArrayInputStream.java
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.io.InputStream;
+import java.io.Serial;
import java.io.Serializable;
/**
@@ -25,6 +26,7 @@
*/
public final class ByteArrayInputStream extends InputStream implements Serializable {
+ @Serial
private static final long serialVersionUID = -5334077014767018880L;
private int offset;
diff --git a/src/main/java/com/tenio/common/data/zero/ZeroArray.java b/src/main/java/com/tenio/common/data/zero/ZeroArray.java
index 329b987..e1501b9 100644
--- a/src/main/java/com/tenio/common/data/zero/ZeroArray.java
+++ b/src/main/java/com/tenio/common/data/zero/ZeroArray.java
@@ -61,6 +61,15 @@ public interface ZeroArray extends ReadonlyZeroArray, Iterable {
*/
ZeroArray addByte(byte data);
+ /**
+ * Sets a byte value at index in the array.
+ *
+ * @param index the element's index
+ * @param data the appended data
+ * @return the pointer of this instance
+ */
+ ZeroArray setByte(int index, byte data);
+
/**
* Appends a short value into the array.
*
diff --git a/src/main/java/com/tenio/common/data/zero/implement/ZeroArrayImpl.java b/src/main/java/com/tenio/common/data/zero/implement/ZeroArrayImpl.java
index b3f215b..0360125 100644
--- a/src/main/java/com/tenio/common/data/zero/implement/ZeroArrayImpl.java
+++ b/src/main/java/com/tenio/common/data/zero/implement/ZeroArrayImpl.java
@@ -196,6 +196,12 @@ public ZeroArray addByte(byte data) {
return addElement(ZeroType.BYTE, data);
}
+ @Override
+ public ZeroArray setByte(int index, byte data) {
+ array.set(index, ZeroUtility.newZeroElement(ZeroType.BYTE, data));
+ return this;
+ }
+
@Override
public ZeroArray addShort(short data) {
return addElement(ZeroType.SHORT, data);
diff --git a/src/test/java/com/tenio/common/bootstrap/loader/TestClassA.java b/src/test/java/com/tenio/common/bootstrap/loader/TestClassA.java
new file mode 100644
index 0000000..60ecfea
--- /dev/null
+++ b/src/test/java/com/tenio/common/bootstrap/loader/TestClassA.java
@@ -0,0 +1,28 @@
+/*
+The MIT License
+
+Copyright (c) 2016-2022 kong
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+package com.tenio.common.bootstrap.loader;
+
+public class TestClassA {
+}
diff --git a/src/test/java/com/tenio/common/bootstrap/loader/TestClassB.java b/src/test/java/com/tenio/common/bootstrap/loader/TestClassB.java
new file mode 100644
index 0000000..fa181ff
--- /dev/null
+++ b/src/test/java/com/tenio/common/bootstrap/loader/TestClassB.java
@@ -0,0 +1,28 @@
+/*
+The MIT License
+
+Copyright (c) 2016-2022 kong
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+package com.tenio.common.bootstrap.loader;
+
+public class TestClassB {
+}
diff --git a/src/test/java/com/tenio/common/bootstrap/loader/TestClassC.java b/src/test/java/com/tenio/common/bootstrap/loader/TestClassC.java
new file mode 100644
index 0000000..1e69da4
--- /dev/null
+++ b/src/test/java/com/tenio/common/bootstrap/loader/TestClassC.java
@@ -0,0 +1,29 @@
+/*
+The MIT License
+
+Copyright (c) 2016-2022 kong
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+package com.tenio.common.bootstrap.loader;
+
+public class TestClassC {
+}
+
diff --git a/src/test/java/com/tenio/common/utility/ClassLoaderUtilityTest.java b/src/test/java/com/tenio/common/utility/ClassLoaderUtilityTest.java
index 4d927c7..edccb52 100644
--- a/src/test/java/com/tenio/common/utility/ClassLoaderUtilityTest.java
+++ b/src/test/java/com/tenio/common/utility/ClassLoaderUtilityTest.java
@@ -52,18 +52,18 @@ void createNewInstanceShouldThrowException() throws NoSuchMethodException {
@Test
@DisplayName("Scanning a package should return a list of classes inside it")
void scanPackageShouldReturnListOfClasses() throws ClassNotFoundException {
- var listClasses = ClassLoaderUtility.getClasses("com.tenio.core.bootstrap.loader");
+ var listClasses = ClassLoaderUtility.getClasses("com.tenio.common.bootstrap.loader");
assertAll("scanPackageShouldReturnListOfClasses",
- () -> assertEquals(listClasses.size(), 3),
+ () -> assertEquals(3, listClasses.size()),
() -> assertTrue(
listClasses.stream().map(clazz -> clazz.getName()).anyMatch(name -> name.equals(
- "com.tenio.core.bootstrap.loader.TestClassA"))),
+ "com.tenio.common.bootstrap.loader.TestClassA"))),
() -> assertTrue(
listClasses.stream().map(clazz -> clazz.getName()).anyMatch(name -> name.equals(
- "com.tenio.core.bootstrap.loader.TestClassB"))),
+ "com.tenio.common.bootstrap.loader.TestClassB"))),
() -> assertTrue(
listClasses.stream().map(clazz -> clazz.getName()).anyMatch(name -> name.equals(
- "com.tenio.core.bootstrap.loader.TestClassC")))
+ "com.tenio.common.bootstrap.loader.TestClassC")))
);
}
From f1d2ae16d2b222aa29c19a4a3795ffcef2176494 Mon Sep 17 00:00:00 2001
From: Ten Games
Date: Wed, 30 Aug 2023 20:56:29 +0200
Subject: [PATCH 15/15] build(0.5.0.230830): upgrade to a new version
---
CHANGELOG.md | 9 +++++++++
CHECKLIST.md | 6 +++---
VERSION | 2 +-
pom.xml | 2 +-
4 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 13257b5..746563a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,3 +21,12 @@
## 0.4.0 2022-11-20 Feature release
- Moved annotations management to the [tenio-core](https://github.com/congcoi123/tenio-core) module
+
+## 0.5.0 2023-08-30 Feature release
+- Upgraded to JDK 17
+- Upgraded dependencies
+- Allowed checking logging configuration before writing logs
+- Added some utility methods to work with custom data types
+- Changed some methods' names
+- Fixed test cases' issues
+- Bugs fixed
diff --git a/CHECKLIST.md b/CHECKLIST.md
index 2711ff7..2f87270 100644
--- a/CHECKLIST.md
+++ b/CHECKLIST.md
@@ -6,14 +6,14 @@
- [x] Executes command *mvn clean install* to run the *checkstyle* process
### Before updating to new version
-- [x] Makes sure the current branch is *develop* branch
+- [x] Makes sure the current branch is *develop* branch
+- [x] Creates a Pull Request (PR) from develop to master branch
- [x] All new methods should be annotated by the *@since* annotation
- [x] Changes version in *pom.xml* file
- [x] Updates new changes in the *CHANGELOG.md* file
- [x] Updates the *VERSION* file
- [x] Updates the *README.md* file
-- [x] Executes command *mvn clean install* to run the *checkstyle* process
-- [x] Creates a Pull Request (PR) from develop to master branch
+- [x] Executes command *mvn clean install* to run the *checkstyle* process
### Creating a new release
- [x] Makes sure the current branch is *master* branch
diff --git a/VERSION b/VERSION
index b62841e..bb58c40 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-20221120.0.4.0
\ No newline at end of file
+20230830.0.5.0
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index a96b5b2..165fcda 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
io.github.congcoi123tenio-common
- 0.4.0
+ 0.5.0jar${project.groupId}:${project.artifactId}