Merge branch 'stable-2.15' into stable-2.16
* stable-2.15:
AuthHealthCheck: evict account cache by username
Fix disabling of healthchecks
Change-Id: I8a019573775c38258c19e3d3033ecfcc9b967456
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfig.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfig.java
index b92588b..4e4fab1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckConfig.java
@@ -60,7 +60,7 @@
}
@VisibleForTesting
- public HealthCheckConfig(String configText) {
+ HealthCheckConfig(String configText) {
config = new Config();
if (!Strings.isNullOrEmpty(configText)) {
try {
@@ -73,6 +73,11 @@
allUsersName = new AllUsersName("All-Users");
}
+ @VisibleForTesting
+ void fromText(String configText) throws ConfigInvalidException {
+ config.fromText(configText);
+ }
+
public long getTimeout() {
return getTimeout(null);
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java
index 26a2042..c508222 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/api/HealthCheckStatusEndpoint.java
@@ -51,7 +51,7 @@
.filter(
res ->
res instanceof HealthCheck.StatusSummary
- && ((HealthCheck.StatusSummary) res).result != HealthCheck.Result.PASSED)
+ && ((HealthCheck.StatusSummary) res).isFailure())
.findFirst()
.isPresent()) {
return HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AbstractHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AbstractHealthCheck.java
index e8aeb95..a6eae79 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AbstractHealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AbstractHealthCheck.java
@@ -29,14 +29,14 @@
private final String name;
private final ListeningExecutorService executor;
protected StatusSummary latestStatus;
- protected boolean enabled;
+ protected HealthCheckConfig config;
protected AbstractHealthCheck(
ListeningExecutorService executor, HealthCheckConfig config, String name) {
this.executor = executor;
this.name = name;
this.timeout = config.getTimeout(name);
- this.enabled = config.healthCheckEnabled(name);
+ this.config = config;
this.latestStatus = StatusSummary.INITIAL_STATUS;
}
@@ -47,6 +47,7 @@
@Override
public StatusSummary run() {
+ boolean enabled = config.healthCheckEnabled(name);
final long ts = System.currentTimeMillis();
ListenableFuture<StatusSummary> resultFuture =
executor.submit(
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java
index 858e142..de571d1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/HealthCheck.java
@@ -39,7 +39,7 @@
public final long ts;
public final long elapsed;
public static final Set<Result> failingResults =
- new HashSet(Arrays.asList(Result.FAILED, Result.TIMEOUT));
+ new HashSet<>(Arrays.asList(Result.FAILED, Result.TIMEOUT));
public StatusSummary(Result result, long ts, long elapsed) {
this.result = result;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java
index daabc4a..d23244b 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/healthcheck/HealthCheckIT.java
@@ -16,6 +16,7 @@
import static com.google.common.net.HttpHeaders.CONTENT_TYPE;
import static com.google.common.truth.Truth.assertThat;
+import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.AUTH;
import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.JGIT;
import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.QUERYCHANGES;
import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.REVIEWDB;
@@ -24,12 +25,11 @@
import com.google.gerrit.acceptance.RestResponse;
import com.google.gerrit.acceptance.Sandboxed;
import com.google.gerrit.acceptance.TestPlugin;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
-import com.google.inject.AbstractModule;
import com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames;
import java.io.IOException;
+import org.eclipse.jgit.errors.ConfigInvalidException;
import org.junit.Before;
import org.junit.Test;
@@ -44,17 +44,7 @@
public void setUpTestPlugin() throws Exception {
super.setUpTestPlugin();
- config =
- server
- .getTestInjector()
- .createChildInjector(
- new AbstractModule() {
- @Override
- protected void configure() {
- bind(String.class).annotatedWith(PluginName.class).toInstance("healthcheck");
- }
- })
- .getInstance(HealthCheckConfig.class);
+ config = plugin.getSysInjector().getInstance(HealthCheckConfig.class);
int numChanges = config.getLimit(HealthCheckNames.QUERYCHANGES);
for (int i = 0; i < numChanges; i++) {
createChange("refs/for/master");
@@ -75,21 +65,52 @@
@Test
public void shouldReturnReviewDbCheck() throws Exception {
RestResponse resp = getHealthCheckStatus();
+
resp.assertOK();
+ assertCheckResult(getResponseJson(resp), REVIEWDB, "passed");
+ }
- JsonObject respPayload = gson.fromJson(resp.getReader(), JsonObject.class);
+ @Test
+ public void shouldReturnReviewDbCheckAsDisabled() throws Exception {
+ disableCheck(REVIEWDB);
+ RestResponse resp = getHealthCheckStatus();
- assertCheckResult(respPayload, REVIEWDB, "passed");
+ resp.assertOK();
+ assertCheckResult(getResponseJson(resp), REVIEWDB, "disabled");
}
@Test
public void shouldReturnJGitCheck() throws Exception {
RestResponse resp = getHealthCheckStatus();
+
resp.assertOK();
+ assertCheckResult(getResponseJson(resp), JGIT, "passed");
+ }
- JsonObject respPayload = gson.fromJson(resp.getReader(), JsonObject.class);
+ @Test
+ public void shouldReturnJGitCheckAsDisabled() throws Exception {
+ disableCheck(JGIT);
+ RestResponse resp = getHealthCheckStatus();
- assertCheckResult(respPayload, JGIT, "passed");
+ resp.assertOK();
+ assertCheckResult(getResponseJson(resp), JGIT, "disabled");
+ }
+
+ @Test
+ public void shouldReturnAuthCheck() throws Exception {
+ RestResponse resp = getHealthCheckStatus();
+
+ resp.assertOK();
+ assertCheckResult(getResponseJson(resp), AUTH, "passed");
+ }
+
+ @Test
+ public void shouldReturnAuthCheckAsDisabled() throws Exception {
+ disableCheck(AUTH);
+ RestResponse resp = getHealthCheckStatus();
+
+ resp.assertOK();
+ assertCheckResult(getResponseJson(resp), AUTH, "disabled");
}
@Test
@@ -98,9 +119,16 @@
RestResponse resp = getHealthCheckStatus();
resp.assertOK();
- JsonObject respPayload = gson.fromJson(resp.getReader(), JsonObject.class);
+ assertCheckResult(getResponseJson(resp), QUERYCHANGES, "passed");
+ }
- assertCheckResult(respPayload, QUERYCHANGES, "passed");
+ @Test
+ public void shouldReturnQueryChangesCheckAsDisabled() throws Exception {
+ disableCheck(QUERYCHANGES);
+ RestResponse resp = getHealthCheckStatus();
+
+ resp.assertOK();
+ assertCheckResult(getResponseJson(resp), QUERYCHANGES, "disabled");
}
@Test
@@ -110,9 +138,7 @@
RestResponse resp = getHealthCheckStatus();
resp.assertOK();
- JsonObject respPayload = gson.fromJson(resp.getReader(), JsonObject.class);
-
- assertCheckResult(respPayload, QUERYCHANGES, "passed");
+ assertCheckResult(getResponseJson(resp), QUERYCHANGES, "passed");
}
private RestResponse getHealthCheckStatus() throws IOException {
@@ -125,4 +151,13 @@
assertThat(reviewDbStatus.has("result")).isTrue();
assertThat(reviewDbStatus.get("result").getAsString()).isEqualTo(result);
}
+
+ private void disableCheck(String check) throws ConfigInvalidException {
+ config.fromText(String.format("[healthcheck \"%s\"]\n" + "enabled = false", check));
+ }
+
+ private JsonObject getResponseJson(RestResponse resp) throws IOException {
+ JsonObject respPayload = gson.fromJson(resp.getReader(), JsonObject.class);
+ return respPayload;
+ }
}