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 99edf59..54dd424 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 setUp() throws Exception {
     super.setUp();
 
-    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;
+  }
 }
