package com.aol.micro.server.module; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Consumer; import javax.servlet.Filter; import javax.servlet.Servlet; import javax.servlet.ServletContextListener; import javax.servlet.ServletRequestListener; import cyclops.collections.SetX; import cyclops.collections.immutable.PStackX; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.pcollections.HashTreePSet; import com.aol.micro.server.auto.discovery.CommonRestResource; import com.aol.micro.server.auto.discovery.Rest; import com.aol.micro.server.servers.model.ServerData; import com.aol.micro.server.utility.HashMapBuilder; public class ConfigurableModuleTest { ConfigurableModule module; ConfigurableModule unchanged; private String context; private List<Class<?>> defaultResources; private Map<String, Filter> filters; private String jaxWsRsApplication; private List<ServletContextListener> listeners; private List<ServletRequestListener> requestListeners; private String providers; private Set<Class<?>> resourceClasses; private Set<Class<? extends Annotation>> resourceAnnotationClasses; private Map<String, Servlet> servlets; private Set<Class<?>> springConfigurationClasses; private List<String> defaultJaxRsPackages; private Map<String, Object> serverProperties = HashMapBuilder.<String, Object>map(SERVER_PROPERTIES_KEY, 1).build(); private static final String SERVER_PROPERTIES_KEY = "serverPropertiesKey"; private Module m = () -> "module"; Consumer<WebServerProvider<HttpServer>> serverConfigManager = server-> {}; @Before public void setup(){ defaultJaxRsPackages = Arrays.asList("hello world"); context="context"; defaultResources = new ArrayList<>(); filters = HashMapBuilder.<String,Filter>map("/*1",new DummyQueryIPRetriever()).build(); jaxWsRsApplication = "jaxRsApp2"; listeners = m.getListeners(ServerData.builder().resources(PStackX.empty()).build()); requestListeners = m.getRequestListeners(ServerData.builder().resources(PStackX.empty()).build()); providers = "providers2"; Module m = () -> "hello"; resourceClasses = SetX.empty(); resourceAnnotationClasses = SetX.of(Rest.class); servlets = new HashMap<>(); springConfigurationClasses = HashTreePSet.singleton(this.getClass()); module = ConfigurableModule.builder() .serverConfigManager((Consumer)serverConfigManager ) .defaultJaxRsPackages(defaultJaxRsPackages) .context(context) .defaultResources(defaultResources) .filters(filters) .jaxWsRsApplication(jaxWsRsApplication) .listeners(listeners) .requestListeners(requestListeners) .providers(providers) .restResourceClasses(resourceClasses) .servlets(servlets) .springConfigurationClasses(springConfigurationClasses) .serverProperties(serverProperties) .build(); unchanged = ConfigurableModule.builder() .context("unchanged") .build(); } @Test public void resetAllIsFalse(){ ConfigurableModule m = ConfigurableModule.builder().build(); assertFalse(m.resetAll); } @Test public void defaultResourcesDefault(){ Module m = ConfigurableModule.builder().build(); assertThat(m.getDefaultResources().size(),equalTo(0)); } @Test public void defaultResourcesNew(){ Module m = ConfigurableModule.builder().defaultResources(Arrays.asList(this.getClass())).build(); assertThat(m.getDefaultResources().size(),equalTo(1)); } @Test public void testGetServerConfigManager() { assertThat(module.withResetAll(true).getServerConfigManager(),is(serverConfigManager)); } @Test public void testGetServerConfigManagerNull() { try { module.withServerConfigManager(null) .getServerConfigManager().accept(null); }catch(Exception e){ fail(e.getMessage()); } } @Test public void testGetRestResourceClassesResetAll() { assertThat(module.withResetAll(true).getRestResourceClasses(),is(resourceClasses)); } @Test public void testGetRestResourceClasses() { assertThat(module.getRestResourceClasses(),hasItem(CommonRestResource.class)); } @Test public void testGetRestResourceClassesUnchanged() { assertThat(unchanged.getRestResourceClasses(),is(m.getRestResourceClasses())); } @Test public void testGetRestAnnotationClassesResetAll() { assertThat(module.withResetAll(true).getRestAnnotationClasses(),is(resourceAnnotationClasses)); } @Test public void testGetRestAnnotationClasses() { assertThat(module.getRestAnnotationClasses(),hasItem(Rest.class)); } @Test public void testGetRestAnnotationClassesUnchanged() { assertThat(unchanged.getRestAnnotationClasses(),is(m.getRestAnnotationClasses())); } @Test public void testGetDefaultResourcesReset() { assertThat(module.withResetAll(true).getDefaultResources(),is(this.defaultResources)); } @Test public void testGetDefaultResources() { assertThat(module.getDefaultResources().size(),is(0)); } @Test public void testGetDefaultJaxRsPackagesReset() { assertThat(module.withResetAll(true).getDefaultJaxRsPackages(),is(this.defaultJaxRsPackages)); } @Test public void testGetDefaultJaxRsPackagesResources() { assertThat(module.getDefaultJaxRsPackages().size(),is(1)); } @Test public void testGetDefaultResourcesUnchanged() { assertThat(unchanged.getDefaultResources(),is(m.getDefaultResources())); } @Test public void testGetListeners() { assertThat(module.getListeners(ServerData.builder().resources(PStackX.of()).build()).size(), is(m.getListeners(ServerData.builder().resources(PStackX.of()).build()).size()*2)); //doubled } @Test public void testGetListenersReset() { assertThat(module.withResetAll(true).getListeners(ServerData.builder().resources(PStackX.of()).build()),is(this.listeners)); } @Test public void testGetListenersUnchanged() { assertThat(unchanged.getListeners(ServerData.builder().resources(PStackX.empty()).build()).size() , is(m.getListeners(ServerData.builder().resources(PStackX.empty()).build()).size())); } @Test public void testGetRequestListeners() { assertThat(module.getRequestListeners(ServerData.builder().resources(PStackX.of()).build()).size(), is(m.getRequestListeners(ServerData.builder().resources(PStackX.of()).build()).size()*2)); //doubled } @Test public void testGetRequestListenersReset() { assertThat(module.withResetAll(true).getRequestListeners(ServerData.builder().resources(PStackX.of()).build()),is(this.requestListeners)); } @Test public void testGetRequestListenersUnchanged() { assertThat(unchanged.getRequestListeners(ServerData.builder().resources(PStackX.of()).build()).size() , is(m.getRequestListeners(ServerData.builder().resources(PStackX.of()).build()).size())); } @Test public void testGetFilters() { assertThat(module.getFilters(ServerData.builder().resources(PStackX.of()).build()).size(), is(1 )); } @Test public void testGetFiltersReset() { assertThat(module.withResetAll(true).getFilters(ServerData.builder().resources(PStackX.of()).build()),is(this.filters)); } @Test public void testGetFiltersUnchanged() { assertThat(unchanged.getFilters(ServerData.builder().resources(PStackX.of()).build()).size(), equalTo(m.getFilters( ServerData.builder().resources(PStackX.of()).build() ).size())); } @Test public void testGetServlets() { assertThat(module.getServlets(ServerData.builder().resources(PStackX.of()).build()),is(this.servlets)); } @Test public void testGetServletsUnchanged() { assertThat(unchanged.getServlets(ServerData.builder().resources(PStackX.of()).build()),is(m.getServlets(ServerData.builder().resources(PStackX.of()).build()))); } @Test public void testGetJaxWsRsApplication() { assertThat(module.getJaxWsRsApplication(),is(this.jaxWsRsApplication)); } @Test(expected=IncorrectJaxRsPluginsException.class) public void testGetJaxWsRsApplicationUnchanged() { unchanged.getJaxWsRsApplication(); } @Test public void testGetProviders() { assertThat(module.getProviders(),is(this.providers)); } @Test public void testGetProvidersUnchanged() { assertThat(unchanged.getProviders(),is(m.getProviders())); } @Test public void testGetContext() { assertThat(module.getContext(),is(this.context)); } @Test public void testGetSpringConfigurationClassesReset() { assertThat(module.withResetAll(true).getSpringConfigurationClasses(),is(this.springConfigurationClasses)); } @Test public void testGetSpringConfigurationClasses() { assertThat(module.getSpringConfigurationClasses(),hasItem(this.getClass())); } @Test public void testGetSpringConfigurationClassesUnchanged() { assertThat(unchanged.getSpringConfigurationClasses(),is(m.getSpringConfigurationClasses())); } @Test public void testWithResourceAnnotationClasses() { System.out.println(this.resourceAnnotationClasses); System.out.println(unchanged.withRestAnnotationClasses(this.resourceAnnotationClasses).getRestAnnotationClasses()); assertThat(unchanged.withRestAnnotationClasses(this.resourceAnnotationClasses).getRestAnnotationClasses(),is(module.getRestAnnotationClasses())); } @Test public void testWithResourceClasses() { assertThat(unchanged.withRestResourceClasses(this.resourceClasses).getRestResourceClasses(),is(module.getRestResourceClasses())); } @Test public void testWithDefaultResources() { assertThat(unchanged.withDefaultResources(this.defaultResources).getDefaultResources(),is(module.getDefaultResources())); } @Test public void testWithListeners() { assertThat(unchanged.withListeners(this.listeners).getListeners(ServerData.builder().resources(PStackX.of()).build()).size(), is(module.getListeners(ServerData.builder().resources(PStackX.of()).build()).size())); } @Test public void testWithFilters() { assertThat(unchanged.withFilters(this.filters).getFilters(ServerData.builder().resources(PStackX.of()).build()).size(), is(module.getFilters(ServerData.builder().resources(PStackX.of()).build()).size())); } @Test public void testWithServlets() { assertThat(unchanged.withServlets(this.servlets).getServlets(ServerData.builder().resources(PStackX.of()).build()).size(), is(m.getServlets(ServerData.builder().resources(PStackX.of()).build()).size())); } @Test public void testWithJaxWsRsApplication() { assertThat(unchanged.withJaxWsRsApplication(this.jaxWsRsApplication).getJaxWsRsApplication(),is(module.getJaxWsRsApplication())); } @Test public void testWithProviders() { assertThat(unchanged.withProviders(this.providers).getProviders(),is(module.getProviders())); } @Test public void testWithContext() { assertThat(unchanged.withContext(this.context).getContext(),is(module.getContext())); } @Test public void testWithSpringConfigurationClasses() { assertThat(unchanged.withSpringConfigurationClasses(this.springConfigurationClasses).getSpringConfigurationClasses(),is(module.getSpringConfigurationClasses())); } @Test public void testGetServerProperties() { Assert.assertEquals(1, module.getServerProperties().get(SERVER_PROPERTIES_KEY)); } @Test public void testGetServerPropertiesResetAll() { Assert.assertThat(module.withResetAll(true).getServerProperties(), is(serverProperties)); } }