This is an automated email from the ASF dual-hosted git repository.
roryqi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-uniffle.git
The following commit(s) were added to refs/heads/master by this push:
new f7c9a2a [TEST] Improve code coverage in rss-common (#26)
f7c9a2a is described below
commit f7c9a2abcc78a29e67fe7efe094328da7b64793c
Author: Kaijie Chen <[email protected]>
AuthorDate: Tue Jul 5 16:24:23 2022 +0800
[TEST] Improve code coverage in rss-common (#26)
### What changes were proposed in this pull request?
1. Add `BufferSegmentTest` and `PartitionRangeTest`.
2. Improve `RemoteStorageInfoTest`.
### Why are the changes needed?
1. A program with high test coverage has more of its source code executed
during testing, which suggests it has a lower chance of containing undetected
bugs.
3. Demostrates how to improve test coverage with the help of Codecov.
### Does this PR introduce _any_ user-facing change?
No production code change.
### How was this patch tested?
https://app.codecov.io/gh/kaijchen/incubator-uniffle/commit/cf7f30b1ee216bd6a36ba0eea37f14e7bc0ccbcb
---
.../apache/uniffle/common/BufferSegmentTest.java | 69 +++++++++++++
.../apache/uniffle/common/PartitionRangeTest.java | 77 +++++++++++++++
.../uniffle/common/RemoteStorageInfoTest.java | 109 ++++++++++++++++-----
3 files changed, 229 insertions(+), 26 deletions(-)
diff --git
a/common/src/test/java/org/apache/uniffle/common/BufferSegmentTest.java
b/common/src/test/java/org/apache/uniffle/common/BufferSegmentTest.java
new file mode 100644
index 0000000..1e40447
--- /dev/null
+++ b/common/src/test/java/org/apache/uniffle/common/BufferSegmentTest.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.uniffle.common;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public class BufferSegmentTest {
+
+ @Test
+ public void testEquals() {
+ BufferSegment segment1 = new BufferSegment(0, 1, 2, 3, 4, 5);
+ BufferSegment segment2 = new BufferSegment(0, 1, 2, 3, 4, 5);
+ assertEquals(segment1, segment2);
+ assertNotEquals(segment1, null);
+ assertNotEquals(segment1, new Object());
+ }
+
+ @ParameterizedTest
+ @CsvSource({
+ "6, 1, 2, 3, 4, 5",
+ "0, 6, 2, 3, 4, 5",
+ "0, 1, 6, 3, 4, 5",
+ "0, 1, 2, 6, 4, 5",
+ "0, 1, 2, 3, 6, 5",
+ "0, 1, 2, 3, 4, 6",
+ })
+ public void testNotEquals(long blockId, long offset, int length, int
uncompressLength, long crc, long taskAttemptId) {
+ BufferSegment segment1 = new BufferSegment(0, 1, 2, 3, 4, 5);
+ BufferSegment segment2 = new BufferSegment(blockId, offset, length,
uncompressLength, crc, taskAttemptId);
+ assertNotEquals(segment1, segment2);
+ }
+
+ @Test
+ public void testToString() {
+ BufferSegment segment = new BufferSegment(0, 1, 2, 3, 4, 5);
+ assertEquals("BufferSegment{blockId[0], taskAttemptId[5], offset[1],
length[2], crc[4], uncompressLength[3]}",
+ segment.toString());
+ }
+
+ @Test
+ public void testGetOffset() {
+ BufferSegment segment1 = new BufferSegment(0, Integer.MAX_VALUE, 2, 3, 4,
5);
+ assertEquals(Integer.MAX_VALUE, segment1.getOffset());
+ BufferSegment segment2 = new BufferSegment(0, (long) Integer.MAX_VALUE +
1, 2, 3, 4, 5);
+ assertThrows(RuntimeException.class, segment2::getOffset);
+ }
+
+}
diff --git
a/common/src/test/java/org/apache/uniffle/common/PartitionRangeTest.java
b/common/src/test/java/org/apache/uniffle/common/PartitionRangeTest.java
new file mode 100644
index 0000000..69bf97f
--- /dev/null
+++ b/common/src/test/java/org/apache/uniffle/common/PartitionRangeTest.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.uniffle.common;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public class PartitionRangeTest {
+
+ @Test
+ public void testPartitionRange() {
+ PartitionRange partitionRange = new PartitionRange(3, 4);
+ assertEquals(3, partitionRange.getStart());
+ assertEquals(4, partitionRange.getEnd());
+ assertEquals(2, partitionRange.getPartitionNum());
+ assertThrows(IllegalArgumentException.class, () -> new PartitionRange(-1,
1));
+ assertThrows(IllegalArgumentException.class, () -> new PartitionRange(2,
1));
+ assertDoesNotThrow(() -> new PartitionRange(0, 0));
+ }
+
+ @Test
+ public void testEquals() {
+ PartitionRange partitionRange1 = new PartitionRange(1, 2);
+ PartitionRange partitionRange2 = new PartitionRange(1, 2);
+ PartitionRange partitionRange3 = new PartitionRange(1, 1);
+ PartitionRange partitionRange4 = new PartitionRange(2, 2);
+ assertEquals(partitionRange1, partitionRange1);
+ assertEquals(partitionRange1, partitionRange2);
+ assertNotEquals(partitionRange1, partitionRange3);
+ assertNotEquals(partitionRange1, partitionRange4);
+ assertNotEquals(partitionRange1, null);
+ assertNotEquals(partitionRange1, new Object());
+ }
+
+ @Test
+ public void testToString() {
+ PartitionRange partitionRange = new PartitionRange(1, 2);
+ assertEquals("PartitionRange[1, 2]", partitionRange.toString());
+ }
+
+ @Test
+ public void testHashCode() {
+ PartitionRange partitionRange1 = new PartitionRange(1, 2);
+ PartitionRange partitionRange2 = new PartitionRange(1, 2);
+ assertEquals(partitionRange1.hashCode(), partitionRange2.hashCode());
+ }
+
+ @Test
+ public void testCompareTo() {
+ PartitionRange partitionRange1 = new PartitionRange(1, 2);
+ PartitionRange partitionRange2 = new PartitionRange(1, 3);
+ PartitionRange partitionRange3 = new PartitionRange(2, 3);
+ assertEquals(0, partitionRange1.compareTo(partitionRange2));
+ assertEquals(-1, partitionRange1.compareTo(partitionRange3));
+ assertEquals(1, partitionRange3.compareTo(partitionRange2));
+ }
+
+}
diff --git
a/common/src/test/java/org/apache/uniffle/common/RemoteStorageInfoTest.java
b/common/src/test/java/org/apache/uniffle/common/RemoteStorageInfoTest.java
index ce676ec..a5ba988 100644
--- a/common/src/test/java/org/apache/uniffle/common/RemoteStorageInfoTest.java
+++ b/common/src/test/java/org/apache/uniffle/common/RemoteStorageInfoTest.java
@@ -18,41 +18,98 @@
package org.apache.uniffle.common;
import com.google.common.collect.ImmutableMap;
+import org.apache.uniffle.common.util.Constants;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.NullAndEmptySource;
+import org.junit.jupiter.params.provider.ValueSource;
+import java.util.Collections;
import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.params.provider.Arguments.arguments;
public class RemoteStorageInfoTest {
+ private static final String TEST_PATH = "hdfs://test";
+ private static final String CONF_STRING = "k1=v1,k2=v2";
+ private static final Map<String, String> confMap = ImmutableMap.of("k1",
"v1", "k2", "v2");
+
+ private static Stream<Arguments> confItemsParams() {
+ return Stream.of(
+ arguments(null, null, String.join(Constants.COMMA_SPLIT_CHAR,
TEST_PATH, "empty conf")),
+ arguments("", Collections.emptyMap(),
String.join(Constants.COMMA_SPLIT_CHAR, TEST_PATH, "empty conf")),
+ arguments(CONF_STRING, confMap,
String.join(Constants.COMMA_SPLIT_CHAR, TEST_PATH, CONF_STRING))
+ );
+ }
+
+ @ParameterizedTest
+ @NullAndEmptySource
+ public void testEmptyStoragePath(String path) {
+ RemoteStorageInfo info = new RemoteStorageInfo(path);
+ assertTrue(info.isEmpty());
+ assertEquals(path, info.getPath());
+ assertEquals("Empty Remote Storage", info.toString());
+ }
+
+ @ParameterizedTest
+ @MethodSource("confItemsParams")
+ public void testRemoteStorageInfo(String confString, Map<String, String>
confItems, String expectedToString) {
+ RemoteStorageInfo info = new RemoteStorageInfo(TEST_PATH, confItems);
+ assertFalse(info.isEmpty());
+ assertEquals(TEST_PATH, info.getPath());
+
assertEquals(Optional.ofNullable(confItems).orElse(Collections.emptyMap()),
info.getConfItems());
+ assertEquals(Optional.ofNullable(confString).orElse(""),
info.getConfString());
+ assertEquals(expectedToString, info.toString());
+
+ info = new RemoteStorageInfo(TEST_PATH, confString);
+ assertFalse(info.isEmpty());
+ assertEquals(TEST_PATH, info.getPath());
+
assertEquals(Optional.ofNullable(confItems).orElse(Collections.emptyMap()),
info.getConfItems());
+ assertEquals(Optional.ofNullable(confString).orElse(""),
info.getConfString());
+ assertEquals(expectedToString, info.toString());
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = {",", "=,", ",="})
+ public void testUncommonConfString(String confString) {
+ RemoteStorageInfo info = new RemoteStorageInfo(TEST_PATH, confString);
+ assertEquals(TEST_PATH, info.getPath());
+ assertEquals(Collections.emptyMap(), info.getConfItems());
+ assertEquals("", info.getConfString());
+ }
+
+ @Test
+ public void testEquals() {
+ RemoteStorageInfo info = new RemoteStorageInfo(TEST_PATH, confMap);
+ assertEquals(info, info);
+ assertNotEquals(info, null);
+ assertNotEquals(info, new Object());
+ RemoteStorageInfo info1 = new RemoteStorageInfo(TEST_PATH, CONF_STRING);
+ assertEquals(info, info1);
+ RemoteStorageInfo info2 = new RemoteStorageInfo(TEST_PATH + "2", confMap);
+ assertNotEquals(info, info2);
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = {"k1=v1", "k1=v1,k2=v3", "k1=v1,k3=v2"})
+ public void testNotEquals(String confString) {
+ RemoteStorageInfo info = new RemoteStorageInfo(TEST_PATH, CONF_STRING);
+ RemoteStorageInfo info2 = new RemoteStorageInfo(TEST_PATH, confString);
+ assertNotEquals(info, info2);
+ }
+
@Test
- public void test() {
- final String testPath = "hdfs://test";
- final String confString = "k1=v1,k2=v2";
- final Map<String, String> confMap = ImmutableMap.of("k1", "v1", "k2",
"v2");
- assertTrue(new RemoteStorageInfo("", "test").isEmpty());
- RemoteStorageInfo remoteStorageInfo = new RemoteStorageInfo(testPath);
- assertEquals(testPath, remoteStorageInfo.getPath());
- assertTrue(remoteStorageInfo.getConfItems().isEmpty());
- assertEquals("", remoteStorageInfo.getConfString());
-
- remoteStorageInfo =
- new RemoteStorageInfo(testPath, confMap);
- assertEquals(2, remoteStorageInfo.getConfItems().size());
- assertEquals(testPath, remoteStorageInfo.getPath());
- assertEquals(confString, remoteStorageInfo.getConfString());
- assertEquals("v1", remoteStorageInfo.getConfItems().get("k1"));
- assertEquals("v2", remoteStorageInfo.getConfItems().get("k2"));
-
- RemoteStorageInfo remoteStorageInfo1 = new RemoteStorageInfo(testPath,
confString);
- assertEquals(remoteStorageInfo1, remoteStorageInfo);
- RemoteStorageInfo remoteStorageInfo2 =
- new RemoteStorageInfo(testPath, ImmutableMap.of("k1", "v11"));
- assertNotEquals(remoteStorageInfo1, remoteStorageInfo2);
- RemoteStorageInfo remoteStorageInfo3 =
- new RemoteStorageInfo(testPath + "3", confMap);
- assertNotEquals(remoteStorageInfo1, remoteStorageInfo3);
+ public void testHashCode() {
+ RemoteStorageInfo info = new RemoteStorageInfo(TEST_PATH, confMap);
+ RemoteStorageInfo info1 = new RemoteStorageInfo(TEST_PATH, CONF_STRING);
+ assertEquals(info.hashCode(), info1.hashCode());
}
}