Repository: lens Updated Branches: refs/heads/master 90cbd94f4 -> 393153fab
LENS-1004: Add prepared and query API tests Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/393153fa Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/393153fa Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/393153fa Branch: refs/heads/master Commit: 393153fab1dbd1f186225330b281685291fa9c42 Parents: 90cbd94 Author: Archana H <[email protected]> Authored: Mon Apr 25 12:33:17 2016 +0530 Committer: Rajat Khandelwal <[email protected]> Committed: Mon Apr 25 12:33:17 2016 +0530 ---------------------------------------------------------------------- lens-regression/pom.xml | 5 + .../regression/core/constants/DriverConfig.java | 38 ++ .../core/constants/QueryInventory.java | 2 +- .../regression/core/helpers/QueryHelper.java | 6 +- .../regression/core/helpers/SessionHelper.java | 16 +- .../lens/regression/core/type/MapBuilder.java | 7 + .../src/main/resources/lens.properties | 9 - .../src/main/resources/template.lens.properties | 9 + .../lens/regression/client/ITListQueryTest.java | 19 +- .../regression/client/ITPreparedQueryTests.java | 522 +++++++++++++++++++ .../lens/regression/client/ITQueryApiTests.java | 335 ++++++++++++ .../regression/client/SessionResourceTests.java | 61 ++- pom.xml | 7 + 13 files changed, 976 insertions(+), 60 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/pom.xml ---------------------------------------------------------------------- diff --git a/lens-regression/pom.xml b/lens-regression/pom.xml index 1a656e3..08a7ece 100644 --- a/lens-regression/pom.xml +++ b/lens-regression/pom.xml @@ -78,6 +78,11 @@ <artifactId>hadoop-client</artifactId> </dependency> + <dependency> + <groupId>com.google.protobuf</groupId> + <artifactId>protobuf-java</artifactId> + </dependency> + </dependencies> <build> http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/main/java/org/apache/lens/regression/core/constants/DriverConfig.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/constants/DriverConfig.java b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/DriverConfig.java new file mode 100644 index 0000000..5a2df11 --- /dev/null +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/DriverConfig.java @@ -0,0 +1,38 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.lens.regression.core.constants; + +import org.apache.lens.server.api.query.constraint.MaxConcurrentDriverQueriesConstraintFactory; + +public class DriverConfig { + + private DriverConfig() { + + } + + public static final String MAX_CONCURRENT_QUERIES = MaxConcurrentDriverQueriesConstraintFactory. + MAX_CONCURRENT_QUERIES_KEY; + public static final String PRIORITY_MAX_CONCURRENT = MaxConcurrentDriverQueriesConstraintFactory. + MAX_CONCURRENT_QUERIES_PER_PRIORITY_KEY; + public static final String QUEUE_MAX_CONCURRENT = MaxConcurrentDriverQueriesConstraintFactory. + MAX_CONCURRENT_QUERIES_PER_QUEUE_KEY; + +} + http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java index eb889c4..5f1f607 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/constants/QueryInventory.java @@ -76,6 +76,6 @@ public class QueryInventory { public static final String NO_CUBE_KEYWORD_QUERY = "select sample_dim_chain.name, measure4 from sample_cube where " + "time_range_in(dt, '2014-06-24-23', '2014-06-25-00')"; - public static final String QUOTE_QUERY = "cube select id,name from sample_dim2 where name != 'first\'s'"; + public static final String QUOTE_QUERY = "cube select id,name from sample_dim2 where name != 'first\\'s'"; } http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java index 5035ce8..9355e47 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/QueryHelper.java @@ -67,10 +67,14 @@ public class QueryHelper extends ServiceManagerHelper { formData.add("sessionid", sessionHandleString); formData.add("query", queryString); formData.add("operation", "EXECUTE"); - formData.add("conf", conf); if (queryName != null) { formData.add("queryName", queryName); } + if (conf == null) { + conf = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><conf />"; + } + formData.add("conf", conf); + Response response = this.exec("post", QueryURL.QUERY_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, outputMediaType, formData.getForm()); LensAPIResult result = response.readEntity(new GenericType<LensAPIResult>(){}); http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java index 64268a6..753a7b4 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/helpers/SessionHelper.java @@ -29,6 +29,7 @@ import javax.ws.rs.core.Response; import org.apache.lens.api.LensConf; import org.apache.lens.api.LensSessionHandle; import org.apache.lens.api.StringList; +import org.apache.lens.regression.core.constants.SessionURL; import org.apache.lens.regression.core.type.FormBuilder; import org.apache.lens.regression.core.type.MapBuilder; import org.apache.lens.regression.util.AssertUtil; @@ -116,7 +117,8 @@ public class SessionHelper extends ServiceManagerHelper { public void closeNewSession(String sessionHandleString, String outputMediaType) throws LensException { MapBuilder query = new MapBuilder("sessionid", sessionHandleString); - Response response = this.exec("delete", "/session", servLens, null, query, null, outputMediaType, null); + Response response = this.exec("delete", SessionURL.SESSION_BASE_URL, servLens, null, query, null, + outputMediaType, null); AssertUtil.assertSucceededResponse(response); log.info("Closed Session : {}", sessionHandleString); } @@ -138,13 +140,13 @@ public class SessionHelper extends ServiceManagerHelper { formData.add("sessionid", sessionHandleString); formData.add("key", param); formData.add("value", value); - Response response = this.exec("put", "/session/params", servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, - null, formData.getForm()); + Response response = this.exec("put", SessionURL.SESSION_PARAMS_URL, servLens, null, null, + MediaType.MULTIPART_FORM_DATA_TYPE, null, formData.getForm()); AssertUtil.assertSucceededResponse(response); MapBuilder query = new MapBuilder("sessionid", sessionHandleString); query.put("key", param); - response = this.exec("get", "/session/params", servLens, null, query); + response = this.exec("get", SessionURL.SESSION_PARAMS_URL, servLens, null, query); AssertUtil.assertSucceededResponse(response); StringList strList = response.readEntity(new GenericType<StringList>(StringList.class)); HashMap<String, String> map = Util.stringListToMap(strList); @@ -181,7 +183,7 @@ public class SessionHelper extends ServiceManagerHelper { formData.add("sessionid", sessionHandleString); formData.add("type", "jar"); formData.add("path", path); - Response response = this.exec("put", "/session/resources/add", servLens, null, null, + Response response = this.exec("put", SessionURL.SESSION_ADD_RESOURCE_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, null, formData.getForm()); log.info("Response : {}", response); AssertUtil.assertSucceeded(response); @@ -203,7 +205,7 @@ public class SessionHelper extends ServiceManagerHelper { formData.add("sessionid", sessionHandleString); formData.add("type", "jar"); formData.add("path", path); - Response response = this.exec("put", "/session/resources/delete", servLens, null, null, + Response response = this.exec("put", SessionURL.SESSION_REMOVE_RESOURCE_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, null, formData.getForm()); log.info("Response : {}", response); AssertUtil.assertSucceeded(response); @@ -216,7 +218,7 @@ public class SessionHelper extends ServiceManagerHelper { public String getSessionParam(String sessionHandleString, String param) throws Exception { MapBuilder query = new MapBuilder("sessionid", sessionHandleString); query.put("key", param); - Response response = this.exec("get", "/session/params", servLens, null, query); + Response response = this.exec("get", SessionURL.SESSION_PARAMS_URL, servLens, null, query); AssertUtil.assertSucceededResponse(response); StringList strList = response.readEntity(new GenericType<StringList>(StringList.class)); HashMap<String, String> map = Util.stringListToMap(strList); http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/main/java/org/apache/lens/regression/core/type/MapBuilder.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/java/org/apache/lens/regression/core/type/MapBuilder.java b/lens-regression/src/main/java/org/apache/lens/regression/core/type/MapBuilder.java index eae8a06..59d99a3 100644 --- a/lens-regression/src/main/java/org/apache/lens/regression/core/type/MapBuilder.java +++ b/lens-regression/src/main/java/org/apache/lens/regression/core/type/MapBuilder.java @@ -21,6 +21,9 @@ package org.apache.lens.regression.core.type; import java.util.HashMap; +import org.apache.lens.server.api.util.LensUtil; + + public class MapBuilder { private HashMap<String, String> map; @@ -44,6 +47,10 @@ public class MapBuilder { } } + public MapBuilder(String... args) { + map = LensUtil.getHashMap(args); + } + public void put(String key, String value) { map.put(key, value); } http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/main/resources/lens.properties ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/resources/lens.properties b/lens-regression/src/main/resources/lens.properties deleted file mode 100644 index de00410..0000000 --- a/lens-regression/src/main/resources/lens.properties +++ /dev/null @@ -1,9 +0,0 @@ -lens.baseurl= -lens.adminurl= -lens.username= -lens.password= -lens.server.dir=/usr/local/lens/server/ -lens.client.dir=/usr/local/lens/client/ -lens.remote.host= -lens.remote.username= -lens.remote.password= \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/main/resources/template.lens.properties ---------------------------------------------------------------------- diff --git a/lens-regression/src/main/resources/template.lens.properties b/lens-regression/src/main/resources/template.lens.properties new file mode 100644 index 0000000..de00410 --- /dev/null +++ b/lens-regression/src/main/resources/template.lens.properties @@ -0,0 +1,9 @@ +lens.baseurl= +lens.adminurl= +lens.username= +lens.password= +lens.server.dir=/usr/local/lens/server/ +lens.client.dir=/usr/local/lens/client/ +lens.remote.host= +lens.remote.username= +lens.remote.password= \ No newline at end of file http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java b/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java index 821c388..d193c9c 100644 --- a/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java +++ b/lens-regression/src/test/java/org/apache/lens/regression/client/ITListQueryTest.java @@ -147,7 +147,7 @@ public class ITListQueryTest extends BaseTestClass { Assert.assertTrue(list3.contains(queryHandle3), "List by Query Name failed"); } - @Test(enabled = true) + @Test public void listQueryByTimeRange() throws Exception { //Running First Query @@ -197,9 +197,8 @@ public class ITListQueryTest extends BaseTestClass { } - @Test(enabled = true) + @Test public void listQuerySpecificUserAllUser() throws Exception { - String diffUser = "diff"; String diffPass = "diff"; String diffSessionHandleString = sHelper.openNewSession(diffUser, diffPass, lens.getCurrentDB()); @@ -233,7 +232,7 @@ public class ITListQueryTest extends BaseTestClass { } - @Test(enabled = true) + @Test public void listQueryByTimeRangeQueryName() throws Exception { String queryName = "testQueryName"; @@ -257,7 +256,7 @@ public class ITListQueryTest extends BaseTestClass { } - @Test(enabled = true) + @Test public void listQueryByState() throws Exception { //Successful Query QueryHandle queryHandle1 = (QueryHandle) qHelper.executeQuery(QueryInventory.QUERY).getData(); @@ -308,7 +307,7 @@ public class ITListQueryTest extends BaseTestClass { } - @Test(enabled = true) + @Test public void listQueryByDriver() throws Exception { QueryHandle queryHandle1 = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_CUBE_QUERY).getData(); @@ -340,7 +339,7 @@ public class ITListQueryTest extends BaseTestClass { } - @Test(enabled = true) + @Test public void listFinishedQueryByDriver() throws Exception { QueryHandle queryHandle1 = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_CUBE_QUERY).getData(); @@ -379,7 +378,7 @@ public class ITListQueryTest extends BaseTestClass { } - @Test(enabled = true) + @Test public void listQueryByDriverNUser() throws Exception { QueryHandle q1 = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_CUBE_QUERY).getData(); @@ -409,7 +408,7 @@ public class ITListQueryTest extends BaseTestClass { } - @Test(enabled = true) + @Test public void listQueryByDriverNStatus() throws Exception { String user = "new", pwd = "new"; @@ -457,7 +456,7 @@ public class ITListQueryTest extends BaseTestClass { - @Test(enabled = true) + @Test public void listQueryByNameStatusUserTimeRange() throws Exception { String queryName1 = "first", queryName2 = "second", queryName3 = "third"; http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/test/java/org/apache/lens/regression/client/ITPreparedQueryTests.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/test/java/org/apache/lens/regression/client/ITPreparedQueryTests.java b/lens-regression/src/test/java/org/apache/lens/regression/client/ITPreparedQueryTests.java new file mode 100644 index 0000000..bf40c74 --- /dev/null +++ b/lens-regression/src/test/java/org/apache/lens/regression/client/ITPreparedQueryTests.java @@ -0,0 +1,522 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.lens.regression.client; + +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import javax.xml.bind.JAXBException; + +import org.apache.lens.api.LensConf; +import org.apache.lens.api.query.*; +import org.apache.lens.regression.core.constants.QueryInventory; +import org.apache.lens.regression.core.constants.QueryURL; +import org.apache.lens.regression.core.helpers.LensServerHelper; +import org.apache.lens.regression.core.helpers.MetastoreHelper; +import org.apache.lens.regression.core.helpers.QueryHelper; +import org.apache.lens.regression.core.helpers.ServiceManagerHelper; +import org.apache.lens.regression.core.helpers.SessionHelper; +import org.apache.lens.regression.core.testHelper.BaseTestClass; +import org.apache.lens.regression.core.type.FormBuilder; +import org.apache.lens.regression.core.type.MapBuilder; +import org.apache.lens.regression.util.AssertUtil; +import org.apache.lens.server.api.LensConfConstants; +import org.apache.lens.server.api.error.LensException; + +import org.apache.log4j.Logger; + +import org.glassfish.jersey.media.multipart.FormDataBodyPart; +import org.glassfish.jersey.media.multipart.FormDataContentDisposition; + +import org.testng.Assert; +import org.testng.annotations.*; + +public class ITPreparedQueryTests extends BaseTestClass { + + WebTarget servLens; + String sessionHandleString; + + LensServerHelper lens = getLensServerHelper(); + MetastoreHelper mHelper = getMetastoreHelper(); + SessionHelper sHelper = getSessionHelper(); + QueryHelper qHelper = getQueryHelper(); + + private static Map<String, String> defaultParams = new HashMap<String, String>(); + static { + defaultParams.put(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false"); + defaultParams.put(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + } + + private static Logger logger = Logger.getLogger(ITPreparedQueryTests.class); + + + @BeforeClass(alwaysRun = true) + public void initialize() throws IOException, JAXBException, LensException { + servLens = ServiceManagerHelper.init(); + logger.info("Creating a new Session"); + sessionHandleString = lens.openSession(); + mHelper.setCurrentDatabase(lens.getCurrentDB()); + } + + @BeforeMethod(alwaysRun = true) + public void setUp(Method method) throws Exception { + logger.info("Test Name: " + method.getName()); + } + + @AfterClass(alwaysRun = true) + public void closeSession() throws Exception { + logger.info("Closing Session"); + lens.closeSession(); + } + + @Test + public void testPrepareAndExecutePreparedQuery() throws Exception { + + sHelper.setAndValidateParam(defaultParams); + QueryPrepareHandle queryPrepareHandle = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotNull(queryPrepareHandle, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle); + + QueryHandle queryHandle = qHelper.executePreparedQuery(queryPrepareHandle); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + InMemoryQueryResult result = (InMemoryQueryResult) qHelper.getResultSet(queryHandle); + validateInMemoryResultSet(result); + } + + // This is failing + @Test(enabled = false) + public void testPrepareAndExecuteTimeoutPreparedQuery() throws Exception { + + sHelper.setAndValidateParam(defaultParams); + QueryPrepareHandle queryPrepareHandle = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotNull(queryPrepareHandle, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle); + + QueryHandleWithResultSet queryHandleResultSet = qHelper.executePreparedQueryTimeout(queryPrepareHandle, "60000"); + InMemoryQueryResult result = (InMemoryQueryResult) queryHandleResultSet.getResult(); + validateInMemoryResultSet(result); + } + + @Test + public void destroyPreparedQueryByHandle() throws Exception { + + QueryPrepareHandle queryPrepareHandle = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotNull(queryPrepareHandle, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle); + + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, + "prepareHandle", queryPrepareHandle.toString() + ); + + Response response = qHelper.getPreparedQuery(queryPrepareHandle); + AssertUtil.assertSucceededResponse(response); + + logger.info("Deleting Prepared Query"); + qHelper.destoryPreparedQueryByHandle(queryPrepareHandle); + + logger.info("Get Should now give 404"); + response = qHelper.getPreparedQuery(queryPrepareHandle); + AssertUtil.assertFailedResponse(response); + } + + @Test + public void modifyPreparedQueryByHandle() throws Exception { + + QueryPrepareHandle queryPrepareHandle = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotNull(queryPrepareHandle, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle); + + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, + "prepareHandle", queryPrepareHandle.toString() + ); + + logger.info("Get Should be Successful"); + Response response = lens.exec("get", QueryURL.PREPAREDQUERY_URL + "/" + queryPrepareHandle.toString(), + servLens, null, query); + AssertUtil.assertSucceededResponse(response); + + logger.info("Modifying PreparedQuery conf"); + + LensConf lensConf = new LensConf(); + lensConf.addProperty(LensConfConstants.RESULT_SET_PARENT_DIR, "hdfs://lens-test:8020/tmp/lensreports"); + + FormBuilder formData = new FormBuilder(); + formData.add("sessionid", sessionHandleString); + formData.getForm().bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), + lensConf, MediaType.APPLICATION_XML_TYPE)); + + response = lens.exec("put", QueryURL.PREPAREDQUERY_URL + "/" + queryPrepareHandle.toString(), servLens, null, null, + MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); + AssertUtil.assertSucceededResponse(response); + + logger.info("Get Should be Successful"); + response = lens.exec("get", QueryURL.PREPAREDQUERY_URL + "/" + queryPrepareHandle.toString(), + servLens, null, query); + AssertUtil.assertSucceededResponse(response); + + LensPreparedQuery gq = response.readEntity(new GenericType<LensPreparedQuery>(){}); + logger.info("Modified Conf : " + gq.getConf().getProperties().get("lens.query.result.parent.dir")); + Assert.assertEquals(gq.getConf().getProperties().get(LensConfConstants.RESULT_SET_PARENT_DIR), + "hdfs://lens-test:8020/tmp/lensreports", "Update on Prepared Query Failed!!"); + } + + + @Test + public void listAllPreparedQueriesOfUser() throws Exception { + + QueryPrepareHandle queryPrepareHandle = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotNull(queryPrepareHandle, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle); + + QueryPrepareHandle queryPrepareHandle1 = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotNull(queryPrepareHandle1, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle1); + + List<QueryPrepareHandle> list = qHelper.getPreparedQueryHandleList(); + + Assert.assertTrue(list.contains(queryPrepareHandle), "List of All QueryPreparedHandle of a user failed"); + Assert.assertTrue(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle of a user failed"); + } + + + @Test + public void listAllPreparedQueriesByQueryName() throws Exception { + + //TODO : Filter by queryName is not working, Commented the fail part, Uncomment it when fixed + String name1 = "FirstQuery"; + String name2 = "SecondQuery"; + + QueryPrepareHandle queryPrepareHandle = qHelper.submitPreparedQuery(QueryInventory.QUERY, name1); + Assert.assertNotNull(queryPrepareHandle, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle); + + QueryPrepareHandle queryPrepareHandle1 = qHelper.submitPreparedQuery(QueryInventory.QUERY, name2); + Assert.assertNotNull(queryPrepareHandle1, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle1); + + List<QueryPrepareHandle> list = qHelper.getPreparedQueryHandleList(name1); + Assert.assertTrue(list.contains(queryPrepareHandle), "List of All QueryPreparedHandle By QueryName failed"); + //Assert.assertFalse(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle By QueryName failed"); + + list = qHelper.getPreparedQueryHandleList(name2); + //Assert.assertFalse(list.contains(queryPrepareHandle), "List of All QueryPreparedHandle By QueryName failed"); + Assert.assertTrue(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle By QueryName failed"); + + list = qHelper.getPreparedQueryHandleList(); + Assert.assertTrue(list.contains(queryPrepareHandle), "List of All QueryPreparedHandle of a user failed"); + Assert.assertTrue(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle of a user failed"); + } + + @Test + public void listAllPreparedQueriesByUser() throws Exception { + + //TODO : Filter by user is not working, Commented the fail part, Uncomment it when fixed + + String user = "diff", pass = "diff"; + + String session1 = sHelper.openNewSession(user, pass, lens.getCurrentDB()); + + QueryPrepareHandle queryPrepareHandle1 = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotEquals(queryPrepareHandle1, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle1); + + QueryPrepareHandle queryPrepareHandle2 = qHelper.submitPreparedQuery(QueryInventory.QUERY, null, session1); + Assert.assertNotEquals(queryPrepareHandle2, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle2); + + List<QueryPrepareHandle> list = qHelper.getPreparedQueryHandleList(null, lens.getUserName()); + Assert.assertTrue(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle By user failed"); + //Assert.assertFalse(list.contains(queryPrepareHandle2), "List of All QueryPreparedHandle By user failed"); + + list = qHelper.getPreparedQueryHandleList(null, user); + //Assert.assertFalse(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle By user failed"); + Assert.assertTrue(list.contains(queryPrepareHandle2), "List of All QueryPreparedHandle By user failed"); + + list = qHelper.getPreparedQueryHandleList(null, "all"); + Assert.assertTrue(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle by 'all' user failed"); + Assert.assertTrue(list.contains(queryPrepareHandle2), "List of All QueryPreparedHandle by 'all' user failed"); + } + + @Test + public void listAllPreparedQueriesByTimeRange() throws Exception { + + //Submitting First Query + String startTime = String.valueOf(System.currentTimeMillis()); + logger.info("Start Time of 1st Query : " + startTime); + + QueryPrepareHandle queryPrepareHandle1 = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotEquals(queryPrepareHandle1, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle1); + + String endTime = String.valueOf(System.currentTimeMillis()); + logger.info("End Time of 1st Query : " + endTime); + + Thread.sleep(1000); + + //Submitting Second Query + String startTime1 = String.valueOf(System.currentTimeMillis()); + logger.info("Start Time of 2nd Query : " + startTime1); + + QueryPrepareHandle queryPrepareHandle2 = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotEquals(queryPrepareHandle2, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle2); + + String endTime1 = String.valueOf(System.currentTimeMillis()); + logger.info("End Time of 2nd Query : " + endTime1); + + List<QueryPrepareHandle> list = qHelper.getPreparedQueryHandleList(null, null, sessionHandleString, + startTime, endTime); + Assert.assertTrue(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle By timeRange failed"); + Assert.assertFalse(list.contains(queryPrepareHandle2), "List of All QueryPreparedHandle By timeRange failed"); + + list = qHelper.getPreparedQueryHandleList(null, null, sessionHandleString, startTime1, endTime1); + Assert.assertFalse(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle By timeRange failed"); + Assert.assertTrue(list.contains(queryPrepareHandle2), "List of All QueryPreparedHandle By timeRange failed"); + + list = qHelper.getPreparedQueryHandleList(null, null, sessionHandleString, startTime, endTime1); + Assert.assertTrue(list.contains(queryPrepareHandle1), "List of All QueryPreparedHandle by timeRange user failed"); + Assert.assertTrue(list.contains(queryPrepareHandle2), "List of All QueryPreparedHandle by timeRange user failed"); + } + + @Test + public void destroyAllPreparedQueriesOfUser() throws Exception { + + QueryPrepareHandle queryPrepareHandle1 = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotEquals(queryPrepareHandle1, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle1); + + QueryPrepareHandle queryPrepareHandle2 = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotEquals(queryPrepareHandle2, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle2); + + Response response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertSucceededResponse(response); + + response = qHelper.getPreparedQuery(queryPrepareHandle2); + AssertUtil.assertSucceededResponse(response); + + qHelper.destroyPreparedQuery(); + + response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertFailedResponse(response); + + response = qHelper.getPreparedQuery(queryPrepareHandle2); + AssertUtil.assertFailedResponse(response); + + } + + //LENS-1012 + @Test + public void destroyAllPreparedQueriesByQueryName() throws Exception { + + //TODO : Destroy by queryName is not working, Commented the fail part, Uncomment it when fixed + + String name1 = "Query1"; + String name2 = "Query2"; + + QueryPrepareHandle queryPrepareHandle1 = qHelper.submitPreparedQuery(QueryInventory.QUERY, name1); + Assert.assertNotEquals(queryPrepareHandle1, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle1); + + QueryPrepareHandle queryPrepareHandle2 = qHelper.submitPreparedQuery(QueryInventory.QUERY, name2); + Assert.assertNotEquals(queryPrepareHandle2, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle2); + + Response response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertSucceededResponse(response); + response = qHelper.getPreparedQuery(queryPrepareHandle2); + AssertUtil.assertSucceededResponse(response); + + qHelper.destroyPreparedQuery(name1); + + response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertFailedResponse(response); + response = qHelper.getPreparedQuery(queryPrepareHandle2); + //AssertUtil.assertSucceededResponse(response); + + qHelper.destroyPreparedQuery(name2); + + response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertFailedResponse(response); + response = qHelper.getPreparedQuery(queryPrepareHandle2); + AssertUtil.assertFailedResponse(response); + + } + + //LENS-1012 + @Test + public void destroyAllPreparedQueriesByUser() throws Exception { + + //TODO : Destroy by user is not working, Commented the fail part, Uncomment it when fixed + + String user2 = "diff", pass = "diff"; + String session1 = sHelper.openNewSession(user2, pass); + + FormBuilder formData=new FormBuilder(); + formData.add("sessionid", session1); + formData.add("type", "jar"); + formData.add("path", "file:///usr/local/lens/webapp/lens-server/WEB-INF/lib/lens-query-lib-1.2.5.jar"); + + Response response=lens.sendForm("put", "/session/resources/add", formData); + AssertUtil.assertSucceededResponse(response); + + QueryPrepareHandle queryPrepareHandle1 = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotEquals(queryPrepareHandle1, null, "Query Execute Failed marker"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle1); + + QueryPrepareHandle queryPrepareHandle2 = qHelper.submitPreparedQuery(QueryInventory.QUERY, null, session1); + Assert.assertNotEquals(queryPrepareHandle2, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle2); + + response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertSucceededResponse(response); + response = qHelper.getPreparedQuery(queryPrepareHandle2); + AssertUtil.assertSucceededResponse(response); + + qHelper.destroyPreparedQuery(null, lens.getUserName()); + + response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertFailedResponse(response); + response = qHelper.getPreparedQuery(queryPrepareHandle2); + //AssertUtil.assertSucceededResponse(response); + + qHelper.destroyPreparedQuery(null, user2); + + response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertFailedResponse(response); + response = qHelper.getPreparedQuery(queryPrepareHandle2); + AssertUtil.assertFailedResponse(response); + } + + //jira raised LENS-567 + @Test + public void destroyAllPreparedQueriesByTimeRange() throws Exception { + + //TODO : Filter by user is not working, Commented the fail part, Uncomment it when fixed + + //Submitting First Query + String startTime = String.valueOf(System.currentTimeMillis()); + logger.info("Start Time of 1st Query : " + startTime); + QueryPrepareHandle queryPrepareHandle1 = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotEquals(queryPrepareHandle1, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle1); + String endTime = String.valueOf(System.currentTimeMillis()); + logger.info("End Time of 1st Query : " + endTime); + + Thread.sleep(1000); + + //Submitting Second Query + String startTime1 = String.valueOf(System.currentTimeMillis()); + logger.info("Start Time of 2nd Query : " + startTime1); + QueryPrepareHandle queryPrepareHandle2 = qHelper.submitPreparedQuery(QueryInventory.QUERY); + Assert.assertNotEquals(queryPrepareHandle2, null, "Query Execute Failed"); + logger.info("PREPARE QUERY HANDLE : " + queryPrepareHandle2); + String endTime1 = String.valueOf(System.currentTimeMillis()); + logger.info("End Time of 2nd Query : " + endTime1); + + Thread.sleep(1000); + + Response response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertSucceededResponse(response); + response = qHelper.getPreparedQuery(queryPrepareHandle2); + AssertUtil.assertSucceededResponse(response); + + qHelper.destroyPreparedQuery(null, null, sessionHandleString, startTime, endTime); + + response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertFailedResponse(response); + response = qHelper.getPreparedQuery(queryPrepareHandle2); + AssertUtil.assertSucceededResponse(response); + + qHelper.destroyPreparedQuery(null, null, sessionHandleString, startTime1, endTime1); + + response = qHelper.getPreparedQuery(queryPrepareHandle1); + AssertUtil.assertFailedResponse(response); + response = qHelper.getPreparedQuery(queryPrepareHandle2); + AssertUtil.assertFailedResponse(response); + + } + + private void validateInMemoryResultSet(InMemoryQueryResult result) { + + int size = result.getRows().size(); + for(int i=0; i<size; i++) { + logger.info(result.getRows().get(i).getValues().get(0) + " " + result.getRows().get(i).getValues().get(1)); + } + Assert.assertEquals(size, 2, "Wrong result"); + Assert.assertEquals(result.getRows().get(0).getValues().get(0), 2, "Wrong result"); + Assert.assertEquals(result.getRows().get(0).getValues().get(1), "second", "Wrong result"); + Assert.assertEquals(result.getRows().get(1).getValues().get(0), 3, "Wrong result"); + Assert.assertEquals(result.getRows().get(1).getValues().get(1), "third", "Wrong result"); + } + + @Test + public void listAllPreparedQueriesByQueryNameUserTimeRange() throws Exception { + + String queryName1 = "queryfirst", queryName2 = "querysecond"; + String user2 = "user2", pass2 = "pass2"; + String session1 = sHelper.openNewSession(user2, pass2, lens.getCurrentDB()); + + String startTime1=String.valueOf(System.currentTimeMillis()); + logger.info("Start Time of first query- "+startTime1); + QueryPrepareHandle queryPreparedHandle1= qHelper.submitPreparedQuery(QueryInventory.QUERY, queryName1); + String endTime1=String.valueOf(System.currentTimeMillis()); + logger.info("End Time of first query- "+endTime1); + + Thread.sleep(1000); + + String startTime2=String.valueOf(System.currentTimeMillis()); + logger.info("Start Time of second query- " + startTime2); + QueryPrepareHandle queryPreparedHandle2=qHelper.submitPreparedQuery(QueryInventory.QUERY, queryName2, session1); + String endTime2=String.valueOf(System.currentTimeMillis()); + logger.info("End Time for second query- "+ endTime2); + + Thread.sleep(1000); + + List<QueryPrepareHandle> list = qHelper.getPreparedQueryHandleList(queryName1, lens.getUserName(), + sessionHandleString, startTime1, endTime1); + Assert.assertTrue(list.contains(queryPreparedHandle1), + "List of all prepared query by user,Time range and query name failed"); + Assert.assertFalse(list.contains(queryPreparedHandle2), + "List of all prepared query by user,Time range and query name failed"); + + list = qHelper.getPreparedQueryHandleList(queryName2, user2, session1, startTime2, endTime2); + Assert.assertTrue(list.contains(queryPreparedHandle2), + "List of all prepared query by user,Time range and query name failed"); + Assert.assertFalse(list.contains(queryPreparedHandle1), + "List of all prepared query by user,Time range and query name failed"); + } + + @Test + public void testExplainAndPrepareQuery() throws Exception { + QueryPlan queryPlan = qHelper.explainAndPrepareQuery(QueryInventory.HIVE_CUBE_QUERY); + logger.info("Query Handle" + queryPlan.getPrepareHandle()); + Assert.assertNotNull(queryPlan.getPrepareHandle(), "not returning queryhandle"); + } +} http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/test/java/org/apache/lens/regression/client/ITQueryApiTests.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/test/java/org/apache/lens/regression/client/ITQueryApiTests.java b/lens-regression/src/test/java/org/apache/lens/regression/client/ITQueryApiTests.java new file mode 100644 index 0000000..e16b220 --- /dev/null +++ b/lens-regression/src/test/java/org/apache/lens/regression/client/ITQueryApiTests.java @@ -0,0 +1,335 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.lens.regression.client; + +import java.lang.reflect.Method; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.apache.lens.api.LensConf; +import org.apache.lens.api.query.*; +import org.apache.lens.regression.core.constants.QueryInventory; +import org.apache.lens.regression.core.constants.QueryURL; +import org.apache.lens.regression.core.helpers.LensServerHelper; +import org.apache.lens.regression.core.helpers.MetastoreHelper; +import org.apache.lens.regression.core.helpers.QueryHelper; +import org.apache.lens.regression.core.helpers.ServiceManagerHelper; +import org.apache.lens.regression.core.helpers.SessionHelper; +import org.apache.lens.regression.core.testHelper.BaseTestClass; +import org.apache.lens.regression.core.type.MapBuilder; +import org.apache.lens.regression.util.AssertUtil; +import org.apache.lens.server.api.LensConfConstants; + +import org.apache.log4j.Logger; + +import org.testng.Assert; +import org.testng.annotations.*; + + +public class ITQueryApiTests extends BaseTestClass { + + WebTarget servLens; + private String sessionHandleString; + + LensServerHelper lens = getLensServerHelper(); + MetastoreHelper mHelper = getMetastoreHelper(); + SessionHelper sHelper = getSessionHelper(); + QueryHelper qHelper = getQueryHelper(); + + private static Logger logger = Logger.getLogger(ITQueryApiTests.class); + + + @BeforeClass(alwaysRun = true) + public void initialize() throws Exception { + servLens = ServiceManagerHelper.init(); + } + + @BeforeMethod(alwaysRun = true) + public void setUp(Method method) throws Exception { + logger.info("Test Name: " + method.getName()); + logger.info("Creating a new Session"); + sessionHandleString = lens.openSession(lens.getCurrentDB()); + } + + @AfterMethod(alwaysRun = true) + public void closeSession() throws Exception { + logger.info("Closing Session"); + lens.closeSession(); + } + + + @Test + public void testQueryServiceStatus() throws Exception { + Response response = lens.exec("get", QueryURL.QUERYAPI_BASE_URL, servLens, null, null, MediaType.TEXT_PLAIN_TYPE, + MediaType.TEXT_PLAIN); + Assert.assertEquals(response.getStatus(), Response.Status.OK.getStatusCode()); + } + + + @Test + public void explainQuery() throws Exception { + + //sample_dim2 is on hive only. It should return queryPlan + QueryPlan queryPlan = (QueryPlan) qHelper.explainQuery(QueryInventory.HIVE_DIM_QUERY).getData(); + Assert.assertNotNull(queryPlan.getPlanString()); + Assert.assertFalse(queryPlan.getPlanString().isEmpty()); + + // sample_dim is present in hive and db. Lens should choose the db one + queryPlan = (QueryPlan) qHelper.explainQuery(QueryInventory.DIM_QUERY).getData(); + Assert.assertNotNull(queryPlan.getPlanString()); + Assert.assertTrue(queryPlan.getPlanString().isEmpty()); + + // sample_db_dim is present in db + queryPlan = (QueryPlan) qHelper.explainQuery(QueryInventory.JDBC_DIM_QUERY).getData(); + Assert.assertNotNull(queryPlan.getPlanString()); + Assert.assertTrue(queryPlan.getPlanString().isEmpty()); + } + + + @Test + public void testExecute() throws Exception { + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.HIVE_CUBE_QUERY).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL); + } + + @Test + public void testExecuteWrongQuery() throws Exception { + QueryHandle qH = (QueryHandle) qHelper.executeQuery(QueryInventory.WRONG_QUERY, "queryName").getData(); + Assert.assertNull(qH); + } + + /* Bug : LENS-1005 + Fails bcos json output cannot be input for any API. + Here query handle is in json which caanot be passed to get query status + */ + + @Test + public void testExecuteJson() throws Exception { + QueryHandle handle = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_CUBE_QUERY, null, + sessionHandleString, null, MediaType.APPLICATION_JSON).getData(); + Assert.assertNotNull(handle); + LensQuery lensQuery = qHelper.waitForCompletion(sessionHandleString, handle, MediaType.APPLICATION_JSON_TYPE, + MediaType.APPLICATION_JSON); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL); + } + + @Test + public void passPropertyQueryConf() throws Exception { + + LensConf lensConf = new LensConf(); + lensConf.addProperty(LensConfConstants.QUERY_OUTPUT_SERDE, "org.apache.lens.lib.query.CSVSerde1"); + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.QUERY, null, null, sessionHandleString, + lensConf).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatusMessage().trim(), "Result formatting failed!", + "Query did not Fail"); + + lensConf.addProperty(LensConfConstants.QUERY_OUTPUT_SERDE, "org.apache.lens.lib.query.CSVSerde"); + queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.QUERY, null, null, sessionHandleString, + lensConf).getData(); + lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + } + + @Test + public void testExecuteWithTimeout() throws Exception { + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + + QueryHandleWithResultSet qHWithResultSet = (QueryHandleWithResultSet) qHelper.executeQueryTimeout( + QueryInventory.QUERY, "60000").getData(); + QueryStatus queryStatus = qHelper.getQueryStatus(qHWithResultSet.getQueryHandle()); + Assert.assertEquals(queryStatus.getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + InMemoryQueryResult result = (InMemoryQueryResult) qHWithResultSet.getResult(); + Assert.assertNotNull(result); + validateInMemoryResultSet(result); + + qHWithResultSet = (QueryHandleWithResultSet) qHelper.executeQueryTimeout(QueryInventory.SLEEP_QUERY, "10000") + .getData(); + queryStatus = qHelper.getQueryStatus(qHWithResultSet.getQueryHandle()); + Assert.assertEquals(queryStatus.getStatus(), QueryStatus.Status.RUNNING, "Query is Not Running"); + + qHelper.killQueryByQueryHandle(qHWithResultSet.getQueryHandle()); + queryStatus = qHelper.getQueryStatus(qHWithResultSet.getQueryHandle()); + Assert.assertEquals(queryStatus.getStatus(), QueryStatus.Status.CANCELED, "Query should be cancelled"); + } + + @Test + public void testGetInMemoryResultSet() throws Exception { + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_MAIL_NOTIFY, "false"); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.QUERY).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + InMemoryQueryResult result = (InMemoryQueryResult) qHelper.getResultSet(queryHandle); + Assert.assertNotNull(result); + validateInMemoryResultSet(result); + + } + + @Test + public void testGetPersistentResultSet() throws Exception { + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.QUERY).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + PersistentQueryResult result = (PersistentQueryResult) qHelper.getResultSet(queryHandle); + Assert.assertNotNull(result); + Assert.assertEquals(result.getNumRows().intValue(), 2, "Wrong result"); + } + + + private void validateInMemoryResultSet(InMemoryQueryResult result) { + + int size = result.getRows().size(); + for (int i = 0; i < size; i++) { + logger.info(result.getRows().get(i).getValues().get(0) + " " + result.getRows().get(i).getValues().get(1)); + } + Assert.assertEquals(result.getRows().size(), 2, "Wrong result"); + Assert.assertEquals(result.getRows().get(0).getValues().get(0), 2, "Wrong result"); + Assert.assertEquals(result.getRows().get(0).getValues().get(1), "second", "Wrong result"); + Assert.assertEquals(result.getRows().get(1).getValues().get(0), 3, "Wrong result"); + Assert.assertEquals(result.getRows().get(1).getValues().get(1), "third", "Wrong result"); + } + + + @Test + public void testQueryResultJsonInmemory() throws Exception { + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_DIM_QUERY).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + String resultSetJson = qHelper.getInmemoryResultSetJson(queryHandle, "0", "100", sessionHandleString); + Assert.assertNotNull(resultSetJson); + Assert.assertFalse(resultSetJson.isEmpty()); + + //TODO : Enable this once LENS-1005 is fixed +// Cannot convert json output to InMemoryQueryResult +// InMemoryQueryResult ResultSetJson = (InMemoryQueryResult) qHelper.getResultSetJson(queryHandle1, "0", "100"); + } + + + @Test + public void testQueryResultJsonPersistent() throws Exception { + + String parentDir = "file:/tmp/lensreports"; + sHelper.setAndValidateParam(LensConfConstants.RESULT_SET_PARENT_DIR, parentDir); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_DIM_QUERY, null, + sessionHandleString).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + String resultSetJson = qHelper.getPersistentResultSetJson(queryHandle, "0", "100"); + Assert.assertNotNull(resultSetJson); + Assert.assertFalse(resultSetJson.isEmpty()); + + //TODO : Enable this once LENS-1005 is fixed + +// PersistentQueryResult resultSetJson = qHelper.getPersistentResultSetJson(queryHandle, "0", "100"); +// Assert.assertNotNull(resultSetJson); +// Assert.assertEquals(resultSetJson.getPersistedURI(), parentDir+"/"+queryHandle.toString()+".zip", +// "Persistened result url not matching"); + } + + //LENS-928 + @Test + public void testDeleteOnInMemoryResult() throws Exception { + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + sHelper.setAndValidateParam("lens.query.enable.mail.notify", "false"); + + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "fromindex", "0", "fetchsize", "100"); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_DIM_QUERY).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + + Response response = qHelper.exec("get", QueryURL.QUERY_URL + "/" + queryHandle.toString() + "/resultset", servLens, + null, query); + AssertUtil.assertSucceededResponse(response); + + Thread.sleep(20000); + + Response response1 = qHelper.exec("delete", QueryURL.QUERY_URL + "/" + queryHandle.toString() + "/resultset", + servLens, null, query); + AssertUtil.assertSucceededResponse(response1); + + } + + @Test + public void cubeKeywordOptional() throws Exception { + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.NO_CUBE_KEYWORD_QUERY).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + } + + + @Test + public void testQueryWithQuote() throws Exception { + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.QUOTE_QUERY).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + } + + + /* + LENS-909. When query is formatting result (status between executed and successfull), if fetched for + result it provides the result url as hdfs path. getResult was not checking for status= success,hence it had wrong + path. With this fix, fetch result will return 404 if query is not complete. + */ + + @Test + public void testResultPathBeforeQueryCompletion() throws Exception { + + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "fromindex", "0", "fetchsize", "100"); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY).getData(); + LensQuery lq = qHelper.getLensQuery(sessionHandleString, queryHandle); + + int i = 0; + while (lq.getStatus().getStatus() != QueryStatus.Status.SUCCESSFUL) { + Response response = qHelper.exec("get", QueryURL.QUERY_URL + "/" + queryHandle.toString() + "/resultset", + servLens, null, query); + AssertUtil.assertFailedResponse(response); + System.out.println("trial : " + i++); + lq = qHelper.getLensQuery(sessionHandleString, queryHandle); + } + + PersistentQueryResult result = (PersistentQueryResult) qHelper.getResultSet(queryHandle); + String resultUrl = result.getHttpResultUrl(); + System.out.println("http url : " + resultUrl); + Assert.assertTrue(resultUrl.contains("httpresultset")); + } + +} http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/lens-regression/src/test/java/org/apache/lens/regression/client/SessionResourceTests.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/test/java/org/apache/lens/regression/client/SessionResourceTests.java b/lens-regression/src/test/java/org/apache/lens/regression/client/SessionResourceTests.java index bbe438f..3bb30d8 100644 --- a/lens-regression/src/test/java/org/apache/lens/regression/client/SessionResourceTests.java +++ b/lens-regression/src/test/java/org/apache/lens/regression/client/SessionResourceTests.java @@ -107,8 +107,7 @@ public class SessionResourceTests extends BaseTestClass { } public boolean checkSessionParamMap(String sessionHandle) throws Exception { - MapBuilder query = new MapBuilder("sessionid", sessionHandle); - query.put("verbose", "true"); + MapBuilder query = new MapBuilder("sessionid", sessionHandle, "verbose", "true"); Response response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query); AssertUtil.assertSucceededResponse(response); StringList strList = response.readEntity(new GenericType<StringList>(StringList.class)); @@ -120,14 +119,14 @@ public class SessionResourceTests extends BaseTestClass { } - @Test(enabled = true) + @Test public void testSessionGet() throws Exception { Response response = lens.exec("get", "/session", servLens, null, null); AssertUtil.assertSucceededResponse(response); } - @Test(enabled = true) + @Test public void testSessionPostDelete() throws Exception { Map<String, String> resource = new HashMap<String, String>(); @@ -146,13 +145,13 @@ public class SessionResourceTests extends BaseTestClass { Assert.assertFalse(checkSessionParamMap(sessionHandle), "Session is Still Open"); } - @Test(enabled = true) + @Test public void testSessionParamsGetVerbose() throws Exception { Assert.assertTrue(checkSessionParamMap(sessionHandleString), "Returned Empty Params list"); } - @Test(enabled = true) + @Test public void testSessionParamsGetNPut() throws Exception { Map<String, String> resource = new HashMap<String, String>(); @@ -164,8 +163,8 @@ public class SessionResourceTests extends BaseTestClass { Response response = lens.sendForm("put", SessionURL.SESSION_PARAMS_URL, formData); AssertUtil.assertSucceeded(response); - MapBuilder query = new MapBuilder("sessionid", sessionHandleString); - query.put("key", "datanucleus.autoCreateSchema"); + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "key", "datanucleus.autoCreateSchema"); + response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query); AssertUtil.assertSucceededResponse(response); @@ -173,17 +172,16 @@ public class SessionResourceTests extends BaseTestClass { HashMap<String, String> map = Util.stringListToMap(strList); Assert.assertEquals(map.get("datanucleus.autoCreateSchema"), - newParamsValue, "From Session Params Put"); + newParamsValue, "From Session Params Put"); Assert.assertEquals(map.size(), 1, "Params List contains more than one param"); } //Negative Test Case - @Test(enabled = true) + @Test public void testSessionGetUndefinedParams() throws Exception { String undefinedParamsKey = "test123"; - MapBuilder query = new MapBuilder("sessionid", sessionHandleString); - query.put("key", undefinedParamsKey); + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "key", undefinedParamsKey); Response response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query); AssertUtil.assertSucceededResponse(response); StringList strList = response.readEntity(new GenericType<StringList>(StringList.class)); @@ -195,7 +193,7 @@ public class SessionResourceTests extends BaseTestClass { * Testing if Session is restored after server restart */ - @Test(enabled = true) + @Test public void testSessionRestore() throws Exception { Map<String, String> resource = new HashMap<String, String>(); resource.put("sessionid", sessionHandleString); @@ -208,8 +206,7 @@ public class SessionResourceTests extends BaseTestClass { lens.restart(); - MapBuilder query = new MapBuilder("sessionid", sessionHandleString); - query.put("key", "datanucleus.autoCreateSchema"); + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "key", "datanucleus.autoCreateSchema"); response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query); AssertUtil.assertSucceededResponse(response); @@ -217,12 +214,12 @@ public class SessionResourceTests extends BaseTestClass { HashMap<String, String> map = Util.stringListToMap(strList); Assert.assertEquals(map.get("datanucleus.autoCreateSchema"), - newParamsValue, "From Session Params Put"); + newParamsValue, "From Session Params Put"); Assert.assertEquals(map.size(), 1, "Params List contains more than one param"); } - @Test(enabled = true) + @Test public void testSessionHDFSResourcePutNDelete() throws Exception { String path = hdfsJarPath + "/" + hiveUdfJar; @@ -232,7 +229,7 @@ public class SessionResourceTests extends BaseTestClass { LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL); Assert.assertEquals(lensQuery.getStatus().getStatusMessage().trim(), - "Query is successful!", "Query did not succeed"); + "Query is successful!", "Query did not succeed"); sHelper.removeResourcesJar(path); @@ -240,11 +237,11 @@ public class SessionResourceTests extends BaseTestClass { lensQuery = qHelper.waitForCompletion(queryHandle); Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.FAILED); Assert.assertNotEquals(lensQuery.getStatus().getStatusMessage().trim(), - "Query is successful!", "Query Should have Failed but it Passed"); + "Query is successful!", "Query Should have Failed but it Passed"); } - @Test(enabled = true) + @Test public void testSessionLocalResourcePutNDelete() throws Exception { String path = serverResourcePath + "/" + hiveUdfJar; @@ -254,7 +251,7 @@ public class SessionResourceTests extends BaseTestClass { LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL); Assert.assertEquals(lensQuery.getStatus().getStatusMessage().trim(), - "Query is successful!", "Query did not succeed"); + "Query is successful!", "Query did not succeed"); sHelper.removeResourcesJar(path); @@ -262,11 +259,11 @@ public class SessionResourceTests extends BaseTestClass { lensQuery = qHelper.waitForCompletion(queryHandle); Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.FAILED); Assert.assertNotEquals(lensQuery.getStatus().getStatusMessage().trim(), - "Query is successful!", "Query Should have Failed but it Passed"); + "Query is successful!", "Query Should have Failed but it Passed"); } - @Test(enabled = true) + @Test public void testListResources() throws Exception { String path = serverResourcePath + "/" + hiveUdfJar; @@ -285,7 +282,7 @@ public class SessionResourceTests extends BaseTestClass { } - @Test(enabled = true) + @Test public void testSessionGone() throws Exception { String newSession = sHelper.openNewSession("test", "test"); sHelper.closeNewSession(newSession); @@ -298,7 +295,7 @@ public class SessionResourceTests extends BaseTestClass { //Setting DB with closed session Handle response = lens.exec("post", MetastoreURL.METASTORE_DATABASES_URL, servLens, - null, query, MediaType.APPLICATION_XML_TYPE, null, lens.getCurrentDB()); + null, query, MediaType.APPLICATION_XML_TYPE, null, lens.getCurrentDB()); AssertUtil.assertGoneResponse(response); //Explain Query with closed session Handle @@ -308,7 +305,7 @@ public class SessionResourceTests extends BaseTestClass { formData.add("operation", "EXPLAIN"); formData.add("conf", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><conf />"); response = lens.exec("post", "/queryapi/queries", servLens, null, null, - MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); + MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); AssertUtil.assertGoneResponse(response); //Execute Query with closed session Handle @@ -318,12 +315,12 @@ public class SessionResourceTests extends BaseTestClass { formData.add("operation", "EXECUTE"); formData.add("conf", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><conf />"); response = lens.exec("post", "/queryapi/queries", servLens, null, null, - MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); + MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); AssertUtil.assertGoneResponse(response); } - @Test(enabled = true) + @Test public void testOpenSessionWithDB() throws Exception { String newDb = "opensessionwithdb"; @@ -335,7 +332,7 @@ public class SessionResourceTests extends BaseTestClass { mHelper.dropDatabase(newDb); } - @Test(enabled = true) + @Test public void testOpenSessionDefault() throws Exception { String newSession = sHelper.openNewSession("test", "test"); @@ -345,7 +342,7 @@ public class SessionResourceTests extends BaseTestClass { } - @Test(enabled = true) + @Test public void testOpenSessionDBDoesnotExist() throws Exception { FormBuilder formData = new FormBuilder(); @@ -354,12 +351,12 @@ public class SessionResourceTests extends BaseTestClass { formData.add("database", "dbdoesnotexist"); Response response = mHelper.exec("post", "/session", servLens, null, null, - MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); + MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); AssertUtil.assertFailedResponse(response); } - @Test(enabled = true) + @Test public void testDBCeption() throws Exception { String newDb = "opensessionwithdb"; http://git-wip-us.apache.org/repos/asf/lens/blob/393153fa/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 309921f..ca5c45d 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,8 @@ <lombok.maven.plugin.version>1.16.4.1</lombok.maven.plugin.version> <typesafe.config.version>1.2.1</typesafe.config.version> <logback.version>1.1.3</logback.version> + <protobuf.version>2.5.0</protobuf.version> + <jackson.asl.version>1.9.13</jackson.asl.version> <jackson.guava.version>2.3.3</jackson.guava.version> @@ -860,6 +862,11 @@ <version>${guava.version}</version> </dependency> <dependency> + <groupId>com.google.protobuf</groupId> + <artifactId>protobuf-java</artifactId> + <version>${protobuf.version}</version> + </dependency> + <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop.version}</version>
