http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java index ef8c1aa..d9b7679 100644 --- a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java +++ b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java @@ -33,10 +33,7 @@ import java.util.*; import javax.ws.rs.NotFoundException; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.GenericType; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import javax.ws.rs.core.*; import org.apache.lens.api.APIResult; import org.apache.lens.api.LensConf; @@ -77,16 +74,11 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; -import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.media.multipart.FormDataBodyPart; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataMultiPart; -import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.test.TestProperties; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; +import org.testng.annotations.*; import com.codahale.metrics.MetricRegistry; import com.google.common.base.Optional; @@ -130,7 +122,7 @@ public class TestQueryService extends LensJerseyTest { super.setUp(); queryService = LensServices.get().getService(QueryExecutionService.NAME); metricsSvc = LensServices.get().getService(MetricsService.NAME); - Map<String, String> sessionconf = new HashMap<String, String>(); + Map<String, String> sessionconf = new HashMap<>(); sessionconf.put("test.session.key", "svalue"); lensSessionId = queryService.openSession("foo@localhost", "bar", sessionconf); // @localhost should be removed // automatically @@ -167,17 +159,6 @@ public class TestQueryService extends LensJerseyTest { return new QueryServiceTestApp(); } - /* - * (non-Javadoc) - * - * @see org.glassfish.jersey.test.JerseyTest#configureClient(org.glassfish.jersey.client.ClientConfig) - */ - @Override - protected void configureClient(ClientConfig config) { - config.register(MultiPartFeature.class); - config.register(LensJAXBContextResolver.class); - } - /** The test table. */ public static final String TEST_TABLE = "TEST_TABLE"; @@ -188,7 +169,7 @@ public class TestQueryService extends LensJerseyTest { * @throws InterruptedException the interrupted exception */ private void createTable(String tblName) throws InterruptedException { - LensServerTestUtil.createTable(tblName, target(), lensSessionId); + LensServerTestUtil.createTable(tblName, target(), lensSessionId, defaultMT); } /** @@ -199,7 +180,7 @@ public class TestQueryService extends LensJerseyTest { * @throws InterruptedException the interrupted exception */ private void loadData(String tblName, final String testDataFile) throws InterruptedException { - LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId); + LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId, defaultMT); } /** @@ -209,19 +190,17 @@ public class TestQueryService extends LensJerseyTest { * @throws InterruptedException the interrupted exception */ private void dropTable(String tblName) throws InterruptedException { - LensServerTestUtil.dropTable(tblName, target(), lensSessionId); + LensServerTestUtil.dropTable(tblName, target(), lensSessionId, defaultMT); } - // test get a random query, should return 400 - /** - * Test get random query. + * Test get random query. should return 400 */ - @Test - public void testGetRandomQuery() { + @Test(dataProvider = "mediaTypeData") + public void testGetRandomQuery(MediaType mt) { final WebTarget target = target().path("queryapi/queries"); - Response rs = target.path("random").queryParam("sessionid", lensSessionId).request().get(); + Response rs = target.path("random").queryParam("sessionid", lensSessionId).request(mt).get(); assertEquals(rs.getStatus(), 400); } @@ -229,7 +208,7 @@ public class TestQueryService extends LensJerseyTest { public void testLoadingMultipleDrivers() { Collection<LensDriver> drivers = queryService.getDrivers(); assertEquals(drivers.size(), 4); - Set<String> driverNames = new HashSet<String>(drivers.size()); + Set<String> driverNames = new HashSet<>(drivers.size()); for (LensDriver driver : drivers) { assertEquals(driver.getConf().get("lens.driver.test.drivername"), driver.getFullyQualifiedName()); driverNames.add(driver.getFullyQualifiedName()); @@ -242,19 +221,17 @@ public class TestQueryService extends LensJerseyTest { * * @throws InterruptedException the interrupted exception */ - @Test - public void testRewriteFailureInExecute() throws InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testRewriteFailureInExecute(MediaType mt) throws InterruptedException { final WebTarget target = target().path("queryapi/queries"); LensConf conf = new LensConf(); final FormDataMultiPart mp = new FormDataMultiPart(); - mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, mt)); mp.bodyPart( new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from non_exist_table")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); - mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - final Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); + mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, mt)); + final Response response = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); assertEquals(response.getStatus(), BAD_REQUEST.getStatusCode()); } @@ -263,10 +240,10 @@ public class TestQueryService extends LensJerseyTest { * * @throws InterruptedException the interrupted exception */ - @Test - public void testLaunchFail() throws InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testLaunchFail(MediaType mt) throws InterruptedException { LensQuery lensQuery = executeAndWaitForQueryToFinish(target(), lensSessionId, "select fail from non_exist", - Optional.<LensConf>absent(), Optional.of(Status.FAILED)); + Optional.<LensConf>absent(), Optional.of(Status.FAILED), mt); assertTrue(lensQuery.getSubmissionTime() > 0); assertEquals(lensQuery.getLaunchTime(), 0); assertEquals(lensQuery.getDriverStartTime(), 0); @@ -282,8 +259,8 @@ public class TestQueryService extends LensJerseyTest { * * @throws InterruptedException the interrupted exception */ - @Test - public void testQueriesAPI() throws InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testQueriesAPI(MediaType mt) throws InterruptedException { // test post execute op final WebTarget target = target().path("queryapi/queries"); @@ -292,7 +269,7 @@ public class TestQueryService extends LensJerseyTest { long finishedQueries = metricsSvc.getFinishedQueries(); QueryHandle handle = executeAndGetHandle(target(), Optional.of(lensSessionId), Optional.of("select ID from " - + TEST_TABLE), Optional.<LensConf>absent()); + + TEST_TABLE), Optional.<LensConf>absent(), mt); // Get all queries // XML @@ -300,7 +277,7 @@ public class TestQueryService extends LensJerseyTest { .get(new GenericType<List<QueryHandle>>() {}); assertTrue(allQueriesXML.size() >= 1); - List<QueryHandle> allQueries = target.queryParam("sessionid", lensSessionId).request() + List<QueryHandle> allQueries = target.queryParam("sessionid", lensSessionId).request(mt) .get(new GenericType<List<QueryHandle>>() {}); assertTrue(allQueries.size() >= 1); assertTrue(allQueries.contains(handle)); @@ -309,17 +286,17 @@ public class TestQueryService extends LensJerseyTest { .request(MediaType.APPLICATION_XML).get(String.class); log.debug("query XML:{}", queryXML); - Response response = target.path(handle.toString() + "001").queryParam("sessionid", lensSessionId).request().get(); + Response response = target.path(handle.toString() + "001").queryParam("sessionid", lensSessionId).request(mt).get(); assertEquals(response.getStatus(), 404); - LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request() + LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt) .get(LensQuery.class); // wait till the query finishes QueryStatus stat = ctx.getStatus(); while (!stat.finished()) { Thread.sleep(1000); - ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class); + ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensQuery.class); stat = ctx.getStatus(); /* Commented due to same issue as: https://issues.apache.org/jira/browse/LENS-683 @@ -343,10 +320,10 @@ public class TestQueryService extends LensJerseyTest { LensConf conf = new LensConf(); conf.addProperty("my.property", "myvalue"); confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - APIResult updateConf = target.path(handle.toString()).request() + mt)); + APIResult updateConf = target.path(handle.toString()).request(mt) .put(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class); assertEquals(updateConf.getStatus(), APIResult.Status.FAILED); } @@ -358,19 +335,19 @@ public class TestQueryService extends LensJerseyTest { * * @throws InterruptedException the interrupted exception */ - @Test - public void testExplainQuery() throws InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testExplainQuery(MediaType mt) throws InterruptedException { final WebTarget target = target().path("queryapi/queries"); final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - final QueryPlan plan = target.request() + final QueryPlan plan = target.request(mt) .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryPlan>>() {}).getData(); assertEquals(plan.getTablesQueried().size(), 1); @@ -382,14 +359,14 @@ public class TestQueryService extends LensJerseyTest { final FormDataMultiPart mp2 = new FormDataMultiPart(); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE)); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain_and_prepare")); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - final QueryPlan plan2 = ptarget.request().post(Entity.entity(mp2, MediaType.MULTIPART_FORM_DATA_TYPE), + final QueryPlan plan2 = ptarget.request(mt).post(Entity.entity(mp2, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryPlan>>() {}).getData(); assertEquals(plan2.getTablesQueried().size(), 1); assertTrue(plan2.getTablesQueried().get(0).endsWith(TEST_TABLE.toLowerCase())); @@ -404,20 +381,20 @@ public class TestQueryService extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws UnsupportedEncodingException */ - @Test - public void testExplainFailure() throws InterruptedException, UnsupportedEncodingException { + @Test(dataProvider = "mediaTypeData") + public void testExplainFailure(MediaType mt) throws InterruptedException, UnsupportedEncodingException { final WebTarget target = target().path("queryapi/queries"); final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select NO_ID from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - final Response responseExplain = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); + final Response responseExplain = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); assertEquals(responseExplain.getStatus(), BAD_REQUEST.getStatusCode()); @@ -426,14 +403,14 @@ public class TestQueryService extends LensJerseyTest { final FormDataMultiPart mp2 = new FormDataMultiPart(); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select NO_ID from " + TEST_TABLE)); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain_and_prepare")); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - final Response responseExplainAndPrepare = target.request().post( + final Response responseExplainAndPrepare = ptarget.request(mt).post( Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); assertEquals(responseExplainAndPrepare.getStatus(), BAD_REQUEST.getStatusCode()); @@ -445,19 +422,18 @@ public class TestQueryService extends LensJerseyTest { * @throws IOException Signals that an I/O exception has occurred. * @throws InterruptedException the interrupted exception */ - @Test - public void testHiveSemanticFailure() throws InterruptedException, IOException { + @Test(dataProvider = "mediaTypeData") + public void testHiveSemanticFailure(MediaType mt) throws InterruptedException, IOException { final WebTarget target = target().path("queryapi/queries"); - final FormDataMultiPart mp = new FormDataMultiPart(); - mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), " select ID from NOT_EXISTS")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); + Response response = target.request(mt).post(Entity.entity(mp, MediaType + .MULTIPART_FORM_DATA_TYPE)); LensAPIResult result = response.readEntity(LensAPIResult.class); List<LensErrorTO> childErrors = result.getLensErrorTO().getChildErrors(); boolean hiveSemanticErrorExists = false; @@ -482,31 +458,31 @@ public class TestQueryService extends LensJerseyTest { * * @throws InterruptedException the interrupted exception */ - @Test - public void testPrepareQuery() throws InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testPrepareQuery(MediaType mt) throws InterruptedException { final WebTarget target = target().path("queryapi/preparedqueries"); final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "prepare")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("queryName").build(), "testQuery1")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - final QueryPrepareHandle pHandle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), + final QueryPrepareHandle pHandle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryPrepareHandle>>() {}).getData(); // Get all prepared queries - List<QueryPrepareHandle> allQueries = (List<QueryPrepareHandle>) target.queryParam("sessionid", lensSessionId) - .queryParam("queryName", "testQuery1").request().get(new GenericType<List<QueryPrepareHandle>>() { + List<QueryPrepareHandle> allQueries = target.queryParam("sessionid", lensSessionId) + .queryParam("queryName", "testQuery1").request(mt).get(new GenericType<List<QueryPrepareHandle>>() { }); assertTrue(allQueries.size() >= 1); assertTrue(allQueries.contains(pHandle)); - LensPreparedQuery ctx = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request() + LensPreparedQuery ctx = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request(mt) .get(LensPreparedQuery.class); assertTrue(ctx.getUserQuery().equalsIgnoreCase("select ID from " + TEST_TABLE)); assertTrue(ctx.getDriverQuery().equalsIgnoreCase("select ID from " + TEST_TABLE)); @@ -519,39 +495,40 @@ public class TestQueryService extends LensJerseyTest { LensConf conf = new LensConf(); conf.addProperty("my.property", "myvalue"); confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - APIResult updateConf = target.path(pHandle.toString()).request() + mt)); + APIResult updateConf = target.path(pHandle.toString()).request(mt) .put(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class); assertEquals(updateConf.getStatus(), APIResult.Status.SUCCEEDED); - ctx = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request().get(LensPreparedQuery.class); + ctx = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensPreparedQuery + .class); assertEquals(ctx.getConf().getProperties().get("my.property"), "myvalue"); - QueryHandle handle1 = target.path(pHandle.toString()).request() + QueryHandle handle1 = target.path(pHandle.toString()).request(mt) .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), QueryHandle.class); // Override query name confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("queryName").build(), "testQueryName2")); // do post once again - QueryHandle handle2 = target.path(pHandle.toString()).request() + QueryHandle handle2 = target.path(pHandle.toString()).request(mt) .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), QueryHandle.class); assertNotEquals(handle1, handle2); - LensQuery ctx1 = waitForQueryToFinish(target(), lensSessionId, handle1, Status.SUCCESSFUL); + LensQuery ctx1 = waitForQueryToFinish(target(), lensSessionId, handle1, Status.SUCCESSFUL, mt); assertEquals(ctx1.getQueryName().toLowerCase(), "testquery1"); - LensQuery ctx2 = waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL); + LensQuery ctx2 = waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL, mt); assertEquals(ctx2.getQueryName().toLowerCase(), "testqueryname2"); // destroy prepared - APIResult result = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request() + APIResult result = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request(mt) .delete(APIResult.class); assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED); // Post on destroyed query - Response response = target.path(pHandle.toString()).request() + Response response = target.path(pHandle.toString()).request(mt) .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), Response.class); assertEquals(response.getStatus(), 404); } @@ -561,19 +538,19 @@ public class TestQueryService extends LensJerseyTest { * * @throws InterruptedException the interrupted exception */ - @Test - public void testExplainAndPrepareQuery() throws InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testExplainAndPrepareQuery(MediaType mt) throws InterruptedException { final WebTarget target = target().path("queryapi/preparedqueries"); final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain_and_prepare")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - final QueryPlan plan = target.request() + final QueryPlan plan = target.request(mt) .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryPlan>>() {}).getData(); @@ -582,7 +559,7 @@ public class TestQueryService extends LensJerseyTest { assertNotNull(plan.getPrepareHandle()); LensPreparedQuery ctx = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId) - .request().get(LensPreparedQuery.class); + .request(mt).get(LensPreparedQuery.class); assertTrue(ctx.getUserQuery().equalsIgnoreCase("select ID from " + TEST_TABLE)); assertTrue(ctx.getDriverQuery().equalsIgnoreCase("select ID from " + TEST_TABLE)); //both drivers hive/hive1 and hive/hive2 are capable of handling the query as they point to the same hive server @@ -594,35 +571,35 @@ public class TestQueryService extends LensJerseyTest { LensConf conf = new LensConf(); conf.addProperty("my.property", "myvalue"); confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - APIResult updateConf = target.path(plan.getPrepareHandle().toString()).request() + mt)); + APIResult updateConf = target.path(plan.getPrepareHandle().toString()).request(mt) .put(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class); assertEquals(updateConf.getStatus(), APIResult.Status.SUCCEEDED); - ctx = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId).request() + ctx = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId).request(mt) .get(LensPreparedQuery.class); assertEquals(ctx.getConf().getProperties().get("my.property"), "myvalue"); - QueryHandle handle1 = target.path(plan.getPrepareHandle().toString()).request() + QueryHandle handle1 = target.path(plan.getPrepareHandle().toString()).request(mt) .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), QueryHandle.class); // do post once again - QueryHandle handle2 = target.path(plan.getPrepareHandle().toString()).request() + QueryHandle handle2 = target.path(plan.getPrepareHandle().toString()).request(mt) .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), QueryHandle.class); assertNotEquals(handle1, handle2); - waitForQueryToFinish(target(), lensSessionId, handle1, Status.SUCCESSFUL); - waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL); + waitForQueryToFinish(target(), lensSessionId, handle1, Status.SUCCESSFUL, mt); + waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL, mt); // destroy prepared - APIResult result = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId).request() - .delete(APIResult.class); + APIResult result = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId) + .request(mt).delete(APIResult.class); assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED); // Post on destroyed query - Response response = target.path(plan.getPrepareHandle().toString()).request() + Response response = target.path(plan.getPrepareHandle().toString()).request(mt) .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), Response.class); assertEquals(response.getStatus(), 404); @@ -637,8 +614,8 @@ public class TestQueryService extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws IOException Signals that an I/O exception has occurred. */ - @Test - public void testExecuteAsync() throws InterruptedException, IOException, LensException { + @Test(dataProvider = "mediaTypeData") + public void testExecuteAsync(MediaType mt) throws InterruptedException, IOException, LensException { // test post execute op final WebTarget target = target().path("queryapi/queries"); @@ -647,19 +624,19 @@ public class TestQueryService extends LensJerseyTest { final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); - final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), + mt)); + final QueryHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryHandle>>() {}).getData(); assertNotNull(handle); // Get query - LensQuery lensQuery = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request() + LensQuery lensQuery = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt) .get(LensQuery.class); assertTrue(lensQuery.getStatus().getStatus().equals(Status.QUEUED) || lensQuery.getStatus().getStatus().equals(Status.LAUNCHED) @@ -669,7 +646,8 @@ public class TestQueryService extends LensJerseyTest { // wait till the query finishes QueryStatus stat = lensQuery.getStatus(); while (!stat.finished()) { - lensQuery = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class); + lensQuery = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensQuery + .class); stat = lensQuery.getStatus(); /* Commented and jira ticket raised for correction: https://issues.apache.org/jira/browse/LENS-683 switch (stat.getStatus()) { @@ -694,17 +672,18 @@ public class TestQueryService extends LensJerseyTest { assertEquals(ctx.getPhase1RewrittenQuery(), ctx.getUserQuery()); //Since there is no rewriter in this test assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL); - validatePersistedResult(handle, target(), lensSessionId, new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}}, true); + validatePersistedResult(handle, target(), lensSessionId, new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}}, + true, mt); // test cancel query - final QueryHandle handle2 = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), + final QueryHandle handle2 = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryHandle>>() {}).getData(); assertNotNull(handle2); - APIResult result = target.path(handle2.toString()).queryParam("sessionid", lensSessionId).request() + APIResult result = target.path(handle2.toString()).queryParam("sessionid", lensSessionId).request(mt) .delete(APIResult.class); // cancel would fail query is already successful - LensQuery ctx2 = target.path(handle2.toString()).queryParam("sessionid", lensSessionId).request() + LensQuery ctx2 = target.path(handle2.toString()).queryParam("sessionid", lensSessionId).request(mt) .get(LensQuery.class); if (result.getStatus().equals(APIResult.Status.FAILED)) { assertEquals(ctx2.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, @@ -720,7 +699,7 @@ public class TestQueryService extends LensJerseyTest { log.info("Starting httpendpoint test"); final FormDataMultiPart mp3 = new FormDataMultiPart(); mp3.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp3.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from " + TEST_TABLE)); mp3.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); @@ -728,12 +707,12 @@ public class TestQueryService extends LensJerseyTest { conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); mp3.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - final QueryHandle handle3 = target.request().post(Entity.entity(mp3, MediaType.MULTIPART_FORM_DATA_TYPE), + mt)); + final QueryHandle handle3 = target.request(mt).post(Entity.entity(mp3, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryHandle>>() {}).getData(); // Get query - waitForQueryToFinish(target(), lensSessionId, handle3, Status.SUCCESSFUL); + waitForQueryToFinish(target(), lensSessionId, handle3, Status.SUCCESSFUL, mt); validateHttpEndPoint(target(), null, handle3, null); } @@ -747,19 +726,19 @@ public class TestQueryService extends LensJerseyTest { * @throws IOException Signals that an I/O exception has occurred. */ static void validatePersistedResult(QueryHandle handle, WebTarget parent, LensSessionHandle lensSessionId, - String[][] schema, boolean isDir) throws IOException { + String[][] schema, boolean isDir, MediaType mt) throws IOException { final WebTarget target = parent.path("queryapi/queries"); // fetch results validateResultSetMetadata(handle, "", schema, - parent, lensSessionId); + parent, lensSessionId, mt); String presultset = target.path(handle.toString()).path("resultset").queryParam("sessionid", lensSessionId) - .request().get(String.class); + .request(mt).get(String.class); System.out.println("PERSISTED RESULT:" + presultset); PersistentQueryResult resultset = target.path(handle.toString()).path("resultset") - .queryParam("sessionid", lensSessionId).request().get(PersistentQueryResult.class); + .queryParam("sessionid", lensSessionId).request(mt).get(PersistentQueryResult.class); validatePersistentResult(resultset, handle, isDir); if (isDir) { @@ -781,7 +760,7 @@ public class TestQueryService extends LensJerseyTest { assertTrue(resultset.getPersistedURI().contains(handle.toString())); Path actualPath = new Path(resultset.getPersistedURI()); FileSystem fs = actualPath.getFileSystem(new Configuration()); - List<String> actualRows = new ArrayList<String>(); + List<String> actualRows = new ArrayList<>(); if (fs.getFileStatus(actualPath).isDir()) { assertTrue(isDir); for (FileStatus fstat : fs.listStatus(actualPath)) { @@ -832,7 +811,7 @@ public class TestQueryService extends LensJerseyTest { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(in)); - String line = ""; + String line; while ((line = br.readLine()) != null) { actualRows.add(line); @@ -951,8 +930,8 @@ public class TestQueryService extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws IOException Signals that an I/O exception has occurred. */ - @Test - public void testExecuteAsyncInMemoryResult() throws InterruptedException, IOException { + @Test(dataProvider = "mediaTypeData") + public void testExecuteAsyncInMemoryResult(MediaType mt) throws InterruptedException, IOException { // test post execute op final WebTarget target = target().path("queryapi/queries"); @@ -960,28 +939,26 @@ public class TestQueryService extends LensJerseyTest { LensConf conf = new LensConf(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), + mt)); + final QueryHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryHandle>>() {}).getData(); assertNotNull(handle); // Get query - waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL); + waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL, mt); // fetch results validateResultSetMetadata(handle, "", new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}}, - target(), lensSessionId); + target(), lensSessionId, mt); - InMemoryQueryResult resultset = target.path(handle.toString()).path("resultset") - .queryParam("sessionid", lensSessionId).request().get(InMemoryQueryResult.class); - validateInmemoryResult(resultset); + validateInmemoryResult(target, handle, mt); validNotFoundForHttpResult(target(), lensSessionId, handle); waitForPurge(0, queryService.finishedQueries); @@ -1004,12 +981,12 @@ public class TestQueryService extends LensJerseyTest { conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false"); conf.addProperty(LensConfConstants.QUERY_MAIL_NOTIFY, "false"); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + defaultMT)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); + defaultMT)); final QueryHandle handle = target @@ -1019,7 +996,7 @@ public class TestQueryService extends LensJerseyTest { }).getData(); assertNotNull(handle); - waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL); + waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL, defaultMT); // Check TTL QueryContext ctx = queryService.getQueryContext(lensSessionId, handle); @@ -1048,8 +1025,8 @@ public class TestQueryService extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws IOException Signals that an I/O exception has occurred. */ - @Test - public void testExecuteAsyncTempTable() throws InterruptedException, IOException { + @Test(dataProvider = "mediaTypeData") + public void testExecuteAsyncTempTable(MediaType mt) throws InterruptedException, IOException { // test post execute op final WebTarget target = target().path("queryapi/queries"); @@ -1057,61 +1034,59 @@ public class TestQueryService extends LensJerseyTest { LensConf conf = new LensConf(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); drop.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); drop.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "drop table if exists temp_output")); drop.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); drop.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - final QueryHandle dropHandle = target.request().post(Entity.entity(drop, MediaType.MULTIPART_FORM_DATA_TYPE), + mt)); + final QueryHandle dropHandle = target.request(mt).post(Entity.entity(drop, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryHandle>>() {}).getData(); assertNotNull(dropHandle); // Get query - waitForQueryToFinish(target(), lensSessionId, dropHandle, Status.SUCCESSFUL); + waitForQueryToFinish(target(), lensSessionId, dropHandle, Status.SUCCESSFUL, mt); final FormDataMultiPart mp = new FormDataMultiPart(); conf = new LensConf(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "create table temp_output as select ID, IDSTR from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), + mt)); + final QueryHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryHandle>>() {}).getData(); assertNotNull(handle); // Get query - waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL); + waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL, mt); String select = "SELECT * FROM temp_output"; final FormDataMultiPart fetch = new FormDataMultiPart(); fetch.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); fetch.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), select)); fetch.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); fetch.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - final QueryHandle handle2 = target.request().post(Entity.entity(fetch, MediaType.MULTIPART_FORM_DATA_TYPE), + mt)); + final QueryHandle handle2 = target.request(mt).post(Entity.entity(fetch, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryHandle>>() {}).getData(); assertNotNull(handle2); // Get query - waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL); + waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL, mt); // fetch results validateResultSetMetadata(handle2, "temp_output.", new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}}, - target(), lensSessionId); + target(), lensSessionId, mt); - InMemoryQueryResult resultset = target.path(handle2.toString()).path("resultset") - .queryParam("sessionid", lensSessionId).request().get(InMemoryQueryResult.class); - validateInmemoryResult(resultset); + validateInmemoryResult(target, handle2, mt); } /** @@ -1121,10 +1096,11 @@ public class TestQueryService extends LensJerseyTest { * @param parent the parent * @param lensSessionId the lens session id */ - static void validateResultSetMetadata(QueryHandle handle, WebTarget parent, LensSessionHandle lensSessionId) { + static void validateResultSetMetadata(QueryHandle handle, WebTarget parent, LensSessionHandle lensSessionId, + MediaType mt) { validateResultSetMetadata(handle, "", new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}, {"IDARR", "ARRAY"}, {"IDSTRARR", "ARRAY"}}, - parent, lensSessionId); + parent, lensSessionId, mt); } /** @@ -1136,11 +1112,11 @@ public class TestQueryService extends LensJerseyTest { * @param lensSessionId the lens session id */ static void validateResultSetMetadata(QueryHandle handle, String outputTablePfx, String[][] columns, WebTarget parent, - LensSessionHandle lensSessionId) { + LensSessionHandle lensSessionId, MediaType mt) { final WebTarget target = parent.path("queryapi/queries"); QueryResultSetMetadata metadata = target.path(handle.toString()).path("resultsetmetadata") - .queryParam("sessionid", lensSessionId).request().get(QueryResultSetMetadata.class); + .queryParam("sessionid", lensSessionId).request(mt).get(QueryResultSetMetadata.class); assertEquals(metadata.getColumns().size(), columns.length); for (int i = 0; i < columns.length; i++) { assertTrue( @@ -1150,6 +1126,28 @@ public class TestQueryService extends LensJerseyTest { assertEquals(columns[i][1].toLowerCase(), metadata.getColumns().get(i).getType().name().toLowerCase()); } } + private void validateInmemoryResult(WebTarget target, QueryHandle handle, MediaType mt) throws IOException { + if (mt.equals(MediaType.APPLICATION_JSON_TYPE)) { + String resultSet = target.path(handle.toString()).path("resultset") + .queryParam("sessionid", lensSessionId).request(mt).get(String.class); + // this is being done because json unmarshalling does not work to construct java Objects back + assertEquals(resultSet.replaceAll("\\W", ""), expectedJsonResult().replaceAll("\\W", "")); + } else { + InMemoryQueryResult resultSet = target.path(handle.toString()).path("resultset") + .queryParam("sessionid", lensSessionId).request(mt).get(InMemoryQueryResult.class); + validateInmemoryResult(resultSet); + } + } + private String expectedJsonResult() { + StringBuilder expectedJson = new StringBuilder(); + expectedJson.append("{\"inMemoryQueryResult\" : {\"rows\" : [ ") + .append("{\"values\" : [ {\n\"type\" : \"int\",\n\"value\" : 1}, {\"type\" : \"string\",\"value\" : \"one\"} ]},") + .append("{\"values\" : [ null, {\"type\" : \"string\",\"value\" : \"two\"} ]},") + .append("{\"values\" : [ {\"type\" : \"int\",\"value\" : 3}, null ]},") + .append("{\"values\" : [ null, null ]},") + .append("{\"values\" : [ {\"type\" : \"int\",\"value\" : 5}, {\"type\" : \"string\",\"value\" : \"\"} ]} ]}}"); + return expectedJson.toString(); + } /** * Validate inmemory result. @@ -1182,22 +1180,22 @@ public class TestQueryService extends LensJerseyTest { * @throws IOException Signals that an I/O exception has occurred. * @throws InterruptedException the interrupted exception */ - @Test - public void testExecuteWithTimeoutQuery() throws IOException, InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testExecuteWithTimeoutQuery(MediaType mt) throws IOException, InterruptedException { final WebTarget target = target().path("queryapi/queries"); final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute_with_timeout")); // set a timeout value enough for tests mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("timeoutmillis").build(), "300000")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - QueryHandleWithResultSet result = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), + QueryHandleWithResultSet result = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryHandleWithResultSet>>() {}).getData(); assertNotNull(result.getQueryHandle()); assertNotNull(result.getResult()); @@ -1207,43 +1205,55 @@ public class TestQueryService extends LensJerseyTest { LensConf conf = new LensConf(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from " + TEST_TABLE)); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute_with_timeout")); // set a timeout value enough for tests mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("timeoutmillis").build(), "300000")); mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); + mt)); - result = target.request().post(Entity.entity(mp2, MediaType.MULTIPART_FORM_DATA_TYPE), - new GenericType<LensAPIResult<QueryHandleWithResultSet>>() {}).getData(); - assertNotNull(result.getQueryHandle()); - assertNotNull(result.getResult()); - validateInmemoryResult((InMemoryQueryResult) result.getResult()); + validateInmemoryResultForTimeoutQuery(target, mp2, mt); } + private void validateInmemoryResultForTimeoutQuery(WebTarget target, FormDataMultiPart mp, MediaType mt) { + if (mt.equals(MediaType.APPLICATION_JSON_TYPE)) { + String result = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), String.class); + assertTrue(result.contains("\"type\" : \"queryHandleWithResultSet\"")); + assertTrue(result.contains("\"status\" : \"SUCCESSFUL\"")); + assertTrue(result.contains("\"isResultSetAvailable\" : true")); + assertTrue(result.replaceAll("\\W", "").contains(expectedJsonResult().replaceAll("\\W", ""))); + } else { + QueryHandleWithResultSet result = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), + new GenericType<LensAPIResult<QueryHandleWithResultSet>>() { + }).getData(); + assertNotNull(result.getQueryHandle()); + assertNotNull(result.getResult()); + validateInmemoryResult((InMemoryQueryResult) result.getResult()); + } + } /** * Test execute with timeout query. * * @throws IOException Signals that an I/O exception has occurred. * @throws InterruptedException the interrupted exception */ - @Test - public void testExecuteWithTimeoutFailingQuery() throws IOException, InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testExecuteWithTimeoutFailingQuery(MediaType mt) throws IOException, InterruptedException { final WebTarget target = target().path("queryapi/queries"); final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from nonexist")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute_with_timeout")); // set a timeout value enough for tests mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("timeoutmillis").build(), "300000")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); + Response response = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); assertEquals(response.getStatus(), BAD_REQUEST.getStatusCode()); } @@ -1281,7 +1291,7 @@ public class TestQueryService extends LensJerseyTest { final String query = "select ID from " + TEST_TABLE; QueryContext ctx = new QueryContext(query, null, queryConf, conf, queryService.getDrivers()); - Map<LensDriver, String> driverQueries = new HashMap<LensDriver, String>(); + Map<LensDriver, String> driverQueries = new HashMap<>(); for (LensDriver driver : queryService.getDrivers()) { driverQueries.put(driver, query); } @@ -1335,20 +1345,20 @@ public class TestQueryService extends LensJerseyTest { * * @throws InterruptedException the interrupted exception */ - @Test - public void testEstimateNativeQuery() throws InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testEstimateNativeQuery(MediaType mt) throws InterruptedException { final WebTarget target = target().path("queryapi/queries"); // estimate native query final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "estimate")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - final QueryCostTO result = target.request() + final QueryCostTO result = target.request(mt) .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryCostTO>>() {}).getData(); assertNotNull(result); @@ -1361,8 +1371,8 @@ public class TestQueryService extends LensJerseyTest { * Check if DB static jars get passed to Hive driver * @throws Exception */ - @Test - public void testHiveDriverGetsDBJars() throws Exception { + @Test(dataProvider = "mediaTypeData") + public void testHiveDriverGetsDBJars(MediaType mt) throws Exception { // Set DB to a db with static jars HiveSessionService sessionService = LensServices.get().getService(SessionService.NAME); @@ -1385,7 +1395,7 @@ public class TestQueryService extends LensJerseyTest { try { // First execute query on the session with db should load jars from DB LensServerTestUtil.createTable(tableInDBWithJars, target(), sessionHandle, "(ID INT, IDSTR STRING) " - + "ROW FORMAT SERDE \"DatabaseJarSerde\""); + + "ROW FORMAT SERDE \"DatabaseJarSerde\"", mt); boolean addedToHiveDriver = false; @@ -1404,7 +1414,7 @@ public class TestQueryService extends LensJerseyTest { log.info("@@@# database switch test"); session.setCurrentDatabase(DB_WITH_JARS_2); LensServerTestUtil.createTable(tableInDBWithJars + "_2", target(), sessionHandle, "(ID INT, IDSTR STRING) " - + "ROW FORMAT SERDE \"DatabaseJarSerde\""); + + "ROW FORMAT SERDE \"DatabaseJarSerde\"", mt); // All db jars should have been added assertTrue(session.getDBResources(DB_WITH_JARS_2).isEmpty()); @@ -1423,8 +1433,8 @@ public class TestQueryService extends LensJerseyTest { } finally { log.info("@@@ TEST_OVER"); try { - LensServerTestUtil.dropTable(tableInDBWithJars, target(), sessionHandle); - LensServerTestUtil.dropTable(tableInDBWithJars + "_2", target(), sessionHandle); + LensServerTestUtil.dropTable(tableInDBWithJars, target(), sessionHandle, mt); + LensServerTestUtil.dropTable(tableInDBWithJars + "_2", target(), sessionHandle, mt); } catch (Throwable th) { log.error("Exception while dropping table.", th); } @@ -1432,21 +1442,21 @@ public class TestQueryService extends LensJerseyTest { } } - @Test - public void testRewriteFailure() { + @Test(dataProvider = "mediaTypeData") + public void testRewriteFailure(MediaType mt) { final WebTarget target = target().path("queryapi/queries"); // estimate cube query which fails semantic analysis final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "cube sdfelect ID from cube_nonexist")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "estimate")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - final Response response = target.request() + final Response response = target.request(mt) .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); @@ -1480,36 +1490,37 @@ public class TestQueryService extends LensJerseyTest { } } - @Test - public void testNonSelectQueriesWithPersistResult() throws InterruptedException { + @Test(dataProvider = "mediaTypeData") + public void testNonSelectQueriesWithPersistResult(MediaType mt) throws InterruptedException { LensConf conf = new LensConf(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true"); String tblName = "testNonSelectQueriesWithPersistResult"; - LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf); + LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf, mt); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); - LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf); + LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf, mt); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); - LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf); + LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf, mt); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false"); - LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf); + LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf, mt); } - @Test - public void testEstimateGauges() { + @Test(dataProvider = "mediaTypeData") + public void testEstimateGauges(MediaType mt) { final WebTarget target = target().path("queryapi/queries"); LensConf conf = new LensConf(); - conf.addProperty(LensConfConstants.QUERY_METRIC_UNIQUE_ID_CONF_KEY, "TestQueryService-testEstimateGauges"); + String gaugeKey = "TestQueryService-testEstimateGauges" + mt.getSubtype(); + conf.addProperty(LensConfConstants.QUERY_METRIC_UNIQUE_ID_CONF_KEY, gaugeKey); // estimate native query final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "estimate")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); + mt)); - final QueryCostTO queryCostTO = target.request() + final QueryCostTO queryCostTO = target.request(mt) .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryCostTO>>() { }).getData(); @@ -1518,34 +1529,34 @@ public class TestQueryService extends LensJerseyTest { MetricRegistry reg = LensMetricsRegistry.getStaticRegistry(); assertTrue(reg.getGauges().keySet().containsAll(Arrays.asList( - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-DRIVER_SELECTION", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive1-CUBE_REWRITE", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive1-DRIVER_ESTIMATE", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive1-RewriteUtil-rewriteQuery", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive2-CUBE_REWRITE", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive2-DRIVER_ESTIMATE", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive2-RewriteUtil-rewriteQuery", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-jdbc/jdbc1-CUBE_REWRITE", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-jdbc/jdbc1-DRIVER_ESTIMATE", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-jdbc/jdbc1-RewriteUtil-rewriteQuery", - "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-PARALLEL_ESTIMATE")), + "lens.MethodMetricGauge." + gaugeKey + "-DRIVER_SELECTION", + "lens.MethodMetricGauge." + gaugeKey + "-hive/hive1-CUBE_REWRITE", + "lens.MethodMetricGauge." + gaugeKey + "-hive/hive1-DRIVER_ESTIMATE", + "lens.MethodMetricGauge." + gaugeKey + "-hive/hive1-RewriteUtil-rewriteQuery", + "lens.MethodMetricGauge." + gaugeKey + "-hive/hive2-CUBE_REWRITE", + "lens.MethodMetricGauge." + gaugeKey + "-hive/hive2-DRIVER_ESTIMATE", + "lens.MethodMetricGauge." + gaugeKey + "-hive/hive2-RewriteUtil-rewriteQuery", + "lens.MethodMetricGauge." + gaugeKey + "-jdbc/jdbc1-CUBE_REWRITE", + "lens.MethodMetricGauge." + gaugeKey + "-jdbc/jdbc1-DRIVER_ESTIMATE", + "lens.MethodMetricGauge." + gaugeKey + "-jdbc/jdbc1-RewriteUtil-rewriteQuery", + "lens.MethodMetricGauge." + gaugeKey + "-PARALLEL_ESTIMATE")), reg.getGauges().keySet().toString()); } - @Test - public void testQueryRejection() throws InterruptedException, IOException { + @Test(dataProvider = "mediaTypeData") + public void testQueryRejection(MediaType mt) throws InterruptedException, IOException { final WebTarget target = target().path("queryapi/queries"); final FormDataMultiPart mp = new FormDataMultiPart(); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "blah select ID from " + TEST_TABLE)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(), - MediaType.APPLICATION_XML_TYPE)); + mt)); - Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); + Response response = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE)); assertEquals(response.getStatus(), 400); } @@ -1555,29 +1566,29 @@ public class TestQueryService extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws IOException Signals that an I/O exception has occurred. */ - @Test - public void testQueryPurger() throws InterruptedException, IOException { + @Test(dataProvider = "mediaTypeData") + public void testQueryPurger(MediaType mt) throws InterruptedException, IOException { waitForPurge(); LensConf conf = getLensConf(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); // test post execute op LensQuery ctx1 = executeAndWaitForQueryToFinish(target(), lensSessionId, "select ID, IDSTR from " + TEST_TABLE, - Optional.of(conf), Optional.of(Status.SUCCESSFUL)); + Optional.of(conf), Optional.of(Status.SUCCESSFUL), mt); LensQuery ctx2 = executeAndWaitForQueryToFinish(target(), lensSessionId, "select ID, IDSTR from " + TEST_TABLE, - Optional.of(conf), Optional.of(Status.SUCCESSFUL)); + Optional.of(conf), Optional.of(Status.SUCCESSFUL), mt); LensQuery ctx3 = executeAndWaitForQueryToFinish(target(), lensSessionId, "select ID, IDSTR from " + TEST_TABLE, - Optional.of(conf), Optional.of(Status.SUCCESSFUL)); + Optional.of(conf), Optional.of(Status.SUCCESSFUL), mt); waitForPurge(3, queryService.finishedQueries); assertEquals(queryService.finishedQueries.size(), 3); - getLensQueryResult(target(), lensSessionId, ctx3.getQueryHandle()); + getLensQueryResultAsString(target(), lensSessionId, ctx3.getQueryHandle(), mt); waitForPurge(2, queryService.finishedQueries); assertTrue(queryService.finishedQueries.size() == 2); - getLensQueryResult(target(), lensSessionId, ctx2.getQueryHandle()); + getLensQueryResultAsString(target(), lensSessionId, ctx2.getQueryHandle(), mt); waitForPurge(1, queryService.finishedQueries); assertTrue(queryService.finishedQueries.size() == 1); - getLensQueryResult(target(), lensSessionId, ctx1.getQueryHandle()); + getLensQueryResultAsString(target(), lensSessionId, ctx1.getQueryHandle(), mt); } /** @@ -1585,19 +1596,19 @@ public class TestQueryService extends LensJerseyTest { * * @throws Exception */ - @Test - public void testSessionClose() throws Exception { + @Test(dataProvider = "mediaTypeData") + public void testSessionClose(MediaType mt) throws Exception { // Query with group by, will run long enough to close the session before finish String query = "select ID, IDSTR, count(*) from " + TEST_TABLE + " group by ID, IDSTR"; SessionService sessionService = LensServices.get().getService(HiveSessionService.NAME); - Map<String, String> sessionconf = new HashMap<String, String>(); + Map<String, String> sessionconf = new HashMap<>(); LensSessionHandle sessionHandle = sessionService.openSession("foo", "bar", "default", sessionconf); LensConf conf = getLensConf(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true"); QueryHandle qHandle = - executeAndGetHandle(target(), Optional.of(sessionHandle), Optional.of(query), Optional.of(conf)); + executeAndGetHandle(target(), Optional.of(sessionHandle), Optional.of(query), Optional.of(conf), mt); sessionService.closeSession(sessionHandle); sessionHandle = sessionService.openSession("foo", "bar", "default", sessionconf); - waitForQueryToFinish(target(), sessionHandle, qHandle, Status.SUCCESSFUL); + waitForQueryToFinish(target(), sessionHandle, qHandle, Status.SUCCESSFUL, mt); } @AfterMethod
http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java b/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java index 30d1e34..6db990e 100644 --- a/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java +++ b/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java @@ -49,11 +49,9 @@ import org.apache.lens.server.common.TestResourceFile; import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe; -import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.media.multipart.FormDataBodyPart; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataMultiPart; -import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; @@ -84,8 +82,8 @@ public class TestResultFormatting extends LensJerseyTest { queryService = LensServices.get().getService(QueryExecutionService.NAME); lensSessionId = queryService.openSession("foo", "bar", new HashMap<String, String>()); createTable(testTable, target(), lensSessionId, - "(ID INT, IDSTR STRING, IDARR ARRAY<INT>, IDSTRARR ARRAY<STRING>)"); - loadDataFromClasspath(testTable, TestResourceFile.TEST_DATA2_FILE.getValue(), target(), lensSessionId); + "(ID INT, IDSTR STRING, IDARR ARRAY<INT>, IDSTRARR ARRAY<STRING>)", defaultMT); + loadDataFromClasspath(testTable, TestResourceFile.TEST_DATA2_FILE.getValue(), target(), lensSessionId, defaultMT); } /* @@ -95,7 +93,7 @@ public class TestResultFormatting extends LensJerseyTest { */ @AfterTest public void tearDown() throws Exception { - dropTable(testTable, target(), lensSessionId); + dropTable(testTable, target(), lensSessionId, defaultMT); queryService.closeSession(lensSessionId); super.tearDown(); } @@ -110,16 +108,6 @@ public class TestResultFormatting extends LensJerseyTest { return new QueryApp(); } - /* - * (non-Javadoc) - * - * @see org.glassfish.jersey.test.JerseyTest#configureClient(org.glassfish.jersey.client.ClientConfig) - */ - @Override - protected void configureClient(ClientConfig config) { - config.register(MultiPartFeature.class); - } - /** The test table. */ private static String testTable = "RESULT_TEST_TABLE"; @@ -131,15 +119,15 @@ public class TestResultFormatting extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws IOException Signals that an I/O exception has occurred. */ - @Test - public void testResultFormatterInMemoryResult() throws InterruptedException, IOException { + @Test(dataProvider = "mediaTypeData") + public void testResultFormatterInMemoryResult(MediaType mt) throws InterruptedException, IOException { LensConf conf = new LensConf(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); conf.addProperty(LensConfConstants.QUERY_OUTPUT_SERDE, LazySimpleSerDe.class.getCanonicalName()); - testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, null); + testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, null, mt); queryService.conf.set(LensConfConstants.RESULT_FS_READ_URL, "filereadurl://"); - testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, "filereadurl://"); + testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, "filereadurl://", mt); queryService.conf.unset(LensConfConstants.RESULT_FS_READ_URL); } @@ -151,14 +139,14 @@ public class TestResultFormatting extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws IOException Signals that an I/O exception has occurred. */ - @Test - public void testResultFormatterHDFSpersistentResult() throws InterruptedException, IOException { + @Test(dataProvider = "mediaTypeData") + public void testResultFormatterHDFSpersistentResult(MediaType mt) throws InterruptedException, IOException { LensConf conf = new LensConf(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true"); - testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, null); + testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, null, mt); queryService.conf.set(LensConfConstants.RESULT_FS_READ_URL, "filereadurl://"); - testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, "filereadurl://"); + testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, "filereadurl://", mt); queryService.conf.unset(LensConfConstants.RESULT_FS_READ_URL); } @@ -168,12 +156,12 @@ public class TestResultFormatting extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws IOException Signals that an I/O exception has occurred. */ - @Test - public void testPersistentResultWithMaxSize() throws InterruptedException, IOException { + @Test(dataProvider = "mediaTypeData") + public void testPersistentResultWithMaxSize(MediaType mt) throws InterruptedException, IOException { LensConf conf = new LensConf(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true"); conf.addProperty(LensConfConstants.RESULT_FORMAT_SIZE_THRESHOLD, "1"); - testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, true, null); + testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, true, null, mt); } /** @@ -182,12 +170,12 @@ public class TestResultFormatting extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws IOException Signals that an I/O exception has occurred. */ - @Test - public void testResultFormatterFailure() throws InterruptedException, IOException { + @Test(dataProvider = "mediaTypeData") + public void testResultFormatterFailure(MediaType mt) throws InterruptedException, IOException { LensConf conf = new LensConf(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); conf.addProperty(LensConfConstants.QUERY_OUTPUT_SERDE, "NonexistentSerde.class"); - testResultFormatter(conf, QueryStatus.Status.FAILED, false, null); + testResultFormatter(conf, QueryStatus.Status.FAILED, false, null, mt); } // test with execute async post with result formatter, get query, get results @@ -202,33 +190,31 @@ public class TestResultFormatting extends LensJerseyTest { * @throws InterruptedException the interrupted exception * @throws IOException Signals that an I/O exception has occurred. */ - private void testResultFormatter(LensConf conf, Status status, boolean isDir, String reDirectUrl) + private void testResultFormatter(LensConf conf, Status status, boolean isDir, String reDirectUrl, MediaType mt) throws InterruptedException, IOException { // test post execute op final WebTarget target = target().path("queryapi/queries"); final FormDataMultiPart mp = new FormDataMultiPart(); conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); - mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, - MediaType.APPLICATION_XML_TYPE)); + mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, mt)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR, IDARR, IDSTRARR from " + testTable)); mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute")); - mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, - MediaType.APPLICATION_XML_TYPE)); - QueryHandle handle = target.request() + mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, mt)); + QueryHandle handle = target.request(mt) .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), new GenericType<LensAPIResult<QueryHandle>>() {}).getData(); assertNotNull(handle); // Get query - LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request() + LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt) .get(LensQuery.class); // wait till the query finishes QueryStatus stat = ctx.getStatus(); while (!stat.finished()) { - ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class); + ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensQuery.class); stat = ctx.getStatus(); Thread.sleep(1000); } @@ -257,7 +243,7 @@ public class TestResultFormatting extends LensJerseyTest { // fetch results TestQueryService.validatePersistedResult(handle, target(), lensSessionId, new String[][]{ {"ID", "INT"}, {"IDSTR", "STRING"}, {"IDARR", "ARRAY"}, {"IDSTRARR", "ARRAY"}, - }, isDir); + }, isDir, mt); if (!isDir) { TestQueryService.validateHttpEndPoint(target(), lensSessionId, handle, reDirectUrl); } http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java b/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java index 7c6ce49..70e2dbc 100644 --- a/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java +++ b/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java @@ -42,8 +42,6 @@ import org.apache.lens.server.api.query.save.SavedQueryService; import org.apache.lens.server.error.LensExceptionMapper; import org.apache.lens.server.query.QueryExecutionServiceImpl; -import org.glassfish.jersey.client.ClientConfig; -import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; @@ -112,12 +110,6 @@ public class TestSavedQueryService extends LensJerseyTest { return new SavedQueryTestApp(); } - @Override - protected void configureClient(ClientConfig config) { - config.register(MultiPartFeature.class); - config.register(LensJAXBContextResolver.class); - } - @Test public void testResource() throws InterruptedException { assertEquals(