@Test public void class_is_serializable_with_causes() throws IOException, ClassNotFoundException { NodeHealth source = testSupport.randomBuilder(1).build(); byte[] bytes = NodeDetailsTestSupport.serialize(source); NodeHealth underTest = (NodeHealth) new ObjectInputStream(new ByteArrayInputStream(bytes)).readObject(); assertThat(underTest).isEqualTo(source); }
@Test public void NodeDetails_is_Externalizable() throws IOException, ClassNotFoundException { NodeDetails source = testSupport.randomNodeDetails(); byte[] byteArray = NodeDetailsTestSupport.serialize(source); NodeDetails underTest = (NodeDetails) new ObjectInputStream(new ByteArrayInputStream(byteArray)).readObject(); assertThat(underTest).isEqualTo(source); }
NodeDetails randomNodeDetails() { return randomNodeDetailsBuilder() .build(); }
NodeHealth.Builder randomBuilder(int minCauseCount) { NodeHealth.Builder builder = newNodeHealthBuilder() .setStatus(randomStatus()) .setDetails(randomNodeDetails()); IntStream.range(0, minCauseCount + random.nextInt(2)).mapToObj(i -> randomAlphanumeric(4)).forEach(builder::addCause); return builder; }
@Test public void builder_can_be_reused() { NodeHealth.Builder builder = testSupport.randomBuilder(1); NodeHealth original = builder.build(); NodeHealth second = builder.build(); NodeHealth.Status newRandomStatus = NodeHealth.Status.values()[random.nextInt(NodeHealth.Status.values().length)]; NodeDetails newNodeDetails = testSupport.randomNodeDetails(); builder .clearCauses() .setStatus(newRandomStatus) .setDetails(newNodeDetails); String[] newCauses = IntStream.range(0, 1 + random.nextInt(2)).mapToObj(i -> randomAlphanumeric(4)).toArray(String[]::new); Arrays.stream(newCauses).forEach(builder::addCause); NodeHealth newNodeHealth = builder.build(); assertThat(second).isEqualTo(original); assertThat(newNodeHealth.getStatus()).isEqualTo(newRandomStatus); assertThat(newNodeHealth.getDetails()).isEqualTo(newNodeDetails); assertThat(newNodeHealth.getCauses()).containsOnly(newCauses); }
NodeHealth.Builder randomBuilder() { return randomBuilder(0); }
@Test public void verify_getters() { NodeDetails nodeDetails = testSupport.randomNodeDetails(); NodeHealth.Builder builder = builderUnderTest .setStatus(randomStatus) .setDetails(nodeDetails); String[] causes = IntStream.range(0, random.nextInt(10)).mapToObj(i -> randomAlphanumeric(4)).toArray(String[]::new); Arrays.stream(causes).forEach(builder::addCause); NodeHealth underTest = builder.build(); assertThat(underTest.getStatus()).isEqualTo(randomStatus); assertThat(underTest.getDetails()).isEqualTo(nodeDetails); assertThat(underTest.getCauses()).containsOnly(causes); }
@Test public void start_adds_runnable_with_10_second_delay_and_initial_delay_putting_NodeHealth_from_provider_into_SharedHealthState() { ArgumentCaptor<Runnable> runnableCaptor = ArgumentCaptor.forClass(Runnable.class); NodeHealth[] nodeHealths = { testSupport.randomNodeHealth(), testSupport.randomNodeHealth(), testSupport.randomNodeHealth() }; Error expected = new Error("Simulating exception raised by NodeHealthProvider"); when(nodeHealthProvider.get()) .thenReturn(nodeHealths[0]) .thenReturn(nodeHealths[1]) .thenReturn(nodeHealths[2]) .thenThrow(expected); underTest.start(); verify(executorService).scheduleWithFixedDelay(runnableCaptor.capture(), eq(1L), eq(10L), eq(TimeUnit.SECONDS)); Runnable runnable = runnableCaptor.getValue(); runnable.run(); runnable.run(); runnable.run(); verify(sharedHealthState).writeMine(nodeHealths[0]); verify(sharedHealthState).writeMine(nodeHealths[1]); verify(sharedHealthState).writeMine(nodeHealths[2]); try { runnable.run(); } catch (IllegalStateException e) { fail("Runnable should catch any Throwable"); } }
NodeDetails.Builder randomNodeDetailsBuilder() { return newNodeDetailsBuilder() .setType(randomType()) .setName(randomAlphanumeric(3)) .setHost(randomAlphanumeric(10)) .setPort(1 + random.nextInt(10)) .setStartedAt(1 + random.nextInt(666)); }
NodeHealth randomNodeHealth() { return randomBuilder().build(); }
@Test public void verify_toString() { NodeDetails nodeDetails = testSupport.randomNodeDetails(); String cause = randomAlphanumeric(4); NodeHealth.Builder builder = builderUnderTest .setStatus(randomStatus) .setDetails(nodeDetails) .addCause(cause); NodeHealth underTest = builder.build(); assertThat(underTest.toString()) .isEqualTo("NodeHealth{status=" + randomStatus + ", causes=[" + cause + "], details=" + nodeDetails + "}"); }
@Test public void class_is_serializable_without_causes() throws IOException, ClassNotFoundException { NodeHealth.Builder builder = newNodeHealthBuilder() .setStatus(randomStatus) .setDetails(testSupport.randomNodeDetails()); NodeHealth source = builder.build(); byte[] bytes = NodeDetailsTestSupport.serialize(source); NodeHealth underTest = (NodeHealth) new ObjectInputStream(new ByteArrayInputStream(bytes)).readObject(); assertThat(underTest).isEqualTo(source); }
@Test public void equals_is_based_on_content() { NodeHealth.Builder builder = testSupport.randomBuilder(); NodeHealth underTest = builder.build(); assertThat(underTest).isEqualTo(underTest); assertThat(builder.build()) .isEqualTo(underTest) .isNotSameAs(underTest); assertThat(underTest).isNotEqualTo(null); assertThat(underTest).isNotEqualTo(new Object()); }
@Test public void equals_is_based_on_content() { NodeDetails.Builder builder = testSupport.randomNodeDetailsBuilder(); NodeDetails underTest = builder.build(); assertThat(underTest).isEqualTo(underTest); assertThat(builder.build()) .isEqualTo(underTest) .isNotSameAs(underTest); assertThat(underTest).isNotEqualTo(null); assertThat(underTest).isNotEqualTo(new Object()); }
@Test public void hashcode_is_based_on_content() { NodeHealth.Builder builder = testSupport.randomBuilder(); NodeHealth underTest = builder.build(); assertThat(builder.build().hashCode()) .isEqualTo(underTest.hashCode()); }
@Test public void hashcode_is_based_on_content() { NodeDetails.Builder builder = testSupport.randomNodeDetailsBuilder(); NodeDetails underTest = builder.build(); assertThat(builder.build().hashCode()) .isEqualTo(underTest.hashCode()); }
@Test public void clearClauses_clears_clauses_of_builder() { NodeHealth.Builder underTest = testSupport.randomBuilder(); NodeHealth original = underTest .addCause(randomAlphanumeric(3)) .build(); underTest.clearCauses(); NodeHealth second = underTest.build(); assertThat(second.getStatus()).isEqualTo(original.getStatus()); assertThat(second.getDetails()).isEqualTo(original.getDetails()); assertThat(second.getCauses()).isEmpty(); }