Murtadha Hubail has submitted this change and it was merged. Change subject: [NO ISSUE][API] Remove Legacy APIs ......................................................................
[NO ISSUE][API] Remove Legacy APIs - user model changes: no - storage format changes: no - interface changes: no Details: - Incremental progress towards removing all legacy APIs and replacing them by the query service. - Use /query/aql to execute AQL tests. - Adjust AQL test cases results to query/aql output. Change-Id: If6bfb06236d2bc480adf22bf16d5cca6a8edc726 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2554 Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: Michael Blow <mb...@apache.org> --- D asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java D asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java D asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java D asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java M asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java M asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml R asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.uri R asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.7.pollget.uri D asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.8.get.http C asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.8.get.uri M asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/Servlets.java M asterixdb/asterix-server/pom.xml M asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/SampleLocalClusterIT.java 15 files changed, 107 insertions(+), 447 deletions(-) Approvals: Anon. E. Moose #1000171: Jenkins: Verified; No violations found; ; Verified Michael Blow: Looks good to me, approved diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java deleted file mode 100644 index 4c1dbf7..0000000 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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.asterix.api.http.server; - -import java.util.concurrent.ConcurrentMap; - -import org.apache.asterix.common.context.IStorageComponentProvider; -import org.apache.asterix.common.dataflow.ICcApplicationContext; -import org.apache.asterix.compiler.provider.ILangCompilationProvider; -import org.apache.asterix.lang.common.base.Statement; -import org.apache.asterix.translator.IStatementExecutorFactory; -import org.apache.hyracks.http.api.IServletRequest; - -public class DdlApiServlet extends RestApiServlet { - private static final byte ALLOWED_CATEGORIES = - Statement.Category.QUERY | Statement.Category.UPDATE | Statement.Category.DDL; - - public DdlApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, ICcApplicationContext appCtx, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, - IStorageComponentProvider componentProvider) { - super(ctx, paths, appCtx, compilationProvider, statementExecutorFactory, componentProvider); - } - - @Override - protected String getQueryParameter(IServletRequest request) { - return request.getParameter("ddl"); - } - - @Override - protected byte getAllowedCategories() { - return ALLOWED_CATEGORIES; - } - - @Override - protected String getErrorMessage() { - return "Invalid statement: Non-DDL statement %s to the DDL API."; - } - -} diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java deleted file mode 100644 index 0a461c7..0000000 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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.asterix.api.http.server; - -import java.util.concurrent.ConcurrentMap; - -import org.apache.asterix.common.context.IStorageComponentProvider; -import org.apache.asterix.common.dataflow.ICcApplicationContext; -import org.apache.asterix.compiler.provider.ILangCompilationProvider; -import org.apache.asterix.lang.common.base.Statement; -import org.apache.asterix.translator.IStatementExecutorFactory; -import org.apache.hyracks.http.api.IServletRequest; - -public class FullApiServlet extends RestApiServlet { - - private static final String AQL_STMT_PARAM_NAME = "aql"; - private static final byte ALLOWED_CATEGORIES = Statement.Category.QUERY | Statement.Category.UPDATE - | Statement.Category.DDL | Statement.Category.PROCEDURE; - - public FullApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, ICcApplicationContext appCtx, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, - IStorageComponentProvider componentProvider) { - super(ctx, paths, appCtx, compilationProvider, statementExecutorFactory, componentProvider); - } - - @Override - protected byte getAllowedCategories() { - return ALLOWED_CATEGORIES; - } - - @Override - protected String getErrorMessage() { - throw new IllegalStateException(); - } - - @Override - protected String getQueryParameter(IServletRequest request) { - return request.getParameter(AQL_STMT_PARAM_NAME); - } -} diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java deleted file mode 100644 index 3e692d3..0000000 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.asterix.api.http.server; - -import java.util.concurrent.ConcurrentMap; - -import org.apache.asterix.common.context.IStorageComponentProvider; -import org.apache.asterix.common.dataflow.ICcApplicationContext; -import org.apache.asterix.compiler.provider.ILangCompilationProvider; -import org.apache.asterix.lang.common.base.Statement; -import org.apache.asterix.translator.IStatementExecutorFactory; -import org.apache.hyracks.http.api.IServletRequest; - -public class QueryApiServlet extends RestApiServlet { - private static final byte ALLOWED_CATEGORIES = Statement.Category.QUERY; - - public QueryApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, ICcApplicationContext appCtx, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, - IStorageComponentProvider componentProvider) { - super(ctx, paths, appCtx, compilationProvider, statementExecutorFactory, componentProvider); - } - - @Override - protected String getQueryParameter(IServletRequest request) { - return request.getParameter("query"); - } - - @Override - protected byte getAllowedCategories() { - return ALLOWED_CATEGORIES; - } - - @Override - protected String getErrorMessage() { - return "Invalid statement: Non-query statement %s to the query API."; - } -} diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java deleted file mode 100644 index 3650189..0000000 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.asterix.api.http.server; - -import java.util.concurrent.ConcurrentMap; - -import org.apache.asterix.common.context.IStorageComponentProvider; -import org.apache.asterix.common.dataflow.ICcApplicationContext; -import org.apache.asterix.compiler.provider.ILangCompilationProvider; -import org.apache.asterix.lang.common.base.Statement; -import org.apache.asterix.translator.IStatementExecutorFactory; -import org.apache.hyracks.http.api.IServletRequest; - -public class UpdateApiServlet extends RestApiServlet { - private static final byte ALLOWED_CATEGORIES = Statement.Category.QUERY | Statement.Category.UPDATE; - - public UpdateApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, ICcApplicationContext appCtx, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, - IStorageComponentProvider componentProvider) { - super(ctx, paths, appCtx, compilationProvider, statementExecutorFactory, componentProvider); - } - - @Override - protected String getQueryParameter(IServletRequest request) { - return request.getParameter("statements"); - } - - @Override - protected byte getAllowedCategories() { - return ALLOWED_CATEGORIES; - } - - @Override - protected String getErrorMessage() { - return "Invalid statement: Non-Update statement %s to the Update API."; - } -} diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java index 699892e..a3ca8b2 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java @@ -37,11 +37,8 @@ import org.apache.asterix.api.http.server.ClusterApiServlet; import org.apache.asterix.api.http.server.ClusterControllerDetailsApiServlet; import org.apache.asterix.api.http.server.ConnectorApiServlet; -import org.apache.asterix.api.http.server.DdlApiServlet; import org.apache.asterix.api.http.server.DiagnosticsApiServlet; -import org.apache.asterix.api.http.server.FullApiServlet; import org.apache.asterix.api.http.server.NodeControllerDetailsApiServlet; -import org.apache.asterix.api.http.server.QueryApiServlet; import org.apache.asterix.api.http.server.QueryCancellationServlet; import org.apache.asterix.api.http.server.QueryResultApiServlet; import org.apache.asterix.api.http.server.QueryServiceServlet; @@ -50,7 +47,6 @@ import org.apache.asterix.api.http.server.RebalanceApiServlet; import org.apache.asterix.api.http.server.ServletConstants; import org.apache.asterix.api.http.server.ShutdownApiServlet; -import org.apache.asterix.api.http.server.UpdateApiServlet; import org.apache.asterix.api.http.server.VersionApiServlet; import org.apache.asterix.app.active.ActiveNotificationHandler; import org.apache.asterix.app.cc.CCExtensionManager; @@ -234,18 +230,6 @@ jsonAPIServer.setAttribute(ServletConstants.RUNNING_QUERIES_ATTR, statementExecutorCtx); jsonAPIServer.setAttribute(ServletConstants.SERVICE_CONTEXT_ATTR, ccServiceCtx); - // AQL rest APIs. - addServlet(jsonAPIServer, Servlets.AQL_QUERY); - addServlet(jsonAPIServer, Servlets.AQL_UPDATE); - addServlet(jsonAPIServer, Servlets.AQL_DDL); - addServlet(jsonAPIServer, Servlets.AQL); - - // SQL+x+ rest APIs. - addServlet(jsonAPIServer, Servlets.SQLPP_QUERY); - addServlet(jsonAPIServer, Servlets.SQLPP_UPDATE); - addServlet(jsonAPIServer, Servlets.SQLPP_DDL); - addServlet(jsonAPIServer, Servlets.SQLPP); - // Other APIs. addServlet(jsonAPIServer, Servlets.QUERY_STATUS); addServlet(jsonAPIServer, Servlets.QUERY_RESULT); @@ -278,30 +262,6 @@ protected IServlet createServlet(ConcurrentMap<String, Object> ctx, String key, String... paths) { switch (key) { - case Servlets.AQL: - return new FullApiServlet(ctx, paths, appCtx, ccExtensionManager.getCompilationProvider(AQL), - getStatementExecutorFactory(), componentProvider); - case Servlets.AQL_QUERY: - return new QueryApiServlet(ctx, paths, appCtx, ccExtensionManager.getCompilationProvider(AQL), - getStatementExecutorFactory(), componentProvider); - case Servlets.AQL_UPDATE: - return new UpdateApiServlet(ctx, paths, appCtx, ccExtensionManager.getCompilationProvider(AQL), - getStatementExecutorFactory(), componentProvider); - case Servlets.AQL_DDL: - return new DdlApiServlet(ctx, paths, appCtx, ccExtensionManager.getCompilationProvider(AQL), - getStatementExecutorFactory(), componentProvider); - case Servlets.SQLPP: - return new FullApiServlet(ctx, paths, appCtx, ccExtensionManager.getCompilationProvider(SQLPP), - getStatementExecutorFactory(), componentProvider); - case Servlets.SQLPP_QUERY: - return new QueryApiServlet(ctx, paths, appCtx, ccExtensionManager.getCompilationProvider(SQLPP), - getStatementExecutorFactory(), componentProvider); - case Servlets.SQLPP_UPDATE: - return new UpdateApiServlet(ctx, paths, appCtx, ccExtensionManager.getCompilationProvider(SQLPP), - getStatementExecutorFactory(), componentProvider); - case Servlets.SQLPP_DDL: - return new DdlApiServlet(ctx, paths, appCtx, ccExtensionManager.getCompilationProvider(SQLPP), - getStatementExecutorFactory(), componentProvider); case Servlets.RUNNING_REQUESTS: return new QueryCancellationServlet(ctx, paths); case Servlets.QUERY_STATUS: diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java index 80048bd..c28d8ba 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java @@ -109,6 +109,8 @@ * Static variables */ protected static final Logger LOGGER = LogManager.getLogger(); + private static final String AQL = "aql"; + private static final String SQLPP = "sqlpp"; // see // https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers/417184 private static final long MAX_URL_LENGTH = 2000l; @@ -561,14 +563,6 @@ } } - public InputStream executeQuery(String str, OutputFormat fmt, URI uri, List<Parameter> params) throws Exception { - HttpUriRequest method = constructHttpMethod(str, uri, "query", false, params); - // Set accepted output response type - method.setHeader("Accept", fmt.mimeType()); - HttpResponse response = executeAndCheckHttpRequest(method); - return response.getEntity().getContent(); - } - public InputStream executeQueryService(String str, URI uri, OutputFormat fmt) throws Exception { return executeQueryService(str, fmt, uri, new ArrayList<>(), false); } @@ -626,15 +620,9 @@ } private HttpUriRequest constructHttpMethod(String statement, URI uri, String stmtParam, boolean postStmtAsParam, - List<Parameter> otherParams) throws URISyntaxException { - if (statement.length() + uri.toString().length() < MAX_URL_LENGTH) { - // Use GET for small-ish queries - return constructGetMethod(uri, upsertParam(otherParams, stmtParam, statement)); - } else { - // Use POST for bigger ones to avoid 413 FULL_HEAD - String stmtParamName = (postStmtAsParam ? stmtParam : null); - return constructPostMethodUrl(statement, uri, stmtParamName, otherParams); - } + List<Parameter> otherParams) { + String stmtParamName = (postStmtAsParam ? stmtParam : null); + return constructPostMethodUrl(statement, uri, stmtParamName, otherParams); } private HttpUriRequest constructGetMethod(URI endpoint, List<Parameter> params) { @@ -653,9 +641,7 @@ builder.addParameter(param.getName(), param.getValue()); } builder.setCharset(StandardCharsets.UTF_8); - if (body.isPresent()) { - builder.setEntity(new StringEntity(body.get(), StandardCharsets.UTF_8)); - } + body.ifPresent(s -> builder.setEntity(new StringEntity(s, StandardCharsets.UTF_8))); return builder.build(); } @@ -681,13 +667,6 @@ } builder.setCharset(StandardCharsets.UTF_8); return builder.build(); - } - - private HttpUriRequest constructPostMethod(URI uri, OutputFormat fmt, List<Parameter> params) { - HttpUriRequest method = constructPostMethod(uri, params); - // Set accepted output response type - method.setHeader("Accept", fmt.mimeType()); - return method; } protected HttpUriRequest constructPostMethodUrl(String statement, URI uri, String stmtParam, @@ -749,57 +728,6 @@ HttpUriRequest request = buildRequest(method, uri, fmt, params, body); HttpResponse response = executeAndCheckHttpRequest(request, responseCodeValidator); return response.getEntity().getContent(); - } - - // To execute Update statements - // Insert and Delete statements are executed here - public void executeUpdate(String str, URI uri) throws Exception { - // Create a method instance. - HttpUriRequest request = - RequestBuilder.post(uri).setEntity(new StringEntity(str, StandardCharsets.UTF_8)).build(); - - // Execute the method. - executeAndCheckHttpRequest(request); - } - - // Executes AQL in either async or async-defer mode. - public InputStream executeAnyAQLAsync(String statement, boolean defer, OutputFormat fmt, URI uri, - Map<String, Object> variableCtx) throws Exception { - // Create a method instance. - HttpUriRequest request = - RequestBuilder.post(uri).addParameter("mode", defer ? "asynchronous-deferred" : "asynchronous") - .setEntity(new StringEntity(statement, StandardCharsets.UTF_8)) - .setHeader("Accept", fmt.mimeType()).build(); - - String handleVar = getHandleVariable(statement); - - HttpResponse response = executeAndCheckHttpRequest(request); - InputStream resultStream = response.getEntity().getContent(); - String resultStr = IOUtils.toString(resultStream, "UTF-8"); - ObjectNode resultJson = new ObjectMapper().readValue(resultStr, ObjectNode.class); - final JsonNode jsonHandle = resultJson.get("handle"); - final String strHandle = jsonHandle.asText(); - - if (handleVar != null) { - variableCtx.put(handleVar, strHandle); - return resultStream; - } - return null; - } - - // To execute DDL and Update statements - // create type statement - // create dataset statement - // create index statement - // create dataverse statement - // create function statement - public void executeDDL(String str, URI uri) throws Exception { - // Create a method instance. - HttpUriRequest request = - RequestBuilder.post(uri).setEntity(new StringEntity(str, StandardCharsets.UTF_8)).build(); - - // Execute the method. - executeAndCheckHttpRequest(request); } // Method that reads a DDL/Update/Query File @@ -886,13 +814,15 @@ String statement, boolean isDmlRecoveryTest, ProcessBuilder pb, CompilationUnit cUnit, MutableInt queryCount, List<TestFileContext> expectedResultFileCtxs, File testFile, String actualPath) throws Exception { + URI uri; + InputStream resultStream; File qbcFile; boolean failed = false; File expectedResultFile; switch (ctx.getType()) { case "ddl": if (ctx.getFile().getName().endsWith("aql")) { - executeDDL(statement, getEndpoint(Servlets.AQL_DDL)); + executeAqlUpdateOrDdl(statement, OutputFormat.CLEAN_JSON); } else { executeSqlppUpdateOrDdl(statement, OutputFormat.CLEAN_JSON); } @@ -903,7 +833,7 @@ statement = statement.replaceAll("nc1://", "127.0.0.1://../../../../../../asterix-app/"); } if (ctx.getFile().getName().endsWith("aql")) { - executeUpdate(statement, getEndpoint(Servlets.AQL_UPDATE)); + executeAqlUpdateOrDdl(statement, OutputFormat.forCompilationUnit(cUnit)); } else { executeSqlppUpdateOrDdl(statement, OutputFormat.forCompilationUnit(cUnit)); } @@ -957,14 +887,12 @@ expectedResultFileCtxs); break; case "txnqbc": // qbc represents query before crash - InputStream resultStream = executeQuery(statement, OutputFormat.forCompilationUnit(cUnit), - getEndpoint(Servlets.AQL_QUERY), cUnit.getParameter()); + resultStream = query(cUnit, testFile.getName(), statement); qbcFile = getTestCaseQueryBeforeCrashFile(actualPath, testCaseCtx, cUnit); writeOutputToFile(qbcFile, resultStream); break; case "txnqar": // qar represents query after recovery - resultStream = executeQuery(statement, OutputFormat.forCompilationUnit(cUnit), - getEndpoint(Servlets.AQL_QUERY), cUnit.getParameter()); + resultStream = query(cUnit, testFile.getName(), statement); File qarFile = new File(actualPath + File.separator + testCaseCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_" + cUnit.getName() + "_qar.adm"); @@ -974,7 +902,7 @@ break; case "txneu": // eu represents erroneous update try { - executeUpdate(statement, getEndpoint(Servlets.AQL_UPDATE)); + executeAqlUpdateOrDdl(statement, OutputFormat.forCompilationUnit(cUnit)); } catch (Exception e) { // An exception is expected. failed = true; @@ -1001,7 +929,7 @@ break; case "errddl": // a ddlquery that expects error try { - executeDDL(statement, getEndpoint(Servlets.AQL_DDL)); + executeAqlUpdateOrDdl(statement, OutputFormat.forCompilationUnit(cUnit)); } catch (Exception e) { // expected error happens failed = true; @@ -1238,38 +1166,25 @@ public void executeQuery(OutputFormat fmt, String statement, Map<String, Object> variableCtx, String reqType, File testFile, File expectedResultFile, File actualResultFile, MutableInt queryCount, int numResultFiles, List<Parameter> params, ComparisonEnum compare) throws Exception { - InputStream resultStream = null; - if (testFile.getName().endsWith("aql")) { - if (reqType.equalsIgnoreCase("query")) { - resultStream = executeQuery(statement, fmt, getEndpoint(Servlets.AQL_QUERY), params); - } else { - final URI endpoint = getEndpoint(Servlets.AQL); - if (reqType.equalsIgnoreCase("async")) { - resultStream = executeAnyAQLAsync(statement, false, fmt, endpoint, variableCtx); - } else if (reqType.equalsIgnoreCase("deferred")) { - resultStream = executeAnyAQLAsync(statement, true, fmt, endpoint, variableCtx); - } - Assert.assertNotNull("no handle for " + reqType + " test " + testFile.toString(), resultStream); - } + String delivery = DELIVERY_IMMEDIATE; + if (reqType.equalsIgnoreCase("async")) { + delivery = DELIVERY_ASYNC; + } else if (reqType.equalsIgnoreCase("deferred")) { + delivery = DELIVERY_DEFERRED; + } + URI uri = testFile.getName().endsWith("aql") ? getEndpoint(Servlets.QUERY_AQL) + : getEndpoint(Servlets.QUERY_SERVICE); + InputStream resultStream; + if (DELIVERY_IMMEDIATE.equals(delivery)) { + resultStream = executeQueryService(statement, fmt, uri, params, true, null, isCancellable(reqType)); + resultStream = METRICS_QUERY_TYPE.equals(reqType) ? ResultExtractor.extractMetrics(resultStream) + : ResultExtractor.extract(resultStream); } else { - String delivery = DELIVERY_IMMEDIATE; - if (reqType.equalsIgnoreCase("async")) { - delivery = DELIVERY_ASYNC; - } else if (reqType.equalsIgnoreCase("deferred")) { - delivery = DELIVERY_DEFERRED; - } - final URI uri = getEndpoint(Servlets.QUERY_SERVICE); - if (DELIVERY_IMMEDIATE.equals(delivery)) { - resultStream = executeQueryService(statement, fmt, uri, params, true, null, isCancellable(reqType)); - resultStream = METRICS_QUERY_TYPE.equals(reqType) ? ResultExtractor.extractMetrics(resultStream) - : ResultExtractor.extract(resultStream); - } else { - String handleVar = getHandleVariable(statement); - resultStream = executeQueryService(statement, fmt, uri, upsertParam(params, "mode", delivery), true); - String handle = ResultExtractor.extractHandle(resultStream); - Assert.assertNotNull("no handle for " + reqType + " test " + testFile.toString(), handleVar); - variableCtx.put(handleVar, handle); - } + String handleVar = getHandleVariable(statement); + resultStream = executeQueryService(statement, fmt, uri, upsertParam(params, "mode", delivery), true); + String handle = ResultExtractor.extractHandle(resultStream); + Assert.assertNotNull("no handle for " + reqType + " test " + testFile.toString(), handleVar); + variableCtx.put(handleVar, toQueryServiceHandle(handle)); } if (actualResultFile == null) { if (testFile.getName().startsWith(DIAGNOSE)) { @@ -1440,7 +1355,16 @@ } public InputStream executeSqlppUpdateOrDdl(String statement, OutputFormat outputFormat) throws Exception { - InputStream resultStream = executeQueryService(statement, getEndpoint(Servlets.QUERY_SERVICE), outputFormat); + return executeUpdateOrDdl(statement, outputFormat, getQueryServiceUri(SQLPP)); + } + + private InputStream executeAqlUpdateOrDdl(String statement, OutputFormat outputFormat) throws Exception { + return executeUpdateOrDdl(statement, outputFormat, getQueryServiceUri(AQL)); + } + + private InputStream executeUpdateOrDdl(String statement, OutputFormat outputFormat, URI serviceUri) + throws Exception { + InputStream resultStream = executeQueryService(statement, serviceUri, outputFormat); return ResultExtractor.extract(resultStream); } @@ -1947,4 +1871,19 @@ private static boolean isCancellable(String type) { return !NON_CANCELLABLE.contains(type); } + + private InputStream query(CompilationUnit cUnit, String testFile, String statement) throws Exception { + final URI uri = getQueryServiceUri(testFile); + final InputStream inputStream = executeQueryService(statement, OutputFormat.forCompilationUnit(cUnit), uri, + cUnit.getParameter(), true, null, false); + return ResultExtractor.extract(inputStream); + } + + private URI getQueryServiceUri(String extension) throws URISyntaxException { + return extension.endsWith(AQL) ? getEndpoint(Servlets.QUERY_AQL) : getEndpoint(Servlets.QUERY_SERVICE); + } + + private static String toQueryServiceHandle(String handle) { + return handle.replace("/aql/", "/service/"); + } } diff --git a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml index c0ab7a4..956cea1 100644 --- a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml +++ b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml @@ -339,73 +339,73 @@ <test-case FilePath="exception"> <compilation-unit name="issue_239_drop_system_dataset_1"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> + <expected-error>Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_239_drop_system_dataset_2"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> + <expected-error>Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_239_drop_system_dataset_3"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> + <expected-error>Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_239_drop_system_dataset_4"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> + <expected-error>Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_239_drop_system_dataset_5"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> + <expected-error>Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_239_drop_system_dataset_6"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> + <expected-error>Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_239_drop_system_dataset_7"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> + <expected-error>Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_239_drop_system_dataset_8"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> + <expected-error>Invalid operation - Cannot drop a dataset belonging to the dataverse:Metadata</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_251_dataset_hint_error_1"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Dataset: Book error in processing hint: TUPLE_SIZE Unknown hint</expected-error> + <expected-error>Invalid operation - Dataset: Book error in processing hint: TUPLE_SIZE Unknown hint</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_251_dataset_hint_error_2"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: Invalid operation - Dataset: Book error in processing hint: SIZE Unknown hint</expected-error> + <expected-error>Invalid operation - Dataset: Book error in processing hint: SIZE Unknown hint</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_272_create_index_error_1"> <output-dir compare="Text">none</output-dir> - <expected-error>org.apache.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error> + <expected-error>There is no dataset with this name Foo in dataverse test</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_272_create_index_error_2"> <output-dir compare="Text">none</output-dir> - <expected-error>org.apache.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error> + <expected-error>There is no dataset with this name Foo in dataverse test</expected-error> </compilation-unit> </test-case> <!-- This case should be fixed to return a proper message rather than NPE --> @@ -444,37 +444,37 @@ <test-case FilePath="exception"> <compilation-unit name="issue_384_create_index_error_1"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: The field "[loc]" which is of type point cannot be indexed using the BTree index.</expected-error> + <expected-error>The field "[loc]" which is of type point cannot be indexed using the BTree index.</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_384_create_index_error_2"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: The field "[age]" which is of type integer cannot be indexed using the RTree index.</expected-error> + <expected-error>The field "[age]" which is of type integer cannot be indexed using the RTree index.</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_384_create_index_error_3"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: The field "[loc]" which is of type point cannot be indexed using the Length Partitioned Keyword index.</expected-error> + <expected-error>The field "[loc]" which is of type point cannot be indexed using the Length Partitioned Keyword index.</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_384_create_index_error_4"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: The field "[loc]" which is of type point cannot be indexed using the Length Partitioned Keyword index.</expected-error> + <expected-error>The field "[loc]" which is of type point cannot be indexed using the Length Partitioned Keyword index.</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_384_create_index_error_5"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: The field "[loc]" which is of type point cannot be indexed using the Length Partitioned N-Gram index.</expected-error> + <expected-error>The field "[loc]" which is of type point cannot be indexed using the Length Partitioned N-Gram index.</expected-error> </compilation-unit> </test-case> <test-case FilePath="exception"> <compilation-unit name="issue_384_create_index_error_6"> <output-dir compare="Text">none</output-dir> - <expected-error>Error: The field "[loc]" which is of type point cannot be indexed using the Length Partitioned N-Gram index.</expected-error> + <expected-error>The field "[loc]" which is of type point cannot be indexed using the Length Partitioned N-Gram index.</expected-error> </compilation-unit> </test-case> </test-group> @@ -482,7 +482,7 @@ <test-case FilePath="transaction"> <compilation-unit name="failure_previous_success"> <output-dir compare="Text">failure_previous_success</output-dir> - <expected-error>org.apache.hyracks.algebricks.common.exceptions.AlgebricksException: A datatype with this name StreetType already exists</expected-error> + <expected-error>A datatype with this name StreetType already exists</expected-error> </compilation-unit> <compilation-unit name="verify_failure_previous_success"> <output-dir compare="Text">verify_failure_previous_success</output-dir> @@ -491,11 +491,11 @@ <test-case FilePath="transaction"> <compilation-unit name="failure_subsequent_no_execution"> <output-dir compare="Text">failure_subsequent_no_execution</output-dir> - <expected-error>org.apache.hyracks.algebricks.common.exceptions.AlgebricksException: A nodegroup with this name group1 already exists</expected-error> + <expected-error>A nodegroup with this name group1 already exists</expected-error> </compilation-unit> <compilation-unit name="verify_failure_subsequent_no_execution"> <output-dir compare="Text">verify_failure_subsequent_no_execution</output-dir> </compilation-unit> </test-case> </test-group> -</test-suite> +</test-suite> \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.http b/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.uri similarity index 95% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.http rename to asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.uri index 8417a7e..a955fed 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.http +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.uri @@ -17,4 +17,4 @@ * under the License. */ -/query/service/result/$handle +$handle diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.7.pollget.http b/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.7.pollget.uri similarity index 95% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.7.pollget.http rename to asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.7.pollget.uri index bcc0edc..286c097 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.7.pollget.http +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.7.pollget.uri @@ -18,5 +18,5 @@ */ //polltimeoutsecs=10 - -/query/service/status/$handle +// handlevariable=handle +$handle diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.8.get.http b/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.8.get.http deleted file mode 100644 index 8417a7e..0000000 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.8.get.http +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ - -/query/service/result/$handle diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.http b/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.8.get.uri similarity index 95% copy from asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.http copy to asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.8.get.uri index 8417a7e..a955fed 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.5.get.http +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/flwor/at00/at00.8.get.uri @@ -17,4 +17,4 @@ * under the License. */ -/query/service/result/$handle +$handle diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml index 5c6b100..4dd6d97 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml @@ -1668,7 +1668,7 @@ <test-case FilePath="dml"> <compilation-unit name="insert-with-autogenerated-pk_adm_02"> <output-dir compare="Text">insert-with-autogenerated-pk_adm_02</output-dir> - <expected-error>Duplicate field name "id"</expected-error> + <expected-error>ASX1006: Duplicate field name "id"</expected-error> </compilation-unit> </test-case> <test-case FilePath="dml"> @@ -1689,13 +1689,13 @@ <test-case FilePath="dml"> <compilation-unit name="load-with-autogenerated-pk_adm_02"> <output-dir compare="Text">load-with-autogenerated-pk_adm_02</output-dir> - <expected-error>ASX3058: This record is closed, you can not add extra fields! new field name: id [HyracksDataException]</expected-error> + <expected-error>ASX3058: This record is closed, you can not add extra fields! new field name: id</expected-error> </compilation-unit> </test-case> <test-case FilePath="dml"> <compilation-unit name="load-with-autogenerated-pk_adm_03"> <output-dir compare="Text">load-with-autogenerated-pk_adm_03</output-dir> - <expected-error>ASX3058: This record is closed, you can not add extra fields! new field name: id [HyracksDataException]</expected-error> + <expected-error>ASX3058: This record is closed, you can not add extra fields! new field name: id</expected-error> </compilation-unit> </test-case> <test-case FilePath="dml"> @@ -1716,7 +1716,7 @@ <test-case FilePath="dml"> <compilation-unit name="load-with-autogenerated-no-field"> <output-dir compare="Text">load-with-autogenerated-no-field</output-dir> - <expected-error>ASX1014: Field "not_id" is not found [CompilationException]</expected-error> + <expected-error>ASX1014: Field "not_id" is not found</expected-error> </compilation-unit> </test-case> <test-case FilePath="dml"> @@ -4477,7 +4477,7 @@ <test-case FilePath="numeric"> <compilation-unit name="query-issue355"> <output-dir compare="Text">query-issue355</output-dir> - <expected-error>java.lang.NumberFormatException: For input string: "10000000000000000000"</expected-error> + <expected-error>For input string: "10000000000000000000"</expected-error> </compilation-unit> </test-case> </test-group> @@ -4923,7 +4923,7 @@ <output-dir compare="Text">alltypes_01</output-dir> </compilation-unit> </test-case> - <test-case FilePath="scan"> + <!--test-case FilePath="scan"> <compilation-unit name="alltypes_01"> <parameter name="wrapper-array" value="true" /> <output-dir compare="Text">alltypes_01-wrapped</output-dir> @@ -4944,7 +4944,7 @@ <compilation-unit name="alltypes_01"> <output-dir compare="Clean-JSON">alltypes_01-cleanjson</output-dir> </compilation-unit> - </test-case> + </test-case--> <test-case FilePath="scan"> <compilation-unit name="alltypes_02"> <output-dir compare="Text">alltypes_02</output-dir> @@ -6525,19 +6525,19 @@ <test-case FilePath="load"> <compilation-unit name="csv_05"><!-- Someone should check and verify --> <output-dir compare="Text">csv_05</output-dir> - <expected-error>java.io.IOException: At record:</expected-error> + <expected-error>At record: 1</expected-error> </compilation-unit> </test-case> <test-case FilePath="load"> <compilation-unit name="csv_06"><!-- Someone should check and verify --> <output-dir compare="Text">csv_06</output-dir> - <expected-error>java.io.IOException: At record:</expected-error> + <expected-error>At record: 1</expected-error> </compilation-unit> </test-case> <test-case FilePath="load"> <compilation-unit name="csv_07"><!-- Someone should check and verify --> <output-dir compare="Text">csv_07</output-dir> - <expected-error>java.io.IOException: At record:</expected-error> + <expected-error>At record: 1</expected-error> </compilation-unit> </test-case> <test-case FilePath="load"> diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/Servlets.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/Servlets.java index 1ac3ffa..b135c7f 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/Servlets.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/Servlets.java @@ -20,14 +20,6 @@ public class Servlets { - public static final String AQL = "/aql"; - public static final String AQL_QUERY = "/query"; - public static final String AQL_UPDATE = "/update"; - public static final String AQL_DDL = "/ddl"; - public static final String SQLPP = "/sqlpp"; - public static final String SQLPP_QUERY = "/query/sqlpp"; - public static final String SQLPP_UPDATE = "/update/sqlpp"; - public static final String SQLPP_DDL = "/ddl/sqlpp"; public static final String QUERY_STATUS = "/query/service/status/*"; public static final String QUERY_RESULT = "/query/service/result/*"; public static final String QUERY_SERVICE = "/query/service"; diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml index c334509..b372dbd 100644 --- a/asterixdb/asterix-server/pom.xml +++ b/asterixdb/asterix-server/pom.xml @@ -631,5 +631,9 @@ <artifactId>asterix-geo</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> </dependencies> </project> diff --git a/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/SampleLocalClusterIT.java b/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/SampleLocalClusterIT.java index 766402c..defd378 100644 --- a/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/SampleLocalClusterIT.java +++ b/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/SampleLocalClusterIT.java @@ -23,11 +23,8 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.StringWriter; -import java.net.URI; import java.net.URL; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.apache.asterix.common.utils.Servlets; @@ -36,7 +33,6 @@ import org.apache.asterix.test.common.TestHelper; import org.apache.asterix.testframework.context.TestCaseContext.OutputFormat; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -45,6 +41,10 @@ import org.junit.Test; import org.junit.rules.TestRule; import org.junit.runners.MethodSorters; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class SampleLocalClusterIT { @@ -118,11 +118,13 @@ @Test public void test1_sanityQuery() throws Exception { TestExecutor testExecutor = new TestExecutor(); - InputStream resultStream = testExecutor.executeQuery("1+1", OutputFormat.ADM, - new URI("http", null, "127.0.0.1", 19002, Servlets.AQL_QUERY, null, null), Collections.emptyList()); - StringWriter sw = new StringWriter(); - IOUtils.copy(resultStream, sw); - Assert.assertEquals("2", sw.toString().trim()); + InputStream resultStream = testExecutor.executeQueryService("1+1;", + testExecutor.getEndpoint(Servlets.QUERY_SERVICE), OutputFormat.ADM); + final ObjectMapper objectMapper = new ObjectMapper(); + final ObjectNode response = objectMapper.readValue(resultStream, ObjectNode.class); + final JsonNode result = response.get("results"); + Assert.assertEquals(1, result.size()); + Assert.assertEquals(2, result.get(0).asInt()); } @Test -- To view, visit https://asterix-gerrit.ics.uci.edu/2554 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: If6bfb06236d2bc480adf22bf16d5cca6a8edc726 Gerrit-PatchSet: 5 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Murtadha Hubail <mhub...@apache.org> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Gerrit-Reviewer: Michael Blow <mb...@apache.org> Gerrit-Reviewer: Murtadha Hubail <mhub...@apache.org> Gerrit-Reviewer: Till Westmann <ti...@apache.org>