//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.core.web.servlets; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static uk.gov.dstl.baleen.core.web.servlets.AbstractComponentApiServlet.excludeByClass; import static uk.gov.dstl.baleen.core.web.servlets.AbstractComponentApiServlet.excludeByPackage; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import org.junit.Ignore; import org.junit.Test; import uk.gov.dstl.baleen.exceptions.InvalidParameterException; import uk.gov.dstl.baleen.testing.DummyAnnotator3; import uk.gov.dstl.baleen.testing.DummyResourceAnnotator; public class AbstractComponentApiServletTest { @Test public void testExcludeByPackage() { List<String> excludePackages = Arrays.asList("uk\\.gov\\.dstl\\.baleen\\.test", ".*\\.helpers"); assertTrue(excludeByPackage("uk.gov.dstl.baleen.test", excludePackages)); assertTrue(excludeByPackage("uk.gov.dstl.baleen.helpers", excludePackages)); assertTrue(excludeByPackage("uk.gov.dstl.helpers", excludePackages)); assertFalse(excludeByPackage("uk.gov.dstl.test", excludePackages)); } @Test public void testExcludeByClass() { List<Class<?>> excludeClasses = Arrays.asList(Number.class, String.class); assertTrue(excludeByClass(Number.class, excludeClasses)); assertTrue(excludeByClass(Integer.class, excludeClasses)); assertTrue(excludeByClass("Hello".getClass(), excludeClasses)); assertFalse(excludeByClass(Boolean.class, excludeClasses)); } @Test @Ignore //Works locally, but not building on Jenkins? public void testComponents() throws Exception { List<String> excludeClass = new ArrayList<>(); excludeClass.add("uk.gov.dstl.baleen.exceptions.InvalidParameterException"); excludeClass.add("my.nonexistent.JavaClass"); List<String> excludePackage = new ArrayList<>(); excludePackage.add("java\\.util\\..*"); AbstractComponentApiServlet servlet = new AbstractComponentApiServlet("java.lang.Exception", "uk.gov.dstl.baleen.exceptions", excludeClass, excludePackage, this.getClass()); String list = servlet.getComponents().get(); assertNotNull(list); assertTrue(list.contains("- BaleenException")); assertFalse(list.contains("EmptyStackException")); //Excluded via package (java.util) exclusion assertFalse(list.contains("InvalidParameterException")); //Explicitly excluded assertNotNull(servlet.getComponents().get()); } @Test public void testClassFromString() throws Exception { AbstractComponentApiServlet servlet = new AbstractComponentApiServlet("java.util.List", "java.util", Collections.emptyList(), Collections.emptyList(), this.getClass()); Class<?> al = servlet.getClassFromString("ArrayList", "java.util"); assertEquals(ArrayList.class.getName(), al.getName()); Class<?> al2 = servlet.getClassFromString("java.util.ArrayList", "foo.bar"); assertEquals(ArrayList.class.getName(), al2.getName()); try { servlet.getClassFromString("ArrayList", "java.util.foo"); fail("Expected exception not thrown"); } catch (InvalidParameterException ipe) { // Do nothing } } @Test public void testGetParameters() throws Exception { List<Map<String, Object>> ret = AbstractComponentApiServlet.getParameters(DummyAnnotator3.class); assertNotNull(ret); assertEquals(3, ret.size()); } @Test public void testGetResources() throws Exception { List<Map<String, Object>> ret = AbstractComponentApiServlet.getParameters(DummyResourceAnnotator.class); assertNotNull(ret); assertEquals(1, ret.size()); } @Test public void testStringArrayToString() { Object o1 = AbstractComponentApiServlet.stringArrayToString(new String[] { "Hello" }); assertEquals("Hello", o1); Object o2 = AbstractComponentApiServlet.stringArrayToString(new String[] { "Hello", "World" }); assertEquals(2, ((String[]) o2).length); assertEquals("Hello", ((String[]) o2)[0]); assertEquals("World", ((String[]) o2)[1]); Object o3 = AbstractComponentApiServlet.stringArrayToString(new String[] {}); assertEquals(0, ((String[]) o3).length); } }