Skip to content

Commit 429a2b4

Browse files
committed
PLUGIN-1925: Refactor logic for edge case and unit tests
1 parent eace072 commit 429a2b4

File tree

2 files changed

+42
-7
lines changed

2 files changed

+42
-7
lines changed

database-commons/src/main/java/io/cdap/plugin/db/source/CustomBigDecimalSplitter.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ public class CustomBigDecimalSplitter extends BigDecimalSplitter {
3737
*/
3838
@Override
3939
protected BigDecimal tryDivide(BigDecimal numerator, BigDecimal denominator) {
40-
if (denominator.compareTo(numerator) == 0) {
41-
throw new ArithmeticException("Numerator and Denominator are equal in splitter");
42-
}
43-
if (denominator.compareTo(BigDecimal.ZERO) == 0) {
44-
throw new ArithmeticException("Division by zero in splitter");
45-
}
4640
// Derive scale from numerator/denominator + buffer
4741
int effectiveScale = Math.max(numerator.scale(), denominator.scale()) + SCALE_BUFFER;
4842
return numerator.divide(denominator, effectiveScale, RoundingMode.HALF_UP);

database-commons/src/test/java/io/cdap/plugin/db/source/CustomBigDecimalSplitterTest.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,21 @@
1616

1717
package io.cdap.plugin.db.source;
1818

19+
import org.apache.hadoop.conf.Configuration;
20+
import org.apache.hadoop.mapreduce.InputSplit;
21+
import org.apache.hadoop.mapreduce.lib.db.BigDecimalSplitter;
1922
import org.junit.Test;
23+
2024
import java.math.BigDecimal;
25+
import java.sql.ResultSet;
26+
import java.sql.SQLException;
27+
import java.util.List;
28+
2129
import static org.junit.Assert.assertEquals;
2230
import static org.junit.Assert.assertThrows;
2331
import static org.junit.Assert.assertTrue;
32+
import static org.mockito.Mockito.mock;
33+
import static org.mockito.Mockito.when;
2434

2535
/**
2636
* Test class for {@link CustomBigDecimalSplitter}
@@ -49,9 +59,40 @@ public void testDivisionByZero() {
4959
}
5060

5161
@Test
52-
public void testZeroNumerator() {
62+
public void testDivisionWithZeroNumerator() {
5363
// when minVal == maxVal
5464
BigDecimal result = splitter.tryDivide(BigDecimal.ZERO, BigDecimal.ONE);
5565
assertEquals(0, result.compareTo(BigDecimal.ZERO));
5666
}
67+
68+
@Test
69+
public void testSplits() throws SQLException {
70+
BigDecimal minVal = BigDecimal.valueOf(1);
71+
BigDecimal maxVal = BigDecimal.valueOf(2);
72+
int numSplits = 4;
73+
ResultSet resultSet = mock(ResultSet.class);
74+
Configuration conf = mock(Configuration.class);
75+
when(conf.getInt("mapreduce.job.maps", 1)).thenReturn(numSplits);
76+
when(resultSet.getBigDecimal(1)).thenReturn(minVal);
77+
when(resultSet.getBigDecimal(2)).thenReturn(maxVal);
78+
BigDecimalSplitter bigDecimalSplitter = new CustomBigDecimalSplitter();
79+
List<InputSplit> actualSplits = bigDecimalSplitter.split(conf, resultSet, "id");
80+
assertEquals(numSplits, actualSplits.size());
81+
}
82+
83+
@Test
84+
public void testSplitsWithMinValueEqualToMaxValue() throws SQLException {
85+
// when minVal == maxVal
86+
BigDecimal minVal = BigDecimal.valueOf(1);
87+
BigDecimal maxVal = BigDecimal.valueOf(1);
88+
int numSplits = 1;
89+
ResultSet resultSet = mock(ResultSet.class);
90+
Configuration conf = mock(Configuration.class);
91+
when(conf.getInt("mapreduce.job.maps", 1)).thenReturn(numSplits);
92+
when(resultSet.getBigDecimal(1)).thenReturn(minVal);
93+
when(resultSet.getBigDecimal(2)).thenReturn(maxVal);
94+
BigDecimalSplitter bigDecimalSplitter = new CustomBigDecimalSplitter();
95+
List<InputSplit> actualSplits = bigDecimalSplitter.split(conf, resultSet, "id");
96+
assertEquals(numSplits, actualSplits.size());
97+
}
5798
}

0 commit comments

Comments
 (0)