5dnode1mnode.py 5.2 KB
Newer Older
haoranc's avatar
haoranc 已提交
1 2 3 4
from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
import taos
import sys
import time
G
Ganlin Zhao 已提交
5
import os
haoranc's avatar
haoranc 已提交
6 7 8 9

from util.log import *
from util.sql import *
from util.cases import *
10
from util.dnodes import *
haoranc's avatar
haoranc 已提交
11 12 13 14 15 16 17 18 19 20 21
from util.dnodes import TDDnodes
from util.dnodes import TDDnode
import time
import socket
import subprocess

class MyDnodes(TDDnodes):
    def __init__(self ,dnodes_lists):
        super(MyDnodes,self).__init__()
        self.dnodes = dnodes_lists  # dnode must be TDDnode instance
        self.simDeployed = False
G
Ganlin Zhao 已提交
22

haoranc's avatar
haoranc 已提交
23
class TDTestCase:
wafwerar's avatar
wafwerar 已提交
24
    noConn = True
25
    def init(self, conn, logSql, replicaVar=1):
haoranc's avatar
haoranc 已提交
26 27 28 29
        tdLog.debug(f"start to excute {__file__}")
        self.TDDnodes = None
        self.depoly_cluster(5)
        self.master_dnode = self.TDDnodes.dnodes[0]
haoranc's avatar
haoranc 已提交
30
        self.host=self.master_dnode.cfgDict["fqdn"]
haoranc's avatar
haoranc 已提交
31 32
        conn1 = taos.connect(self.master_dnode.cfgDict["fqdn"] , config=self.master_dnode.cfgDir)
        tdSql.init(conn1.cursor())
G
Ganlin Zhao 已提交
33

haoranc's avatar
haoranc 已提交
34 35 36 37 38 39 40 41 42 43

    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):
wafwerar's avatar
wafwerar 已提交
44
            if ("taosd" in files or "taosd.exe" in files):
haoranc's avatar
haoranc 已提交
45 46 47 48 49 50
                rootRealPath = os.path.dirname(os.path.realpath(root))
                if ("packaging" not in rootRealPath):
                    buildPath = root[:len(root) - len("/build/bin")]
                    break
        return buildPath

G
Ganlin Zhao 已提交
51 52

    def depoly_cluster(self ,dnodes_nums):
haoranc's avatar
haoranc 已提交
53 54

        testCluster = False
G
Ganlin Zhao 已提交
55
        valgrind = 0
haoranc's avatar
haoranc 已提交
56 57 58 59 60 61 62 63 64 65 66
        hostname = socket.gethostname()
        dnodes = []
        start_port = 6030
        for num in range(1, dnodes_nums+1):
            dnode = TDDnode(num)
            dnode.addExtraCfg("firstEp", f"{hostname}:{start_port}")
            dnode.addExtraCfg("fqdn", f"{hostname}")
            dnode.addExtraCfg("serverPort", f"{start_port + (num-1)*100}")
            dnode.addExtraCfg("monitorFqdn", hostname)
            dnode.addExtraCfg("monitorPort", 7043)
            dnodes.append(dnode)
G
Ganlin Zhao 已提交
67

haoranc's avatar
haoranc 已提交
68 69 70 71
        self.TDDnodes = MyDnodes(dnodes)
        self.TDDnodes.init("")
        self.TDDnodes.setTestCluster(testCluster)
        self.TDDnodes.setValgrind(valgrind)
72 73

        self.TDDnodes.setAsan(tdDnodes.getAsan())
haoranc's avatar
haoranc 已提交
74 75 76
        self.TDDnodes.stopAll()
        for dnode in self.TDDnodes.dnodes:
            self.TDDnodes.deploy(dnode.index,{})
G
Ganlin Zhao 已提交
77

haoranc's avatar
haoranc 已提交
78 79 80
        for dnode in self.TDDnodes.dnodes:
            self.TDDnodes.starttaosd(dnode.index)

G
Ganlin Zhao 已提交
81
        # create cluster
haoranc's avatar
haoranc 已提交
82 83 84 85 86
        for dnode in self.TDDnodes.dnodes[1:]:
            # print(dnode.cfgDict)
            dnode_id = dnode.cfgDict["fqdn"] +  ":" +dnode.cfgDict["serverPort"]
            dnode_first_host = dnode.cfgDict["firstEp"].split(":")[0]
            dnode_first_port = dnode.cfgDict["firstEp"].split(":")[-1]
wafwerar's avatar
wafwerar 已提交
87
            cmd = f"{self.getBuildPath()}/build/bin/taos -h {dnode_first_host} -P {dnode_first_port} -s \"create dnode \\\"{dnode_id}\\\"\""
haoranc's avatar
haoranc 已提交
88 89
            print(cmd)
            os.system(cmd)
G
Ganlin Zhao 已提交
90

haoranc's avatar
haoranc 已提交
91 92 93 94
        time.sleep(2)
        tdLog.info(" create cluster done! ")

    def five_dnode_one_mnode(self):
X
Xiaoyu Wang 已提交
95
        tdSql.query("select * from information_schema.ins_dnodes;")
haoranc's avatar
haoranc 已提交
96 97
        tdSql.checkData(0,1,'%s:6030'%self.host)
        tdSql.checkData(4,1,'%s:6430'%self.host)
haoranc's avatar
haoranc 已提交
98 99
        tdSql.checkData(0,4,'ready')
        tdSql.checkData(4,4,'ready')
X
Xiaoyu Wang 已提交
100
        tdSql.query("select * from information_schema.ins_mnodes;")
haoranc's avatar
haoranc 已提交
101
        tdSql.checkData(0,1,'%s:6030'%self.host)
haoranc's avatar
haoranc 已提交
102 103 104 105 106 107 108 109
        tdSql.checkData(0,2,'leader')
        tdSql.checkData(0,3,'ready')


        tdSql.error("create mnode on dnode 1;")
        tdSql.error("drop mnode on dnode 1;")

        tdSql.execute("drop database if exists db")
110
        tdSql.execute("create database if not exists db replica 1 duration 300")
haoranc's avatar
haoranc 已提交
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
        tdSql.execute("use db")
        tdSql.execute(
        '''create table stb1
        (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
        tags (t1 int)
        '''
        )
        tdSql.execute(
            '''
            create table t1
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            '''
        )
        for i in range(4):
            tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
G
Ganlin Zhao 已提交
126

X
Xiaoyu Wang 已提交
127
        tdSql.query('select * from information_schema.ins_databases;')
128
        tdSql.checkData(2,5,'off')
129
        tdSql.error("alter database db strict 'off'")
130
        # tdSql.execute('alter database db strict 'on'')
X
Xiaoyu Wang 已提交
131
        # tdSql.query('select * from information_schema.ins_databases;')
haoranc's avatar
haoranc 已提交
132
        # tdSql.checkData(2,5,'on')
haoranc's avatar
haoranc 已提交
133 134 135 136 137 138 139 140

    def getConnection(self, dnode):
        host = dnode.cfgDict["fqdn"]
        port = dnode.cfgDict["serverPort"]
        config_dir = dnode.cfgDir
        return taos.connect(host=host, port=int(port), config=config_dir)


G
Ganlin Zhao 已提交
141
    def run(self):
haoranc's avatar
haoranc 已提交
142 143 144 145 146 147 148 149 150
        # print(self.master_dnode.cfgDict)
        self.five_dnode_one_mnode()


    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

tdCases.addLinux(__file__, TDTestCase())
G
Ganlin Zhao 已提交
151
tdCases.addWindows(__file__, TDTestCase())