/** * 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.ArrayList; import java.util.HashMap; import java.util.List; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; import javax.xml.bind.JAXBException; import org.apache.lens.api.query.PersistentQueryResult; import org.apache.lens.api.query.QueryHandle; import org.apache.lens.api.query.save.*; import org.apache.lens.regression.core.helpers.*; 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.lens.server.api.util.LensUtil; import org.apache.log4j.Logger; import org.testng.Assert; import org.testng.annotations.*; import com.google.common.collect.ImmutableSet; public class ITSavedQueryTests extends BaseTestClass { WebTarget servLens; private String sessionHandleString; private static Logger logger = Logger.getLogger(ITSavedQueryTests.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 = sHelper.openSession(lens.getCurrentDB()); } @AfterMethod(alwaysRun = true) public void closeSession() throws Exception { deleteAllSavedQueries(); logger.info("Closing Session"); sHelper.closeSession(); } protected ResourceModifiedResponse getSampleSavedQuery(String name) throws IOException, JAXBException { List<Parameter> paramList = new ArrayList<>(); String query = "select id, name from sample_dim where name != :param"; paramList.add(savedQueryResourceHelper.getParameter("param", ParameterDataType.STRING, "first", ParameterCollectionType.SINGLE)); ResourceModifiedResponse savedQuery = savedQueryResourceHelper.createSavedQuery(query, name, paramList); return savedQuery; } @Test public void listSavedQueries() throws Exception { ListResponse savedQueryList = savedQueryResourceHelper.listSavedQueries("0", "10", sessionHandleString); long initialSize = savedQueryList.getTotalCount(); ResourceModifiedResponse rmr1 = getSampleSavedQuery("list-query1"); ResourceModifiedResponse rmr2 = getSampleSavedQuery("list-query2"); savedQueryList = savedQueryResourceHelper.listSavedQueries("0", "10", sessionHandleString); Assert.assertEquals(savedQueryList.getResoures().size(), initialSize + 2); savedQueryList = savedQueryResourceHelper.listSavedQueries(Long.toString(initialSize+1), "10", sessionHandleString); Assert.assertEquals(savedQueryList.getResoures().size(), 1); } @Test public void createNRunSavedQuery() throws Exception { String session = sHelper.openSession("user1", "pwd1", lens.getCurrentDB()); sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false"); sHelper.setAndValidateParam(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false"); //creating saved query List<Parameter> paramList = new ArrayList<>(); String query = "select id, name from sample_dim where name != :param"; paramList.add(savedQueryResourceHelper.getParameter("param", ParameterDataType.STRING, "first", ParameterCollectionType.SINGLE)); ResourceModifiedResponse rmr = savedQueryResourceHelper.createSavedQuery(query, "query-1", paramList, session); Assert.assertNotNull(rmr.getId()); //running above created saved query HashMap<String, String> paramMap = LensUtil.getHashMap("param", "second"); QueryHandle handle = savedQueryResourceHelper.runSavedQuery(rmr.getId(), session, paramMap).getData(); qHelper.waitForCompletion(handle); PersistentQueryResult result = (PersistentQueryResult) qHelper.getResultSet(handle); Assert.assertEquals(result.getNumRows().intValue(), 7); //TODO : Do result validation. Check if it doesn't contain row having "second" field //running above created saved query with different parameter paramMap = LensUtil.getHashMap("param", "third"); handle = savedQueryResourceHelper.runSavedQuery(rmr.getId(), session, paramMap).getData(); qHelper.waitForCompletion(handle); result = (PersistentQueryResult) qHelper.getResultSet(handle); Assert.assertEquals(result.getNumRows().intValue(), 7); } //TODO Enable when LENS-1238 is fixed @Test(enabled = false) public void createNRunSavedQueryNumberParam() throws Exception { List<Parameter> paramList = new ArrayList<>(); String query = "cube select id, name from sample_db_dim where id = :value"; paramList.add(savedQueryResourceHelper.getParameter("value", ParameterDataType.NUMBER, "1", ParameterCollectionType.SINGLE)); ResourceModifiedResponse rmr = savedQueryResourceHelper.createSavedQuery(query, "query1", paramList); //running above created saved query HashMap<String, String> paramMap = LensUtil.getHashMap("value", "2"); QueryHandle handle = savedQueryResourceHelper.runSavedQuery(rmr.getId(), paramMap).getData(); qHelper.waitForCompletion(handle); PersistentQueryResult result = (PersistentQueryResult) qHelper.getResultSet(handle); Assert.assertEquals(result.getNumRows().intValue(), 7); } @Test public void createNRunSavedQueryMultipleParams() throws Exception { List<Parameter> paramList = new ArrayList<>(); String savedQuery = "select product_id from sales where time_range_in(delivery_time, :start_time, :end_time)"; paramList.add(savedQueryResourceHelper.getParameter("start_time", ParameterDataType.STRING, "2015-01-12", ParameterCollectionType.SINGLE)); paramList.add(savedQueryResourceHelper.getParameter("end_time", ParameterDataType.STRING, "2015-01-13", ParameterCollectionType.SINGLE)); ResourceModifiedResponse rmr = savedQueryResourceHelper.createSavedQuery(savedQuery, "query1", paramList); HashMap<String, String> paramMap = LensUtil.getHashMap("start_time", "2015-04-12", "end_time", "2015-04-13"); QueryHandle handle = savedQueryResourceHelper.runSavedQuery(rmr.getId(), paramMap).getData(); qHelper.waitForCompletion(handle); PersistentQueryResult result = (PersistentQueryResult) qHelper.getResultSet(handle); Assert.assertEquals(result.getNumRows().intValue(), 2); } //TODO Enable when LENS-1237 is fixed @Test(enabled = false) public void createNRunSavedQueryMultipleCollectionType() throws Exception { List<Parameter> paramList = new ArrayList<>(); String savedQuery = "cube select id,name from sample_dim where name in :values"; paramList.add(savedQueryResourceHelper.getParameter("values", ParameterDataType.STRING, "first,second", ParameterCollectionType.MULTIPLE)); ResourceModifiedResponse rmr = savedQueryResourceHelper.createSavedQuery(savedQuery, "query1", paramList); HashMap<String, String> paramMap = LensUtil.getHashMap("values", "first,second,third"); QueryHandle handle = savedQueryResourceHelper.runSavedQuery(rmr.getId(), paramMap).getData(); qHelper.waitForCompletion(handle); PersistentQueryResult result = (PersistentQueryResult) qHelper.getResultSet(handle); Assert.assertEquals(result.getNumRows().intValue(), 5); } @Test public void deleteSavedQuery() throws Exception { ResourceModifiedResponse savedQuery = getSampleSavedQuery("query-delete-test"); Long queryId = savedQuery.getId(); //deleting saved query savedQueryResourceHelper.deleteSavedQuery(queryId, sessionHandleString); //checking if the above deleted saved query is being deleted MapBuilder map = new MapBuilder("sessionid", sessionHandleString, "id", Long.toString(queryId)); Response res = lens.exec("get", SavedQueryResourceHelper.SAVED_QUERY_BASE_URL + "/" + queryId , servLens, null, map); AssertUtil.assertNotFound(res); } //getting saved query using different session (not the 1 used for creating saved query) @Test public void getSavedQueryUsingDiffSessionId() throws Exception { ResourceModifiedResponse rmr = getSampleSavedQuery("query-1"); SavedQuery savedQuery = savedQueryResourceHelper.getSavedQuery(rmr.getId()); String newSession = sHelper.openSession("user1", "pwd1", lens.getCurrentDB()); SavedQuery savedQueryOutput = savedQueryResourceHelper.getSavedQuery(rmr.getId(), newSession); Assert.assertEquals(savedQuery, savedQueryOutput); } @Test public void updateSavedQuery() throws Exception { Long queryId = getSampleSavedQuery("query-update-test").getId(); //Modify query name SavedQuery savedQuery = savedQueryResourceHelper.getSavedQuery(queryId); savedQuery.setName("query-rename"); savedQueryResourceHelper.updateSavedQuery(queryId, sessionHandleString, savedQuery); SavedQuery savedQueryModified = savedQueryResourceHelper.getSavedQuery(queryId); Assert.assertTrue(savedQueryModified.getName().equals("query-rename")); } @Test(enabled = false) //TODO : Enable this once LENS-1341 is fixed public void getSavedQueryParameters() throws Exception { String query = "cube select id,name from sample_dim where id = :value"; ParameterParserResponse res = savedQueryResourceHelper.getSavedQueryParameter(query, sessionHandleString); ImmutableSet<Parameter> paramList = res.getParameters(); Assert.assertEquals(paramList.size(), 1); Assert.assertEquals(paramList.iterator().next().getName(), "value"); } @Test public void deleteAllSavedQueries() throws Exception { savedQueryResourceHelper.deleteAllSavedQueries(); } }