package com.bazaarvoice.ostrich.dropwizard.healthcheck; import com.bazaarvoice.ostrich.HealthCheckResult; import com.bazaarvoice.ostrich.HealthCheckResults; import com.bazaarvoice.ostrich.ServicePool; import com.bazaarvoice.ostrich.pool.ServicePoolProxyHelper; import com.codahale.metrics.health.HealthCheck; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import org.junit.Before; import org.junit.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import java.util.Collections; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @SuppressWarnings("unchecked") public class ContainsHealthyEndPointCheckWithProxyTest { private static final HealthCheckResult HEALTHY = mock(HealthCheckResult.class); private static final HealthCheckResult UNHEALTHY = mock(HealthCheckResult.class); private final ServicePool<Service> _pool = mock(ServicePool.class); private final HealthCheckResults _results = mock(HealthCheckResults.class); private HealthCheck _check; @Before public void setup() { when(HEALTHY.isHealthy()).thenReturn(true); when(UNHEALTHY.isHealthy()).thenReturn(false); // Default to empty results. when(_pool.checkForHealthyEndPoint()).thenReturn(_results); when(_results.getHealthyResult()).thenReturn(null); when(_results.getUnhealthyResults()).thenReturn(Collections.<HealthCheckResult>emptyList()); when(_results.hasHealthyResult()).thenAnswer(new Answer<Boolean>() { @Override public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { return _results.getHealthyResult() != null; } }); when(_results.getAllResults()).thenAnswer(new Answer<Iterable<HealthCheckResult>>() { @Override public Iterable<HealthCheckResult> answer(InvocationOnMock invocationOnMock) throws Throwable { return Iterables.concat(ImmutableList.of(_results.getHealthyResult()), _results.getUnhealthyResults()); } }); Service _proxy = ServicePoolProxyHelper.createMock(Service.class, _pool); _check = ContainsHealthyEndPointCheck.forProxy(_proxy); } @Test (expected = NullPointerException.class) public void testNullPool() { ContainsHealthyEndPointCheck.forProxy(null); } @Test public void testEmptyResult() { assertFalse(_check.execute().isHealthy()); } @Test public void testOnlyUnhealthyResult() { when(_results.getUnhealthyResults()).thenReturn(ImmutableList.of(UNHEALTHY)); assertFalse(_check.execute().isHealthy()); } @Test public void testOnlyHealthyResult() { when(_results.getHealthyResult()).thenReturn(HEALTHY); assertTrue(_check.execute().isHealthy()); } @Test public void testBothResults() { when(_results.getHealthyResult()).thenReturn(HEALTHY); when(_results.getUnhealthyResults()).thenReturn(ImmutableList.of(UNHEALTHY)); assertTrue(_check.execute().isHealthy()); } interface Service {} }