You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by pr...@apache.org on 2016/04/25 09:08:06 UTC
lens git commit: LENS-1004: Add prepared and query API tests
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 <ar...@gmail.com>
Authored: Mon Apr 25 12:33:17 2016 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
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>