package com.bagri.rest.service; import static com.bagri.rest.RestConstants.bg_cookie; import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Application; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.Response; import javax.xml.xquery.XQItemType; import org.glassfish.jersey.client.ChunkedInput; import org.glassfish.jersey.test.JerseyTest; import org.junit.Test; import com.bagri.client.hazelcast.impl.FixedCursorImpl; import com.bagri.core.api.QueryManagement; import com.bagri.core.api.SchemaRepository; import com.bagri.core.xquery.api.XQProcessor; import com.bagri.rest.BagriRestServer; import com.bagri.rest.RepositoryProvider; import com.bagri.xqj.BagriXQDataFactory; import com.bagri.xquery.saxon.XQProcessorClient; public class QueryServiceTest extends JerseyTest { private QueryManagement queryMgr; private SchemaRepository mockRepo; private RepositoryProvider mockPro; private String q1 = "for $doc in fn:collection(\"CLN_Security\")\n" + "return $doc"; private String q2 = "declare namespace s=\"http://tpox-benchmark.com/security\";\n" + "declare variable $sym external;\n" + "for $doc in fn:collection(\"CLN_Security\")\n" + "where $sec/s:Symbol=$sym\n" + "return $doc"; @Override protected Application configure() { queryMgr = mock(QueryManagement.class); mockRepo = mock(SchemaRepository.class); mockPro = mock(RepositoryProvider.class); when(mockPro.getRepository("client-id")).thenReturn(mockRepo); when(mockRepo.getQueryManagement()).thenReturn(queryMgr); BagriRestServer server = new BagriRestServer(mockPro, null, new Properties()); return server.buildConfig(); } @Test //@Ignore @SuppressWarnings("unchecked") public void testQueryService() throws Exception { List response1 = new ArrayList<>(); XQProcessor proc = new XQProcessorClient(); BagriXQDataFactory xqFactory = new BagriXQDataFactory(); xqFactory.setProcessor(proc); XQItemType sType = xqFactory.createAtomicType(XQItemType.XQBASETYPE_STRING); response1.add(xqFactory.createItemFromAtomicValue("<response>constructed from security1500.xml</response>", sType)); response1.add(xqFactory.createItemFromAtomicValue("<response>constructed from security5621.xml</response>", sType)); response1.add(xqFactory.createItemFromAtomicValue("<response>constructed from security9012.xml</response>", sType)); when(queryMgr.executeQuery(q1, null, null)).thenReturn(new FixedCursorImpl(response1)); QueryParams params = new QueryParams(q1, null, null); Response response = target("query").request() .header("Content-Type", "application/json") .cookie(bg_cookie, "client-id") .post(Entity.json(params)); ChunkedInput<String> input = response.readEntity(new GenericType<ChunkedInput<String>>() {}); input.setParser(ChunkedInput.createParser(QueryService.splitter)); String chunk; Collection<String> results = new ArrayList<>(); while ((chunk = input.read()) != null) { //System.out.println(chunk); results.add(chunk); } input.close(); //System.out.println(results); assertEquals(3, results.size()); assertTrue(results.contains("<response>constructed from security1500.xml</response>")); assertTrue(results.contains("<response>constructed from security5621.xml</response>")); assertTrue(results.contains("<response>constructed from security9012.xml</response>")); } @Test @SuppressWarnings("unchecked") public void testQueryURIService() throws Exception { // Collection<String> response1 = new ArrayList<>(); response1.add("security1500.xml"); response1.add("security5621.xml"); response1.add("security9012.xml"); when(queryMgr.getDocumentUris(q1, null, null)).thenReturn(response1); QueryParams params = new QueryParams(q1, null, null); Collection<String> uris = target("query/uris").request() .header("Content-Type", "application/json") .cookie(bg_cookie, "client-id") .post(Entity.json(params), Collection.class); assertEquals(3, uris.size()); assertTrue(uris.contains("security1500.xml")); assertTrue(uris.contains("security5621.xml")); assertTrue(uris.contains("security9012.xml")); Map<String, Object> params2 = new HashMap<>(); params2.put("sym", "IBM"); Collection<String> response2 = new ArrayList<>(); response2.add("security5621.xml"); when(queryMgr.getDocumentUris(q2, params2, null)).thenReturn(response2); params = new QueryParams(q2, params2, null); uris = target("query/uris").request() .header("Content-Type", "application/json") .cookie(bg_cookie, "client-id") .post(Entity.json(params), Collection.class); assertEquals(1, uris.size()); assertTrue(uris.contains("security5621.xml")); } }