Files
MaxScale/maxscale-system-test/maxpython.py
Timofey Turenko cd732ac14f MXS-2243 System tests brings VMs by themselves (#193)
maxscale-system-test changed in order to control test environment by itself.
Every test checks which machines are running, compare with list of needed machines
and start new VMs is they are missing in the running machines list.
Tests are executiong MDBCI commands, MDBCI executable should be in the PATH
2019-04-02 13:27:34 +03:00

90 lines
4.3 KiB
Python

import sys
import subprocess
import os
import time
import jaydebeapi
# Abstract SQL connection
class SQLConnection:
def __init__(self, port = '3306', host = '127.0.0.1', user = 'root', password = ''):
self.host = str(host)
self.port = str(port)
self.user = str(user)
self.password = str(password)
# Connect to a server
def connect(self, options = ""):
try:
self.conn = jaydebeapi.connect("org.mariadb.jdbc.Driver", ["jdbc:mariadb://" + self.host + ":" + self.port + "/test?" + options, self.user, self.password],"./maxscale/java/mariadb-java-client-1.3.3.jar")
except Exception as ex:
print("Failed to connect to " + self.host + ":" + self.port + " as " + self.user + ":" + self.password)
print(unicode(ex))
exit(1)
# Start a transaction
def begin(self):
curs = self.conn.cursor()
curs.execute("BEGIN")
curs.close()
# Commit a transaction
def commit(self):
curs = self.conn.cursor()
curs.execute("COMMIT")
curs.close()
# Query and test if the result matches the expected value if one is provided
def query(self, query, compare = None, column = 0):
curs = self.conn.cursor()
curs.execute(query)
return curs.fetchall()
def query_and_compare(self, query, column):
data = self.query(query)
for row in data:
if str(row[column]) == compare:
return True
return False
def disconnect(self):
self.conn.close()
def query_and_close(self, query):
self.connect()
self.query(query)
self.disconnect()
# Test environment abstraction
class MaxScaleTest:
def __init__(self, testname = "python_test"):
self.testname = testname
# prepare_test(testname)
# MaxScale connections
self.maxscale = dict()
self.maxscale['rwsplit'] = SQLConnection(host = os.getenv("maxscale_000_network"), port = "4006", user = os.getenv("maxscale_user"), password = os.getenv("maxscale_password"))
self.maxscale['rcmaster'] = SQLConnection(host = os.getenv("maxscale_000_network"), port = "4008", user = os.getenv("maxscale_user"), password = os.getenv("maxscale_password"))
self.maxscale['rcslave'] = SQLConnection(host = os.getenv("maxscale_000_network"), port = "4009", user = os.getenv("maxscale_user"), password = os.getenv("maxscale_password"))
# Master-Slave nodes
self.repl = dict()
self.repl['node0'] = SQLConnection(host = os.getenv("node_000_network"), port = os.getenv("node_000_port"), user = os.getenv("node_user"), password = os.getenv("node_password"))
self.repl['node1'] = SQLConnection(host = os.getenv("node_001_network"), port = os.getenv("node_001_port"), user = os.getenv("node_user"), password = os.getenv("node_password"))
self.repl['node2'] = SQLConnection(host = os.getenv("node_002_network"), port = os.getenv("node_002_port"), user = os.getenv("node_user"), password = os.getenv("node_password"))
self.repl['node3'] = SQLConnection(host = os.getenv("node_003_network"), port = os.getenv("node_003_port"), user = os.getenv("node_user"), password = os.getenv("node_password"))
# Galera nodes
self.galera = dict()
self.galera['node0'] = SQLConnection(host = os.getenv("galera_000_network"), port = os.getenv("galera_000_port"), user = os.getenv("galera_user"), password = os.getenv("galera_password"))
self.galera['node1'] = SQLConnection(host = os.getenv("galera_001_network"), port = os.getenv("galera_001_port"), user = os.getenv("galera_user"), password = os.getenv("galera_password"))
self.galera['node2'] = SQLConnection(host = os.getenv("galera_002_network"), port = os.getenv("galera_002_port"), user = os.getenv("galera_user"), password = os.getenv("galera_password"))
self.galera['node3'] = SQLConnection(host = os.getenv("galera_003_network"), port = os.getenv("galera_003_port"), user = os.getenv("galera_user"), password = os.getenv("galera_password"))
# def __del__(self):
# subprocess.call(os.getcwd() + "/copy_logs.sh " + str(self.testname), shell=True)
# Read test environment variables
#def prepare_test(testname = "replication"):
# subprocess.call(os.getcwd() + "/non_native_setup " + str(testname), shell=True)