Add proper cluster testing scripts

The scripts start MaxScale processes on two different servers. The support
framework for the tests is in place but the tests themselves still need to
be modified to allow the use of non-localhost addresses.
This commit is contained in:
Markus Mäkelä 2017-10-11 14:59:20 +03:00
parent 9617b55905
commit 47b1004134
6 changed files with 87 additions and 47 deletions

View File

@ -20,7 +20,7 @@ module.exports = function() {
return new Promise(function(resolve, reject) {
child_process.execFile("./start_maxscale.sh", function(err, stdout, stderr) {
if (err) {
reject()
reject(err)
} else {
resolve()
}
@ -33,7 +33,7 @@ module.exports = function() {
return new Promise(function(resolve, reject) {
child_process.execFile("./start_double_maxscale.sh", function(err, stdout, stderr) {
if (err) {
reject()
reject(err)
} else {
resolve()
}
@ -46,7 +46,7 @@ module.exports = function() {
return new Promise(function(resolve, reject) {
child_process.execFile("./stop_maxscale.sh", function(err, stdout, stderr) {
if (err) {
reject()
reject(err)
} else {
resolve()
}
@ -59,7 +59,7 @@ module.exports = function() {
return new Promise(function(resolve, reject) {
child_process.execFile("./stop_double_maxscale.sh", function(err, stdout, stderr) {
if (err) {
reject()
reject(err)
} else {
resolve()
}

View File

@ -0,0 +1,47 @@
#!/bin/bash
cat <<EOF > start_maxscale.sh
#!/bin/bash
sudo systemctl start maxscale
EOF
cat <<EOF >stop_maxscale.sh
#!/bin/bash
sudo systemctl stop maxscale
sudo rm -rf /var/lib/maxscale/*
sudo rm -rf /var/cache/maxscale/*
sudo rm -rf /var/run/maxscale/*
if [ -f /tmp/maxadmin.sock ]
then
sudo rm /tmp/maxadmin.sock
fi
EOF
cat <<EOF >start_double_maxscale.sh
#!/bin/bash
sudo systemctl start maxscale
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo systemctl start maxscale"
EOF
cat <<EOF >stop_double_maxscale.sh
#!/bin/bash
sudo systemctl stop maxscale
sudo rm -rf /var/lib/maxscale/*
sudo rm -rf /var/cache/maxscale/*
sudo rm -rf /var/run/maxscale/*
test ! -f /tmp/maxadmin.sock || sudo rm /tmp/maxadmin.sock
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo systemctl stop maxscale"
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo rm -rf /var/lib/maxscale/*"
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo rm -rf /var/cache/maxscale/*"
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo rm -rf /var/run/maxscale/*"
ssh -i ~/maxscale_key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet $galera_003_whoami@$galera_003_network "sudo rm -rf /tmp/maxadmin.sock"
EOF
chmod +x *.sh

View File

@ -6,9 +6,19 @@
int main(int argc, char *argv[])
{
// Use galera_003 as the secondary MaxScale node
TestConnections::set_secondary_maxscale("galera_003_network", "galera_003_network6");
TestConnections test(argc, argv);
// This is not very nice as it's a bit too intrusive
system("envsubst < maxctrl_scripts.sh.in > maxctrl_scripts.sh");
system("chmod +x maxctrl_scripts.sh");
test.copy_to_maxscale("test_maxctrl.sh", "~");
test.copy_to_maxscale("maxctrl_scripts.sh", "~");
test.ssh_maxscale(true,"ssh-keygen -f maxscale_key -P \"\"");
test.copy_from_maxscale((char*)"~/maxscale_key.pub", (char*)".");
test.galera->copy_to_node("./maxscale_key.pub", "~", 3);
test.galera->ssh_node(3, false, "cat ~/maxscale_key.pub >> ~/.ssh/authorized_keys");
// TODO: Don't handle test dependencies in tests
test.tprintf("Installing NPM");

View File

@ -18,49 +18,10 @@ cd MaxScale
git checkout $ref
cd maxctrl
cat <<EOF > start_maxscale.sh
#!/bin/sh
sudo systemctl start maxscale
EOF
cat <<EOF >start_double_maxscale.sh
#!/bin/sh
exit 1
EOF
cat <<EOF >stop_maxscale.sh
#!/bin/sh
sudo systemctl stop maxscale
sudo rm -rf /var/lib/maxscale/*
sudo rm -rf /var/cache/maxscale/*
sudo rm -rf /var/run/maxscale/*
if [ -f /tmp/maxadmin.sock ]
then
sudo rm /tmp/maxadmin.sock
fi
EOF
cat <<EOF >stop_double_maxscale.sh
#!/bin/sh
sudo systemctl stop maxscale
sudo rm -rf /var/lib/maxscale/*
sudo rm -rf /var/cache/maxscale/*
sudo rm -rf /var/run/maxscale/*
if [ -f /tmp/maxadmin.sock ]
then
sudo rm /tmp/maxadmin.sock
fi
EOF
# Create the scripts that start and stop MaxScale
~/maxctrl_scripts.sh
chmod +x *.sh
npm i
# Export the value for --basedir where maxscale binaries are located

View File

@ -68,6 +68,25 @@ void TestConnections::multiple_maxscales(bool value)
maxscale::multiple_maxscales = value;
}
void TestConnections::set_secondary_maxscale(const char* ip_var, const char* ip6_var)
{
const char* ip = getenv(ip_var);
const char* ip6 = getenv(ip6_var);
if (ip || ip6)
{
TestConnections::multiple_maxscales(true);
if (ip)
{
setenv("maxscale2_IP", ip, 1);
}
if (ip6)
{
setenv("maxscale2_network6", ip6, 1);
}
}
}
TestConnections::TestConnections(int argc, char *argv[]):
enable_timeouts(true),
global_result(0),

View File

@ -338,7 +338,10 @@ public:
static void require_galera_version(const char *version);
/** Initialize multiple MaxScale instances */
void multiple_maxscales(bool value);
static void multiple_maxscales(bool value);
/** Set secondary MaxScale address */
static void set_secondary_maxscale(const char* ip_var, const char* ip6_var);
/**
* @brief add_result adds result to global_result and prints error message if result is not 0