2025-07-09 03:23:09 +00:00
import time
import math
from new_test_framework . utils import tdLog , tdSql , clusterComCheck , tdStream , StreamItem
class TestStreamDevBasic :
def setup_class ( cls ) :
tdLog . debug ( f " start to execute { __file__ } " )
def test_stream_dev_basic ( self ) :
""" basic test
Verification testing during the development process .
Catalog :
- Streams : Others
Since : v3 .3 .3 .7
Labels : common , ci
Jira : None
History :
- 2025 - 5 - 26 Simon Guan Created
"""
self . createSnode ( )
self . createDatabase ( )
self . prepareQueryData ( )
self . prepareTriggerTable ( )
self . createStreams ( )
self . checkStreamStatus ( )
self . writeTriggerData ( )
self . checkResults ( )
def createSnode ( self ) :
tdLog . info ( " create snode " )
tdStream . createSnode ( 1 )
def createDatabase ( self ) :
tdLog . info ( f " create database " )
tdSql . prepare ( dbname = " qdb " , vgroups = 1 )
tdSql . prepare ( dbname = " tdb " , vgroups = 1 )
tdSql . prepare ( dbname = " rdb " , vgroups = 1 )
clusterComCheck . checkDbReady ( " qdb " )
clusterComCheck . checkDbReady ( " tdb " )
clusterComCheck . checkDbReady ( " rdb " )
def prepareQueryData ( self ) :
tdLog . info ( " prepare child tables for query " )
tdStream . prepareChildTables ( tbBatch = 1 , rowBatch = 1 , rowsPerBatch = 400 )
tdLog . info ( " prepare normal tables for query " )
tdStream . prepareNormalTables ( tables = 10 , rowBatch = 1 )
tdLog . info ( " prepare virtual tables for query " )
tdStream . prepareVirtualTables ( tables = 10 )
tdLog . info ( " prepare json tag tables for query, include None and primary key " )
tdStream . prepareJsonTables ( tbBatch = 1 , tbPerBatch = 10 )
tdLog . info ( " prepare view " )
tdStream . prepareViews ( views = 5 )
def prepareTriggerTable ( self ) :
tdLog . info ( " prepare tables for trigger " )
stb = " create table tdb.triggers (ts timestamp, c1 int, c2 int) tags(id int, name varchar(16)); "
ctb = " create table tdb.t1 using tdb.triggers tags(1, ' 1 ' ) tdb.t2 using tdb.triggers tags(2, ' 2 ' ) tdb.t3 using tdb.triggers tags(3, ' 3 ' ) "
tdSql . execute ( stb )
tdSql . execute ( ctb )
ntb = " create table tdb.n1 (ts timestamp, c1 int, c2 int) "
tdSql . execute ( ntb )
vstb = " create stable tdb.vtriggers (ts timestamp, c1 int, c2 int) tags(id int) VIRTUAL 1 "
vctb = " create vtable tdb.v1 (tdb.t1.c1, tdb.t2.c2) using tdb.vtriggers tags(1) "
tdSql . execute ( vstb )
tdSql . execute ( vctb )
def writeTriggerData ( self ) :
tdLog . info ( " write data to trigger table " )
sqls = [
2025-07-09 10:24:45 +00:00
" insert into tdb.t1 values ( ' 2025-01-01 00:00:00 ' , 0, 0 ) ( ' 2025-01-01 00:01:00 ' , 0, 10 ) ( ' 2025-01-01 00:05:00 ' , 10, 0) " ,
" insert into tdb.t2 values ( ' 2025-01-01 00:15:00 ' , 11, 110) ( ' 2025-01-01 00:16:00 ' , 11, 120) ( ' 2025-01-01 00:20:00 ' , 21, 210) " ,
" insert into tdb.t3 values ( ' 2025-01-01 00:20:00 ' , 20, 210) " ,
" insert into tdb.n1 values ( ' 2025-01-01 00:25:00 ' , 25, 0 ) ( ' 2025-01-01 00:26:00 ' , 25, 10 ) ( ' 2025-01-01 00:30:00 ' , 30, 0) " ,
" insert into tdb.t1 values ( ' 2025-01-01 00:06:00 ' , 10, 10 ) ( ' 2025-01-01 00:10:00 ' , 20, 0 ) ( ' 2025-01-01 00:11:00 ' , 20, 10 ) ( ' 2025-01-01 00:30:00 ' , 30, 0) ( ' 2025-01-01 00:31:00 ' , 30, 10) ( ' 2025-01-01 00:35:00 ' , 40, 0) ( ' 2025-01-01 00:36:00 ' , 40, 10) " ,
" insert into tdb.n1 values ( ' 2025-01-01 00:31:00 ' , 30, 10 ) ( ' 2025-01-01 00:40:00 ' , 40, 0 ) " ,
2025-07-09 03:23:09 +00:00
]
tdSql . executes ( sqls )
def checkStreamStatus ( self ) :
tdLog . info ( f " wait total: { len ( self . streams ) } streams run finish " )
tdStream . checkStreamStatus ( )
def checkResults ( self ) :
tdLog . info ( f " check total: { len ( self . streams ) } streams result " )
for stream in self . streams :
stream . checkResults ( )
def createStreams ( self ) :
self . streams = [ ]
stream = StreamItem (
id = 1 ,
2025-07-09 10:24:45 +00:00
stream = " create stream rdb.s1 session(ts, 2m) from tdb.triggers into rdb.r1 as select _twstart ts, _twstart + 5m te, _twduration td, _twrownum tw, _tgrpid tg, cast(_tlocaltime as bigint) tl, count(cint) c1, avg(cint) c2 from qdb.meters where cts >= _twstart and cts < _twstart + 5m and _twduration is not null and _twrownum is not null and _tgrpid is not null and _tlocaltime is not null; " ,
2025-07-09 03:23:09 +00:00
res_query = " select ts, te, td, tg, c1, c2 from rdb.r1 where ts >= ' 2025-01-01 00:00:00 ' and ts < ' 2025-01-01 00:15:00 ' ; " ,
2025-07-09 10:24:45 +00:00
exp_query = " select _wstart ts, _wend te, 60000, 0 tg, count(cint) c1, avg(cint) c2 from qdb.meters where cts >= ' 2025-01-01 00:00:00 ' and cts < ' 2025-01-01 00:15:00 ' interval(5m); " ,
2025-07-09 03:23:09 +00:00
check_func = self . check1 ,
)
self . streams . append ( stream )
tdLog . info ( f " create total: { len ( self . streams ) } streams " )
for stream in self . streams :
stream . createStream ( )
def check1 ( self ) :
tdSql . checkTableType (
dbname = " rdb " , tbname = " r1 " , typename = " NORMAL_TABLE " , columns = 8
)
tdSql . checkTableSchema (
dbname = " rdb " ,
tbname = " r1 " ,
schema = [
[ " ts " , " TIMESTAMP " , 8 , " " ] ,
[ " te " , " TIMESTAMP " , 8 , " " ] ,
[ " td " , " BIGINT " , 8 , " " ] ,
[ " tw " , " BIGINT " , 8 , " " ] ,
[ " tg " , " BIGINT " , 8 , " " ] ,
[ " tl " , " BIGINT " , 8 , " " ] ,
[ " c1 " , " BIGINT " , 8 , " " ] ,
[ " c2 " , " DOUBLE " , 8 , " " ] ,
] ,
)
2025-07-09 10:24:45 +00:00
# tdSql.checkResultsBySql(
# sql="select ts, tw from rdb.r1;",
# exp_sql="select _wstart, count(*) from tdb.triggers where ts >= '2025-01-01 00:00:00' and ts < '2025-01-01 00:35:00' interval(5m) fill(value, 0);",
# )