mirror of
https://github.com/taosdata/TDengine
synced 2026-05-24 10:09:01 +00:00
test: migrate cases (#30972)
This commit is contained in:
parent
7453cce50b
commit
e15b65fb52
11 changed files with 678 additions and 99 deletions
|
|
@ -14,7 +14,7 @@ class TestDnodeAlterDebugFlag:
|
|||
3. 修改不在线 dnode 参数(报错)
|
||||
|
||||
Catalog:
|
||||
- Tables
|
||||
- ManageNodes:Dnode
|
||||
|
||||
Since: v3.0.0.0
|
||||
|
||||
84
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic1.py
Normal file
84
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic1.py
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
import time
|
||||
from new_test_framework.utils import tdLog, tdSql, sc, clusterComCheck
|
||||
|
||||
|
||||
class TestMnodeBasic1:
|
||||
|
||||
def setup_class(cls):
|
||||
tdLog.debug(f"start to execute {__file__}")
|
||||
|
||||
def test_mnode_basic1(self):
|
||||
"""mnode basic 1
|
||||
|
||||
1. -
|
||||
|
||||
Catalog:
|
||||
- ManageNodes:Mnode
|
||||
|
||||
Since: v3.0.0.0
|
||||
|
||||
Labels: common,ci
|
||||
|
||||
Jira: None
|
||||
|
||||
History:
|
||||
- 2025-5-5 Simon Guan Migrated to new test framework, from tsim/mnode/basic1.sim
|
||||
|
||||
"""
|
||||
|
||||
clusterComCheck.checkDnodes(2)
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkKeyData(1, 0, 1)
|
||||
tdSql.checkKeyData(1, 2, "leader")
|
||||
|
||||
tdSql.error(f"create mnode on dnode 1")
|
||||
tdSql.error(f"drop mnode on dnode 1")
|
||||
|
||||
tdLog.info(f"=============== create mnode 2")
|
||||
tdSql.execute(f"create mnode on dnode 2")
|
||||
|
||||
tdLog.info(f"=============== create mnode 2 finished")
|
||||
|
||||
checkFailed = True
|
||||
for i in range(20):
|
||||
time.sleep(1)
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.checkKeyData(1, 0, 1)
|
||||
tdSql.checkKeyData(1, 2, "leader")
|
||||
tdSql.checkKeyData(2, 0, 2)
|
||||
if tdSql.expectKeyData(2, 2, "follower"):
|
||||
checkFailed = False
|
||||
break
|
||||
if checkFailed:
|
||||
tdSql.checkAssert(False)
|
||||
|
||||
tdLog.info(f"============ drop mnode 2")
|
||||
tdSql.execute(f"drop mnode on dnode 2")
|
||||
|
||||
tdLog.info(f"============ drop mnode 2 finished")
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkKeyData(1, 0, 1)
|
||||
tdSql.checkKeyData(1, 2, "leader")
|
||||
|
||||
tdSql.error(f"drop mnode on dnode 2")
|
||||
|
||||
tdLog.info(f"=============== create mnodes")
|
||||
tdSql.execute(f"create mnode on dnode 2")
|
||||
|
||||
tdLog.info(f"=============== create mnode 2 finished")
|
||||
checkFailed = True
|
||||
for i in range(20):
|
||||
time.sleep(1)
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.checkKeyData(1, 0, 1)
|
||||
tdSql.checkKeyData(1, 2, "leader")
|
||||
tdSql.checkKeyData(2, 0, 2)
|
||||
if tdSql.expectKeyData(2, 2, "follower"):
|
||||
checkFailed = False
|
||||
break
|
||||
if checkFailed:
|
||||
tdSql.checkAssert(False)
|
||||
85
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic2.py
Normal file
85
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic2.py
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
import time
|
||||
from new_test_framework.utils import tdLog, tdSql, sc, clusterComCheck
|
||||
|
||||
|
||||
class TestMnodeBasic2:
|
||||
|
||||
def setup_class(cls):
|
||||
tdLog.debug(f"start to execute {__file__}")
|
||||
|
||||
def test_mnode_basic2(self):
|
||||
"""mnode basic 2
|
||||
|
||||
1. -
|
||||
|
||||
Catalog:
|
||||
- ManageNodes:Mnode
|
||||
|
||||
Since: v3.0.0.0
|
||||
|
||||
Labels: common,ci
|
||||
|
||||
Jira: None
|
||||
|
||||
History:
|
||||
- 2025-5-5 Simon Guan Migrated to new test framework, from tsim/mnode/basic2.sim
|
||||
|
||||
"""
|
||||
|
||||
clusterComCheck.checkDnodes(2)
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkKeyData(1, 0, 1)
|
||||
tdSql.checkKeyData(1, 2, "leader")
|
||||
|
||||
tdLog.info(f"=============== create mnode 2")
|
||||
tdSql.execute(f"create mnode on dnode 2")
|
||||
|
||||
checkFailed = True
|
||||
for i in range(20):
|
||||
time.sleep(1)
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(2)
|
||||
tdSql.checkKeyData(1, 0, 1)
|
||||
tdSql.checkKeyData(1, 2, "leader")
|
||||
tdSql.checkKeyData(2, 0, 2)
|
||||
if tdSql.expectKeyData(2, 2, "follower"):
|
||||
checkFailed = False
|
||||
break
|
||||
if checkFailed:
|
||||
tdSql.checkAssert(False)
|
||||
|
||||
tdLog.info(f"=============== create user")
|
||||
tdSql.execute(f"create user user1 PASS 'user1@#xy'")
|
||||
tdSql.query(f"select * from information_schema.ins_users")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.execute(f"create database db")
|
||||
tdSql.query(f"select * from information_schema.ins_databases")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdLog.info(f"=============== restart")
|
||||
sc.dnodeStop(1)
|
||||
sc.dnodeStop(2)
|
||||
sc.dnodeStart(1)
|
||||
sc.dnodeStart(2)
|
||||
clusterComCheck.checkDnodes(2)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_users")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_databases")
|
||||
tdSql.checkRows(3)
|
||||
|
||||
tdLog.info(f"=============== insert data")
|
||||
tdSql.execute(
|
||||
f'create table db.stb (ts timestamp, c1 int, c2 binary(4)) tags(t1 int, t2 float, t3 binary(16)) comment "abd"'
|
||||
)
|
||||
tdSql.execute(f'create table db.ctb using db.stb tags(101, 102, "103")')
|
||||
tdSql.execute(f'insert into db.ctb values(now, 1, "2")')
|
||||
|
||||
tdSql.query(f"select * from db.ctb")
|
||||
tdSql.checkRows(1)
|
||||
76
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic3.py
Normal file
76
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic3.py
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
import time
|
||||
from new_test_framework.utils import tdLog, tdSql, sc, clusterComCheck
|
||||
|
||||
|
||||
class TestMnodeBasic3:
|
||||
|
||||
def setup_class(cls):
|
||||
tdLog.debug(f"start to execute {__file__}")
|
||||
|
||||
def test_mnode_basic3(self):
|
||||
"""mnode basic 3
|
||||
|
||||
1. -
|
||||
|
||||
Catalog:
|
||||
- ManageNodes:Mnode
|
||||
|
||||
Since: v3.0.0.0
|
||||
|
||||
Labels: common,ci
|
||||
|
||||
Jira: None
|
||||
|
||||
History:
|
||||
- 2025-5-5 Simon Guan Migrated to new test framework, from tsim/mnode/basic3.sim
|
||||
|
||||
"""
|
||||
|
||||
clusterComCheck.checkDnodes(4)
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkKeyData(1, 0, 1)
|
||||
tdSql.checkKeyData(1, 2, "leader")
|
||||
|
||||
tdLog.info(f"=============== step2: create mnode 2 3")
|
||||
tdSql.execute(f"create mnode on dnode 2")
|
||||
tdSql.execute(f"create mnode on dnode 3")
|
||||
tdSql.error(f"create mnode on dnode 4")
|
||||
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"=============== step3: create user")
|
||||
tdSql.execute(f"create user user1 PASS 'user121$*'")
|
||||
tdSql.query(f"select * from information_schema.ins_users")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
# wait mnode2 mnode3 recv data finish
|
||||
time.sleep(5)
|
||||
|
||||
tdLog.info(f"=============== step4: stop dnode1")
|
||||
sc.dnodeForceStop(1)
|
||||
time.sleep(1)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_users")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdLog.info(f"=============== step5: stop dnode2")
|
||||
sc.dnodeStart(1)
|
||||
sc.dnodeStop(2)
|
||||
|
||||
time.sleep(1)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_users")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdLog.info(f"=============== step6: stop dnode3")
|
||||
sc.dnodeStart(2)
|
||||
sc.dnodeStop(3)
|
||||
|
||||
time.sleep(1)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_users")
|
||||
tdSql.checkRows(2)
|
||||
63
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic4.py
Normal file
63
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic4.py
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
import time
|
||||
from new_test_framework.utils import tdLog, tdSql, sc, clusterComCheck
|
||||
|
||||
|
||||
class TestMnodeBasic4:
|
||||
|
||||
def setup_class(cls):
|
||||
tdLog.debug(f"start to execute {__file__}")
|
||||
|
||||
def test_mnode_basic4(self):
|
||||
"""mnode basic 4
|
||||
|
||||
1. -
|
||||
|
||||
Catalog:
|
||||
- ManageNodes:Mnode
|
||||
|
||||
Since: v3.0.0.0
|
||||
|
||||
Labels: common,ci
|
||||
|
||||
Jira: None
|
||||
|
||||
History:
|
||||
- 2025-5-5 Simon Guan Migrated to new test framework, from tsim/mnode/basic4.sim
|
||||
|
||||
"""
|
||||
|
||||
clusterComCheck.checkDnodes(3)
|
||||
sc.dnodeStop(3)
|
||||
clusterComCheck.checkDnodes(2)
|
||||
|
||||
tdLog.info(f"=============== step2: create mnode 2")
|
||||
tdSql.execute(f"create mnode on dnode 2")
|
||||
tdSql.error(f"create mnode on dnode 3")
|
||||
|
||||
sc.dnodeStart(3)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
|
||||
tdLog.info(f"=============== step4: create mnode 3")
|
||||
tdSql.execute(f"create mnode on dnode 3")
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"=============== step5: drop mnode 3 and stop dnode3")
|
||||
sc.dnodeForceStop(3)
|
||||
clusterComCheck.checkDnodes(2)
|
||||
tdSql.error(f"drop mnode on dnode 3")
|
||||
|
||||
tdLog.info(f"=============== step6: start dnode3")
|
||||
sc.dnodeStart(3)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
|
||||
tdSql.query("select * from information_schema.ins_mnodes;")
|
||||
tdSql.checkRows(3)
|
||||
if tdSql.getData(0, 2) == "leader":
|
||||
tdLog.info(f"drop mnode on dnode {tdSql.getData(0,0)}")
|
||||
tdSql.error(f"drop mnode on dnode {tdSql.getData(0,0)}")
|
||||
elif tdSql.getData(1, 2) == "leader":
|
||||
tdLog.info(f"drop mnode on dnode {tdSql.getData(0,0)}")
|
||||
tdSql.error(f"drop mnode on dnode {tdSql.getData(0,0)}")
|
||||
elif tdSql.getData(2, 2) == "leader":
|
||||
tdLog.info(f"drop mnode on dnode {tdSql.getData(0,0)}")
|
||||
tdSql.error(f"drop mnode on dnode {tdSql.getData(0,0)}")
|
||||
131
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic5.py
Normal file
131
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic5.py
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
import time
|
||||
from new_test_framework.utils import tdLog, tdSql, sc, clusterComCheck
|
||||
|
||||
|
||||
class TestMnodeBasic5:
|
||||
|
||||
def setup_class(cls):
|
||||
tdLog.debug(f"start to execute {__file__}")
|
||||
|
||||
def test_mnode_basic5(self):
|
||||
"""mnode basic 5
|
||||
|
||||
1. -
|
||||
|
||||
Catalog:
|
||||
- ManageNodes:Mnode
|
||||
|
||||
Since: v3.0.0.0
|
||||
|
||||
Labels: common,ci
|
||||
|
||||
Jira: None
|
||||
|
||||
History:
|
||||
- 2025-5-5 Simon Guan Migrated to new test framework, from tsim/mnode/basic5.sim
|
||||
|
||||
"""
|
||||
|
||||
tdLog.info(f"=============== step1: create dnodes")
|
||||
clusterComCheck.checkDnodes(4)
|
||||
sc.dnodeStop(2)
|
||||
sc.dnodeStop(3)
|
||||
sc.dnodeStop(4)
|
||||
clusterComCheck.checkDnodes(1)
|
||||
|
||||
tdLog.info(f"=============== step2: create dnodes - with error")
|
||||
tdSql.error(f"create mnode on dnode 1;")
|
||||
tdSql.error(f"create mnode on dnode 2;")
|
||||
tdSql.error(f"create mnode on dnode 3;")
|
||||
tdSql.error(f"create mnode on dnode 4;")
|
||||
tdSql.error(f"create mnode on dnode 5;")
|
||||
tdSql.error(f"create mnode on dnode 6;")
|
||||
|
||||
tdLog.info(f"=============== step3: create mnode 2 and 3")
|
||||
sc.dnodeStart(2)
|
||||
sc.dnodeStart(3)
|
||||
sc.dnodeStart(4)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
|
||||
tdSql.execute(f"create mnode on dnode 2")
|
||||
tdSql.execute(f"create mnode on dnode 3")
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"=============== step4: create dnodes - with error")
|
||||
tdSql.error(f"create mnode on dnode 1")
|
||||
tdSql.error(f"create mnode on dnode 2;")
|
||||
tdSql.error(f"create mnode on dnode 3;")
|
||||
tdSql.error(f"create mnode on dnode 4;")
|
||||
tdSql.error(f"create mnode on dnode 5;")
|
||||
tdSql.error(f"create mnode on dnode 6;")
|
||||
|
||||
tdLog.info(f"=============== step5: drop mnodes - with error")
|
||||
tdSql.error(f"drop mnode on dnode 1")
|
||||
tdSql.error(f"drop mnode on dnode 4")
|
||||
tdSql.error(f"drop mnode on dnode 5")
|
||||
tdSql.error(f"drop mnode on dnode 6")
|
||||
|
||||
sc.dnodeStop(2)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
clusterComCheck.checkMnodeStatus(3, False)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_dnodes")
|
||||
tdSql.checkKeyData(1, 4, "ready")
|
||||
tdSql.checkKeyData(2, 4, "offline")
|
||||
tdSql.checkKeyData(3, 4, "ready")
|
||||
tdSql.checkKeyData(4, 4, "ready")
|
||||
|
||||
sc.dnodeStart(2)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
tdSql.query(f"select * from information_schema.ins_dnodes")
|
||||
tdSql.checkKeyData(1, 4, "ready")
|
||||
tdSql.checkKeyData(2, 4, "ready")
|
||||
tdSql.checkKeyData(3, 4, "ready")
|
||||
tdSql.checkKeyData(4, 4, "ready")
|
||||
|
||||
tdLog.info(f"=============== step6: stop mnode1")
|
||||
sc.dnodeStop(1)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
clusterComCheck.checkMnodeStatus(3, False)
|
||||
|
||||
tdLog.info(f"=============== step7: start mnode1 and wait it online")
|
||||
sc.dnodeStart(1)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_dnodes")
|
||||
tdSql.checkKeyData(1, 4, "ready")
|
||||
tdSql.checkKeyData(2, 4, "ready")
|
||||
tdSql.checkKeyData(3, 4, "ready")
|
||||
tdSql.checkKeyData(4, 4, "ready")
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"=============== step8: stop mnode1 and drop it")
|
||||
sc.dnodeStop(1)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_dnodes")
|
||||
tdSql.checkKeyData(1, 4, "offline")
|
||||
tdSql.checkKeyData(2, 4, "ready")
|
||||
tdSql.checkKeyData(3, 4, "ready")
|
||||
tdSql.checkKeyData(4, 4, "ready")
|
||||
|
||||
tdLog.info(f"=============== step9: start mnode1 and wait it dropped")
|
||||
tdLog.info(f"check mnode has leader step9a")
|
||||
clusterComCheck.checkMnodeStatus(3, False)
|
||||
|
||||
tdLog.info(f"start dnode1 step9b")
|
||||
sc.dnodeStart(1)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"drop mnode step9d")
|
||||
tdSql.execute(f"drop mnode on dnode 1")
|
||||
clusterComCheck.checkMnodeStatus(2)
|
||||
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdLog.info(f"=============== stepa: create mnode1 again")
|
||||
tdSql.execute(f"create mnode on dnode 1")
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
113
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic6.py
Normal file
113
test/cases/19-ManageNodes/02-Mnode/test_mnode_basic6.py
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
import time
|
||||
from new_test_framework.utils import tdLog, tdSql, sc, clusterComCheck
|
||||
|
||||
|
||||
class TestMnodeBasic6:
|
||||
|
||||
def setup_class(cls):
|
||||
tdLog.debug(f"start to execute {__file__}")
|
||||
|
||||
def test_mnode_basic6(self):
|
||||
"""mnode basic 6
|
||||
|
||||
1. -
|
||||
|
||||
Catalog:
|
||||
- ManageNodes:Mnode
|
||||
|
||||
Since: v3.0.0.0
|
||||
|
||||
Labels: common,ci
|
||||
|
||||
Jira: None
|
||||
|
||||
History:
|
||||
- 2025-5-5 Simon Guan Migrated to new test framework, from tsim/mnode/basic6.sim
|
||||
|
||||
"""
|
||||
clusterComCheck.checkDnodes(4)
|
||||
sc.dnodeStop(2)
|
||||
sc.dnodeStop(3)
|
||||
sc.dnodeStop(4)
|
||||
clusterComCheck.checkDnodes(1)
|
||||
|
||||
tdLog.info(f"=============== step2: create dnodes - with error")
|
||||
tdSql.error(f"create mnode on dnode 1;")
|
||||
tdSql.error(f"create mnode on dnode 2;")
|
||||
tdSql.error(f"create mnode on dnode 3;")
|
||||
tdSql.error(f"create mnode on dnode 4;")
|
||||
tdSql.error(f"create mnode on dnode 5;")
|
||||
tdSql.error(f"create mnode on dnode 6;")
|
||||
|
||||
tdLog.info(f"=============== step3: create mnode 2 and 3")
|
||||
sc.dnodeStart(2)
|
||||
sc.dnodeStart(3)
|
||||
sc.dnodeStart(4)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
|
||||
tdSql.execute(f"create mnode on dnode 2")
|
||||
tdSql.execute(f"create mnode on dnode 3")
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"=============== step4: create dnodes - with error")
|
||||
tdSql.error(f"create mnode on dnode 1")
|
||||
tdSql.error(f"create mnode on dnode 2;")
|
||||
tdSql.error(f"create mnode on dnode 3;")
|
||||
tdSql.error(f"create mnode on dnode 4;")
|
||||
tdSql.error(f"create mnode on dnode 5;")
|
||||
tdSql.error(f"create mnode on dnode 6;")
|
||||
|
||||
tdLog.info(f"=============== step5: drop mnodes - with error")
|
||||
tdSql.error(f"drop mnode on dnode 1")
|
||||
tdSql.error(f"drop mnode on dnode 4")
|
||||
tdSql.error(f"drop mnode on dnode 5")
|
||||
tdSql.error(f"drop mnode on dnode 6")
|
||||
|
||||
sc.dnodeStop(2)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
clusterComCheck.checkMnodeStatus(3, False)
|
||||
|
||||
tdSql.error(f"drop mnode on dnode 2")
|
||||
sc.dnodeStart(2)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"=============== step6: stop mnode1")
|
||||
sc.dnodeStop(1)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
clusterComCheck.checkMnodeStatus(3, False)
|
||||
|
||||
tdLog.info(f"=============== step7: start mnode1 and wait it online")
|
||||
sc.dnodeStart(1)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"=============== step8: stop mnode1 and drop it")
|
||||
sc.dnodeStop(1)
|
||||
clusterComCheck.checkDnodes(3)
|
||||
|
||||
tdLog.info(f"=============== step9: start mnode1 and wait it dropped")
|
||||
tdLog.info(f"check mnode has leader step9a")
|
||||
clusterComCheck.checkMnodeStatus(3, False)
|
||||
|
||||
tdLog.info(f"start dnode1 step9b")
|
||||
sc.dnodeStart(1)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"drop mnode step9d")
|
||||
tdSql.execute(f"drop mnode on dnode 1")
|
||||
clusterComCheck.checkMnodeStatus(2)
|
||||
|
||||
tdLog.info(f"check mnode leader")
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdLog.info(f"=============== stepa: create mnode1 again")
|
||||
tdSql.execute(f"create mnode on dnode 1")
|
||||
clusterComCheck.checkMnodeStatus(3)
|
||||
|
||||
tdLog.info(f"check mnode leader")
|
||||
tdSql.query(f"select * from information_schema.ins_mnodes")
|
||||
tdSql.checkRows(3)
|
||||
clusterComCheck.checkDnodes(4)
|
||||
|
|
@ -290,7 +290,15 @@
|
|||
# 18-ReservedKeywords
|
||||
|
||||
# 19-ManageNodes
|
||||
,,y,.,./ci/pytest.sh pytest cases/19-ManageNodes/test_dnode_alter_debugflag.py
|
||||
## 01-Dnode
|
||||
,,y,.,./ci/pytest.sh pytest cases/19-ManageNodes/01-Dnode/test_dnode_alter_debugflag.py
|
||||
## 02-Mnode
|
||||
,,y,.,./ci/pytest.sh pytest cases/19-ManageNodes/02-Mnode/test_mnode_basic1.py -N 2
|
||||
,,y,.,./ci/pytest.sh pytest cases/19-ManageNodes/02-Mnode/test_mnode_basic2.py -N 2
|
||||
,,y,.,./ci/pytest.sh pytest cases/19-ManageNodes/02-Mnode/test_mnode_basic3.py -N 4
|
||||
,,y,.,./ci/pytest.sh pytest cases/19-ManageNodes/02-Mnode/test_mnode_basic4.py -N 3
|
||||
,,y,.,./ci/pytest.sh pytest cases/19-ManageNodes/02-Mnode/test_mnode_basic5.py -N 4
|
||||
,,y,.,./ci/pytest.sh pytest cases/19-ManageNodes/02-Mnode/test_mnode_basic6.py -N 4
|
||||
|
||||
# 20-Metadata
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ class ClusterComCheck:
|
|||
tdSql.init(conn.cursor())
|
||||
# tdSql.init(conn.cursor(), logSql) # output sql.txt file
|
||||
|
||||
def checkDnodes(self, dnodeNumbers, timeout=100):
|
||||
def checkDnodes(self, dnodeNum, timeout=100):
|
||||
count = 0
|
||||
|
||||
while count < timeout:
|
||||
|
|
@ -46,12 +46,11 @@ class ClusterComCheck:
|
|||
if tdSql.queryResult[i][4] == "ready":
|
||||
status += 1
|
||||
|
||||
if status == dnodeNumbers:
|
||||
tdLog.success(
|
||||
"cluster with %d dnodes is ready within %ds!"
|
||||
% (dnodeNumbers, count + 1)
|
||||
)
|
||||
if status == dnodeNum:
|
||||
tdLog.success(f"{dnodeNum} dnodes ready within {count}s!")
|
||||
return True
|
||||
else:
|
||||
tdLog.info(f"{dnodeNum} dnodes not ready, {status}:{tdSql.queryRows}")
|
||||
|
||||
time.sleep(1)
|
||||
count += 1
|
||||
|
|
@ -59,9 +58,7 @@ class ClusterComCheck:
|
|||
else:
|
||||
tdSql.query("select * from information_schema.ins_dnodes")
|
||||
tdLog.debug(tdSql.queryResult)
|
||||
tdLog.exit(
|
||||
"cluster with %d dnodes not ready within %ds!" % (dnodeNumbers, timeout)
|
||||
)
|
||||
tdLog.exit(f"{dnodeNum} dnodes not ready within {timeout}s!")
|
||||
|
||||
def checkClusterAlive(self, status, timeout=100):
|
||||
count = 0
|
||||
|
|
@ -254,103 +251,79 @@ class ClusterComCheck:
|
|||
tdSql.checkData(0, 0, rowsPerSTable)
|
||||
return
|
||||
|
||||
def checkMnodeStatus(self, mnodeNums):
|
||||
self.mnodeNums = int(mnodeNums)
|
||||
# self.leaderDnode=int(leaderDnode)
|
||||
tdLog.debug("start to check status of mnodes")
|
||||
def checkMnodeStatus(self, mnodeNum, checkFollower = True):
|
||||
tdLog.debug(f"check mnodes:{mnodeNum} status")
|
||||
count = 0
|
||||
|
||||
while count < 10:
|
||||
while count < 30:
|
||||
time.sleep(1)
|
||||
tdSql.query("select * from information_schema.ins_mnodes;")
|
||||
if tdSql.checkRows(self.mnodeNums):
|
||||
tdLog.success("cluster has %d mnodes" % self.mnodeNums)
|
||||
if tdSql.checkRows(mnodeNum):
|
||||
tdLog.success("cluster has %d mnodes" % mnodeNum)
|
||||
|
||||
if self.mnodeNums == 1:
|
||||
if (
|
||||
tdSql.queryResult[0][2] == "leader"
|
||||
and tdSql.queryResult[0][3] == "ready"
|
||||
):
|
||||
tdLog.success("%d mnodes is ready in 10s" % self.mnodeNums)
|
||||
if mnodeNum == 1:
|
||||
tdLog.info(f"{tdSql.queryResult[0][2]}")
|
||||
if tdSql.queryResult[0][2] == "leader":
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
count += 1
|
||||
elif self.mnodeNums == 3:
|
||||
if (
|
||||
tdSql.queryResult[0][2] == "leader"
|
||||
and tdSql.queryResult[0][3] == "ready"
|
||||
):
|
||||
if (
|
||||
tdSql.queryResult[1][2] == "follower"
|
||||
and tdSql.queryResult[1][3] == "ready"
|
||||
):
|
||||
if (
|
||||
tdSql.queryResult[2][2] == "follower"
|
||||
and tdSql.queryResult[2][3] == "ready"
|
||||
):
|
||||
tdLog.success("%d mnodes is ready in 10s" % self.mnodeNums)
|
||||
elif mnodeNum == 3:
|
||||
tdLog.info(
|
||||
f"{tdSql.queryResult[0][2]}, {tdSql.queryResult[1][2]}, {tdSql.queryResult[2][2]}"
|
||||
)
|
||||
if tdSql.queryResult[0][2] == "leader":
|
||||
if not checkFollower:
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
elif tdSql.queryResult[1][2] == "follower":
|
||||
if tdSql.queryResult[2][2] == "follower":
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
elif (
|
||||
tdSql.queryResult[1][2] == "leader"
|
||||
and tdSql.queryResult[1][3] == "ready"
|
||||
):
|
||||
if (
|
||||
tdSql.queryResult[0][2] == "follower"
|
||||
and tdSql.queryResult[0][3] == "ready"
|
||||
):
|
||||
if (
|
||||
tdSql.queryResult[2][2] == "follower"
|
||||
and tdSql.queryResult[2][3] == "ready"
|
||||
):
|
||||
tdLog.success("%d mnodes is ready in 10s" % self.mnodeNums)
|
||||
elif tdSql.queryResult[1][2] == "leader":
|
||||
if not checkFollower:
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
elif tdSql.queryResult[0][2] == "follower":
|
||||
if tdSql.queryResult[2][2] == "follower":
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
elif (
|
||||
tdSql.queryResult[2][2] == "leader"
|
||||
and tdSql.queryResult[2][3] == "ready"
|
||||
):
|
||||
if (
|
||||
tdSql.queryResult[0][2] == "follower"
|
||||
and tdSql.queryResult[0][3] == "ready"
|
||||
):
|
||||
if (
|
||||
tdSql.queryResult[1][2] == "follower"
|
||||
and tdSql.queryResult[1][3] == "ready"
|
||||
):
|
||||
tdLog.success("%d mnodes is ready in 10s" % self.mnodeNums)
|
||||
elif tdSql.queryResult[2][2] == "leader":
|
||||
if not checkFollower:
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
elif tdSql.queryResult[0][2] == "follower":
|
||||
if tdSql.queryResult[1][2] == "follower":
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
count += 1
|
||||
elif self.mnodeNums == 2:
|
||||
if (
|
||||
tdSql.queryResult[0][2] == "leader"
|
||||
and tdSql.queryResult[0][3] == "ready"
|
||||
):
|
||||
if (
|
||||
tdSql.queryResult[1][2] == "follower"
|
||||
and tdSql.queryResult[1][3] == "ready"
|
||||
):
|
||||
tdLog.success("%d mnodes is ready in 10s" % self.mnodeNums)
|
||||
elif mnodeNum == 2:
|
||||
tdLog.info(f"{tdSql.queryResult[0][2]}, {tdSql.queryResult[1][2]}")
|
||||
if tdSql.queryResult[0][2] == "leader":
|
||||
if not checkFollower:
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
elif (
|
||||
tdSql.queryResult[1][2] == "leader"
|
||||
and tdSql.queryResult[1][3] == "ready"
|
||||
):
|
||||
if (
|
||||
tdSql.queryResult[0][2] == "follower"
|
||||
and tdSql.queryResult[0][3] == "ready"
|
||||
):
|
||||
tdLog.success("%d mnodes is ready in 10s" % self.mnodeNums)
|
||||
elif tdSql.queryResult[1][2] == "follower":
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
elif tdSql.queryResult[1][2] == "leader":
|
||||
if not checkFollower:
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
elif tdSql.queryResult[0][2] == "follower":
|
||||
tdLog.success(f"{mnodeNum} mnodes ready in {count}s")
|
||||
return True
|
||||
count += 1
|
||||
else:
|
||||
tdLog.debug(tdSql.queryResult)
|
||||
tdLog.exit("cluster of %d mnodes is not ready in 10s " % self.mnodeNums)
|
||||
tdLog.exit(f"{mnodeNum} mnodes not ready in {count}s")
|
||||
|
||||
def check3mnodeoff(self, offlineDnodeNo, mnodeNums=3):
|
||||
def check3mnodeoff(self, offlineDnodeNo, mnodeNum=3):
|
||||
count = 0
|
||||
while count < 10:
|
||||
while count < 30:
|
||||
time.sleep(1)
|
||||
tdSql.query("select * from information_schema.ins_mnodes;")
|
||||
if tdSql.checkRows(mnodeNums):
|
||||
tdLog.success("cluster has %d mnodes" % self.mnodeNums)
|
||||
if tdSql.checkRows(mnodeNum):
|
||||
tdLog.success("cluster has %d mnodes" % mnodeNum)
|
||||
else:
|
||||
tdLog.exit("mnode number is correct")
|
||||
if offlineDnodeNo == 1:
|
||||
|
|
@ -408,13 +381,13 @@ class ClusterComCheck:
|
|||
tdLog.debug(tdSql.queryResult)
|
||||
tdLog.exit(f"stop mnodes on dnode {offlineDnodeNo} failed in 10s ")
|
||||
|
||||
def check3mnode2off(self, mnodeNums=3):
|
||||
def check3mnode2off(self, mnodeNum=3):
|
||||
count = 0
|
||||
while count < 10:
|
||||
while count < 30:
|
||||
time.sleep(1)
|
||||
tdSql.query("select * from information_schema.ins_mnodes;")
|
||||
if tdSql.checkRows(mnodeNums):
|
||||
tdLog.success("cluster has %d mnodes" % self.mnodeNums)
|
||||
if tdSql.checkRows(mnodeNum):
|
||||
tdLog.success("cluster has %d mnodes" % mnodeNum)
|
||||
else:
|
||||
tdLog.exit("mnode number is correct")
|
||||
if tdSql.queryResult[0][2] == "leader":
|
||||
|
|
|
|||
|
|
@ -620,13 +620,11 @@ class TDDnode:
|
|||
)
|
||||
else:
|
||||
psCmd = (
|
||||
"ps -ef|grep -w %s| grep dnode%d|grep -v grep | awk '{print $2}' | xargs"
|
||||
"ps -ef | grep -w %s | grep dnode%d | grep -v grep | awk '{print $2}' | xargs"
|
||||
% (toBeKilled, self.index)
|
||||
)
|
||||
processID = (
|
||||
subprocess.check_output(psCmd, shell=True).decode("utf-8").strip()
|
||||
)
|
||||
|
||||
processID = subprocess.check_output(psCmd, shell=True).decode("utf-8").strip()
|
||||
tdLog.info(f"psCmd:{psCmd}, processId:[{processID}]")
|
||||
onlyKillOnceWindows = 0
|
||||
while processID:
|
||||
if not platform.system().lower() == "windows" or (
|
||||
|
|
@ -637,10 +635,12 @@ class TDDnode:
|
|||
killCmd = "kill -INT %s > nul 2>&1" % processID
|
||||
os.system(killCmd)
|
||||
onlyKillOnceWindows = 1
|
||||
# tdLog.info(f"kill cmd:{killCmd}")
|
||||
time.sleep(1)
|
||||
processID = (
|
||||
subprocess.check_output(psCmd, shell=True).decode("utf-8").strip()
|
||||
)
|
||||
tdLog.info(f"killed processID:{processID}")
|
||||
if self.valgrind:
|
||||
time.sleep(2)
|
||||
|
||||
|
|
@ -677,13 +677,14 @@ class TDDnode:
|
|||
)
|
||||
else:
|
||||
psCmd = (
|
||||
"ps -ef|grep -w %s| grep dnode%d|grep -v grep | awk '{print $2}' | xargs"
|
||||
"ps -ef | grep -w %s | grep dnode%d | grep -v grep | awk '{print $2}' | xargs"
|
||||
% (toBeKilled, self.index)
|
||||
)
|
||||
processID = (
|
||||
subprocess.check_output(psCmd, shell=True).decode("utf-8").strip()
|
||||
)
|
||||
|
||||
tdLog.info(f"psCmd:{psCmd}, processId:[{processID}]")
|
||||
onlyKillOnceWindows = 0
|
||||
while processID:
|
||||
if not platform.system().lower() == "windows" or (
|
||||
|
|
@ -694,10 +695,12 @@ class TDDnode:
|
|||
killCmd = "kill -KILL %s > nul 2>&1" % processID
|
||||
os.system(killCmd)
|
||||
onlyKillOnceWindows = 1
|
||||
# tdLog.info(f"kill cmd:{killCmd}")
|
||||
time.sleep(1)
|
||||
processID = (
|
||||
subprocess.check_output(psCmd, shell=True).decode("utf-8").strip()
|
||||
)
|
||||
tdLog.info(f"killed processID:{processID}")
|
||||
# for port in range(6030, 6041):
|
||||
# fuserCmd = "fuser -k -n tcp %d" % port
|
||||
# os.system(fuserCmd)
|
||||
|
|
|
|||
|
|
@ -1305,6 +1305,49 @@ class TDSql:
|
|||
if show:
|
||||
tdLog.info("check key successfully")
|
||||
|
||||
def expectKeyData(self, key, col, data, show=False):
|
||||
"""
|
||||
Whether the data at the specified key matches the expected data.
|
||||
|
||||
Args:
|
||||
key: The first column to be compared with.
|
||||
col (int): The column index of the data to be checked.
|
||||
data: The expected data to be compared with.
|
||||
show (bool, optional): If True, logs a message when the check is successful. Defaults to False.
|
||||
|
||||
Returns:
|
||||
Bool
|
||||
|
||||
Raises:
|
||||
None
|
||||
"""
|
||||
|
||||
if col >= self.queryCols:
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
args = (caller.filename, caller.lineno, self.sql, col + 1, self.queryCols)
|
||||
tdLog.info(
|
||||
"%s(%d) failed: sql:%s, col:%d is larger than queryCols:%d" % args
|
||||
)
|
||||
return False
|
||||
|
||||
row = -1
|
||||
|
||||
for i in range(self.queryRows):
|
||||
if self.queryResult[i][col] == data:
|
||||
row = i
|
||||
|
||||
tdLog.info(f"find key:{key}, row:{row} col:{col}, data:{data}")
|
||||
|
||||
if row == -1:
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
args = (caller.filename, caller.lineno, self.sql, key, col)
|
||||
return False
|
||||
|
||||
if show:
|
||||
tdLog.info("check key successfully")
|
||||
|
||||
return True
|
||||
|
||||
def checkAssert(self, assertVal, show=False):
|
||||
"""
|
||||
Checks if the assertVal is true.
|
||||
|
|
@ -1322,7 +1365,7 @@ class TDSql:
|
|||
|
||||
if assertVal != True:
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
args = (caller.filename, caller.lineno, self.sql, assertVal)
|
||||
args = (caller.filename, caller.lineno, self.sql)
|
||||
tdLog.exit("%s(%d) failed: sql:%s asserted" % args)
|
||||
|
||||
if show:
|
||||
|
|
|
|||
Loading…
Reference in a new issue