
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
90 lines
4.3 KiB
Python
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)
|