@Test public void checkNode_returns_YELLOW_status_if_only_GREEN_and_at_least_one_YELLOW_statuses_returned_by_NodeHealthCheck() { List<Health.Status> statuses = new ArrayList<>(); Stream.concat( IntStream.range(0, 1 + random.nextInt(20)).mapToObj(i -> YELLOW), // at least 1 YELLOW IntStream.range(0, random.nextInt(20)).mapToObj(i -> GREEN)).forEach(statuses::add); // between 0 and 19 GREEN Collections.shuffle(statuses); HealthCheckerImpl underTest = newNodeHealthCheckerImpl(statuses.stream()); assertThat(underTest.checkNode().getStatus()) .describedAs("%s should have been computed from %s statuses", YELLOW, statuses) .isEqualTo(YELLOW); }
private void verifyRedStatus(Health health) { assertThat(health.getStatus()).isEqualTo(Health.Status.RED); assertThat(health.getCauses()).containsOnly("Can't connect to DB"); } }
private void verifyRedHealthWithCause(Health health) { assertThat(health.getStatus()).isEqualTo(Health.Status.RED); assertThat(health.getCauses()).containsOnly("SonarQube webserver is not up"); } }
@Test public void checkNode_returns_GREEN_status_if_only_GREEN_statuses_returned_by_NodeHealthCheck() { List<Health.Status> statuses = IntStream.range(1, 1 + random.nextInt(20)).mapToObj(i -> GREEN).collect(Collectors.toList()); HealthCheckerImpl underTest = newNodeHealthCheckerImpl(statuses.stream()); assertThat(underTest.checkNode().getStatus()) .describedAs("%s should have been computed from %s statuses", GREEN, statuses) .isEqualTo(GREEN); }
@Test public void checkNode_returns_RED_status_if_at_least_one_RED_status_returned_by_NodeHealthCheck() { List<Health.Status> statuses = new ArrayList<>(); Stream.of( IntStream.range(0, 1 + random.nextInt(20)).mapToObj(i -> RED), // at least 1 RED IntStream.range(0, random.nextInt(20)).mapToObj(i -> YELLOW), // between 0 and 19 YELLOW IntStream.range(0, random.nextInt(20)).mapToObj(i -> GREEN) // between 0 and 19 GREEN ).flatMap(s -> s) .forEach(statuses::add); Collections.shuffle(statuses); HealthCheckerImpl underTest = newNodeHealthCheckerImpl(statuses.stream()); assertThat(underTest.checkNode().getStatus()) .describedAs("%s should have been computed from %s statuses", RED, statuses) .isEqualTo(RED); }
@Test public void checkCluster_returns_YELLOW_status_if_only_GREEN_and_at_least_one_YELLOW_statuses_returned_by_ClusterHealthChecks() { when(webServer.isStandalone()).thenReturn(false); List<Health.Status> statuses = new ArrayList<>(); Stream.concat( IntStream.range(0, 1 + random.nextInt(20)).mapToObj(i -> YELLOW), // at least 1 YELLOW IntStream.range(0, random.nextInt(20)).mapToObj(i -> GREEN)).forEach(statuses::add); // between 0 and 19 GREEN Collections.shuffle(statuses); HealthCheckerImpl underTest = newClusterHealthCheckerImpl(statuses.stream()); assertThat(underTest.checkCluster().getHealth().getStatus()) .describedAs("%s should have been computed from %s statuses", YELLOW, statuses) .isEqualTo(YELLOW); }
@Test public void checkCluster_returns_GREEN_status_if_only_GREEN_statuses_returned_by_ClusterHealthChecks() { when(webServer.isStandalone()).thenReturn(false); List<Health.Status> statuses = IntStream.range(1, 1 + random.nextInt(20)).mapToObj(i -> GREEN).collect(Collectors.toList()); HealthCheckerImpl underTest = newClusterHealthCheckerImpl(statuses.stream()); assertThat(underTest.checkCluster().getHealth().getStatus()) .describedAs("%s should have been computed from %s statuses", GREEN, statuses) .isEqualTo(GREEN); }
@Test public void checkCluster_returns_RED_status_if_at_least_one_RED_status_returned_by_ClusterHealthChecks() { when(webServer.isStandalone()).thenReturn(false); List<Health.Status> statuses = new ArrayList<>(); Stream.of( IntStream.range(0, 1 + random.nextInt(20)).mapToObj(i -> RED), // at least 1 RED IntStream.range(0, random.nextInt(20)).mapToObj(i -> YELLOW), // between 0 and 19 YELLOW IntStream.range(0, random.nextInt(20)).mapToObj(i -> GREEN) // between 0 and 19 GREEN ).flatMap(s -> s) .forEach(statuses::add); Collections.shuffle(statuses); HealthCheckerImpl underTest = newClusterHealthCheckerImpl(statuses.stream()); assertThat(underTest.checkCluster().getHealth().getStatus()) .describedAs("%s should have been computed from %s statuses", RED, statuses) .isEqualTo(RED); }
@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"); } }
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)"); }
@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(); } }
@Test public void getStatus_returns_status_from_builder() { Health underTest = newHealthCheckBuilder().setStatus(anyStatus).build(); assertThat(underTest.getStatus()).isEqualTo(anyStatus); }
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(); }
@Test public void equals_is_based_on_content() { Health health = randomHealth(); Set<NodeHealth> nodeHealths = randomNodeHealths(); ClusterHealth underTest = new ClusterHealth(health, nodeHealths); assertThat(underTest) .isEqualTo(underTest) .isEqualTo(new ClusterHealth(health, nodeHealths)) .isNotEqualTo(new Object()) .isNotEqualTo(null) .isNotEqualTo(new ClusterHealth( newHealthCheckBuilder() .setStatus(health.getStatus()) .addCause("foo_bar") .build(), randomNodeHealths())) .isNotEqualTo(new ClusterHealth( health, concat(nodeHealths.stream(), Stream.of(randomNodeHealth())).collect(toSet()))); }