Repository: lens Updated Branches: refs/heads/master 3b3f42da5 -> e26ee5a71
LENS-1017 : Add session config tests to regression Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/e26ee5a7 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/e26ee5a7 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/e26ee5a7 Branch: refs/heads/master Commit: e26ee5a71fc493dec34f81066b52be399576c996 Parents: 3b3f42d Author: Archana H <[email protected]> Authored: Wed Apr 27 17:14:50 2016 +0530 Committer: Deepak Kumar Barr <[email protected]> Committed: Wed Apr 27 17:14:50 2016 +0530 ---------------------------------------------------------------------- .../core/constants/QueryInventory.java | 4 +- .../regression/core/helpers/QueryHelper.java | 8 +- .../regression/core/helpers/SessionHelper.java | 3 +- .../lens/regression/client/ITListQueryTest.java | 26 +- .../lens/regression/client/KillQueryTests.java | 18 +- .../regression/client/SessionResourceTests.java | 153 +++----- .../regression/config/ITSessionConfigTests.java | 358 +++++++++++++++++++ 7 files changed, 435 insertions(+), 135 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/e26ee5a7/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 5f1f607..869a96b 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 @@ -60,8 +60,8 @@ public class QueryInventory { + "time_range_in(delivery_time,'2015-04-12','2015-04-14')"; public static final String WRONG_HIVE_DIM_QUERY = "cube select NO_ID from sample_dim2 where name != 'first'"; - public static final String WRONG_HIVE_CUBE_QUERY="cube select sample_dim_chain.name, measure4 from sample_cube where " - + "time_range_in(dt, '2014-07-01-00', '2014-07-25-05')"; + public static final String NO_PARTITION_HIVE_CUBE_QUERY="cube select sample_dim_chain.name, measure4 from sample_cube" + + " where time_range_in(dt, '2014-07-01-00', '2014-07-25-05')"; public static final String WRONG_SYNTAX_QUERY="cube select id,name from sample_dim2 name != 'first'"; http://git-wip-us.apache.org/repos/asf/lens/blob/e26ee5a7/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 9355e47..2b4a750 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 @@ -298,18 +298,16 @@ public class QueryHelper extends ServiceManagerHelper { * @param sessionHandleString * @return the query Result */ + public QueryResult getResultSet(QueryHandle queryHandle, String fromIndex, String fetchSize, String sessionHandleString) throws LensException { - MapBuilder query = new MapBuilder("sessionid", sessionHandleString); - query.put("fromindex", fromIndex); - query.put("fetchsize", fetchSize); - + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "fromindex", fromIndex, + "fetchsize", fetchSize); Response response = this.exec("get", QueryURL.QUERY_URL + "/" + queryHandle.toString() + "/resultset", servLens, null, query, MediaType.APPLICATION_XML_TYPE, MediaType.APPLICATION_XML, null); AssertUtil.assertSucceededResponse(response); QueryResult result = response.readEntity(new GenericType<QueryResult>(){}); - log.info("QueryResult String:{}", result); return result; } http://git-wip-us.apache.org/repos/asf/lens/blob/e26ee5a7/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 753a7b4..4918882 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 @@ -216,8 +216,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); + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "key", param); Response response = this.exec("get", SessionURL.SESSION_PARAMS_URL, servLens, null, query); AssertUtil.assertSucceededResponse(response); StringList strList = response.readEntity(new GenericType<StringList>(StringList.class)); http://git-wip-us.apache.org/repos/asf/lens/blob/e26ee5a7/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 d193c9c..60cf26c 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 @@ -77,7 +77,7 @@ public class ITListQueryTest extends BaseTestClass { lens.closeSession(); } - @DataProvider(name = "DP") + @DataProvider(name = "query-provider") public Object[][] getData() throws Exception { String[] queries = new String[]{QueryInventory.HIVE_CUBE_QUERY, QueryInventory.HIVE_DIM_QUERY, @@ -93,7 +93,7 @@ public class ITListQueryTest extends BaseTestClass { } - @Test(enabled = true, dataProvider = "DP") + @Test(enabled = true, dataProvider = "query-provider") public void getQueryByQueryNameAllQuery(String queryString) throws Exception { String queryName = "queryNameFirst"; @@ -151,35 +151,26 @@ public class ITListQueryTest extends BaseTestClass { public void listQueryByTimeRange() throws Exception { //Running First Query - String startTime = String.valueOf(System.currentTimeMillis()); logger.info("Start Time of 1st Query : " + startTime); - Thread.sleep(20000); - 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"); - String endTime = String.valueOf(System.currentTimeMillis()); logger.info("End Time of 1st Query : " + endTime); - Thread.sleep(20000); + Thread.sleep(1000); //Running Second Query - String startTime1 = String.valueOf(System.currentTimeMillis()); logger.info("Start Time of 2nd Query : " + startTime1); - Thread.sleep(20000); - QueryHandle queryHandle1 = (QueryHandle) qHelper.executeQuery(QueryInventory.QUERY).getData(); lensQuery = qHelper.waitForCompletion(queryHandle1); Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); - String endTime1 = String.valueOf(System.currentTimeMillis()); logger.info("End Time of 2nd Query : " + endTime1); List<QueryHandle> list = qHelper.getQueryHandleList(null, null, null, sessionHandleString, startTime, endTime); - Assert.assertTrue(list.contains(queryHandle), "QueryList by TimeRange is not correct"); Assert.assertFalse(list.contains(queryHandle1), "QueryList by TimeRange is not correct"); @@ -239,7 +230,6 @@ public class ITListQueryTest extends BaseTestClass { String startTime = String.valueOf(System.currentTimeMillis()); logger.info("Start Time of 1st Query : " + startTime); - Thread.sleep(60000); QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.QUERY, queryName).getData(); LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); @@ -467,28 +457,26 @@ public class ITListQueryTest extends BaseTestClass { String diffSession2 = sHelper.openNewSession(user2, pwd2, lens.getCurrentDB()); String startTime1 = String.valueOf(System.currentTimeMillis()); - Thread.sleep(10000); QueryHandle q1 = (QueryHandle) qHelper.executeQuery(QueryInventory.QUERY, queryName1).getData(); LensQuery lensQuery = qHelper.waitForCompletion(q1); Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); String endTime1 = String.valueOf(System.currentTimeMillis()); - Thread.sleep(10000); + Thread.sleep(1000); String startTime2 = String.valueOf(System.currentTimeMillis()); - Thread.sleep(10000); QueryHandle q2 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY, queryName2, diffSession1).getData(); String endTime2 = String.valueOf(System.currentTimeMillis()); - Thread.sleep(10000); + Thread.sleep(1000); String startTime3 = String.valueOf(System.currentTimeMillis()); - Thread.sleep(10000); + Thread.sleep(1000); QueryHandle q3 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY, queryName3, diffSession2).getData(); qHelper.killQueryByQueryHandle(q3); String endTime3 = String.valueOf(System.currentTimeMillis()); - Thread.sleep(10000); + Thread.sleep(1000); List<QueryHandle> list1 = qHelper.getQueryHandleList(queryName2, "RUNNING", user1, sessionHandleString, startTime2, endTime2); http://git-wip-us.apache.org/repos/asf/lens/blob/e26ee5a7/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java b/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java index e2148e3..8aabe2d 100644 --- a/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java +++ b/lens-regression/src/test/java/org/apache/lens/regression/client/KillQueryTests.java @@ -128,8 +128,7 @@ public class KillQueryTests extends BaseTestClass { Assert.assertEquals(queryStatus2.getStatus(), QueryStatus.Status.RUNNING, "Query is Not Running"); Assert.assertEquals(queryStatus3.getStatus(), QueryStatus.Status.RUNNING, "Query is Not Running"); - logger.info("Going to kill in 20 sec"); - Thread.sleep(20000); + Thread.sleep(1000); qHelper.killQuery(null, null, lens.getUserName()); Thread.sleep(2000); @@ -302,24 +301,17 @@ public class KillQueryTests extends BaseTestClass { String startTime1 = String.valueOf(System.currentTimeMillis()); logger.info("Start Time of 1st Query : " + startTime1); - Thread.sleep(20000); - + Thread.sleep(1000); QueryHandle queryHandle1 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY).getData(); - logger.info("1st QUERY HANDLE : " + queryHandle1); - String endTime1 = String.valueOf(System.currentTimeMillis()); logger.info("End Time of 1st Query : " + endTime1); - //Sleeping for 1 min - Thread.sleep(20000); + Thread.sleep(1000); String startTime2 = String.valueOf(System.currentTimeMillis()); logger.info("Start Time of 2nd Query : " + startTime2); - Thread.sleep(20000); - + Thread.sleep(1000); QueryHandle queryHandle2 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY).getData(); - logger.info("2nd QUERY HANDLE : " + queryHandle2); - String endTime2 = String.valueOf(System.currentTimeMillis()); logger.info("End Time of 2nd Query : " + endTime2); @@ -352,7 +344,7 @@ public class KillQueryTests extends BaseTestClass { String startTime1 = String.valueOf(System.currentTimeMillis()); logger.info("Start Time of 1st Query : " + startTime1); - Thread.sleep(20000); + Thread.sleep(1000); QueryHandle queryHandle1 = (QueryHandle) qHelper.executeQuery(QueryInventory.SLEEP_QUERY, queryName1).getData(); logger.info("1st QUERY HANDLE : " + queryHandle1); http://git-wip-us.apache.org/repos/asf/lens/blob/e26ee5a7/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 3bb30d8..62dd0ba 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 @@ -39,6 +39,7 @@ import org.apache.lens.api.query.QueryHandle; import org.apache.lens.api.query.QueryStatus; import org.apache.lens.regression.core.constants.MetastoreURL; import org.apache.lens.regression.core.constants.QueryInventory; +import org.apache.lens.regression.core.constants.QueryURL; import org.apache.lens.regression.core.constants.SessionURL; import org.apache.lens.regression.core.helpers.LensServerHelper; import org.apache.lens.regression.core.helpers.MetastoreHelper; @@ -49,9 +50,9 @@ 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.regression.util.HadoopUtil; import org.apache.lens.regression.util.Util; import org.apache.lens.server.api.error.LensException; +import org.apache.lens.server.api.util.LensUtil; import org.apache.log4j.Logger; @@ -84,13 +85,6 @@ public class SessionResourceTests extends BaseTestClass { @BeforeClass(alwaysRun = true) public void initialize() throws IOException, JSchException, JAXBException, LensException { servLens = ServiceManagerHelper.init(); - - HadoopUtil.uploadJars(localJarPath + "/" + hiveUdfJar, hdfsJarPath); - logger.info("Creating Local Resource Directory in Server Machine"); - Util.runRemoteCommand("mkdir -p " + serverResourcePath); - String path = hdfsJarPath + "/" + hiveUdfJar; - logger.info("Copying " + path + " to Local Resource Directory in Server Machine"); - Util.runRemoteCommand("hadoop fs -get " + path + " " + serverResourcePath); } @BeforeMethod(alwaysRun = true) @@ -106,13 +100,13 @@ public class SessionResourceTests extends BaseTestClass { lens.closeSession(); } - public boolean checkSessionParamMap(String sessionHandle) throws Exception { + private boolean checkSessionParamMap(String sessionHandle) throws Exception { 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)); HashMap<String, String> map = Util.stringListToMap(strList); - if (map == null){ + if (map == null) { return false; } return true; @@ -121,64 +115,34 @@ public class SessionResourceTests extends BaseTestClass { @Test public void testSessionGet() throws Exception { - Response response = lens.exec("get", "/session", servLens, null, null); - AssertUtil.assertSucceededResponse(response); + String newSessionHandle = sHelper.openNewSession("diff", "diff"); + Assert.assertNotNull(newSessionHandle); } @Test - public void testSessionPostDelete() throws Exception { - - Map<String, String> resource = new HashMap<String, String>(); - resource.put("username", lens.getUserName()); - resource.put("password", lens.getPassword()); - - FormBuilder formData = new FormBuilder(resource); - Response response = lens.sendForm("post", SessionURL.SESSION_BASE_URL, formData); - AssertUtil.assertSucceededResponse(response); - String sessionHandle = response.readEntity(String.class); - Assert.assertTrue(checkSessionParamMap(sessionHandle), "Session is Closed"); - - MapBuilder query = new MapBuilder("sessionid", sessionHandle); - response = lens.exec("delete", SessionURL.SESSION_BASE_URL, servLens, null, query); - AssertUtil.assertSucceeded(response); - Assert.assertFalse(checkSessionParamMap(sessionHandle), "Session is Still Open"); - } - - @Test - public void testSessionParamsGetVerbose() throws Exception { + public void testSessionParamsGetVerbose() throws Exception { Assert.assertTrue(checkSessionParamMap(sessionHandleString), "Returned Empty Params list"); } @Test - public void testSessionParamsGetNPut() throws Exception { - - Map<String, String> resource = new HashMap<String, String>(); - resource.put("sessionid", sessionHandleString); - resource.put("key", newParamsKey); - resource.put("value", newParamsValue); + public void testSessionParamsGetNPut() throws Exception { + Map<String, String> resource = LensUtil.getHashMap("sessionid", sessionHandleString, "key", newParamsKey, + "value", newParamsValue); FormBuilder formData = new FormBuilder(resource); Response response = lens.sendForm("put", SessionURL.SESSION_PARAMS_URL, formData); AssertUtil.assertSucceeded(response); - MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "key", "datanucleus.autoCreateSchema"); - - response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query); - AssertUtil.assertSucceededResponse(response); + String value = sHelper.getSessionParam(newParamsKey); + Assert.assertEquals(value, newParamsValue, "From Session Params Put"); - StringList strList = response.readEntity(new GenericType<StringList>(StringList.class)); - HashMap<String, String> map = Util.stringListToMap(strList); - - Assert.assertEquals(map.get("datanucleus.autoCreateSchema"), - newParamsValue, "From Session Params Put"); - Assert.assertEquals(map.size(), 1, "Params List contains more than one param"); } //Negative Test Case @Test - public void testSessionGetUndefinedParams() throws Exception { + public void testSessionGetUndefinedParams() throws Exception { String undefinedParamsKey = "test123"; MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "key", undefinedParamsKey); @@ -195,32 +159,29 @@ public class SessionResourceTests extends BaseTestClass { @Test public void testSessionRestore() throws Exception { - Map<String, String> resource = new HashMap<String, String>(); - resource.put("sessionid", sessionHandleString); - resource.put("key", newParamsKey); - resource.put("value", newParamsValue); + Map<String, String> resource = LensUtil.getHashMap("sessionid", sessionHandleString, + "key", newParamsKey, "value", newParamsValue); FormBuilder formData = new FormBuilder(resource); + Response response = lens.sendForm("put", SessionURL.SESSION_PARAMS_URL, formData); AssertUtil.assertSucceeded(response); lens.restart(); - MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "key", "datanucleus.autoCreateSchema"); + MapBuilder query = new MapBuilder("sessionid", sessionHandleString, "key", newParamsKey); response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query); AssertUtil.assertSucceededResponse(response); - StringList strList = response.readEntity(new GenericType<StringList>(StringList.class)); HashMap<String, String> map = Util.stringListToMap(strList); - Assert.assertEquals(map.get("datanucleus.autoCreateSchema"), - newParamsValue, "From Session Params Put"); + Assert.assertEquals(map.get(newParamsKey), newParamsValue, "From Session Params Put"); Assert.assertEquals(map.size(), 1, "Params List contains more than one param"); } @Test - public void testSessionHDFSResourcePutNDelete() throws Exception { + public void testSessionHDFSResourcePutNDelete() throws Exception { String path = hdfsJarPath + "/" + hiveUdfJar; sHelper.addResourcesJar(path); @@ -228,21 +189,18 @@ public class SessionResourceTests extends BaseTestClass { QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(createSleepFunction).getData(); 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"); sHelper.removeResourcesJar(path); queryHandle = (QueryHandle) qHelper.executeQuery(createSleepFunction).getData(); 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"); + } @Test - public void testSessionLocalResourcePutNDelete() throws Exception { + public void testSessionLocalResourcePutNDelete() throws Exception { String path = serverResourcePath + "/" + hiveUdfJar; sHelper.addResourcesJar(path); @@ -250,47 +208,46 @@ public class SessionResourceTests extends BaseTestClass { QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(createSleepFunction).getData(); 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"); sHelper.removeResourcesJar(path); queryHandle = (QueryHandle) qHelper.executeQuery(createSleepFunction).getData(); 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"); } @Test - public void testListResources() throws Exception { + public void testListResources() throws Exception { String path = serverResourcePath + "/" + hiveUdfJar; sHelper.addResourcesJar(path); MapBuilder query = new MapBuilder("sessionid", sessionHandleString); Response response = lens.sendQuery("get", SessionURL.SESSION_LIST_RESOURCE_URL, query); - logger.info(response); AssertUtil.assertSucceededResponse(response); StringList responseString = response.readEntity(StringList.class); List<String> jars = responseString.getElements(); - for(String t : jars) { + for (String t : jars) { Assert.assertTrue(t.contains(hiveUdfJar)); } - System.out.println(responseString); } @Test - public void testSessionGone() throws Exception { + public void testSessionGone() throws Exception { + String newSession = sHelper.openNewSession("test", "test"); sHelper.closeNewSession(newSession); + MapBuilder query = new MapBuilder("sessionid", newSession); - // Get Session Params with closed session + // Get Session resources with closed session Response response = lens.sendQuery("get", SessionURL.SESSION_LIST_RESOURCE_URL, query); - logger.info(response); + AssertUtil.assertGoneResponse(response); + + // Get Session params with closd session + response = lens.sendQuery("get", SessionURL.SESSION_PARAMS_URL, query); AssertUtil.assertGoneResponse(response); //Setting DB with closed session Handle @@ -298,30 +255,27 @@ public class SessionResourceTests extends BaseTestClass { null, query, MediaType.APPLICATION_XML_TYPE, null, lens.getCurrentDB()); AssertUtil.assertGoneResponse(response); - //Explain Query with closed session Handle FormBuilder formData = new FormBuilder(); formData.add("sessionid", newSession); formData.add("query", QueryInventory.QUERY); - 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, + + //Explain Query with closed session Handle + formData.add("operation", "EXPLAIN"); + response = lens.exec("post", QueryURL.QUERY_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); AssertUtil.assertGoneResponse(response); //Execute Query with closed session Handle - formData = new FormBuilder(); - formData.add("sessionid", newSession); - formData.add("query", QueryInventory.QUERY); 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, + response = lens.exec("post", QueryURL.QUERY_URL, servLens, null, null, MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); AssertUtil.assertGoneResponse(response); } @Test - public void testOpenSessionWithDB() throws Exception { + public void testOpenSessionWithDB() throws Exception { String newDb = "opensessionwithdb"; mHelper.createDatabase(newDb); @@ -333,7 +287,7 @@ public class SessionResourceTests extends BaseTestClass { } @Test - public void testOpenSessionDefault() throws Exception { + public void testOpenSessionDefault() throws Exception { String newSession = sHelper.openNewSession("test", "test"); String curDB = mHelper.getCurrentDatabase(newSession); @@ -343,21 +297,14 @@ public class SessionResourceTests extends BaseTestClass { @Test - public void testOpenSessionDBDoesnotExist() throws Exception { - - FormBuilder formData = new FormBuilder(); - formData.add("username", "test"); - formData.add("password", "test"); - formData.add("database", "dbdoesnotexist"); + public void testOpenSessionDBDoesnotExist() throws Exception { - Response response = mHelper.exec("post", "/session", servLens, null, null, - MediaType.MULTIPART_FORM_DATA_TYPE, MediaType.APPLICATION_XML, formData.getForm()); + Response response = sHelper.openSessionReturnResponse("test", "test", "dbdoesnotexist", null); AssertUtil.assertFailedResponse(response); - } @Test - public void testDBCeption() throws Exception { + public void testSessionDBChange() throws Exception { String newDb = "opensessionwithdb"; String newDb1 = "opensessionwithdb1"; @@ -371,9 +318,27 @@ public class SessionResourceTests extends BaseTestClass { mHelper.setCurrentDatabase(newSession, newDb1); curDB = mHelper.getCurrentDatabase(newSession); Assert.assertEquals(curDB, newDb1, "Could not open session with passed db"); + sHelper.closeNewSession(newSession); mHelper.dropDatabase(newDb); mHelper.dropDatabase(newDb1); } + //Fails as closeSession cannot take json as input,. (No API can take json as input) + @Test(enabled = false) + public void testGetSessionJson() throws Exception { + + String newSessionHandle = sHelper.openNewSession("diff", "diff", null, MediaType.APPLICATION_JSON); + Assert.assertNotNull(newSessionHandle); + Assert.assertFalse(newSessionHandle.isEmpty()); + sHelper.closeNewSession(newSessionHandle, MediaType.APPLICATION_JSON); + } + + @Test(enabled = true) + public void testCloseSessionJson() throws Exception { + String s2 = sHelper.openNewSession("diff", "diff", null, MediaType.APPLICATION_XML); + Assert.assertNotNull(s2); + Assert.assertFalse(s2.isEmpty()); + sHelper.closeNewSession(s2, MediaType.APPLICATION_JSON); + } } http://git-wip-us.apache.org/repos/asf/lens/blob/e26ee5a7/lens-regression/src/test/java/org/apache/lens/regression/config/ITSessionConfigTests.java ---------------------------------------------------------------------- diff --git a/lens-regression/src/test/java/org/apache/lens/regression/config/ITSessionConfigTests.java b/lens-regression/src/test/java/org/apache/lens/regression/config/ITSessionConfigTests.java new file mode 100644 index 0000000..d3b8ffb --- /dev/null +++ b/lens-regression/src/test/java/org/apache/lens/regression/config/ITSessionConfigTests.java @@ -0,0 +1,358 @@ +/** + * 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.config; + +import java.io.IOException; +import java.lang.reflect.Method; + +import javax.ws.rs.client.WebTarget; + +import javax.xml.bind.JAXBException; + +import org.apache.lens.api.query.*; +import org.apache.lens.cube.parse.CubeQueryConfUtil; +import org.apache.lens.regression.client.SessionResourceTests; +import org.apache.lens.regression.core.constants.QueryInventory; +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.util.Util; +import org.apache.lens.server.api.LensConfConstants; +import org.apache.lens.server.api.error.LensException; + +import org.apache.log4j.Logger; + +import org.testng.Assert; +import org.testng.annotations.*; + +import com.jcraft.jsch.JSchException; + + +public class ITSessionConfigTests extends BaseTestClass{ + + WebTarget servLens; + String sessionHandleString; + + LensServerHelper lens = getLensServerHelper(); + MetastoreHelper mHelper = getMetastoreHelper(); + SessionHelper sHelper = getSessionHelper(); + QueryHelper qHelper = getQueryHelper(); + + private static String queryResultParentDirPath = "/tmp/lensreports"; + private String lensConfFilePath = lens.getServerDir() + "/conf/lens-site.xml"; + + private static Logger logger = Logger.getLogger(SessionResourceTests.class); + + @BeforeClass(alwaysRun = true) + public void initialize() throws IOException, JSchException, JAXBException, LensException { + servLens = ServiceManagerHelper.init(); + } + + @BeforeMethod(alwaysRun = true) + public void setUp(Method method) throws Exception { + logger.info("Test Name: " + method.getName()); + sessionHandleString = sHelper.openSession(lens.getCurrentDB()); + } + + @AfterMethod(alwaysRun=true) + public void restoreConfig() throws JSchException, IOException, JAXBException, LensException{ + sHelper.closeSession(); + } + + + @DataProvider(name="query_provider") + public Object[][] queryProvider(){ + String[][] query = { {QueryInventory.JDBC_DIM_QUERY}, {QueryInventory.HIVE_CUBE_QUERY}, + {QueryInventory.HIVE_DIM_QUERY}, }; + return query; + } + + + // Test for lens.query.enable.persistent.resultset + + @Test(enabled=true, dataProvider="query_provider") + public void testDisablePresistentResult(String queryString) throws Exception{ + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(queryString).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + + InMemoryQueryResult inmemory = (InMemoryQueryResult) qHelper.getResultSet(queryHandle, "0", "100"); + Assert.assertNotNull(inmemory); + + try { + PersistentQueryResult result = (PersistentQueryResult)qHelper.getResultSet(queryHandle, "0", "100"); + Assert.assertFalse(true); + } catch(Exception e){ + logger.info(e.getMessage().toString()); + } + + } + + @Test(enabled=true, dataProvider="query_provider") + public void testPresistentResult(String queryString) throws Exception{ + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(queryString).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + + try{ + InMemoryQueryResult inmemory = (InMemoryQueryResult)qHelper.getResultSet(queryHandle, "0", "100"); + Assert.assertFalse(true); + }catch(Exception e){ + logger.info(e.getMessage().toString()); + } + + PersistentQueryResult result = (PersistentQueryResult)qHelper.getResultSet(queryHandle, "0", "100"); + Assert.assertNotNull(result); + } + + + @Test(enabled=false) //Issue with indriver persistence for local file path + public void testPersistentResultsetIndriver() throws Exception{ + + String parentDir = "file://" + queryResultParentDirPath; + String hdfsoutPath = "temphdfsout"; + Util.runRemoteCommand("mkdir " + queryResultParentDirPath + "/" + hdfsoutPath); + Util.runRemoteCommand("chmod -R 777 " + queryResultParentDirPath + "/"+ hdfsoutPath); + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true"); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SET_PARENT_DIR, parentDir); + sHelper.setAndValidateParam(LensConfConstants.QUERY_HDFS_OUTPUT_PATH, hdfsoutPath); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.HIVE_CUBE_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); + String rowCount = Util.runRemoteCommand("cat " + queryResultParentDirPath + "/" + hdfsoutPath + "/" + + queryHandle.toString() + "/* |wc -l"); + //Result file will have 2 lines extra, column header and footer saying number of rows. + Assert.assertEquals(Integer.parseInt(rowCount.trim()), result.getNumRows()+2, + "Result is not persisted in the given directory"); + } + + + //Test for session properties lens.query.result.parent.dir + + @DataProvider(name="path_provider") + public Object[][] pathProvider() throws JSchException, IOException{ + + Util.runRemoteCommand("mkdir /tmp/temporary"); + Util.runRemoteCommand("chmod -R 777 /tmp/temporary"); + + String[][] path = { {"file://" + queryResultParentDirPath, "local"}, + {lens.getServerHdfsUrl() + queryResultParentDirPath, "hdfs"}, + {"file:///tmp/temporary", "local"}, + }; + return path; + } + + @Test(enabled=true, dataProvider="path_provider") + public void testPersistentResultPath(String parentDir, String type) throws Exception { + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SET_PARENT_DIR, parentDir); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.HIVE_CUBE_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); + String rowCount = null; + + if (type.equalsIgnoreCase("hdfs")) { + rowCount = Util.runRemoteCommand("hadoop fs -cat " + parentDir + "/" + queryHandle + "* | gunzip | wc -l"); + } else { + rowCount = Util.runRemoteCommand("cat " + parentDir.substring(7, parentDir.length()) + "/" + queryHandle + + "* | gunzip | wc -l"); + } + + Assert.assertEquals(Integer.parseInt(rowCount.trim()), result.getNumRows()+2, + "Result is not persisted in the given directory"); + } + + @Test(enabled=true, dataProvider="path_provider") + public void testPersistentResultPathJDBCQuery(String parentDir, String type) throws Exception { + + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SET_PARENT_DIR, parentDir); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.JDBC_CUBE_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); + String rowCount = null; + + if (type.equalsIgnoreCase("hdfs")) { + rowCount = Util.runRemoteCommand("hadoop fs -cat " + parentDir + "/" + queryHandle + "* | gunzip | wc -l"); + } else { + rowCount = Util.runRemoteCommand("cat " + parentDir.substring(7, parentDir.length()) + "/" + queryHandle + + "* | gunzip | wc -l"); + } + + Assert.assertEquals(Integer.parseInt(rowCount.trim()), result.getNumRows()+2); + + } + + + // Test for lens.query.result.split.multiple and lens.query.result.split.multiple.maxrows + + @Test(enabled=true, dataProvider="query_provider") + public void testQueryResultSplit(String queryString) throws Exception{ + + int splitSize = 1; + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SET_PARENT_DIR, lens.getServerHdfsUrl() + + queryResultParentDirPath); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SPLIT_INTO_MULTIPLE, "true"); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SPLIT_MULTIPLE_MAX_ROWS, String.valueOf(splitSize)); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(queryString).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed"); + PersistentQueryResult result = (PersistentQueryResult)qHelper.getResultSet(queryHandle); + + logger.info(Util.runRemoteCommand("bash hadoop fs -get " + queryResultParentDirPath + "/" + queryHandle + + ".zip /tmp")); + logger.info(Util.runRemoteCommand("cd /tmp; unzip " + queryHandle + ".zip")); + String numberOfFiles = Util.runRemoteCommand("ls /tmp/" + queryHandle + "* | grep -v zip |wc -l"); + logger.info("number of files is-:" + numberOfFiles.trim()); + int numFiles = Integer.parseInt(numberOfFiles.trim()); + Assert.assertEquals(numFiles, result.getNumRows().intValue(), "Files are not splitting"); + + for(int i = 0; i < numFiles; i++) { + String rowsPerFile = Util.runRemoteCommand("cd /tmp;ls " + queryHandle + "_part-" + String.valueOf(i) + + ".csv |wc -l"); + Assert.assertEquals(rowsPerFile.trim(), String.valueOf(splitSize), "Maxrows property not followed"); + } + } + + // Test for property lens.cube.query.fail.if.data.partial + @Test(enabled=true) + public void testQueryFailIfDataPartial() throws Exception{ + + sHelper.setAndValidateParam(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, "true"); + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.NO_PARTITION_HIVE_CUBE_QUERY).getData(); + Assert.assertNull(queryHandle); + + sHelper.setAndValidateParam(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, "false"); + queryHandle = (QueryHandle) qHelper.executeQuery(QueryInventory.NO_PARTITION_HIVE_CUBE_QUERY).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed!!"); + } + + + /* + * Test for property lens.query.output.write.header and lens.query.output.header + */ + + @Test(enabled=true, dataProvider="query_provider") + public void testQueryOutputHeader(String queryString) throws Exception { + + sHelper.setAndValidateParam(LensConfConstants.QUERY_OUTPUT_WRITE_HEADER, "true"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_OUTPUT_HEADER, "Query Result"); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SPLIT_INTO_MULTIPLE, "false"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SET_PARENT_DIR, "file://" + queryResultParentDirPath); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(queryString).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed!!"); + + PersistentQueryResult result = (PersistentQueryResult)qHelper.getResultSet(queryHandle); + Util.runRemoteCommand("gzip -d " + queryResultParentDirPath + "/" + queryHandle + ".csv.gz"); + + String content = Util.runRemoteCommand("cat " + queryResultParentDirPath + "/" + queryHandle + ".csv"); + String[] lines = content.split("\n"); + Assert.assertEquals(lines[0].trim(), "Query Result", "Header incorrect"); + + sHelper.setAndValidateParam(LensConfConstants.QUERY_OUTPUT_WRITE_HEADER, "false"); + + queryHandle = (QueryHandle) qHelper.executeQuery(queryString).getData(); + lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed!!"); + + PersistentQueryResult result1 = (PersistentQueryResult)qHelper.getResultSet(queryHandle); + Util.runRemoteCommand("gzip -d " + queryResultParentDirPath + "/" + queryHandle + ".csv.gz"); + + content = Util.runRemoteCommand("cat " + queryResultParentDirPath + "/" + queryHandle + ".csv"); + lines = content.split("\n"); + Assert.assertNotEquals(lines[0].trim(), "Query Result", "Header should not be printed"); + } + + /* + * Test for property lens.query.output.write.footer and lens.query.output.footer + */ + + @Test(enabled=true, dataProvider="query_provider") + public void testQueryOutputFooter(String queryString) throws Exception { + + sHelper.setAndValidateParam(LensConfConstants.QUERY_OUTPUT_FOOTER, "CopyRight"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_OUTPUT_WRITE_FOOTER, "true"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true"); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SPLIT_INTO_MULTIPLE, "false"); + sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); + sHelper.setAndValidateParam(LensConfConstants.RESULT_SET_PARENT_DIR, "file://" + queryResultParentDirPath); + + QueryHandle queryHandle = (QueryHandle) qHelper.executeQuery(queryString).getData(); + LensQuery lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed!!"); + + PersistentQueryResult result = (PersistentQueryResult)qHelper.getResultSet(queryHandle); + Util.runRemoteCommand("gzip -d " + queryResultParentDirPath + "/" + queryHandle + ".csv.gz"); + + String content = Util.runRemoteCommand("cat " + queryResultParentDirPath + "/" + queryHandle + ".csv"); + String[] lines = content.split("\n"); + Assert.assertEquals(lines[result.getNumRows()+1].trim(), "CopyRight", "Footer incorrect"); + + sHelper.setAndValidateParam(LensConfConstants.QUERY_OUTPUT_WRITE_FOOTER, "false"); + + queryHandle = (QueryHandle) qHelper.executeQuery(queryString).getData(); + lensQuery = qHelper.waitForCompletion(queryHandle); + Assert.assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Query did not succeed!!"); + + PersistentQueryResult result1 = (PersistentQueryResult)qHelper.getResultSet(queryHandle); + Util.runRemoteCommand("gzip -d " + queryResultParentDirPath + "/" + queryHandle + ".csv.gz"); + + content = Util.runRemoteCommand("cat " + queryResultParentDirPath + "/" + queryHandle + ".csv"); + lines = content.split("\n"); + Assert.assertEquals(lines.length, (result1.getNumRows().intValue())+1, "Footer shouldn't be coming"); + } + +} + + +
