156 lines
5.8 KiB
Python
156 lines
5.8 KiB
Python
###################################################################
|
|
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
|
# All rights reserved.
|
|
#
|
|
# This file is proprietary and confidential to TAOS Technologies.
|
|
# No part of this file may be reproduced, stored, transmitted,
|
|
# disclosed or used in any form or by any means other than as
|
|
# expressly provided by the written permission from Jianhui Tao
|
|
#
|
|
###################################################################
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import sys
|
|
import json
|
|
|
|
from util.log import *
|
|
from util.cases import *
|
|
from util.sql import *
|
|
from util.dnodes import *
|
|
|
|
|
|
class TDTestCase:
|
|
def __init__(self):
|
|
self.path = ""
|
|
|
|
def init(self, conn, logSql):
|
|
tdLog.debug("start to execute %s" % __file__)
|
|
tdSql.init(conn.cursor(), logSql)
|
|
|
|
def getBuildPath(self):
|
|
selfPath = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
if ("community" in selfPath):
|
|
projPath = selfPath[:selfPath.find("community")]
|
|
else:
|
|
projPath = selfPath[:selfPath.find("tests")]
|
|
|
|
for root, dirs, files in os.walk(projPath):
|
|
if ("taosd" in files):
|
|
rootRealPath = os.path.dirname(os.path.realpath(root))
|
|
if ("packaging" not in rootRealPath):
|
|
buildPath = root[:len(root) - len("/debug/build/bin")]
|
|
break
|
|
return buildPath
|
|
|
|
def getCfgDir(self):
|
|
return self.getBuildPath() + "/sim/psim/cfg"
|
|
|
|
def querycfg(self):
|
|
cfgdir = self.getCfgDir()
|
|
querycfg={
|
|
"filetype": "query",
|
|
"cfgdir": cfgdir,
|
|
"host": "127.0.0.1",
|
|
"port": 6030,
|
|
"user": "root",
|
|
"password": "taosdata",
|
|
"confirm_parameter_prompt": "yes",
|
|
"databases": "db",
|
|
"specified_table_query": {
|
|
"query_interval": 0,
|
|
"concurrent": 1,
|
|
"sqls": [
|
|
{
|
|
"sql": "select * from t10, t11 where t10.ts=t11.ts"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
return querycfg
|
|
|
|
def querycfgfile(self):
|
|
querycfg = self.querycfg()
|
|
date = datetime.datetime.now().strftime("%Y%m%d%H%M")
|
|
querycfg.get("specified_table_query").get("sqls")[0]["result"] = f"/tmp/query_{date}.log"
|
|
file_query_table = f"/tmp/query_{date}.json"
|
|
with open(file_query_table, "w") as f:
|
|
json.dump(querycfg, f)
|
|
|
|
return [file_query_table, querycfg]
|
|
|
|
def querytable(self, filepath):
|
|
buildPath = self.getBuildPath()
|
|
if (buildPath == ""):
|
|
tdLog.exit("taosd not found!")
|
|
else:
|
|
tdLog.info(f"taosd found in {buildPath}")
|
|
binPath = buildPath + "/debug/build/bin/"
|
|
|
|
query_table_cmd = f"yes | {binPath}taosdemo -f {filepath}"
|
|
_ = subprocess.check_output(query_table_cmd, shell=True).decode("utf-8")
|
|
|
|
def checkqueryresult(self, expectrows):
|
|
querycfg = self.querycfgfile()[1]
|
|
result_file = querycfg.get("specified_table_query").get("sqls")[0].get("result") + "-0"
|
|
if result_file:
|
|
check_cmd = f"wc -l {result_file}"
|
|
check_data_init = subprocess.check_output(check_cmd, shell=True).decode("utf-8")
|
|
check_data = int(check_data_init[0])
|
|
if check_data == expectrows:
|
|
tdLog.info(f"queryResultRows:{check_data} == expect:{expectrows}")
|
|
else:
|
|
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
|
args = (caller.filename, caller.lineno, check_data, expectrows)
|
|
tdLog.exit(f"{args[0]}({args[1]}) failed: result:{args[2]} != expect:{args[3]}")
|
|
|
|
def droptmpfile(self):
|
|
drop_file_cmd = "rm -f /tmp/query_* "
|
|
_ = subprocess.check_output(drop_file_cmd, shell=True).decode("utf-8")
|
|
drop_file_cmd = "rm -f querySystemInfo-*"
|
|
_ = subprocess.check_output(drop_file_cmd, shell=True).decode("utf-8")
|
|
|
|
def run(self):
|
|
tdSql.prepare()
|
|
|
|
tdLog.printNoPrefix("==========step1:create table && insert data")
|
|
tdSql.execute("alter database db keep 36500")
|
|
tdSql.execute(
|
|
"create table stb1 (ts timestamp, c1 int) TAGS(t1 int)"
|
|
)
|
|
tdSql.execute("create table t10 using stb1 tags(1)")
|
|
tdSql.execute("create table t11 using stb1 tags(2)")
|
|
|
|
tdSql.execute("insert into t10 values (-865000000, 1)")
|
|
tdSql.execute("insert into t11 values (-865000000, 2)")
|
|
tdSql.execute("insert into t10 values ('1969-12-31 23:59:59.000', 2)")
|
|
tdSql.execute("insert into t11 values ('1969-12-31 23:59:59.000', 3)")
|
|
tdSql.execute("insert into t10 values ('1970-01-01 00:00:00.000', 3)")
|
|
tdSql.execute("insert into t11 values ('1970-01-01 00:00:00.000', 4)")
|
|
tdSql.execute("insert into t10 values (-15230000, 4)")
|
|
tdSql.execute("insert into t11 values (-15230000, 5)")
|
|
tdSql.execute("insert into t10 values (-15220000, 5)")
|
|
tdSql.execute("insert into t11 values (-15220000, 6)")
|
|
tdSql.execute("insert into t10 values (-15210000, 6)")
|
|
tdSql.execute("insert into t11 values (-15210000, 7)")
|
|
tdSql.execute("insert into t10 values (0, 7)")
|
|
tdSql.execute("insert into t11 values (0, 8)")
|
|
tdSql.execute("insert into t10 values ('2020-10-01 00:00:00.000', 8)")
|
|
tdSql.execute("insert into t11 values ('2020-10-01 00:00:00.000', 9)")
|
|
|
|
tdLog.printNoPrefix("==========step2:query")
|
|
query_file = self.querycfgfile()[0]
|
|
self.querytable(query_file)
|
|
self.checkqueryresult(8)
|
|
|
|
self.droptmpfile()
|
|
|
|
def stop(self):
|
|
tdSql.close()
|
|
tdLog.success("%s successfully executed" % __file__)
|
|
|
|
|
|
tdCases.addWindows(__file__, TDTestCase())
|
|
tdCases.addLinux(__file__, TDTestCase()) |