You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nemo.apache.org by ta...@apache.org on 2020/10/16 01:51:06 UTC
[incubator-nemo] branch master updated: [NEMO-457] Improve test
coverage score on sonar cloud test (#300)
This is an automated email from the ASF dual-hosted git repository.
taegeonum pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nemo.git
The following commit(s) were added to refs/heads/master by this push:
new 6ee4318 [NEMO-457] Improve test coverage score on sonar cloud test (#300)
6ee4318 is described below
commit 6ee431887fe2dd3e525e3d97e4798afd5a76f30f
Author: jaehwan0214 <60...@users.noreply.github.com>
AuthorDate: Fri Oct 16 10:50:58 2020 +0900
[NEMO-457] Improve test coverage score on sonar cloud test (#300)
JIRA: [NEMO-457: Improve test coverage score on sonar cloud test](https://issues.apache.org/jira/projects/NEMO/issues/NEMO-457)
**Major changes:**
- Added unit tests for partial and final CombineFn.
**Minor changes to note:**
-
**Tests for the changes:**
-
**Other comments:**
-
Closes #300
---
.../frontend/beam/transform/CombineFnTest.java | 164 +++++++++++++++++++++
1 file changed, 164 insertions(+)
diff --git a/compiler/test/src/test/java/org/apache/nemo/compiler/frontend/beam/transform/CombineFnTest.java b/compiler/test/src/test/java/org/apache/nemo/compiler/frontend/beam/transform/CombineFnTest.java
new file mode 100644
index 0000000..acf7cc4
--- /dev/null
+++ b/compiler/test/src/test/java/org/apache/nemo/compiler/frontend/beam/transform/CombineFnTest.java
@@ -0,0 +1,164 @@
+/*
+ * 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.nemo.compiler.frontend.beam.transform;
+
+import junit.framework.TestCase;
+import org.apache.beam.sdk.coders.*;
+import org.apache.beam.sdk.transforms.Combine;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.util.Arrays;
+
+public class CombineFnTest extends TestCase {
+ private static final Logger LOG = LoggerFactory.getLogger(CombineFnTest.class.getName());
+ private final static Coder INTEGER_CODER = BigEndianIntegerCoder.of();
+
+ // Define combine function.
+ public static final class CountFn extends Combine.CombineFn<Integer, CountFn.Accum, Integer> {
+ public static final class Accum {
+ int sum = 0;
+ }
+
+ @Override
+ public CountFn.Accum createAccumulator() {
+ return new Accum();
+ }
+
+ @Override
+ public CountFn.Accum addInput(final CountFn.Accum accum, final Integer input) {
+ accum.sum += input;
+ return accum;
+ }
+
+ @Override
+ public CountFn.Accum mergeAccumulators(final Iterable<CountFn.Accum> accums) {
+ Accum merged = createAccumulator();
+ for (final Accum accum : accums) {
+ merged.sum += accum.sum;
+ }
+ return merged;
+ }
+
+ @Override
+ public Integer extractOutput(final CountFn.Accum accum) {
+ return accum.sum;
+ }
+
+ @Override
+ public Coder<CountFn.Accum> getAccumulatorCoder(final CoderRegistry registry, final Coder<Integer> inputcoder) {
+ return AvroCoder.of(CountFn.Accum.class);
+ }
+ }
+
+ final Combine.CombineFn<Integer, CountFn.Accum, Integer> combineFn = new CountFn();
+ final Coder<CountFn.Accum> accumCoder;
+ {
+ try {
+ accumCoder = combineFn.getAccumulatorCoder(CoderRegistry.createDefault(), INTEGER_CODER);
+ } catch (CannotProvideCoderException e) {
+ throw new RuntimeException("Failed to provide an accumulator coder");
+ }
+ }
+
+ @Test
+ public void testPartialCombineFn() {
+ // Initialize partial combineFn.
+ final PartialCombineFn<Integer, CountFn.Accum> partialCombineFn = new PartialCombineFn(combineFn, accumCoder);
+
+ // Create accumulator.
+ final CountFn.Accum accum1 = partialCombineFn.createAccumulator();
+ final CountFn.Accum accum2 = partialCombineFn.createAccumulator();
+ final CountFn.Accum accum3 = partialCombineFn.createAccumulator();
+
+ // Check whether accumulators are initialized correctly.
+ assertEquals(0, accum1.sum);
+ assertEquals(0, accum2.sum);
+ assertEquals(0, accum3.sum);
+
+ // Add input to each accumulators.
+ partialCombineFn.addInput(accum1, 1);
+ partialCombineFn.addInput(accum2, 2);
+ partialCombineFn.addInput(accum3, 3);
+
+ // Check whether inputs are added correctly.
+ assertEquals(1, accum1.sum);
+ assertEquals(2, accum2.sum);
+ assertEquals(3, accum3.sum);
+
+ // Merge accumulators.
+ final CountFn.Accum mergedAccum = partialCombineFn.mergeAccumulators(Arrays.asList(accum1, accum2, accum3));
+
+ // Check whether accumulators are merged correctly.
+ assertEquals(6, mergedAccum.sum);
+
+ // Extract output. When invoked to extract output, partial combineFn returns its accumulator.
+ assertEquals(mergedAccum, partialCombineFn.extractOutput(mergedAccum));
+
+ // Get accumulator coder. Check if the accumulator coder from partial combineFn is equal
+ // to the one from original combineFn.
+ try {
+ assertEquals(accumCoder, partialCombineFn.getAccumulatorCoder(CoderRegistry.createDefault(), INTEGER_CODER));
+ } catch (CannotProvideCoderException e) {
+ throw new RuntimeException("Failed to provide an accumulator coder");
+ }
+ }
+
+ @Test
+ public void testFinalCombineFn() {
+ // Initialize final combine function.
+ final FinalCombineFn<CountFn.Accum, Integer> finalCombineFn = new FinalCombineFn(combineFn, accumCoder);
+
+ // Create accumulator.
+ final CountFn.Accum accum1 = finalCombineFn.createAccumulator();
+ final CountFn.Accum accum2 = finalCombineFn.createAccumulator();
+ final CountFn.Accum accum3 = finalCombineFn.createAccumulator();
+
+ // Check whether accumulators are initialized correctly.
+ assertEquals(0, accum1.sum);
+ assertEquals(0, accum2.sum);
+ assertEquals(0, accum3.sum);
+
+ // Change the parameter for the sake of unit testing.
+ accum1.sum = 1;
+ accum2.sum = 2;
+ accum3.sum = 3;
+
+ // Add input. Final combineFn's addInput method takes accumulators as input
+ // and merges them into a single accumulator.
+ final CountFn.Accum addedAccum = finalCombineFn.addInput(accum1, accum2);
+
+ // Check whether inputs are added correctly.
+ assertEquals(3, addedAccum.sum);
+
+ // Merge accumulators.
+ CountFn.Accum mergedAccum = finalCombineFn.mergeAccumulators(Arrays.asList(accum1, accum2, accum3));
+
+ // Check whether accumulators are merged correctly.
+ assertEquals(6, mergedAccum.sum);
+
+ // Extract output.
+ // When invoked to extract output, final combineFn invokes extractOutput method of original combineFn.
+ assertEquals(combineFn.extractOutput(mergedAccum), finalCombineFn.extractOutput(mergedAccum));
+
+ // Get accumulator coder. Check if the accumulator coder from final combine function is equal
+ // to the one from original combine function.
+ assertEquals(accumCoder, finalCombineFn.getAccumulatorCoder(CoderRegistry.createDefault(), INTEGER_CODER));
+ }
+}