From aabbf649913e31a209caaf2d620465ef3ed73990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Fri, 14 Jul 2017 19:30:07 +0300 Subject: [PATCH] MXS-1300: Add server state manipulation test The test sets and clears server states and verifies it via the REST API. It also checks that only correct arguments are accepted. --- maxctrl/test/states.js | 47 ++++++++++++++++++++++++++++++++++++++++++ maxctrl/test_utils.js | 34 +++++++++++++++++++++--------- 2 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 maxctrl/test/states.js diff --git a/maxctrl/test/states.js b/maxctrl/test/states.js new file mode 100644 index 000000000..bcd2a5e8b --- /dev/null +++ b/maxctrl/test/states.js @@ -0,0 +1,47 @@ +require('../test_utils.js')() + +describe("Server states", function() { + before(function() { + return startMaxScale() + .then(function() { + return request.put(host + 'monitors/MySQL-Monitor/stop') + }) + }) + + var ctrl = require('../core.js') + var opts = { + extra_args: [ '--quiet'] + } + + it('set correct state', function() { + return ctrl.execute('set server server2 master'.split(' '), opts) + .then(function() { + return request.get(host + 'servers/server2', {json: true}) + }) + .then(function(res) { + res.data.attributes.state.should.match(/Master/) + }) + }) + + it('clear correct state', function() { + return ctrl.execute('clear server server2 master'.split(' '), opts) + .then(function() { + return request.get(host + 'servers/server2', {json: true}) + }) + .then(function(res) { + res.data.attributes.state.should.not.match(/Master/) + }) + }) + + it('set incorrect state', function() { + return ctrl.execute('set server server2 something'.split(' '), opts) + .should.be.rejected + }) + + it('clear incorrect state', function() { + return ctrl.execute('clear server server2 something'.split(' '), opts) + .should.be.rejected + }) + + after(stopMaxScale) +}); diff --git a/maxctrl/test_utils.js b/maxctrl/test_utils.js index aca8ee661..3fa90727b 100644 --- a/maxctrl/test_utils.js +++ b/maxctrl/test_utils.js @@ -1,6 +1,11 @@ var child_process = require("child_process") module.exports = function() { + + if (process.env.MAXSCALE_DIR == null) { + throw new Error("MAXSCALE_DIR is not set"); + } + this.request = require("request-promise-native") this.chai = require("chai") this.assert = require("assert") @@ -8,19 +13,28 @@ module.exports = function() { chai.use(chaiAsPromised) this.should = chai.should() this.expect = chai.expect + this.host = 'http://localhost:8989/v1/' - this.startMaxScale = function(done) { - child_process.execFile("./start_maxscale.sh", function(err, stdout, stderr) { - if (process.env.MAXSCALE_DIR == null) { - throw new Error("MAXSCALE_DIR is not set"); - } - - done() + this.startMaxScale = function() { + return new Promise(function(resolve, reject) { + child_process.execFile("./start_maxscale.sh", function(err, stdout, stderr) { + if (err) { + reject() + } else { + resolve() + } + }) }) }; - this.stopMaxScale = function(done) { - child_process.execFile("./stop_maxscale.sh", function(err, stdout, stderr) { - done() + this.stopMaxScale = function() { + return new Promise(function(resolve, reject) { + child_process.execFile("./stop_maxscale.sh", function(err, stdout, stderr) { + if (err) { + reject() + } else { + resolve() + } + }) }) }; }