2025-06-23 08:56:51 +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 = [
" insert into tdb.t1 values ( ' 2025-01-01 00:00:00 ' , 0, 0 ) ( ' 2025-01-01 00:05:00 ' , 5, 50 ) ( ' 2025-01-01 00:10:00 ' , 10, 100) " ,
" insert into tdb.t2 values ( ' 2025-01-01 00:11:00 ' , 11, 110) ( ' 2025-01-01 00:12:00 ' , 12, 120) ( ' 2025-01-01 00:15:00 ' , 15, 150) " ,
" insert into tdb.t3 values ( ' 2025-01-01 00:21:00 ' , 21, 210) " ,
" insert into tdb.n1 values ( ' 2025-01-01 00:25:00 ' , 25, 250) ( ' 2025-01-01 00:26:00 ' , 26, 260) ( ' 2025-01-01 00:27:00 ' , 27, 270) " ,
" insert into tdb.t1 values ( ' 2025-01-01 00:30:00 ' , 30, 300) ( ' 2025-01-01 00:32:00 ' , 32, 320) ( ' 2025-01-01 00:36:00 ' , 36, 360) " ,
" insert into tdb.n1 values ( ' 2025-01-01 00:40:00 ' , 40, 400) ( ' 2025-01-01 00:42:00 ' , 42, 420) " ,
]
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 (
2025-07-05 05:55:44 +00:00
id = 43 ,
stream = " create stream rdb.s43 interval(5m) sliding(5m) from tdb.triggers partition by id into rdb.r43 as select _twstart ts, cts, %% 1 tt, cint, cuint, cbigint, cubigint, cfloat, cdouble, cvarchar, csmallint, cusmallint, ctinyint, cutinyint, cbool, cnchar, cvarbinary from qdb.v1 where cts >= _twstart and cts < _twend order by cts limit 1 " ,
res_query = " select ts, cts, tt, cint, cuint, cbigint, cubigint, cfloat, cdouble, cvarchar, csmallint, cusmallint, ctinyint, cutinyint, cbool, cnchar, cvarbinary from rdb.r43 where id = 1 limit 1 offset 1 " ,
exp_query = " select cts, cts, 1, cint, cuint, cbigint, cubigint, cfloat, cdouble, cvarchar, csmallint, cusmallint, ctinyint, cutinyint, cbool, cnchar, cvarbinary from qdb.v1 where cts = ' 2025-01-01 00:05:00.000 ' ; " ,
2025-06-23 08:56:51 +00:00
)
self . streams . append ( stream )
tdLog . info ( f " create total: { len ( self . streams ) } streams " )
for stream in self . streams :
stream . createStream ( )
2025-06-27 07:49:52 +00:00
def check123 ( self ) :
2025-06-23 08:56:51 +00:00
tdSql . checkTableSchema (
dbname = " rdb " ,
2025-06-27 07:49:52 +00:00
tbname = " r123 " ,
2025-06-23 08:56:51 +00:00
schema = [
2025-06-27 07:49:52 +00:00
[ " tw " , " TIMESTAMP " , 8 , " " ] ,
[ " te " , " TIMESTAMP " , 8 , " " ] ,
[ " _twstart " , " TIMESTAMP " , 8 , " " ] ,
[ " _twend " , " TIMESTAMP " , 8 , " " ] ,
2025-06-27 03:22:34 +00:00
[ " c1 " , " BIGINT " , 8 , " " ] ,
2025-06-27 07:49:52 +00:00
[ " c2 " , " BIGINT " , 8 , " " ] ,
[ " id " , " INT " , 4 , " TAG " ] ,
[ " name " , " VARCHAR " , 16 , " TAG " ] ,
2025-06-23 08:56:51 +00:00
] ,
)
2025-06-27 07:49:52 +00:00
tdSql . checkResultsByFunc (
sql = " select * from information_schema.ins_tables where db_name= ' rdb ' and stable_name= ' r123 ' ; " ,
func = lambda : tdSql . getRows ( ) == 3 ,
)