This is an automated email from the ASF dual-hosted git repository. miao pushed a commit to branch rel/1.2_rest_it in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 9d55b640d392d4bb56dcc1d5bf76524713c8d5e6 Author: Cloudwise_Luke <[email protected]> AuthorDate: Wed Sep 27 10:43:38 2023 +0800 it test --- .../org/apache/iotdb/db/it/IoTDBRestServiceIT.java | 2035 ++++++++++++++++++++ 1 file changed, 2035 insertions(+) diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBRestServiceIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBRestServiceIT.java new file mode 100644 index 00000000000..69af02939bd --- /dev/null +++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBRestServiceIT.java @@ -0,0 +1,2035 @@ +/* + * 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.iotdb.db.it; + +import org.apache.iotdb.it.env.EnvFactory; +import org.apache.iotdb.it.env.cluster.DataNodeWrapper; +import org.apache.iotdb.it.framework.IoTDBTestRunner; +import org.apache.iotdb.itbase.category.ClusterIT; +import org.apache.iotdb.itbase.category.LocalStandaloneIT; +import org.apache.iotdb.itbase.category.RemoteIT; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import org.apache.flink.table.api.EnvironmentSettings; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +@RunWith(IoTDBTestRunner.class) +@Category({LocalStandaloneIT.class, ClusterIT.class, RemoteIT.class}) +public class IoTDBRestServiceIT { + + private int port = 18080; + + @Before + public void setUp() throws Exception { + + EnvFactory.getEnv().initClusterEnvironment(); + EnvironmentSettings settings = EnvironmentSettings.newInstance().inStreamingMode().build(); + DataNodeWrapper portConflictDataNodeWrapper = EnvFactory.getEnv().getDataNodeWrapper(0); + port = portConflictDataNodeWrapper.getRestServicePort(); + } + + @After + public void tearDown() throws Exception { + EnvFactory.getEnv().cleanClusterEnvironment(); + } + + private String getAuthorization(String username, String password) { + return Base64.getEncoder() + .encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8)); + } + + @Test + public void ping() { + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + HttpGet httpGet = new HttpGet("http://127.0.0.1:" + port + "/ping"); + CloseableHttpResponse response = null; + try { + response = httpClient.execute(httpGet); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(200, response.getStatusLine().getStatusCode()); + assertEquals(200, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (httpClient != null) { + httpClient.close(); + } + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + private HttpPost getHttpPost(String url) { + HttpPost httpPost = new HttpPost(url); + httpPost.addHeader("Content-type", "application/json; charset=utf-8"); + httpPost.setHeader("Accept", "application/json"); + String authorization = getAuthorization("root", "root"); + httpPost.setHeader("Authorization", authorization); + return httpPost; + } + + private HttpPost getHttpPost_1(String url) { + HttpPost httpPost = new HttpPost(url); + httpPost.addHeader("Content-type", "application/json; charset=utf-8"); + httpPost.setHeader("Accept", "application/json"); + String authorization = getAuthorization("root1", "root1"); + httpPost.setHeader("Authorization", authorization); + return httpPost; + } + + public void nonQuery(CloseableHttpClient httpClient, String json, HttpPost httpPost) { + CloseableHttpResponse response = null; + try { + httpPost.setEntity(new StringEntity(json, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(200, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void errorNonQuery(CloseableHttpClient httpClient, String json, HttpPost httpPost) { + CloseableHttpResponse response = null; + try { + httpPost.setEntity(new StringEntity(json, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(700, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void rightInsertRecords(CloseableHttpClient httpClient, String json, HttpPost httpPost) { + CloseableHttpResponse response = null; + try { + httpPost.setEntity(new StringEntity(json, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(200, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void errorInsertRecords(CloseableHttpClient httpClient, String json, HttpPost httpPost) { + CloseableHttpResponse response = null; + try { + httpPost.setEntity(new StringEntity(json, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(509, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void rightInsertTablet(CloseableHttpClient httpClient, String json, HttpPost httpPost) { + CloseableHttpResponse response = null; + try { + httpPost.setEntity(new StringEntity(json, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(200, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void rightInsertTablet(CloseableHttpClient httpClient) { + CloseableHttpResponse response = null; + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/insertTablet"); + String json = + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"isAligned\":false,\"deviceId\":\"root.sg25\"}"; + httpPost.setEntity(new StringEntity(json, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(200, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void errorInsertTablet(String json, HttpPost httpPost) { + CloseableHttpResponse response = null; + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + try { + httpPost.setEntity(new StringEntity(json, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(606, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + @Test + public void errorInsertTablet() { + CloseableHttpResponse response = null; + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/insertTablet"); + String json = + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"isAligned\":fal [...] + httpPost.setEntity(new StringEntity(json, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(413, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void perData(CloseableHttpClient httpClient) { + HttpPost httpPost2 = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/nonQuery"); + HttpPost httpPostV2 = getHttpPost("http://127.0.0.1:" + port + "/rest/v2/nonQuery"); + + nonQuery(httpClient, "{\"sql\":\"CREATE USER `root1` 'root1'\"}", httpPost2); + nonQuery( + httpClient, "{\"sql\":\"GRANT USER `root1` PRIVILEGES WRITE on root.**\"}", httpPostV2); + } + + @Test + public void insertAndQuery() { + + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + // + + rightInsertTablet(httpClient); + query(httpClient); + queryGroupByLevel(httpClient); + queryRowLimit(httpClient); + queryShowChildPaths(httpClient); + queryShowNodes(httpClient); + showAllTTL(httpClient); + showStorageGroup(httpClient); + showFunctions(httpClient); + showTimeseries(httpClient); + + showLastTimeseries(httpClient); + countTimeseries(httpClient); + countNodes(httpClient); + showDevices(httpClient); + + showDevicesWithStroage(httpClient); + listUser(httpClient); + selectCount(httpClient); + selectLast(httpClient); + + queryV2(httpClient); + queryGroupByLevelV2(httpClient); + queryRowLimitV2(httpClient); + queryShowChildPathsV2(httpClient); + queryShowNodesV2(httpClient); + showAllTTLV2(httpClient); + showStorageGroupV2(httpClient); + showFunctionsV2(httpClient); + showTimeseriesV2(httpClient); + + showLastTimeseriesV2(httpClient); + countTimeseriesV2(httpClient); + countNodesV2(httpClient); + showDevicesV2(httpClient); + + showDevicesWithStroageV2(httpClient); + listUserV2(httpClient); + selectCountV2(httpClient); + selectLastV2(httpClient); + perData(httpClient); + List<String> insertTablet_right_json_list = new ArrayList<>(); + List<String> insertTablet_error_json_list = new ArrayList<>(); + + List<String> insertRecords_right_json_list = new ArrayList<>(); + List<String> insertRecords_error_json_list = new ArrayList<>(); + + List<String> nonQuery_right_json_list = new ArrayList<>(); + List<String> nonQuery_error_json_list = new ArrayList<>(); + + List<String> insertTablet_right_json_list_v2 = new ArrayList<>(); + List<String> insertTablet_error_json_list_v2 = new ArrayList<>(); + + List<String> insertRecords_right_json_list_v2 = new ArrayList<>(); + List<String> insertRecords_error_json_list_v2 = new ArrayList<>(); + + List<String> nonQuery_right_json_list_v2 = new ArrayList<>(); + List<String> nonQuery_error_json_list_v2 = new ArrayList<>(); + + for (int i = 0; i <= 1; i++) { + boolean isAligned = false; + if (i == 0) { + isAligned = true; + } + insertTablet_right_json_list.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"isAligned\":\"" + + isAligned + + "\",\"deviceId\":\"root.sg21" + + i + + "\"}"); + insertTablet_right_json_list.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"`s3`\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"isAligned\":\"" + + isAligned + + "\",\"deviceId\":\"root.sg22" + + i + + "\"}"); + insertTablet_right_json_list.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"isAligned\":\"" + + isAligned + + "\",\"deviceId\":\"root.`sg23" + + i + + "`\"}"); + insertTablet_right_json_list.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"`s3`\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"isAligned\":\"" + + isAligned + + "\",\"deviceId\":\"root.`sg24" + + i + + "`\"}"); + insertTablet_error_json_list.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"isAligned\":" + + isAligned + + ",\"deviceId\":\"root.sg25" + + i + + "\"}"); + insertTablet_error_json_list.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"`s3`\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"isAligned\":" + + isAligned + + ",\"deviceId\":\"root.sg26" + + i + + "\"}"); + insertTablet_error_json_list.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"123123\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"isAligned\":" + + isAligned + + ",\"deviceId\":\"root.`sg26" + + i + + "`\"}"); + insertTablet_error_json_list.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"`1231231`\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"isAligned\":" + + isAligned + + ",\"deviceId\":\"root.`3333a" + + i + + "`\"}"); + insertRecords_right_json_list.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurementsList\":[[\"s33\",\"s44\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"dataTypesList\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"valuesList\":[[1,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"deviceIds\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.s3\"],\"isAligned\":" + + isAligned + + "}"); + insertRecords_right_json_list.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurementsList\":[[\"`s33`\",\"s44\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"dataTypesList\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"valuesList\":[[1,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"deviceIds\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.s3\"],\"isAligned\":" + + isAligned + + "}"); + insertRecords_right_json_list.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurementsList\":[[\"s33\",\"s44\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"dataTypesList\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"valuesList\":[[1,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"deviceIds\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.`s3`\"],\"isAligned\":" + + isAligned + + "}"); + insertRecords_right_json_list.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurementsList\":[[\"`s33`\",\"s44\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"dataTypesList\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"valuesList\":[[1,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"deviceIds\":[\"root.`s11`\",\"root.s11\",\"root.s1\",\"root.`s3`\"],\"isAligned\":" + + isAligned + + "}"); + + insertRecords_error_json_list.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurementsList\":[[\"root\",\"442\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"dataTypesList\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"valuesList\":[[true,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"deviceIds\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.time\"],\"isAligned\":" + + isAligned + + "}"); + insertRecords_error_json_list.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurementsList\":[[\"time\",\"123123\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"dataTypesList\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"valuesList\":[[true,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"deviceIds\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.time\"],\"isAligned\":" + + isAligned + + "}"); + insertRecords_error_json_list.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurementsList\":[[\"time\",\"12321\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"dataTypesList\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"valuesList\":[[true,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"deviceIds\":[\"root.111\",\"root.`s11`\",\"root.s1\",\"root.s3\"],\"isAligned\":" + + isAligned + + "}"); + insertRecords_error_json_list.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurementsList\":[[\"`root`\",\"1111\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"dataTypesList\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"valuesList\":[[true,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"deviceIds\":[\"root.s11\",\"root.s11\",\"root.time\",\"root.`s3`\"],\"isAligned\":" + + isAligned + + "}"); + + nonQuery_right_json_list.add("{\"sql\":\"insert into root.aa(time,`bb`) values(111,1)\"}"); + nonQuery_right_json_list.add("{\"sql\":\"insert into root.`aa`(time,bb) values(111,1)\"}"); + nonQuery_right_json_list.add("{\"sql\":\"insert into root.`aa`(time,`bb`) values(111,1)\"}"); + nonQuery_right_json_list.add("{\"sql\":\"insert into root.aa(time,bb) values(111,1)\"}"); + + nonQuery_error_json_list.add("{\"sql\":\"insert into root.time(time,1`bb`) values(111,1)\"}"); + nonQuery_error_json_list.add( + "{\"sql\":\"insert into root.time.`aa`(time,bb) values(111,1)\"}"); + nonQuery_error_json_list.add( + "{\"sql\":\"insert into root.time.`aa`(time,`bb`) values(111,1)\"}"); + nonQuery_error_json_list.add("{\"sql\":\"insert into root.aa(time,root) values(111,1)\"}"); + + insertTablet_right_json_list_v2.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"data_types\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"is_aligned\":\"" + + isAligned + + "\",\"device\":\"root.sg21" + + i + + "\"}"); + insertTablet_right_json_list_v2.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"`s3`\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"data_types\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"is_aligned\":" + + isAligned + + ",\"device\":\"root.sg22" + + i + + "\"}"); + insertTablet_right_json_list_v2.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"data_types\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"is_aligned\":" + + isAligned + + ",\"device\":\"root.`sg23" + + i + + "`\"}"); + insertTablet_right_json_list_v2.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"`s3`\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"data_types\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"is_aligned\":" + + isAligned + + ",\"device\":\"root.`sg24" + + i + + "`\"}"); + insertTablet_error_json_list_v2.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"data_types\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"is_aligned\":" + + isAligned + + ",\"device\":\"root.sg25" + + i + + "\"}"); + insertTablet_error_json_list_v2.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"`s3`\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"data_types\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"is_aligned\":" + + isAligned + + ",\"device\":\"root.sg26" + + i + + "\"}"); + insertTablet_error_json_list_v2.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"123123\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"data_types\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"is_aligned\":" + + isAligned + + ",\"device\":\"root.`sg26" + + i + + "`\"}"); + insertTablet_error_json_list_v2.add( + "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"`1231231`\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"data_types\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"is_aligned\":" + + isAligned + + ",\"device\":\"root.`3333a" + + i + + "`\"}"); + insertRecords_right_json_list_v2.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurements_list\":[[\"s33\",\"s44\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"data_types_list\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"values_list\":[[1,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"devices\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.s3\"],\"is_aligned\":" + + isAligned + + "}"); + insertRecords_right_json_list_v2.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurements_list\":[[\"`s33`\",\"s44\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"data_types_list\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"values_list\":[[1,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"devices\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.s3\"],\"is_aligned\":" + + isAligned + + "}"); + insertRecords_right_json_list_v2.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurements_list\":[[\"s33\",\"s44\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"data_types_list\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"values_list\":[[1,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"devices\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.`s3`\"],\"is_aligned\":" + + isAligned + + "}"); + insertRecords_right_json_list_v2.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurements_list\":[[\"`s33`\",\"s44\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"data_types_list\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"values_list\":[[1,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"devices\":[\"root.`s11`\",\"root.s11\",\"root.s1\",\"root.`s3`\"],\"is_aligned\":" + + isAligned + + "}"); + + insertRecords_error_json_list_v2.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurements_list\":[[\"root\",\"442\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"data_types_list\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"values_list\":[[true,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"devices\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.time\"],\"is_aligned\":" + + isAligned + + "}"); + insertRecords_error_json_list_v2.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurements_list\":[[\"time\",\"123123\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"data_types_list\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"values_list\":[[true,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"devices\":[\"root.s11\",\"root.s11\",\"root.s1\",\"root.time\"],\"is_aligned\":" + + isAligned + + "}"); + insertRecords_error_json_list_v2.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurements_list\":[[\"time\",\"12321\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"data_types_list\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"values_list\":[[true,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"devices\":[\"root.111\",\"root.`s11`\",\"root.s1\",\"root.s3\"],\"is_aligned\":" + + isAligned + + "}"); + insertRecords_error_json_list_v2.add( + "{\"timestamps\":[1635232113960,1635232151960,1123,10],\"measurements_list\":[[\"`root`\",\"1111\"],[\"s55\",\"s66\"],[\"s77\",\"s88\"],[\"s771\",\"s881\"]],\"data_types_list\":[[\"INT32\",\"INT64\"],[\"float\",\"double\"],[\"float\",\"double\"],[\"boolean\",\"text\"]],\"values_list\":[[true,11],[2.1,2],[4,6],[false,\"cccccc\"]],\"devices\":[\"root.s11\",\"root.s11\",\"root.time\",\"root.`s3`\"],\"is_aligned\":" + + isAligned + + "}"); + + nonQuery_right_json_list_v2.add("{\"sql\":\"insert into root.aa(time,`bb`) values(111,1)\"}"); + nonQuery_right_json_list_v2.add("{\"sql\":\"insert into root.`aa`(time,bb) values(111,1)\"}"); + nonQuery_right_json_list_v2.add( + "{\"sql\":\"insert into root.`aa`(time,`bb`) values(111,1)\"}"); + nonQuery_right_json_list_v2.add("{\"sql\":\"insert into root.aa(time,bb) values(111,1)\"}"); + + nonQuery_error_json_list_v2.add( + "{\"sql\":\"insert into root.time(time,1`bb`) values(111,1)\"}"); + nonQuery_error_json_list_v2.add( + "{\"sql\":\"insert into root.time.`aa`(time,bb) values(111,1)\"}"); + nonQuery_error_json_list_v2.add( + "{\"sql\":\"insert into root.time.`aa`(time,`bb`) values(111,1)\"}"); + nonQuery_error_json_list_v2.add("{\"sql\":\"insert into root.aa(time,root) values(111,1)\"}"); + } + + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/insertTablet"); + HttpPost httpPost1 = getHttpPost_1("http://127.0.0.1:" + port + "/rest/v1/insertTablet"); + + List<HttpPost> httpPosts = new ArrayList<>(); + httpPosts.add(httpPost); + httpPosts.add(httpPost1); + for (HttpPost hp : httpPosts) { + for (String json : insertTablet_right_json_list) { + rightInsertTablet(httpClient, json, hp); + } + for (String json : insertTablet_error_json_list) { + errorInsertTablet(json, hp); + } + } + + HttpPost httpPost3 = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/nonQuery"); + HttpPost httpPost4 = getHttpPost_1("http://127.0.0.1:" + port + "/rest/v1/nonQuery"); + List<HttpPost> httpPosts1 = new ArrayList<>(); + httpPosts1.add(httpPost3); + httpPosts1.add(httpPost4); + + for (HttpPost hp : httpPosts1) { + for (String json : nonQuery_right_json_list) { + nonQuery(httpClient, json, hp); + } + for (String json : nonQuery_error_json_list) { + errorNonQuery(httpClient, json, hp); + } + } + + HttpPost httpPost5 = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/insertRecords"); + HttpPost httpPost6 = getHttpPost_1("http://127.0.0.1:" + port + "/rest/v1/insertRecords"); + List<HttpPost> httpPosts2 = new ArrayList<>(); + httpPosts2.add(httpPost5); + httpPosts2.add(httpPost6); + + for (HttpPost hp : httpPosts2) { + for (String json : insertRecords_right_json_list) { + rightInsertRecords(httpClient, json, hp); + } + + for (String json : insertRecords_error_json_list) { + errorInsertRecords(httpClient, json, hp); + } + } + + HttpPost httpPostV2 = getHttpPost("http://127.0.0.1:" + port + "/rest/v2/insertTablet"); + HttpPost httpPost1V2 = getHttpPost_1("http://127.0.0.1:" + port + "/rest/v2/insertTablet"); + + List<HttpPost> httpPostsV2 = new ArrayList<>(); + httpPostsV2.add(httpPostV2); + httpPostsV2.add(httpPost1V2); + for (HttpPost hp : httpPostsV2) { + for (String json : insertTablet_right_json_list_v2) { + rightInsertTablet(httpClient, json, hp); + } + for (String json : insertTablet_error_json_list_v2) { + errorInsertTablet(json, hp); + } + } + + HttpPost httpPost3V2 = getHttpPost("http://127.0.0.1:" + port + "/rest/v2/nonQuery"); + HttpPost httpPost4V2 = getHttpPost_1("http://127.0.0.1:" + port + "/rest/v2/nonQuery"); + List<HttpPost> httpPosts1V2 = new ArrayList<>(); + httpPosts1V2.add(httpPost3V2); + httpPosts1V2.add(httpPost4V2); + + for (HttpPost hp : httpPosts1V2) { + for (String json : nonQuery_right_json_list_v2) { + nonQuery(httpClient, json, hp); + } + for (String json : nonQuery_error_json_list_v2) { + errorNonQuery(httpClient, json, hp); + } + } + + HttpPost httpPost5V2 = getHttpPost("http://127.0.0.1:" + port + "/rest/v2/insertRecords"); + HttpPost httpPost6V2 = getHttpPost_1("http://127.0.0.1:" + port + "/rest/v2/insertRecords"); + List<HttpPost> httpPosts2V2 = new ArrayList<>(); + httpPosts2V2.add(httpPost5V2); + httpPosts2V2.add(httpPost6V2); + + for (HttpPost hp : httpPosts2V2) { + for (String json : insertRecords_right_json_list_v2) { + rightInsertRecords(httpClient, json, hp); + } + + for (String json : insertRecords_error_json_list_v2) { + errorInsertRecords(httpClient, json, hp); + } + } + + try { + httpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + @Test + public void queryWithUnsetAuthorization() { + CloseableHttpResponse response = null; + try { + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + HttpPost httpPost = new HttpPost("http://127.0.0.1:" + port + "/rest/v1/query"); + httpPost.addHeader("Content-type", "application/json; charset=utf-8"); + httpPost.setHeader("Accept", "application/json"); + String sql = "{\"sql\":\"select *,s4+1,s4+1 from root.sg25\"}"; + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + Assert.assertEquals(401, response.getStatusLine().getStatusCode()); + String message = EntityUtils.toString(response.getEntity(), "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(603, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + @Test + public void queryWithWrongAuthorization() { + CloseableHttpResponse response = null; + try { + CloseableHttpClient httpClient = HttpClientBuilder.create().build(); + HttpPost httpPost = new HttpPost("http://127.0.0.1:" + port + "/rest/v1/query"); + httpPost.addHeader("Content-type", "application/json; charset=utf-8"); + httpPost.setHeader("Accept", "application/json"); + String authorization = getAuthorization("abc", "def"); + httpPost.setHeader("Authorization", authorization); + String sql = "{\"sql\":\"select *,s4+1,s4+1 from root.sg25\"}"; + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + Assert.assertEquals(401, response.getStatusLine().getStatusCode()); + String message = EntityUtils.toString(response.getEntity(), "utf-8"); + JsonObject result = JsonParser.parseString(message).getAsJsonObject(); + assertEquals(600, Integer.parseInt(result.get("code").toString())); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void query(CloseableHttpClient httpClient) { + CloseableHttpResponse response = null; + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/query"); + String sql = "{\"sql\":\"select *,s4+1,s4+1 from root.sg25\"}"; + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + ObjectMapper mapper = new ObjectMapper(); + Map map = mapper.readValue(message, Map.class); + List<Long> timestampsResult = (List<Long>) map.get("timestamps"); + List<Long> expressionsResult = (List<Long>) map.get("expressions"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> expressions = + new ArrayList<Object>() { + { + add("root.sg25.s3"); + add("root.sg25.s4"); + add("root.sg25.s5"); + add("root.sg25.s6"); + add("root.sg25.s7"); + add("root.sg25.s8"); + add("root.sg25.s4 + 1"); + add("root.sg25.s4 + 1"); + } + }; + List<Object> timestamps = + new ArrayList<Object>() { + { + add(1635232143960l); + add(1635232153960l); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("2aa"); + add(""); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(11); + add(2); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add(1635000012345555l); + add(1635000012345556l); + } + }; + + List<Object> values4 = + new ArrayList<Object>() { + { + add(1.41); + add(null); + } + }; + List<Object> values5 = + new ArrayList<Object>() { + { + add(null); + add(false); + } + }; + List<Object> values6 = + new ArrayList<Object>() { + { + add(null); + add(3.5555); + } + }; + + Assert.assertEquals(expressions, expressionsResult); + Assert.assertEquals(timestamps, timestampsResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + Assert.assertEquals(values3, valuesResult.get(2)); + Assert.assertEquals(values4, valuesResult.get(3)); + Assert.assertEquals(values5, valuesResult.get(4)); + Assert.assertEquals(values6, valuesResult.get(5)); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void queryGroupByLevel(CloseableHttpClient httpClient) { + CloseableHttpResponse response = null; + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/query"); + String sql = + "{\"sql\":\"select count(s4) from root.sg25 group by([1635232143960,1635232153960),1s),level=1\"}"; + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + ObjectMapper mapper = new ObjectMapper(); + Map map = mapper.readValue(message, Map.class); + List<Long> timestampsResult = (List<Long>) map.get("timestamps"); + List<Long> expressionsResult = (List<Long>) map.get("expressions"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + Assert.assertTrue(timestampsResult.size() == 10); + Assert.assertTrue(valuesResult.size() == 1); + Assert.assertTrue("count(root.sg25.s4)".equals(expressionsResult.get(0))); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void queryRowLimit(CloseableHttpClient httpClient) { + CloseableHttpResponse response = null; + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/query"); + String sql = "{\"sql\":\"select *,s4+1,s4+1 from root.sg25\",\"rowLimit\":1}"; + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + assertTrue(message.contains("row size exceeded the given max row size")); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public Map queryMetaData(CloseableHttpClient httpClient, String sql) { + CloseableHttpResponse response = null; + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v1/query"); + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + ObjectMapper mapper = new ObjectMapper(); + Map map = mapper.readValue(message, Map.class); + return map; + + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + return null; + } + + public void queryShowChildPaths(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show child paths root\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("ChildPaths"); + add("NodeTypes"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void queryShowNodes(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show child nodes root\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("ChildNodes"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("sg25"); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void showAllTTL(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show all ttl\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Database"); + add("TTL"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(null); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + } + + public void showStorageGroup(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"SHOW DATABASES root.*\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Database"); + add("TTL"); + add("SchemaReplicationFactor"); + add("DataReplicationFactor"); + add("TimePartitionInterval"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void showFunctions(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show functions\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + assertEquals(3, columnNamesResult.size()); + assertEquals(3, valuesResult.size()); + } + + public void showTimeseries(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show timeseries\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Timeseries"); + add("Alias"); + add("Database"); + add("DataType"); + add("Encoding"); + add("Compression"); + add("Tags"); + add("Attributes"); + add("Deadband"); + add("DeadbandParameters"); + add("ViewType"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25.s3"); + add("root.sg25.s4"); + add("root.sg25.s5"); + add("root.sg25.s6"); + add("root.sg25.s7"); + add("root.sg25.s8"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(null); + add(null); + add(null); + add(null); + add(null); + add(null); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + Assert.assertEquals(values3, valuesResult.get(2)); + } + + public void showLastTimeseries(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"SHOW LATEST TIMESERIES\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Timeseries"); + add("Alias"); + add("Database"); + add("DataType"); + add("Encoding"); + add("Compression"); + add("Tags"); + add("Attributes"); + add("Deadband"); + add("DeadbandParameters"); + add("ViewType"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25.s3"); + add("root.sg25.s4"); + add("root.sg25.s5"); + add("root.sg25.s7"); + add("root.sg25.s8"); + add("root.sg25.s6"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(null); + add(null); + add(null); + add(null); + add(null); + add(null); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + Assert.assertEquals(values3, valuesResult.get(2)); + } + + public void countTimeseries(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"COUNT TIMESERIES root.** GROUP BY LEVEL=1\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Column"); + add("count(timeseries)"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(6); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + } + + public void countNodes(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"count nodes root.** level=2\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("count(nodes)"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add(6); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void showDevices(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show devices\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Device"); + add("IsAligned"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Boolean> values2 = + new ArrayList<Boolean>() { + { + add(false); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void showDevicesWithStroage(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show devices with database\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Device"); + add("Database"); + add("IsAligned"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add("false"); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + Assert.assertEquals(values3, valuesResult.get(2)); + } + + public void listUser(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"list user\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("columnNames"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("user"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root"); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void selectCount(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"select count(s3) from root.** group by level = 1\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("expressions"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("count(root.sg25.s3)"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add(2); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void selectLast(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"select last s4 from root.sg25\"}"; + Map map = queryMetaData(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("expressions"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + List<Long> timestampsResult = (List<Long>) map.get("timestamps"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Timeseries"); + add("Value"); + add("DataType"); + } + }; + List<Long> timestamps = + new ArrayList<Long>() { + { + add(1635232153960l); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25.s4"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add("2"); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add("INT32"); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(timestamps, timestampsResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2.get(0), valuesResult.get(1).get(0)); + Assert.assertEquals(values3, valuesResult.get(2)); + } + + public void queryV2(CloseableHttpClient httpClient) { + CloseableHttpResponse response = null; + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v2/query"); + String sql = "{\"sql\":\"select *,s4+1,s4+1 from root.sg25\"}"; + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + ObjectMapper mapper = new ObjectMapper(); + Map map = mapper.readValue(message, Map.class); + List<Long> timestampsResult = (List<Long>) map.get("timestamps"); + List<Long> expressionsResult = (List<Long>) map.get("expressions"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> expressions = + new ArrayList<Object>() { + { + add("root.sg25.s3"); + add("root.sg25.s4"); + add("root.sg25.s5"); + add("root.sg25.s6"); + add("root.sg25.s7"); + add("root.sg25.s8"); + add("root.sg25.s4 + 1"); + add("root.sg25.s4 + 1"); + } + }; + List<Object> timestamps = + new ArrayList<Object>() { + { + add(1635232143960l); + add(1635232153960l); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("2aa"); + add(""); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(11); + add(2); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add(1635000012345555l); + add(1635000012345556l); + } + }; + + List<Object> values4 = + new ArrayList<Object>() { + { + add(1.41); + add(null); + } + }; + List<Object> values5 = + new ArrayList<Object>() { + { + add(null); + add(false); + } + }; + List<Object> values6 = + new ArrayList<Object>() { + { + add(null); + add(3.5555); + } + }; + + Assert.assertEquals(expressions, expressionsResult); + Assert.assertEquals(timestamps, timestampsResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + Assert.assertEquals(values3, valuesResult.get(2)); + Assert.assertEquals(values4, valuesResult.get(3)); + Assert.assertEquals(values5, valuesResult.get(4)); + Assert.assertEquals(values6, valuesResult.get(5)); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void queryGroupByLevelV2(CloseableHttpClient httpClient) { + CloseableHttpResponse response = null; + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v2/query"); + String sql = + "{\"sql\":\"select count(s4) from root.sg25 group by([1635232143960,1635232153960),1s),level=1\"}"; + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + ObjectMapper mapper = new ObjectMapper(); + Map map = mapper.readValue(message, Map.class); + List<Long> timestampsResult = (List<Long>) map.get("timestamps"); + List<Long> expressionsResult = (List<Long>) map.get("expressions"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + Assert.assertTrue(timestampsResult.size() == 10); + Assert.assertTrue(valuesResult.size() == 1); + Assert.assertTrue("count(root.sg25.s4)".equals(expressionsResult.get(0))); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public void queryRowLimitV2(CloseableHttpClient httpClient) { + CloseableHttpResponse response = null; + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v2/query"); + String sql = "{\"sql\":\"select *,s4+1,s4+1 from root.sg25\",\"row_limit\":1}"; + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + assertTrue(message.contains("row size exceeded the given max row size")); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + } + + public Map queryMetaDataV2(CloseableHttpClient httpClient, String sql) { + CloseableHttpResponse response = null; + try { + HttpPost httpPost = getHttpPost("http://127.0.0.1:" + port + "/rest/v2/query"); + httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset())); + response = httpClient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String message = EntityUtils.toString(responseEntity, "utf-8"); + ObjectMapper mapper = new ObjectMapper(); + Map map = mapper.readValue(message, Map.class); + return map; + + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + return null; + } + + public void queryShowChildPathsV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show child paths root\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("ChildPaths"); + add("NodeTypes"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void queryShowNodesV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show child nodes root\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("ChildNodes"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("sg25"); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void showAllTTLV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show all ttl\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Database"); + add("TTL"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(null); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + } + + public void showStorageGroupV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"SHOW DATABASES root.*\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Database"); + add("TTL"); + add("SchemaReplicationFactor"); + add("DataReplicationFactor"); + add("TimePartitionInterval"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void showFunctionsV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show functions\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + assertEquals(3, columnNamesResult.size()); + assertEquals(3, valuesResult.size()); + } + + public void showTimeseriesV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show timeseries\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Timeseries"); + add("Alias"); + add("Database"); + add("DataType"); + add("Encoding"); + add("Compression"); + add("Tags"); + add("Attributes"); + add("Deadband"); + add("DeadbandParameters"); + add("ViewType"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25.s3"); + add("root.sg25.s4"); + add("root.sg25.s5"); + add("root.sg25.s6"); + add("root.sg25.s7"); + add("root.sg25.s8"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(null); + add(null); + add(null); + add(null); + add(null); + add(null); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + // Assert.assertEquals(values1, valuesResult.get(0)); + // Assert.assertEquals(values2, valuesResult.get(1)); + // Assert.assertEquals(values3, valuesResult.get(2)); + } + + public void showLastTimeseriesV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"SHOW LATEST TIMESERIES\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Timeseries"); + add("Alias"); + add("Database"); + add("DataType"); + add("Encoding"); + add("Compression"); + add("Tags"); + add("Attributes"); + add("Deadband"); + add("DeadbandParameters"); + add("ViewType"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25.s3"); + add("root.sg25.s4"); + add("root.sg25.s5"); + add("root.sg25.s7"); + add("root.sg25.s8"); + add("root.sg25.s6"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(null); + add(null); + add(null); + add(null); + add(null); + add(null); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + add("root.sg25"); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + Assert.assertEquals(values3, valuesResult.get(2)); + } + + public void countTimeseriesV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"COUNT TIMESERIES root.** GROUP BY LEVEL=1\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Column"); + add("count(timeseries)"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add(6); + } + }; + + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + } + + public void countNodesV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"count nodes root.** level=2\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("count(nodes)"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add(6); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void showDevicesV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show devices\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Device"); + add("IsAligned"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Boolean> values2 = + new ArrayList<Boolean>() { + { + add(false); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + // Assert.assertEquals(values2, valuesResult.get(1)); + } + + public void showDevicesWithStroageV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"show devices with database\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Device"); + add("Database"); + add("IsAligned"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add("root.sg25"); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add("false"); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2, valuesResult.get(1)); + Assert.assertEquals(values3, valuesResult.get(2)); + } + + public void listUserV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"list user\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("column_names"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("user"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root"); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void selectCountV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"select count(s3) from root.** group by level = 1\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("expressions"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("count(root.sg25.s3)"); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add(2); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(values1, valuesResult.get(0)); + } + + public void selectLastV2(CloseableHttpClient httpClient) { + String sql = "{\"sql\":\"select last s4 from root.sg25\"}"; + Map map = queryMetaDataV2(httpClient, sql); + List<String> columnNamesResult = (List<String>) map.get("expressions"); + List<List<Object>> valuesResult = (List<List<Object>>) map.get("values"); + List<Long> timestampsResult = (List<Long>) map.get("timestamps"); + Assert.assertTrue(map.size() > 0); + List<Object> columnNames = + new ArrayList<Object>() { + { + add("Timeseries"); + add("Value"); + add("DataType"); + } + }; + List<Long> timestamps = + new ArrayList<Long>() { + { + add(1635232153960l); + } + }; + List<Object> values1 = + new ArrayList<Object>() { + { + add("root.sg25.s4"); + } + }; + List<Object> values2 = + new ArrayList<Object>() { + { + add("2"); + } + }; + List<Object> values3 = + new ArrayList<Object>() { + { + add("INT32"); + } + }; + Assert.assertEquals(columnNames, columnNamesResult); + Assert.assertEquals(timestamps, timestampsResult); + Assert.assertEquals(values1, valuesResult.get(0)); + Assert.assertEquals(values2.get(0), valuesResult.get(1).get(0)); + Assert.assertEquals(values3, valuesResult.get(2)); + } +}
