Markus Mäkelä d7d4ec29bb Add tests from develop
Added tests from develop. The test results need to be modified for 2.0.
2017-05-26 15:40:40 +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_IP"), port = "4006", user = os.getenv("maxscale_user"), password = os.getenv("maxscale_password"))
self.maxscale['rcmaster'] = SQLConnection(host = os.getenv("maxscale_IP"), port = "4008", user = os.getenv("maxscale_user"), password = os.getenv("maxscale_password"))
self.maxscale['rcslave'] = SQLConnection(host = os.getenv("maxscale_IP"), 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("maxscale_user"), password = os.getenv("maxscale_password"))
self.repl['node1'] = SQLConnection(host = os.getenv("node_001_network"), port = os.getenv("node_001_port"), user = os.getenv("maxscale_user"), password = os.getenv("maxscale_password"))
self.repl['node2'] = SQLConnection(host = os.getenv("node_002_network"), port = os.getenv("node_002_port"), user = os.getenv("maxscale_user"), password = os.getenv("maxscale_password"))
self.repl['node3'] = SQLConnection(host = os.getenv("node_003_network"), port = os.getenv("node_003_port"), user = os.getenv("maxscale_user"), password = os.getenv("maxscale_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("maxscale_user"), password = os.getenv("maxscale_password"))
self.galera['node1'] = SQLConnection(host = os.getenv("galera_001_network"), port = os.getenv("galera_001_port"), user = os.getenv("maxscale_user"), password = os.getenv("maxscale_password"))
self.galera['node2'] = SQLConnection(host = os.getenv("galera_002_network"), port = os.getenv("galera_002_port"), user = os.getenv("maxscale_user"), password = os.getenv("maxscale_password"))
self.galera['node3'] = SQLConnection(host = os.getenv("galera_003_network"), port = os.getenv("galera_003_port"), user = os.getenv("maxscale_user"), password = os.getenv("maxscale_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)