From 2207b37f75802dd4121e5a317fc46ca3c3ee825f Mon Sep 17 00:00:00 2001 From: Jose Blas Camacho Taboada Date: Fri, 6 Nov 2020 16:58:30 +0100 Subject: [PATCH 1/7] JENKINS-63760 notifyQueued used --- .../impl/JenkinsMetricProviderImpl.java | 2 +- .../impl/JenkinsMetricProviderImplTest.java | 50 ++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/main/java/jenkins/metrics/impl/JenkinsMetricProviderImpl.java b/src/main/java/jenkins/metrics/impl/JenkinsMetricProviderImpl.java index cbe7f9e..e1792e3 100644 --- a/src/main/java/jenkins/metrics/impl/JenkinsMetricProviderImpl.java +++ b/src/main/java/jenkins/metrics/impl/JenkinsMetricProviderImpl.java @@ -1018,7 +1018,7 @@ private void checkEnterQueue(Queue.Item i) { null, null); executorService.submit(() -> { - QueueItemMetricsListener.notifyStarted(m); + QueueItemMetricsListener.notifyQueued(m); }); return new ItemTotals(id); }); diff --git a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java index bf7cec1..2bc8d3c 100644 --- a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java +++ b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java @@ -25,44 +25,87 @@ package jenkins.metrics.impl; import hudson.ExtensionList; +import hudson.model.FreeStyleBuild; import hudson.model.FreeStyleProject; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.concurrent.TimeUnit; + +import hudson.model.Run; +import hudson.model.queue.QueueTaskFuture; import jenkins.metrics.api.Metrics; import jenkins.metrics.api.QueueItemMetricsEvent; import jenkins.metrics.api.QueueItemMetricsListener; +import org.junit.ClassRule; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; +import org.jvnet.hudson.test.BuildWatcher; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.SleepBuilder; import org.jvnet.hudson.test.TestExtension; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.emptyCollectionOf; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.lessThan; import static org.hamcrest.Matchers.notNullValue; -import static org.junit.Assert.assertThat; public class JenkinsMetricProviderImplTest { @Rule public JenkinsRule j = new JenkinsRule(); + @ClassRule + public static BuildWatcher w = new BuildWatcher(); + + @Test + public void given__a_job_which_is_cancelled() throws Exception { + MyListener listener = ExtensionList.lookup(QueueItemMetricsListener.class).get(MyListener.class); + assertThat(listener, notNullValue()); + + FreeStyleProject job = j.createProject(FreeStyleProject.class); + + QueueTaskFuture taskFuture = job.scheduleBuild2(10); + taskFuture.cancel(true); + + try{ + j.waitForCompletion(taskFuture.waitForStart()); + }catch (Throwable t){ + //CancellationException expected + } + + //wait for completion + while (!listener.state.toString().contains("C")){ + Thread.sleep(100); + } + + assertThat(listener.state.toString(), containsString("Q")); + assertThat(listener.state.toString(), containsString("C")); + + } + @Test public void given__a_job__when__built__then__events_and_metrics_include_build() throws Exception { j.jenkins.setQuietPeriod(0); MyListener listener = ExtensionList.lookup(QueueItemMetricsListener.class).get(MyListener.class); assertThat(listener, notNullValue()); + FreeStyleProject p = j.createProject(FreeStyleProject.class); p.setQuietPeriod(0); p.getBuildersList().add(new SleepBuilder(3000)); assertThat(Metrics.metricRegistry().getTimers().get("jenkins.job.building.duration").getCount(), is(0L)); assertThat(listener.getEvents(), is(emptyCollectionOf(QueueItemMetricsEvent.class))); j.assertBuildStatusSuccess(p.scheduleBuild2(2)); + + assertThat(listener.state.toString(), containsString("Q")); + assertThat(listener.state.toString(), containsString("S")); + assertThat(listener.state.toString(), containsString("F")); + assertThat(Metrics.metricRegistry().getTimers().get("jenkins.job.building.duration").getCount(), is(1L)); assertThat(Metrics.metricRegistry().getTimers().get("jenkins.job.building.duration").getSnapshot().getMean(), allOf(greaterThan(TimeUnit.MILLISECONDS.toNanos(2500)*1.0), @@ -96,9 +139,11 @@ public void given__a_job__when__built__then__events_and_metrics_include_build() @TestExtension public static class MyListener extends QueueItemMetricsListener { private final List events = new ArrayList<>(); + public StringBuilder state = new StringBuilder(); @Override public void onQueued(QueueItemMetricsEvent event) { + state.append("Q"); synchronized (events) { events.add(event); } @@ -107,6 +152,7 @@ public void onQueued(QueueItemMetricsEvent event) { @Override public void onCancelled(QueueItemMetricsEvent event) { + state.append("C"); synchronized (events) { events.add(event); } @@ -114,6 +160,7 @@ public void onCancelled(QueueItemMetricsEvent event) { @Override public void onStarted(QueueItemMetricsEvent event) { + state.append("S"); synchronized (events) { events.add(event); } @@ -121,6 +168,7 @@ public void onStarted(QueueItemMetricsEvent event) { @Override public void onFinished(QueueItemMetricsEvent event) { + state.append("F"); synchronized (events) { events.add(event); } From 720908428853800987e2ba81acd955b4d52745db Mon Sep 17 00:00:00 2001 From: Jose Blas Camacho Taboada Date: Fri, 6 Nov 2020 17:05:30 +0100 Subject: [PATCH 2/7] JENKINS-63760 notifyQueued used --- .../jenkins/metrics/impl/JenkinsMetricProviderImplTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java index 2bc8d3c..ae3d5b0 100644 --- a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java +++ b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java @@ -102,6 +102,10 @@ public void given__a_job__when__built__then__events_and_metrics_include_build() assertThat(listener.getEvents(), is(emptyCollectionOf(QueueItemMetricsEvent.class))); j.assertBuildStatusSuccess(p.scheduleBuild2(2)); + //wait for completion + while (!listener.state.toString().contains("F")){ + Thread.sleep(100); + } assertThat(listener.state.toString(), containsString("Q")); assertThat(listener.state.toString(), containsString("S")); assertThat(listener.state.toString(), containsString("F")); From b1318d90bcdfaf983e3b0b114618f60f94098702 Mon Sep 17 00:00:00 2001 From: Jose Blas Camacho Taboada Date: Mon, 9 Nov 2020 10:23:00 +0100 Subject: [PATCH 3/7] change JEnkinsfile to remove recommended config --- Jenkinsfile | 2 +- .../java/jenkins/metrics/impl/JenkinsMetricProviderImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 87a086d..48bf230 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1 +1 @@ -buildPlugin(configurations: buildPlugin.recommendedConfigurations()) +buildPlugin() \ No newline at end of file diff --git a/src/main/java/jenkins/metrics/impl/JenkinsMetricProviderImpl.java b/src/main/java/jenkins/metrics/impl/JenkinsMetricProviderImpl.java index e1792e3..7aab1a5 100644 --- a/src/main/java/jenkins/metrics/impl/JenkinsMetricProviderImpl.java +++ b/src/main/java/jenkins/metrics/impl/JenkinsMetricProviderImpl.java @@ -1018,7 +1018,7 @@ private void checkEnterQueue(Queue.Item i) { null, null); executorService.submit(() -> { - QueueItemMetricsListener.notifyQueued(m); + QueueItemMetricsListener.notifyQueued(m); }); return new ItemTotals(id); }); From 37adef791fa9b29566dbd66ac7c8da34c1104133 Mon Sep 17 00:00:00 2001 From: Jose Blas Camacho Taboada Date: Mon, 9 Nov 2020 12:01:04 +0100 Subject: [PATCH 4/7] JENKINS-63760 revering JenkinsFile change --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 48bf230..87a086d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1 +1 @@ -buildPlugin() \ No newline at end of file +buildPlugin(configurations: buildPlugin.recommendedConfigurations()) From 57681f72ec9933263ebc209ed6ed1dc26317097a Mon Sep 17 00:00:00 2001 From: Jose Blas Camacho Taboada Date: Mon, 9 Nov 2020 17:43:26 +0100 Subject: [PATCH 5/7] JENKINS-63768 more time for metrics --- .../jenkins/metrics/impl/JenkinsMetricProviderImplTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java index ae3d5b0..b330c87 100644 --- a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java +++ b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java @@ -81,7 +81,7 @@ public void given__a_job_which_is_cancelled() throws Exception { //wait for completion while (!listener.state.toString().contains("C")){ - Thread.sleep(100); + Thread.sleep(10); } assertThat(listener.state.toString(), containsString("Q")); @@ -104,7 +104,7 @@ public void given__a_job__when__built__then__events_and_metrics_include_build() //wait for completion while (!listener.state.toString().contains("F")){ - Thread.sleep(100); + Thread.sleep(10); } assertThat(listener.state.toString(), containsString("Q")); assertThat(listener.state.toString(), containsString("S")); @@ -113,7 +113,7 @@ public void given__a_job__when__built__then__events_and_metrics_include_build() assertThat(Metrics.metricRegistry().getTimers().get("jenkins.job.building.duration").getCount(), is(1L)); assertThat(Metrics.metricRegistry().getTimers().get("jenkins.job.building.duration").getSnapshot().getMean(), allOf(greaterThan(TimeUnit.MILLISECONDS.toNanos(2500)*1.0), - lessThan(TimeUnit.MILLISECONDS.toNanos(3500) * 1.0))); + lessThan(TimeUnit.MILLISECONDS.toNanos(3800) * 1.0))); List events = listener.getEvents(); assertThat(events.size(), is(3)); Collections.sort(events, QueueItemMetricsEvent::compareEventSequence); From 9546e06027d9d1ca5868331b30af4b3c5a68298b Mon Sep 17 00:00:00 2001 From: Jose Blas Camacho Taboada Date: Mon, 9 Nov 2020 17:47:23 +0100 Subject: [PATCH 6/7] JENKINS-63768 more time for metrics --- .../jenkins/metrics/impl/JenkinsMetricProviderImplTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java index b330c87..1bb2d2f 100644 --- a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java +++ b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java @@ -136,7 +136,7 @@ public void given__a_job__when__built__then__events_and_metrics_include_build() assertThat(events.get(2).getExecutable(), is(Optional.of(p.getBuildByNumber(1)))); assertThat(events.get(2).getQueuingTotalMillis().orElse(null), greaterThan(1500L)); assertThat(events.get(2).getQueuingWaitingMillis().orElse(null), greaterThan(1500L)); - assertThat(events.get(2).getExecutingMillis().orElse(null), allOf(greaterThan(2500L), lessThan(3500L))); + assertThat(events.get(2).getExecutingMillis().orElse(null), allOf(greaterThan(2500L), lessThan(3800L))); assertThat(events.get(2).getExecutorCount().orElse(null), is(1)); } From a62cfe6c5e1c54126fb988d0d7018dad98848521 Mon Sep 17 00:00:00 2001 From: Jose Blas Camacho Taboada Date: Wed, 11 Nov 2020 16:53:02 +0100 Subject: [PATCH 7/7] JENKINS-63768 test sanitation --- .../impl/JenkinsMetricProviderImplTest.java | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java index 1bb2d2f..435aa84 100644 --- a/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java +++ b/src/test/java/jenkins/metrics/impl/JenkinsMetricProviderImplTest.java @@ -27,19 +27,11 @@ import hudson.ExtensionList; import hudson.model.FreeStyleBuild; import hudson.model.FreeStyleProject; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.TimeUnit; - -import hudson.model.Run; import hudson.model.queue.QueueTaskFuture; import jenkins.metrics.api.Metrics; import jenkins.metrics.api.QueueItemMetricsEvent; import jenkins.metrics.api.QueueItemMetricsListener; import org.junit.ClassRule; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.BuildWatcher; @@ -47,9 +39,14 @@ import org.jvnet.hudson.test.SleepBuilder; import org.jvnet.hudson.test.TestExtension; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.emptyCollectionOf; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.is; @@ -84,8 +81,7 @@ public void given__a_job_which_is_cancelled() throws Exception { Thread.sleep(10); } - assertThat(listener.state.toString(), containsString("Q")); - assertThat(listener.state.toString(), containsString("C")); + assertThat(listener.state.toString(), is("QC")); } @@ -106,9 +102,7 @@ public void given__a_job__when__built__then__events_and_metrics_include_build() while (!listener.state.toString().contains("F")){ Thread.sleep(10); } - assertThat(listener.state.toString(), containsString("Q")); - assertThat(listener.state.toString(), containsString("S")); - assertThat(listener.state.toString(), containsString("F")); + assertThat(listener.state.toString(), is("QSF")); assertThat(Metrics.metricRegistry().getTimers().get("jenkins.job.building.duration").getCount(), is(1L)); assertThat(Metrics.metricRegistry().getTimers().get("jenkins.job.building.duration").getSnapshot().getMean(),