Add a metrics reporter for testing metrics generation
Parametric metrics are populated in a lazy way depending on the values
of the parameters at runtime. The evaluation happens at the reporting
time, therefore testing without an actual reporter won't trigger the
generation logic.
Add an Slf4JReporter to MetricsInitializerIT so that the test gets
executed on the fully generated metrics at runtime.
Before this change, the metrics were re-registered multiple times for
making the tests pass, which compensated for the lack of metrics
collection (registration triggers a forced collection); however, the
testing scenarios were not necessarily impacted by the extra metrics
creation, but at runtime it was, causing errors whenever a project had
the same metrics updated and collected multiple times.
Change-Id: Ib8f739b53a0fabb4c38f09abf859f356169a8ccf
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheIT.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheIT.java
index f347425..ef502ef 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheIT.java
@@ -17,6 +17,7 @@
import static org.junit.Assert.fail;
import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Slf4jReporter;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
import com.google.gerrit.acceptance.TestPlugin;
@@ -41,6 +42,7 @@
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
+import org.junit.After;
import org.junit.Test;
@TestPlugin(
@@ -57,6 +59,7 @@
private GitStatsMetricsCollector gitStatsMetricsCollector;
private GitRefsMetricsCollector gitRefsMetricsCollector;
private GitRepoMetricsCache gitRepoMetricsCache;
+ private Slf4jReporter metricReporter;
private final Project.NameKey testProject1 = Project.nameKey("testProject1");
private final Project.NameKey testProject2 = Project.nameKey("testProject2");
@@ -71,6 +74,12 @@
fsMetricsCollector = plugin.getSysInjector().getInstance(FSMetricsCollector.class);
gitStatsMetricsCollector = plugin.getSysInjector().getInstance(GitStatsMetricsCollector.class);
gitRefsMetricsCollector = plugin.getSysInjector().getInstance(GitRefsMetricsCollector.class);
+ metricReporter = Slf4jReporter.forRegistry(metricRegistry).build();
+ }
+
+ @After
+ public void tearDown() {
+ metricReporter.close();
}
@CanIgnoreReturnValue
@@ -182,6 +191,7 @@
}
private long getPluginMetricsCount() {
+ metricReporter.report();
return metricRegistry.getMetrics().keySet().stream()
.filter(metricName -> metricName.contains("plugins/git-repo-metrics"))
.count();
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/MetricsInitializerIT.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/MetricsInitializerIT.java
index 9b83588..1d6ee30 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/MetricsInitializerIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/MetricsInitializerIT.java
@@ -17,6 +17,7 @@
import static org.junit.Assert.fail;
import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Slf4jReporter;
import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
import com.google.gerrit.acceptance.TestPlugin;
import com.google.gerrit.acceptance.UseLocalDisk;
@@ -27,6 +28,7 @@
import com.googlesource.gerrit.plugins.gitrepometrics.collectors.GitRefsMetricsCollector;
import com.googlesource.gerrit.plugins.gitrepometrics.collectors.GitStatsMetricsCollector;
import java.time.Duration;
+import org.junit.After;
import org.junit.Test;
@TestPlugin(
@@ -40,6 +42,7 @@
private FSMetricsCollector fsMetricsCollector;
private GitStatsMetricsCollector gitStatsMetricsCollector;
private GitRefsMetricsCollector gitRefsMetricsCollector;
+ private Slf4jReporter metricReporter;
@Override
public void setUpTestPlugin() throws Exception {
@@ -48,6 +51,12 @@
fsMetricsCollector = plugin.getSysInjector().getInstance(FSMetricsCollector.class);
gitStatsMetricsCollector = plugin.getSysInjector().getInstance(GitStatsMetricsCollector.class);
gitRefsMetricsCollector = plugin.getSysInjector().getInstance(GitRefsMetricsCollector.class);
+ metricReporter = Slf4jReporter.forRegistry(metricRegistry).build();
+ }
+
+ @After
+ public void tearDown() {
+ metricReporter.close();
}
@Test
@@ -79,6 +88,7 @@
}
private long getPluginMetricsCount() {
+ metricReporter.report();
return metricRegistry.getMetrics().keySet().stream()
.filter(metricName -> metricName.contains("plugins/git-repo-metrics"))
.count();