@Override
  public Health checkNode() {
    return nodeHealthChecks.stream()
      .map(NodeHealthCheck::check)
      .reduce(Health.GREEN, HealthReducer::merge);
  }
@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(nodeInformation, nodeHealthChecks);

    assertThat(underTest.checkNode().getCauses()).containsOnly(expected);
  }