5dnode1mnode.py 5.0 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 10 11 12 13 14 15 16 17 18 19 20

from util.log import *
from util.sql import *
from util.cases import *
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 已提交
21

haoranc's avatar
haoranc 已提交
22
class TDTestCase:
wafwerar's avatar
wafwerar 已提交
23
    noConn = True
haoranc's avatar
haoranc 已提交
24 25 26 27 28
    def init(self,conn ,logSql):
        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 已提交
29
        self.host=self.master_dnode.cfgDict["fqdn"]
haoranc's avatar
haoranc 已提交
30 31
        conn1 = taos.connect(self.master_dnode.cfgDict["fqdn"] , config=self.master_dnode.cfgDir)
        tdSql.init(conn1.cursor())
G
Ganlin Zhao 已提交
32

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

    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 已提交
43
            if ("taosd" in files or "taosd.exe" in files):
haoranc's avatar
haoranc 已提交
44 45 46 47 48 49
                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 已提交
50 51

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

        testCluster = False
G
Ganlin Zhao 已提交
54
        valgrind = 0
haoranc's avatar
haoranc 已提交
55 56 57 58 59 60 61 62 63 64 65
        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 已提交
66

haoranc's avatar
haoranc 已提交
67 68 69 70 71 72 73
        self.TDDnodes = MyDnodes(dnodes)
        self.TDDnodes.init("")
        self.TDDnodes.setTestCluster(testCluster)
        self.TDDnodes.setValgrind(valgrind)
        self.TDDnodes.stopAll()
        for dnode in self.TDDnodes.dnodes:
            self.TDDnodes.deploy(dnode.index,{})
G
Ganlin Zhao 已提交
74

haoranc's avatar
haoranc 已提交
75 76 77
        for dnode in self.TDDnodes.dnodes:
            self.TDDnodes.starttaosd(dnode.index)

G
Ganlin Zhao 已提交
78
        # create cluster
haoranc's avatar
haoranc 已提交
79 80 81 82 83
        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 已提交
84
            cmd = f"{self.getBuildPath()}/build/bin/taos -h {dnode_first_host} -P {dnode_first_port} -s \"create dnode \\\"{dnode_id}\\\"\""
haoranc's avatar
haoranc 已提交
85 86
            print(cmd)
            os.system(cmd)
G
Ganlin Zhao 已提交
87

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

    def five_dnode_one_mnode(self):
        tdSql.query("show dnodes;")
haoranc's avatar
haoranc 已提交
93 94
        tdSql.checkData(0,1,'%s:6030'%self.host)
        tdSql.checkData(4,1,'%s:6430'%self.host)
haoranc's avatar
haoranc 已提交
95 96
        tdSql.checkData(0,4,'ready')
        tdSql.checkData(4,4,'ready')
X
Xiaoyu Wang 已提交
97
        tdSql.query("select * from information_schema.ins_mnodes;")
haoranc's avatar
haoranc 已提交
98
        tdSql.checkData(0,1,'%s:6030'%self.host)
haoranc's avatar
haoranc 已提交
99 100 101 102 103 104 105 106
        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")
107
        tdSql.execute("create database if not exists db replica 1 duration 300")
haoranc's avatar
haoranc 已提交
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
        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 已提交
123

haoranc's avatar
haoranc 已提交
124
        tdSql.query('show databases;')
125
        tdSql.checkData(2,5,'off')
126
        tdSql.error("alter database db strict 'off'")
127
        # tdSql.execute('alter database db strict 'on'')
haoranc's avatar
haoranc 已提交
128
        # tdSql.query('show databases;')
haoranc's avatar
haoranc 已提交
129
        # tdSql.checkData(2,5,'on')
haoranc's avatar
haoranc 已提交
130 131 132 133 134 135 136 137

    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 已提交
138
    def run(self):
haoranc's avatar
haoranc 已提交
139 140 141 142 143 144 145 146 147
        # 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 已提交
148
tdCases.addWindows(__file__, TDTestCase())