From 9b8e885657066e082d91d867888668c611889b4c Mon Sep 17 00:00:00 2001 From: Reshadat Ali Date: Sat, 17 Dec 2022 20:07:24 +0530 Subject: [PATCH 1/8] Scale down float to 2 before comparison --- .../plugins/coverage/CoverageProcessor.java | 16 +++++++++- .../coverage/CoverageProcessorTest.java | 30 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java index abf79b13c..c75b263a1 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java @@ -7,6 +7,8 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.PrintStream; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; @@ -252,7 +254,8 @@ private Optional getPreviousResult(final Run startSearch) private void failBuildIfChangeRequestDecreasedCoverage(final CoverageResult coverageResult, final CoverageAction action) throws CoverageException { float coverageDiff = coverageResult.getCoverageDelta(CoverageElement.LINE); - if (coverageDiff < 0) { + + if (roundFloat(coverageDiff,2) < 0) { String message = "Fail build because this change request decreases line coverage by " + coverageDiff; action.setFailMessage(message); @@ -731,4 +734,15 @@ public static CoverageResult recoverCoverageResult(final Run run) throws I return (CoverageResult) ois.readObject(); } } + + /** + * Round up float value to specified scaling factor using Round down strategy + * @param number + * @param scale + * @return float value (scaled) + */ + public static float roundFloat(final float number, final int scale) { + return BigDecimal.valueOf(number).setScale(scale,RoundingMode.DOWN).floatValue(); + } + } diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java new file mode 100644 index 000000000..61e0b586b --- /dev/null +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java @@ -0,0 +1,30 @@ +package io.jenkins.plugins.coverage; + +import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher; +import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher.SourceFileResolver; +import org.jenkinsci.test.acceptance.junit.WithPlugins; +import org.jenkinsci.test.acceptance.po.Build; +import org.jenkinsci.test.acceptance.po.FreeStyleJob; +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +/** + * Acceptance tests for CoverageProcessor. Verifies if set options in CoverageProcessor are used and lead to accepted + * results. + */ +public class CoverageProcessorTest { + + /** + * Test roundFloat method in CoverageProcessor + */ + @Test + public void testFloatRounding() { + float number=-0.001f; + float scaledNumber= CoverageProcessor.roundFloat(number,2); + Assert.assertEquals(scaledNumber,0.00); + } + +} From 16aaca1eb19212c686569a4edf50d472322b6a56 Mon Sep 17 00:00:00 2001 From: Reshadat Ali Date: Sat, 17 Dec 2022 20:30:14 +0530 Subject: [PATCH 2/8] Fix Compilation issue --- .../plugins/coverage/CoverageProcessorTest.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java index 61e0b586b..9de1a6089 100644 --- a/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java @@ -1,22 +1,15 @@ package io.jenkins.plugins.coverage; -import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher; -import io.jenkins.plugins.coverage.CoveragePublisher.CoveragePublisher.SourceFileResolver; -import org.jenkinsci.test.acceptance.junit.WithPlugins; -import org.jenkinsci.test.acceptance.po.Build; -import org.jenkinsci.test.acceptance.po.FreeStyleJob; import org.junit.Assert; -import org.junit.Ignore; import org.junit.Test; - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import org.jvnet.hudson.test.JenkinsRule; /** * Acceptance tests for CoverageProcessor. Verifies if set options in CoverageProcessor are used and lead to accepted * results. */ public class CoverageProcessorTest { - + public JenkinsRule j = new JenkinsRule(); /** * Test roundFloat method in CoverageProcessor */ @@ -26,5 +19,4 @@ public void testFloatRounding() { float scaledNumber= CoverageProcessor.roundFloat(number,2); Assert.assertEquals(scaledNumber,0.00); } - } From c8b60216b05f2dc6addcbf35544554feced14c43 Mon Sep 17 00:00:00 2001 From: Reshadat Ali Date: Sat, 17 Dec 2022 20:31:27 +0530 Subject: [PATCH 3/8] Remove unnecessary import --- .../java/io/jenkins/plugins/coverage/CoverageProcessorTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java index 9de1a6089..d3cc46302 100644 --- a/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java @@ -2,14 +2,12 @@ import org.junit.Assert; import org.junit.Test; -import org.jvnet.hudson.test.JenkinsRule; /** * Acceptance tests for CoverageProcessor. Verifies if set options in CoverageProcessor are used and lead to accepted * results. */ public class CoverageProcessorTest { - public JenkinsRule j = new JenkinsRule(); /** * Test roundFloat method in CoverageProcessor */ From 0b1362ad85363ff4a2eb4600a41b93d8ae0eb9eb Mon Sep 17 00:00:00 2001 From: Reshadat Ali Date: Sat, 17 Dec 2022 20:38:03 +0530 Subject: [PATCH 4/8] Fix Assert Condition --- .../java/io/jenkins/plugins/coverage/CoverageProcessorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java index d3cc46302..bbc83b5d4 100644 --- a/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java @@ -15,6 +15,6 @@ public class CoverageProcessorTest { public void testFloatRounding() { float number=-0.001f; float scaledNumber= CoverageProcessor.roundFloat(number,2); - Assert.assertEquals(scaledNumber,0.00); + Assert.assertEquals(scaledNumber,0.00,0); } } From 3e52f8e20b543c4c9abe0d9cd85882a3ccf0b0d3 Mon Sep 17 00:00:00 2001 From: Reshadat Ali Date: Sun, 18 Dec 2022 10:09:28 +0530 Subject: [PATCH 5/8] Reduce unnecessary lines --- .../java/io/jenkins/plugins/coverage/CoverageProcessor.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java index c75b263a1..4449cdf65 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java @@ -254,11 +254,9 @@ private Optional getPreviousResult(final Run startSearch) private void failBuildIfChangeRequestDecreasedCoverage(final CoverageResult coverageResult, final CoverageAction action) throws CoverageException { float coverageDiff = coverageResult.getCoverageDelta(CoverageElement.LINE); - if (roundFloat(coverageDiff,2) < 0) { String message = "Fail build because this change request decreases line coverage by " + coverageDiff; action.setFailMessage(message); - throw new CoverageException(message); } } @@ -734,7 +732,6 @@ public static CoverageResult recoverCoverageResult(final Run run) throws I return (CoverageResult) ois.readObject(); } } - /** * Round up float value to specified scaling factor using Round down strategy * @param number @@ -744,5 +741,4 @@ public static CoverageResult recoverCoverageResult(final Run run) throws I public static float roundFloat(final float number, final int scale) { return BigDecimal.valueOf(number).setScale(scale,RoundingMode.DOWN).floatValue(); } - } From 41b5980e4103a57734a7a32226af95e6d78cb651 Mon Sep 17 00:00:00 2001 From: Reshadat Ali Date: Sun, 18 Dec 2022 11:13:39 +0530 Subject: [PATCH 6/8] Add more tests --- .../plugins/coverage/CoverageProcessor.java | 2 +- .../coverage/CoverageProcessorTest.java | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java index 4449cdf65..e83ff33b9 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java @@ -251,7 +251,7 @@ private Optional getPreviousResult(final Run startSearch) return Optional.empty(); } - private void failBuildIfChangeRequestDecreasedCoverage(final CoverageResult coverageResult, final CoverageAction action) + void failBuildIfChangeRequestDecreasedCoverage(final CoverageResult coverageResult, final CoverageAction action) throws CoverageException { float coverageDiff = coverageResult.getCoverageDelta(CoverageElement.LINE); if (roundFloat(coverageDiff,2) < 0) { diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java index bbc83b5d4..7c07a849a 100644 --- a/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java +++ b/plugin/src/test/java/io/jenkins/plugins/coverage/CoverageProcessorTest.java @@ -1,13 +1,34 @@ package io.jenkins.plugins.coverage; +import hudson.FilePath; +import hudson.model.Run; +import io.jenkins.plugins.coverage.exception.CoverageException; +import io.jenkins.plugins.coverage.targets.CoverageResult; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; /** * Acceptance tests for CoverageProcessor. Verifies if set options in CoverageProcessor are used and lead to accepted * results. */ public class CoverageProcessorTest { + + CoverageProcessor coverageProcessor; + CoverageResult coverageResult; + CoverageAction coverageAction; + + @Before() + public void testInit(){ + coverageProcessor = new CoverageProcessor(mock(Run.class),mock(FilePath.class),null); + coverageResult =mock(CoverageResult.class); + coverageAction =mock(CoverageAction.class); + } + /** * Test roundFloat method in CoverageProcessor */ @@ -17,4 +38,26 @@ public void testFloatRounding() { float scaledNumber= CoverageProcessor.roundFloat(number,2); Assert.assertEquals(scaledNumber,0.00,0); } + + @Test() + public void testChangeRequestDecreasedCoverageNotFailed_NoChange() throws CoverageException { + Mockito.when(coverageResult.getCoverageDelta(any())).thenReturn(-0.001f); + //No Exception should be thrown + coverageProcessor.failBuildIfChangeRequestDecreasedCoverage(coverageResult,coverageAction); + verify(coverageAction, times(0)).setFailMessage(any()); + } + + @Test(expected = CoverageException.class) + public void testChangeRequestDecreasedCoverageFailed_DecCoverage() throws CoverageException { + Mockito.when(coverageResult.getCoverageDelta(any())).thenReturn(-1.11f); + coverageProcessor.failBuildIfChangeRequestDecreasedCoverage(coverageResult,coverageAction); + verify(coverageAction, times(1)).setFailMessage(any()); + } + + @Test() + public void testChangeRequestDecreasedCoverageNotFailed_IncCoverage() throws CoverageException { + Mockito.when(coverageResult.getCoverageDelta(any())).thenReturn(0.1f); + coverageProcessor.failBuildIfChangeRequestDecreasedCoverage(coverageResult,coverageAction); + verify(coverageAction, times(0)).setFailMessage(any()); + } } From a42d9a913ccc0abe03cbd773214650ae7230439b Mon Sep 17 00:00:00 2001 From: Ullrich Hafner Date: Mon, 19 Dec 2022 10:38:37 +0100 Subject: [PATCH 7/8] Update plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java --- .../java/io/jenkins/plugins/coverage/CoverageProcessor.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java index e83ff33b9..cac707ded 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java @@ -732,12 +732,6 @@ public static CoverageResult recoverCoverageResult(final Run run) throws I return (CoverageResult) ois.readObject(); } } - /** - * Round up float value to specified scaling factor using Round down strategy - * @param number - * @param scale - * @return float value (scaled) - */ public static float roundFloat(final float number, final int scale) { return BigDecimal.valueOf(number).setScale(scale,RoundingMode.DOWN).floatValue(); } From dcdaaa1c827a0d1b2d01933b48712c37785162a6 Mon Sep 17 00:00:00 2001 From: Ullrich Hafner Date: Mon, 19 Dec 2022 10:38:44 +0100 Subject: [PATCH 8/8] Update plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java --- .../java/io/jenkins/plugins/coverage/CoverageProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java index cac707ded..6af073fc0 100644 --- a/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java +++ b/plugin/src/main/java/io/jenkins/plugins/coverage/CoverageProcessor.java @@ -732,7 +732,7 @@ public static CoverageResult recoverCoverageResult(final Run run) throws I return (CoverageResult) ois.readObject(); } } - public static float roundFloat(final float number, final int scale) { + static float roundFloat(final float number, final int scale) { return BigDecimal.valueOf(number).setScale(scale,RoundingMode.DOWN).floatValue(); } }