From 2647a1b1ac035b527a77fc12947c020e136ab7d6 Mon Sep 17 00:00:00 2001 From: menshibin Date: Wed, 3 Jan 2024 16:05:26 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0TS-4411bug=E7=9A=84case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/army/community/query/fill/fill_desc.py | 58 ++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 tests/army/community/query/fill/fill_desc.py diff --git a/tests/army/community/query/fill/fill_desc.py b/tests/army/community/query/fill/fill_desc.py new file mode 100644 index 0000000000..10b93079e4 --- /dev/null +++ b/tests/army/community/query/fill/fill_desc.py @@ -0,0 +1,58 @@ +import taos +import sys + +from util.log import * +from util.sql import * +from util.cases import * + +class TDTestCase: + + def init(self, conn, logSql, replicaVar=1): + self.replicaVar = int(replicaVar) + tdLog.debug(f"start to excute {__file__}") + #tdSql.init(conn.cursor()) + tdSql.init(conn.cursor(), logSql) # output sql.txt file + + def run(self): + dbname = "db" + stbname = "ocloud_point" + tbname = "ocloud_point_170658_3837620225_1701134595725266945" + + tdSql.prepare() + + tdLog.printNoPrefix("==========step1:create table") + + tdSql.execute( + f'''create stable if not exists {dbname}.{stbname} + (wstart timestamp, point_value float) tags (location binary(64), groupId int) + ''' + ) + + tdSql.execute( + f'''create table if not exists {dbname}.{tbname} using {dbname}.{stbname} tags("California.SanFrancisco", 2)''' + ) + + tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:35:00.000', 5.0)") + tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:36:00.000', 5.0)") + tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:37:00.000', 5.0)") + tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:38:00.000', null)") + tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:39:00.000', 5.0)") + tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:40:00.000', null)") + + tdLog.printNoPrefix("==========step3:fill data") + + tdSql.query(f"wstart as ts, first(point_value) as pointValu from {dbname}.{tbname} where ts between '2823-12-2510:35:00' and '2023-12-2510:40:00' fill(prev) order by wstart desc limit 100") + tdSql.checkRows(6) + tdSql.checkData(0, 1, 5) + tdSql.checkData(1, 1, 5) + tdSql.checkData(2, 1, 5) + tdSql.checkData(3, 1, 5) + tdSql.checkData(4, 1, 5) + tdSql.checkData(5, 1, 5) + + def stop(self): + tdSql.close() + tdLog.success(f"{__file__} successfully executed") + +tdCases.addLinux(__file__, TDTestCase()) +tdCases.addWindows(__file__, TDTestCase()) From 889bea29b406dd776e513022f30415bf210c7c19 Mon Sep 17 00:00:00 2001 From: menshibin Date: Wed, 3 Jan 2024 16:20:34 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0TS-4411bug=E7=9A=84case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/army/community/query/fill/fill_desc.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/army/community/query/fill/fill_desc.py b/tests/army/community/query/fill/fill_desc.py index 10b93079e4..7ef8155b1e 100644 --- a/tests/army/community/query/fill/fill_desc.py +++ b/tests/army/community/query/fill/fill_desc.py @@ -1,11 +1,13 @@ import taos import sys -from util.log import * -from util.sql import * -from util.cases import * +from frame.log import * +from frame.cases import * +from frame.sql import * +from frame.caseBase import * +from frame import * -class TDTestCase: +class TDTestCase(TBase): def init(self, conn, logSql, replicaVar=1): self.replicaVar = int(replicaVar) @@ -41,7 +43,7 @@ class TDTestCase: tdLog.printNoPrefix("==========step3:fill data") - tdSql.query(f"wstart as ts, first(point_value) as pointValu from {dbname}.{tbname} where ts between '2823-12-2510:35:00' and '2023-12-2510:40:00' fill(prev) order by wstart desc limit 100") + tdSql.query(f"wstart as ts, first(point_value) as pointValu from {dbname}.{tbname} where wstart between '2823-12-2510:35:00' and '2023-12-2510:40:00' fill(prev) order by wstart desc limit 100") tdSql.checkRows(6) tdSql.checkData(0, 1, 5) tdSql.checkData(1, 1, 5) From 78185b84b947302d1bb72eaaecbabc77677dac15 Mon Sep 17 00:00:00 2001 From: menshibin Date: Wed, 3 Jan 2024 16:25:31 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0TS-4411bug=E7=9A=84case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/army/community/query/fill/fill_desc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/army/community/query/fill/fill_desc.py b/tests/army/community/query/fill/fill_desc.py index 7ef8155b1e..efb13692d0 100644 --- a/tests/army/community/query/fill/fill_desc.py +++ b/tests/army/community/query/fill/fill_desc.py @@ -43,7 +43,7 @@ class TDTestCase(TBase): tdLog.printNoPrefix("==========step3:fill data") - tdSql.query(f"wstart as ts, first(point_value) as pointValu from {dbname}.{tbname} where wstart between '2823-12-2510:35:00' and '2023-12-2510:40:00' fill(prev) order by wstart desc limit 100") + tdSql.query(f"select wstart as ts, first(point_value) as pointValue from {dbname}.{tbname} where wstart between '2823-12-2510:35:00' and '2023-12-2510:40:00' fill(prev) order by wstart desc limit 100") tdSql.checkRows(6) tdSql.checkData(0, 1, 5) tdSql.checkData(1, 1, 5) From f4aedccb80b7bc489b7a4995260984f4a1e88dc4 Mon Sep 17 00:00:00 2001 From: menshibin Date: Wed, 3 Jan 2024 16:38:55 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0TS-4411bug=E7=9A=84case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/army/community/query/fill/fill_desc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/army/community/query/fill/fill_desc.py b/tests/army/community/query/fill/fill_desc.py index efb13692d0..96ae8a4344 100644 --- a/tests/army/community/query/fill/fill_desc.py +++ b/tests/army/community/query/fill/fill_desc.py @@ -43,7 +43,7 @@ class TDTestCase(TBase): tdLog.printNoPrefix("==========step3:fill data") - tdSql.query(f"select wstart as ts, first(point_value) as pointValue from {dbname}.{tbname} where wstart between '2823-12-2510:35:00' and '2023-12-2510:40:00' fill(prev) order by wstart desc limit 100") + tdSql.query(f"select wstart as ts, first(point_value) as pointValue from {dbname}.{tbname} where wstart between '2023-12-26 10:35:00' and '2023-12-26 10:40:00' interval(1M) fill(prev) order by wstart desc limit 100") tdSql.checkRows(6) tdSql.checkData(0, 1, 5) tdSql.checkData(1, 1, 5) From 25e2f30d0e08c303b9980fbc7ae117a944252fb6 Mon Sep 17 00:00:00 2001 From: menshibin Date: Wed, 3 Jan 2024 17:19:17 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B9=B6=E8=A1=8C?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/parallel_test/cases.task | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 093fec78ab..a44fcacdb4 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -11,7 +11,7 @@ ,,y,army,./pytest.sh python3 ./test.py -f enterprise/multi-level/mlevel_basic.py -N 3 -L 3 -D 2 ,,y,army,./pytest.sh python3 ./test.py -f enterprise/s3/s3_basic.py -L 3 -D 1 ,,y,army,./pytest.sh python3 ./test.py -f community/cluster/snapshot.py -N 3 -L 3 -D 2 - +,,y,army,./pytest.sh python3 ./test.py -f community/query/fill/fill_desc.py # # system test From 526d51d27f4c7ee5e4fa1e0e19d4099980454c05 Mon Sep 17 00:00:00 2001 From: menshibin Date: Tue, 9 Jan 2024 10:11:19 +0800 Subject: [PATCH 06/12] use checkDataMem --- tests/army/community/query/fill/fill_desc.py | 12 +++--- tests/army/frame/sql.py | 44 ++++++++++++++++++++ 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/tests/army/community/query/fill/fill_desc.py b/tests/army/community/query/fill/fill_desc.py index 96ae8a4344..3b11e2b768 100644 --- a/tests/army/community/query/fill/fill_desc.py +++ b/tests/army/community/query/fill/fill_desc.py @@ -44,13 +44,11 @@ class TDTestCase(TBase): tdLog.printNoPrefix("==========step3:fill data") tdSql.query(f"select wstart as ts, first(point_value) as pointValue from {dbname}.{tbname} where wstart between '2023-12-26 10:35:00' and '2023-12-26 10:40:00' interval(1M) fill(prev) order by wstart desc limit 100") - tdSql.checkRows(6) - tdSql.checkData(0, 1, 5) - tdSql.checkData(1, 1, 5) - tdSql.checkData(2, 1, 5) - tdSql.checkData(3, 1, 5) - tdSql.checkData(4, 1, 5) - tdSql.checkData(5, 1, 5) + data = [] + for i in : range(6) # 将csv 文件中的数据保存到data中 + row = [i, 1, 5] + data.append(row) # 选择某一列加入到data数组中 + tdSql.checkDataMem(data) def stop(self): tdSql.close() diff --git a/tests/army/frame/sql.py b/tests/army/frame/sql.py index 2e14f0c2f0..19839e217e 100644 --- a/tests/army/frame/sql.py +++ b/tests/army/frame/sql.py @@ -374,6 +374,50 @@ class TDSql: if(show): tdLog.info("check successfully") + def checkDataMem(self, mem): + if not isinstance(mem, list): + caller = inspect.getframeinfo(inspect.stack()[1][0]) + args = (caller.filename, caller.lineno, self.sql) + tdLog.exit("%s(%d) failed: sql:%s, expect data is error, must is array[][]" % args) + + if len(mem) != self.queryRows: + caller = inspect.getframeinfo(inspect.stack()[1][0]) + args = (caller.filename, caller.lineno, self.sql, len(mem), self.queryRows) + tdLog.exit("%s(%d) failed: sql:%s, row:%d is larger than queryRows:%d" % args) + # row, col, data + for row, rowData in enumerate(mem): + for col, colData in enumerate(rowData): + self.checkData(row, col, colData) + tdLog.info("check successfully") + + def checkDataCsv(self, csvfilePath): + if not isinstance(csvfilePath, str) or len(csvfilePath) == 0: + caller = inspect.getframeinfo(inspect.stack()[1][0]) + args = (caller.filename, caller.lineno, self.sql, csvfilePath) + tdLog.exit("%s(%d) failed: sql:%s, expect csvfile path error:%s" % args) + + tdLog.info("read csvfile read begin") + data = [] + try: + with open(csvfilePath) as csvfile: + csv_reader = csv.reader(csvfile) # 使用csv.reader读取csvfile中的文件 + # header = next(csv_reader) # 读取第一行每一列的标题 + for row in csv_reader: # 将csv 文件中的数据保存到data中 + data.append(row) # 选择某一列加入到data数组中 + except FileNotFoundError: + # 当文件不存在时会引发FileNotFoundError异常 + caller = inspect.getframeinfo(inspect.stack()[1][0]) + args = (caller.filename, caller.lineno, self.sql, csvfilePath) + tdLog.exit("%s(%d) failed: sql:%s, expect csvfile not find error:%s" % args) + except Exception as e: + # 其他任意类型的异常都将被捕获并输出相应信息 + caller = inspect.getframeinfo(inspect.stack()[1][0]) + args = (caller.filename, caller.lineno, self.sql, csvfilePath, str(e)) + tdLog.exit("%s(%d) failed: sql:%s, expect csvfile path:%s, read error:%s" % args) + + tdLog.info("read csvfile read successfully") + self.checkDataMem(data) + # return true or false replace exit, no print out def checkRowColNoExit(self, row, col): caller = inspect.getframeinfo(inspect.stack()[2][0]) From 2d3fdf500ea993d0417dff9880a054145c34faf8 Mon Sep 17 00:00:00 2001 From: menshibin Date: Tue, 9 Jan 2024 14:42:25 +0800 Subject: [PATCH 07/12] use checkDataMem --- tests/army/community/query/fill/fill_desc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/army/community/query/fill/fill_desc.py b/tests/army/community/query/fill/fill_desc.py index 3b11e2b768..e30c197f9e 100644 --- a/tests/army/community/query/fill/fill_desc.py +++ b/tests/army/community/query/fill/fill_desc.py @@ -45,9 +45,9 @@ class TDTestCase(TBase): tdSql.query(f"select wstart as ts, first(point_value) as pointValue from {dbname}.{tbname} where wstart between '2023-12-26 10:35:00' and '2023-12-26 10:40:00' interval(1M) fill(prev) order by wstart desc limit 100") data = [] - for i in : range(6) # 将csv 文件中的数据保存到data中 + for i in range(6): row = [i, 1, 5] - data.append(row) # 选择某一列加入到data数组中 + data.append(row) tdSql.checkDataMem(data) def stop(self): From a4bb1adba88d28e25b74ae12245dfd3dfa8d3fe7 Mon Sep 17 00:00:00 2001 From: menshibin Date: Wed, 10 Jan 2024 09:23:24 +0800 Subject: [PATCH 08/12] modify param --- tests/army/frame/sql.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/army/frame/sql.py b/tests/army/frame/sql.py index 19839e217e..b73877ab81 100644 --- a/tests/army/frame/sql.py +++ b/tests/army/frame/sql.py @@ -387,7 +387,7 @@ class TDSql: # row, col, data for row, rowData in enumerate(mem): for col, colData in enumerate(rowData): - self.checkData(row, col, colData) + self.checkData(row, colData[1], colData[2]) tdLog.info("check successfully") def checkDataCsv(self, csvfilePath): From 5dff14bad8edb3a8da7a77ba83c27e368863286b Mon Sep 17 00:00:00 2001 From: menshibin Date: Wed, 10 Jan 2024 10:03:44 +0800 Subject: [PATCH 09/12] modify param --- tests/army/community/query/fill/fill_desc.py | 4 ++-- tests/army/frame/sql.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/army/community/query/fill/fill_desc.py b/tests/army/community/query/fill/fill_desc.py index e30c197f9e..61638e73ed 100644 --- a/tests/army/community/query/fill/fill_desc.py +++ b/tests/army/community/query/fill/fill_desc.py @@ -43,10 +43,10 @@ class TDTestCase(TBase): tdLog.printNoPrefix("==========step3:fill data") - tdSql.query(f"select wstart as ts, first(point_value) as pointValue from {dbname}.{tbname} where wstart between '2023-12-26 10:35:00' and '2023-12-26 10:40:00' interval(1M) fill(prev) order by wstart desc limit 100") + tdSql.query(f"select first(point_value) as pointValue from {dbname}.{tbname} where wstart between '2023-12-26 10:35:00' and '2023-12-26 10:40:00' interval(1M) fill(prev) order by wstart desc limit 100") data = [] for i in range(6): - row = [i, 1, 5] + row = [5] data.append(row) tdSql.checkDataMem(data) diff --git a/tests/army/frame/sql.py b/tests/army/frame/sql.py index b73877ab81..19839e217e 100644 --- a/tests/army/frame/sql.py +++ b/tests/army/frame/sql.py @@ -387,7 +387,7 @@ class TDSql: # row, col, data for row, rowData in enumerate(mem): for col, colData in enumerate(rowData): - self.checkData(row, colData[1], colData[2]) + self.checkData(row, col, colData) tdLog.info("check successfully") def checkDataCsv(self, csvfilePath): From 4c804904da6ea50f123f13fc22887f957adf7538 Mon Sep 17 00:00:00 2001 From: menshibin Date: Sat, 20 Jan 2024 16:19:14 +0800 Subject: [PATCH 10/12] Resolve conflicts --- tests/parallel_test/cases.task | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 1c2f5ec23c..766afc5358 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -11,6 +11,7 @@ ,,y,army,./pytest.sh python3 ./test.py -f enterprise/multi-level/mlevel_basic.py -N 3 -L 3 -D 2 ,,y,army,./pytest.sh python3 ./test.py -f enterprise/s3/s3_basic.py -L 3 -D 1 ,,y,army,./pytest.sh python3 ./test.py -f community/cluster/snapshot.py -N 3 -L 3 -D 2 +,,y,army,./pytest.sh python3 ./test.py -f community/query/fill/fill_desc.py -N 3 -L 3 -D 2 ,,n,army,python3 ./test.py -f community/cmdline/fullopt.py From db9b004c5816c63723c0e0cb58894ba75879d003 Mon Sep 17 00:00:00 2001 From: menshibin Date: Sat, 20 Jan 2024 16:36:34 +0800 Subject: [PATCH 11/12] Annotations in English --- tests/army/frame/sql.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/army/frame/sql.py b/tests/army/frame/sql.py index b5b5f836b9..d2a6292f8e 100644 --- a/tests/army/frame/sql.py +++ b/tests/army/frame/sql.py @@ -467,17 +467,15 @@ class TDSql: data = [] try: with open(csvfilePath) as csvfile: - csv_reader = csv.reader(csvfile) # 使用csv.reader读取csvfile中的文件 - # header = next(csv_reader) # 读取第一行每一列的标题 - for row in csv_reader: # 将csv 文件中的数据保存到data中 - data.append(row) # 选择某一列加入到data数组中 + csv_reader = csv.reader(csvfile) # csv.reader read csvfile\ + # header = next(csv_reader) # Read the header of each column in the first row + for row in csv_reader: # csv file save to data + data.append(row) except FileNotFoundError: - # 当文件不存在时会引发FileNotFoundError异常 caller = inspect.getframeinfo(inspect.stack()[1][0]) args = (caller.filename, caller.lineno, self.sql, csvfilePath) tdLog.exit("%s(%d) failed: sql:%s, expect csvfile not find error:%s" % args) except Exception as e: - # 其他任意类型的异常都将被捕获并输出相应信息 caller = inspect.getframeinfo(inspect.stack()[1][0]) args = (caller.filename, caller.lineno, self.sql, csvfilePath, str(e)) tdLog.exit("%s(%d) failed: sql:%s, expect csvfile path:%s, read error:%s" % args) From 09c372a456907dc907de0495e5b7220da8ea38f1 Mon Sep 17 00:00:00 2001 From: menshibin Date: Sat, 20 Jan 2024 16:57:24 +0800 Subject: [PATCH 12/12] Resolve conflicts --- tests/army/community/query/fill/fill_desc.py | 21 ++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/tests/army/community/query/fill/fill_desc.py b/tests/army/community/query/fill/fill_desc.py index 61638e73ed..170c34ec49 100644 --- a/tests/army/community/query/fill/fill_desc.py +++ b/tests/army/community/query/fill/fill_desc.py @@ -34,12 +34,21 @@ class TDTestCase(TBase): f'''create table if not exists {dbname}.{tbname} using {dbname}.{stbname} tags("California.SanFrancisco", 2)''' ) - tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:35:00.000', 5.0)") - tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:36:00.000', 5.0)") - tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:37:00.000', 5.0)") - tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:38:00.000', null)") - tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:39:00.000', 5.0)") - tdSql.execute(f"insert into {dbname}.{tbname} values('2023-12-26 10:40:00.000', null)") + sqls = [] + for i in range(35, 41): + if i == 38 or i == 40: + sqls.append(f"insert into {dbname}.{tbname} values('2023-12-26 10:{i}:00.000', null)") + else: + sqls.append(f"insert into {dbname}.{tbname} values('2023-12-26 10:{i}:00.000', 5.0)") + + # sqls.append(f"insert into {dbname}.{tbname} values('2023-12-26 10:36:00.000', 5.0)") + # sqls.append(f"insert into {dbname}.{tbname} values('2023-12-26 10:37:00.000', 5.0)") + # sqls.append(f"insert into {dbname}.{tbname} values('2023-12-26 10:38:00.000', null)") + # sqls.append(f"insert into {dbname}.{tbname} values('2023-12-26 10:39:00.000', 5.0)") + # sqls.append(f"insert into {dbname}.{tbname} values('2023-12-26 10:40:00.000', null)") + + + tdSql.executes(sqls) tdLog.printNoPrefix("==========step3:fill data")