hivemq-extension-test.py 6.2 KB
Newer Older
sangshuduo's avatar
sangshuduo 已提交
1
#!/usr/bin/python3
2 3 4 5 6 7 8 9 10 11 12
###################################################################
#           Copyright (c) 2016 by TAOS Technologies, Inc.
#                     All rights reserved.
#
#  This file is proprietary and confidential to TAOS Technologies.
#  No part of this file may be reproduced, stored, transmitted,
#  disclosed or used in any form or by any means other than as
#  expressly provided by the written permission from Jianhui Tao
#
###################################################################
# install pip
13
# pip install src/connector/python/
14 15 16 17 18 19 20 21 22 23
import sys
import os
import os.path
import time
import glob
import getopt
import subprocess
from shutil import which
from multipledispatch import dispatch

24

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
@dispatch(str, str)
def v_print(msg: str, arg: str):
    if verbose:
        print(msg % arg)


@dispatch(str, int)
def v_print(msg: str, arg: int):
    if verbose:
        print(msg % int(arg))


@dispatch(str, int, int)
def v_print(msg: str, arg1: int, arg2: int):
    if verbose:
        print(msg % (int(arg1), int(arg2)))


@dispatch(str, int, int, int)
def v_print(msg: str, arg1: int, arg2: int, arg3: int):
    if verbose:
        print(msg % (int(arg1), int(arg2), int(arg3)))


@dispatch(str, int, int, int, int)
def v_print(msg: str, arg1: int, arg2: int, arg3: int, arg4: int):
    if verbose:
        print(msg % (int(arg1), int(arg2), int(arg3), int(arg4)))

54

55 56 57 58 59
def isHiveMQInstalled():
    v_print("%s", "Check if HiveMQ installed")
    defaultHiveMQPath = "/opt/hivemq*"
    hiveMQDir = glob.glob(defaultHiveMQPath)
    if (len(hiveMQDir) == 0):
60
        v_print("%s", "ERROR: HiveMQ NOT found")
61 62 63 64 65
        return False
    else:
        v_print("HiveMQ installed at %s", hiveMQDir[0])
    return True

66

67 68 69
def isMosquittoInstalled():
    v_print("%s", "Check if mosquitto installed")
    if not which('mosquitto_pub'):
70
        v_print("%s", "ERROR: mosquitto is NOT installed")
71 72 73 74
        return False
    else:
        return True

75

76 77
def installExtension():
    currentDir = os.getcwd()
78 79 80 81
    extDir = 'src/connector/hivemq-tdengine-extension'
    os.chdir('../..')
    os.system('git submodule update --init -- %s' % extDir)
    os.chdir(extDir)
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
    v_print("%s", "build extension..")
    os.system('mvn clean package')

    tdExtensionZip = 'target/hivemq-tdengine-extension*.zip'
    tdExtensionZipDir = glob.glob(tdExtensionZip)

    defaultHiveMQPath = "/opt/hivemq*"
    hiveMQDir = glob.glob(defaultHiveMQPath)
    extPath = hiveMQDir[0] + '/extensions'

    tdExtDir = glob.glob(extPath + '/hivemq-tdengine-extension')
    if len(tdExtDir):
        v_print("%s", "delete exist extension..")
        os.system('rm -rf %s' % tdExtDir[0])

    v_print("%s", "unzip extension..")
    os.system('unzip %s -d %s' % (tdExtensionZipDir[0], extPath))

    os.chdir(currentDir)

102

103 104
def stopProgram(prog: str):
    psCmd = "ps ax|grep -w %s| grep -v grep | awk '{print $1}'" % prog
105 106 107 108 109 110 111 112 113 114

    processID = subprocess.check_output(
        psCmd, shell=True).decode("utf-8")

    while(processID):
        killCmd = "kill -TERM %s > /dev/null 2>&1" % processID
        os.system(killCmd)
        time.sleep(1)
        processID = subprocess.check_output(
            psCmd, shell=True).decode("utf-8")
115 116
    pass

117

118 119
def stopHiveMQ():
    stopProgram("hivemq.jar")
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
    v_print("%s", "ERROR: HiveMQ is NOT running")


def checkProgramRunning(prog: str):
    psCmd = "ps ax|grep -w %s| grep -v grep | awk '{print $1}'" % prog

    processID = subprocess.check_output(
        psCmd, shell=True).decode("utf-8")

    if not processID:
        v_print("ERROR: %s is NOT running", prog)
        return False
    else:
        return True

135 136 137 138 139 140 141

def runHiveMQ():
    defaultHiveMQPath = "/opt/hivemq*"
    hiveMQDir = glob.glob(defaultHiveMQPath)
    runPath = hiveMQDir[0] + '/bin/run.sh > /dev/null &'
    os.system(runPath)
    time.sleep(10)
142 143 144 145 146 147 148

    if not checkProgramRunning("hivemq.jar"):
        return False
    else:
        v_print("%s", "hivemq is running")
        return True

149

150 151 152
def getBuildPath():
    selfPath = os.path.dirname(os.path.realpath(__file__))

153 154
    binPath = ''

155 156 157 158 159 160 161 162 163
    if ("community" in selfPath):
        projPath = selfPath[:selfPath.find("community")]
    else:
        projPath = selfPath[:selfPath.find("tests")]

    for root, dirs, files in os.walk(projPath):
        if ("taosd" in files):
            rootRealPath = os.path.dirname(os.path.realpath(root))
            if ("packaging" not in rootRealPath):
164
                binPath = root[:len(root) - len("/build/bin")]
165
                break
166 167
    return binPath

168

169
def runTDengine():
170 171 172 173 174
    stopProgram("taosd")

    buildPath = getBuildPath()

    if (buildPath == ""):
175 176
        v_print("%s", "ERROR: taosd NOT found!")
        sys.exit(1)
177 178 179 180 181 182 183
    else:
        v_print("%s", "taosd found in %s" % buildPath)

    binPath = buildPath + "/build/bin/taosd"

    os.system('%s > /dev/null &' % binPath)
    time.sleep(10)
184 185 186 187 188 189 190
    if not checkProgramRunning("taosd"):
        return False
    else:
        v_print("%s", "TDengine is running")
        return True


191 192

def reCreateDatabase():
193 194 195 196 197
    buildPath = getBuildPath()
    binPath = buildPath + "/build/bin/taos"

    os.system('%s -s "DROP DATABASE IF EXISTS hivemq"' % binPath)
    os.system('%s -s "CREATE DATABASE IF NOT EXISTS hivemq"' % binPath)
198

199

200 201 202 203 204
def sendMqttMsg(topic: str, payload: str):
    testStr = 'mosquitto_pub -t %s -m "%s"' % (topic, payload)
    os.system(testStr)
    time.sleep(3)

205

206
def checkTDengineData(topic: str, payload: str):
207 208 209
    buildPath = getBuildPath()
    binPath = buildPath + "/build/bin/taos"

210 211 212
    output = subprocess.check_output(
        '%s -s "select * from hivemq.mqtt_payload"' %
        binPath, shell=True).decode('utf-8')
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
    if (topic in output) and (payload in output):
        v_print("%s", output)
        return True
    else:
        v_print("%s", "ERROR: mqtt topic or payload NOT found")
        return False


if __name__ == "__main__":
    verbose = True
    testTopic = 'test'
    testPayload = 'hello world'

    if not isHiveMQInstalled():
        sys.exit(1)

    if not isMosquittoInstalled():
        sys.exit(1)

    stopHiveMQ()

    installExtension()

236 237
    if not runTDengine():
        sys.exit(1)
238 239 240

    reCreateDatabase()

241 242
    if not runHiveMQ():
        sys.exit(1)
243 244 245 246 247 248 249

    sendMqttMsg(testTopic, testPayload)

    if not checkTDengineData(testTopic, testPayload):
        sys.exit(1)

    sys.exit(0)