private void verifyRedStatus(Health health) { assertThat(health.getStatus()).isEqualTo(Health.Status.RED); assertThat(health.getCauses()).containsOnly("Can't connect to DB"); } }
@Test public void checkNode_returns_causes_of_all_NodeHealthCheck_whichever_their_status() { NodeHealthCheck[] nodeHealthChecks = IntStream.range(0, 1 + random.nextInt(20)) .mapToObj(s -> new HardcodedHealthNodeCheck(IntStream.range(0, random.nextInt(3)).mapToObj(i -> randomAlphanumeric(3)).toArray(String[]::new))) .map(NodeHealthCheck.class::cast) .toArray(NodeHealthCheck[]::new); String[] expected = Arrays.stream(nodeHealthChecks).map(NodeHealthCheck::check).flatMap(s -> s.getCauses().stream()).toArray(String[]::new); HealthCheckerImpl underTest = new HealthCheckerImpl(webServer, nodeHealthChecks); assertThat(underTest.checkNode().getCauses()).containsOnly(expected); }
private void verifyRedHealthWithCause(Health health) { assertThat(health.getStatus()).isEqualTo(Health.Status.RED); assertThat(health.getCauses()).containsOnly("SonarQube webserver is not up"); } }
@Test public void checkCluster_returns_causes_of_all_ClusterHealthChecks_whichever_their_status() { when(webServer.isStandalone()).thenReturn(false); List<String[]> causesGroups = IntStream.range(0, 1 + random.nextInt(20)) .mapToObj(s -> IntStream.range(0, random.nextInt(3)).mapToObj(i -> randomAlphanumeric(3)).toArray(String[]::new)) .collect(Collectors.toList()); ClusterHealthCheck[] clusterHealthChecks = causesGroups.stream() .map(HardcodedHealthClusterCheck::new) .map(ClusterHealthCheck.class::cast) .toArray(ClusterHealthCheck[]::new); String[] expectedCauses = causesGroups.stream().flatMap(Arrays::stream).collect(Collectors.toSet()).stream().toArray(String[]::new); HealthCheckerImpl underTest = new HealthCheckerImpl(webServer, new NodeHealthCheck[0], clusterHealthChecks, sharedHealthState); assertThat(underTest.checkCluster().getHealth().getCauses()).containsOnly(expectedCauses); }
@Test public void check_returns_RED_status_with_cause_if_ce_is_not_operational() { when(processCommandWrapper.isCeOperational()).thenReturn(false); Health health = underTest.check(); assertThat(health.getStatus()).isEqualTo(Health.Status.RED); assertThat(health.getCauses()).containsOnly("Compute Engine is not operational"); } }
@Test public void check_ignores_NodeHealth_arg_and_returns_RED_with_cause_if_an_exception_occurs_checking_ES_cluster_status() { EsClient esClient = mock(EsClient.class); when(esClient.prepareClusterStats()).thenThrow(new RuntimeException("Faking an exception occurring while using the EsClient")); Health health = new EsStatusNodeCheck(esClient).check(); assertThat(health.getStatus()).isEqualTo(Health.Status.RED); assertThat(health.getCauses()).containsOnly("Elasticsearch status is RED (unavailable)"); }
@Test public void always_returns_RED_status_with_cause() { Health health = underTest.check(); assertThat(health.getStatus()).isEqualTo(Health.Status.RED); assertThat(health.getCauses()).containsOnly("SonarQube webserver is not up"); } }
@Override public NodeHealth get() { Health nodeHealth = healthChecker.checkNode(); this.nodeHealthBuilder .clearCauses() .setStatus(NodeHealth.Status.valueOf(nodeHealth.getStatus().name())); nodeHealth.getCauses().forEach(this.nodeHealthBuilder::addCause); return this.nodeHealthBuilder .setDetails(nodeDetails) .build(); } }
private static System.HealthResponse toResponse(ClusterHealth check) { System.HealthResponse.Builder responseBuilder = System.HealthResponse.newBuilder(); System.Node.Builder nodeBuilder = System.Node.newBuilder(); System.Cause.Builder causeBuilder = System.Cause.newBuilder(); Health health = check.getHealth(); responseBuilder.setHealth(System.Health.valueOf(health.getStatus().name())); health.getCauses().forEach(str -> responseBuilder.addCauses(toCause(str, causeBuilder))); System.Nodes.Builder nodesBuilder = System.Nodes.newBuilder(); check.getNodes().stream() .sorted(NODE_HEALTH_COMPARATOR) .map(node -> toNode(node, nodeBuilder, causeBuilder)) .forEach(nodesBuilder::addNodes); responseBuilder.setNodes(nodesBuilder.build()); return responseBuilder.build(); }
@Test public void check_ignores_NodeHealth_arg_and_returns_RED_with_cause_if_an_exception_occurs_checking_ES_cluster_status() { Set<NodeHealth> nodeHealths = ImmutableSet.of(newNodeHealth(NodeHealth.Status.GREEN)); when(esClient.prepareClusterStats()).thenThrow(new RuntimeException("Faking an exception occurring while using the EsClient")); Health health = new EsStatusClusterCheck(esClient).check(nodeHealths); assertThat(health.getStatus()).isEqualTo(Health.Status.RED); assertThat(health.getCauses()).containsOnly("Elasticsearch status is RED (unavailable)"); }
@Test public void request_returns_status_and_causes_from_HealthChecker_checkNode_method_when_standalone() { authenticateWithRandomMethod(); Health.Status randomStatus = Health.Status.values()[new Random().nextInt(Health.Status.values().length)]; Health.Builder builder = newHealthCheckBuilder() .setStatus(randomStatus); IntStream.range(0, new Random().nextInt(5)).mapToObj(i -> RandomStringUtils.randomAlphanumeric(3)).forEach(builder::addCause); Health health = builder.build(); when(healthChecker.checkNode()).thenReturn(health); when(webServer.isStandalone()).thenReturn(true); TestRequest request = underTest.newRequest(); System.HealthResponse healthResponse = request.executeProtobuf(System.HealthResponse.class); assertThat(healthResponse.getHealth().name()).isEqualTo(randomStatus.name()); assertThat(health.getCauses()).isEqualTo(health.getCauses()); }
public HealthAssert andCauses(String... causes) { isNotNull(); if (!checkCauses(causes)) { failWithMessage( "Expected causes of Health to contain only \n%s\n but was \n%s\n for NodeHealth \n%s", Arrays.asList(causes), actual.getCauses(), printStatusesAndTypes(this.nodeHealths)); } return this; }
@Test public void request_returns_status_and_causes_from_HealthChecker_checkNode_method() { authenticateWithPasscode(); Health.Status randomStatus = Health.Status.values()[new Random().nextInt(Health.Status.values().length)]; Health.Builder builder = newHealthCheckBuilder() .setStatus(randomStatus); IntStream.range(0, new Random().nextInt(5)).mapToObj(i -> RandomStringUtils.randomAlphanumeric(3)).forEach(builder::addCause); Health health = builder.build(); when(healthChecker.checkNode()).thenReturn(health); TestRequest request = underTest.newRequest(); System.HealthResponse healthResponse = request.executeProtobuf(System.HealthResponse.class); assertThat(healthResponse.getHealth().name()).isEqualTo(randomStatus.name()); assertThat(health.getCauses()).isEqualTo(health.getCauses()); }
@Test public void getCause_returns_causes_from_builder() { Health.Builder builder = newHealthCheckBuilder().setStatus(anyStatus); randomCauses.forEach(builder::addCause); Health underTest = builder.build(); assertThat(underTest.getCauses()) .isEqualTo(randomCauses); }
protected void writeHealth(Health health, JsonWriter json) { json.prop("Health", health.getStatus().name()); json.name("Health Causes").beginArray().values(health.getCauses()).endArray(); }
System.HealthResponse checkNodeHealth() { Health check = healthChecker.checkNode(); System.HealthResponse.Builder responseBuilder = System.HealthResponse.newBuilder() .setHealth(System.Health.valueOf(check.getStatus().name())); System.Cause.Builder causeBuilder = System.Cause.newBuilder(); check.getCauses().forEach(str -> responseBuilder.addCauses(causeBuilder.clear().setMessage(str).build())); return responseBuilder.build(); }
@Override public NodeHealth get() { Health nodeHealth = healthChecker.checkNode(); this.nodeHealthBuilder .clearCauses() .setStatus(NodeHealth.Status.valueOf(nodeHealth.getStatus().name())); nodeHealth.getCauses().forEach(this.nodeHealthBuilder::addCause); return this.nodeHealthBuilder .setDetails(nodeDetails) .build(); } }
protected void writeHealth(Health health, JsonWriter json) { json.prop("Health", health.getStatus().name()); json.name("Health Causes").beginArray().values(health.getCauses()).endArray(); }