package com.workshare.msnos.usvc.api.routing; import com.workshare.msnos.usvc.Microservice; import com.workshare.msnos.usvc.api.routing.strategies.PriorityRoutingStrategy; import org.junit.Test; import org.mockito.Mockito; import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class PriorityRoutingStrategyTest { public static final Microservice MICRO = Mockito.mock(Microservice.class); private List<ApiEndpoint> endpoints; @Test public void shouldSelectBasedOnPriority() throws Exception { endpoints = Arrays.asList(lowPriorityEndpoint(), lowPriorityEndpoint(), endpointWithPriority(5)); List<ApiEndpoint> result = priorityEndpointSelect(MICRO, endpoints); assertEquals(1, result.size()); } @Test public void shouldReturnALLHighPriorityEndpoints() throws Exception { endpoints = Arrays.asList(endpointWithPriority(5), endpointWithPriority(5), endpointWithPriority(5)); List<ApiEndpoint> result = priorityEndpointSelect(MICRO, endpoints); assertEquals(3, result.size()); } @Test public void shouldReturnOriginalListIfNoHighPriorityEndpoints() throws Exception { endpoints = Arrays.asList(lowPriorityEndpoint(), lowPriorityEndpoint(), lowPriorityEndpoint()); List<ApiEndpoint> result = priorityEndpointSelect(MICRO, endpoints); assertEquals(endpoints, result); } @Test public void shouldSelectHiPriorityEndpoints() throws Exception { endpoints = Arrays.asList(endpointWithPriority(5), endpointWithPriority(5), endpointWithPriority(4), endpointWithPriority(3)); List<ApiEndpoint> result = priorityEndpointSelect(MICRO, endpoints); assertEquals(2, result.size()); } @Test public void shouldDisregardHiLevelFaultyEndpoints() throws Exception { endpoints = Arrays.asList(endpointWithPriorityAndisFaulty(5, true), endpointWithPriorityAndisFaulty(5, true), endpointWithPriority(4), endpointWithPriority(3)); List<ApiEndpoint> result = priorityEndpointSelect(MICRO, endpoints); assertEquals(1, result.size()); } private List<ApiEndpoint> priorityEndpointSelect(Microservice microservice, List<ApiEndpoint> endpoints) { return new PriorityRoutingStrategy().select(microservice, endpoints); } private ApiEndpoint lowPriorityEndpoint() { ApiEndpoint endpoint = mock(ApiEndpoint.class); when(endpoint.priority()).thenReturn(0); return endpoint; } private ApiEndpoint endpointWithPriority(int priority) { return endpointWithPriorityAndisFaulty(priority, false); } private ApiEndpoint endpointWithPriorityAndisFaulty(int priority, boolean faulty) { ApiEndpoint endpoint = mock(ApiEndpoint.class); when(endpoint.priority()).thenReturn(priority); when(endpoint.isFaulty()).thenReturn(faulty); return endpoint; } }