package com.workshare.msnos.usvc.api.routing; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import com.workshare.msnos.usvc.Microservice; import com.workshare.msnos.usvc.RemoteMicroservice; import com.workshare.msnos.usvc.api.routing.strategies.SkipFaultiesRoutingStrategy; @SuppressWarnings("unused") public class SkipFaultiesRoutingStrategyTest { private Microservice from; private RemoteMicroservice one; private RemoteMicroservice two; private List<ApiEndpoint> endpoints; private SkipFaultiesRoutingStrategy strategy; @Before public void setup() { from = mock(Microservice.class); one = mock(RemoteMicroservice.class); two = mock(RemoteMicroservice.class); endpoints = new ArrayList<ApiEndpoint>(); strategy = new SkipFaultiesRoutingStrategy(); } @Test public void shouldReturnUnchangedListIfNoFaulties() { ApiEndpoint oneA = add(endpointOk(one)); ApiEndpoint oneB = add(endpointOk(one)); ApiEndpoint twoA = add(endpointOk(two)); List<ApiEndpoint> result = strategy.select(from, endpoints); assertEquals(3, result.size()); assertTrue(result.contains(oneA)); assertTrue(result.contains(oneB)); assertTrue(result.contains(twoA)); } @Test public void shouldSkipApisOfDFaulties() { ApiEndpoint oneA = add(endpointOk(one)); ApiEndpoint oneB = add(endpointKO(one)); ApiEndpoint twoA = add(endpointOk(two)); List<ApiEndpoint> result = strategy.select(from, endpoints); assertEquals(1, result.size()); assertTrue(result.contains(twoA)); } private ApiEndpoint add(final ApiEndpoint endpoint) { endpoints.add(endpoint); return endpoint; } public ApiEndpoint endpointKO(RemoteMicroservice micro) { ApiEndpoint ep = endpointOk(micro); when(ep.isFaulty()).thenReturn(true); return ep; } public ApiEndpoint endpointOk(RemoteMicroservice micro) { ApiEndpoint endpoint = mock(ApiEndpoint.class); when(endpoint.service()).thenReturn(micro); return endpoint; } }