MXS-2307: Extend alter test cases

The tests now check that multiple parameters work as expected. Also fixed
a few defects found while writing the tests, namely the fact that null or
empty values weren't detected.
This commit is contained in:
Markus Mäkelä
2019-05-28 12:08:29 +03:00
parent 3a9bfa380e
commit 006b87cebe
2 changed files with 100 additions and 12 deletions

View File

@ -71,10 +71,7 @@ function setFilters(host, argv){
} }
function parseValue(value) { function parseValue(value) {
if (value == 'null' || value == '') { if (value == 'true') {
// JSON null (empty value not strictly null but we treat it like that)
return null
} else if (value == 'true') {
// JSON true // JSON true
return true return true
} else if (value == 'false') { } else if (value == 'false') {
@ -94,8 +91,8 @@ function parseValue(value) {
function processArgs(key, value, extra) { function processArgs(key, value, extra) {
var arr = [key, value].concat(extra) var arr = [key, value].concat(extra)
if (arr.length % 2 != 0) { if (arr.length % 2 != 0 || arr.findIndex(v => v == 'null' || v == '') != -1) {
// Odd number of arguments, return null for error // Odd number of arguments or invalid value, return null for error
return null return null
} }
@ -116,7 +113,11 @@ function updateParams(host, resource, key, value, extra){
if (params) { if (params) {
return updateValue(host, resource, 'data.attributes.parameters', params) return updateValue(host, resource, 'data.attributes.parameters', params)
} else { } else {
return error('No value defined for parameter `' + argv.params[argv.params.length - 1] + '`') if (extra.length % 2 != 0) {
return error('No value defined for parameter `' + extra[extra.length - 1] + '`')
} else {
return error('Invalid value')
}
} }
} }

View File

@ -3,47 +3,103 @@ require('../test_utils.js')()
describe("Alter Commands", function() { describe("Alter Commands", function() {
before(startMaxScale) before(startMaxScale)
it('alter server', function() { it('rejects null parameter', function() {
return doCommand('alter server server1 port null')
.should.be.rejected
})
it('rejects null parameters when multiple parameters are defined', function() {
return doCommand('alter server server1 port 3000 address null')
.should.be.rejected
})
it('rejects empty parameter name', function() {
var ctrl = require('../lib/core.js')
return ctrl.execute(['alter', 'server', 'server1', '', '127.0.0.1'])
.should.be.rejected
})
it('rejects empty value', function() {
var ctrl = require('../lib/core.js')
return ctrl.execute(['alter', 'server', 'server1', 'port', ''])
.should.be.rejected
})
it('alters server', function() {
return verifyCommand('alter server server1 port 3004', 'servers/server1') return verifyCommand('alter server server1 port 3004', 'servers/server1')
.then(function(res) { .then(function(res) {
res.data.attributes.parameters.port.should.equal(3004) res.data.attributes.parameters.port.should.equal(3004)
}) })
}) })
it('alters server with multiple parameters', function() {
return verifyCommand('alter server server1 port 1234 address 1.2.3.4', 'servers/server1')
.then(function(res) {
res.data.attributes.parameters.port.should.equal(1234)
res.data.attributes.parameters.address.should.equal('1.2.3.4')
})
})
it('will not alter server with bad parameters', function() { it('will not alter server with bad parameters', function() {
return doCommand('alter server server1 port not-a-port') return doCommand('alter server server1 port not-a-port')
.should.be.rejected .should.be.rejected
}) })
it('will not alter server with missing value for parameter', function() {
return doCommand('alter server server1 port 3000 address')
.should.be.rejected
})
it('will not alter nonexistent server', function() { it('will not alter nonexistent server', function() {
return doCommand('alter server server123 port 3000') return doCommand('alter server server123 port 3000')
.should.be.rejected .should.be.rejected
}) })
it('alter monitor', function() { it('alters monitor', function() {
return verifyCommand('alter monitor MariaDB-Monitor monitor_interval 1000', 'monitors/MariaDB-Monitor') return verifyCommand('alter monitor MariaDB-Monitor monitor_interval 1000', 'monitors/MariaDB-Monitor')
.then(function(res) { .then(function(res) {
res.data.attributes.parameters.monitor_interval.should.equal(1000) res.data.attributes.parameters.monitor_interval.should.equal(1000)
}) })
}) })
it('alters monitor with multiple parameters', function() {
return verifyCommand('alter monitor MariaDB-Monitor monitor_interval 1234 backend_read_timeout 1234', 'monitors/MariaDB-Monitor')
.then(function(res) {
res.data.attributes.parameters.monitor_interval.should.equal(1234)
res.data.attributes.parameters.backend_read_timeout.should.equal(1234)
})
})
it('will not alter monitor with bad parameters', function() { it('will not alter monitor with bad parameters', function() {
return doCommand('alter monitor MariaDB-Monitor monitor_interval not-a-number') return doCommand('alter monitor MariaDB-Monitor monitor_interval not-a-number')
.should.be.rejected .should.be.rejected
}) })
it('will not alter monitor with missing value for parameter', function() {
return doCommand('alter monitor MariaDB-Monitor user maxuser password')
.should.be.rejected
})
it('will not alter nonexistent monitor', function() { it('will not alter nonexistent monitor', function() {
return doCommand('alter monitor monitor123 monitor_interval 3000') return doCommand('alter monitor monitor123 monitor_interval 3000')
.should.be.rejected .should.be.rejected
}) })
it('alter service parameter', function() { it('alters service', function() {
return verifyCommand('alter service Read-Connection-Router user testuser', 'services/Read-Connection-Router') return verifyCommand('alter service Read-Connection-Router user testuser', 'services/Read-Connection-Router')
.then(function(res) { .then(function(res) {
res.data.attributes.parameters.user.should.equal("testuser") res.data.attributes.parameters.user.should.equal("testuser")
}) })
}) })
it('alters service with multiple parameters', function() {
return verifyCommand('alter service Read-Connection-Router user testuser connection_timeout 123', 'services/Read-Connection-Router')
.then(function(res) {
res.data.attributes.parameters.user.should.equal("testuser")
res.data.attributes.parameters.connection_timeout.should.equal(123)
})
})
it('alter service filters', function() { it('alter service filters', function() {
return verifyCommand('alter service-filters Read-Connection-Router', 'services/Read-Connection-Router') return verifyCommand('alter service-filters Read-Connection-Router', 'services/Read-Connection-Router')
.then(function(res) { .then(function(res) {
@ -60,12 +116,17 @@ describe("Alter Commands", function() {
.should.be.rejected .should.be.rejected
}) })
it('will not alter service with missing value for parameter', function() {
return doCommand('alter service Read-Connection-Router user maxuser password')
.should.be.rejected
})
it('will not alter non-existent service', function() { it('will not alter non-existent service', function() {
return doCommand('alter service not-a-service user maxuser') return doCommand('alter service not-a-service user maxuser')
.should.be.rejected .should.be.rejected
}) })
it('alter logging', function() { it('alters logging', function() {
return verifyCommand('alter logging maxlog false', 'maxscale/logs') return verifyCommand('alter logging maxlog false', 'maxscale/logs')
.then(function() { .then(function() {
return verifyCommand('alter logging syslog false', 'maxscale/logs') return verifyCommand('alter logging syslog false', 'maxscale/logs')
@ -76,23 +137,49 @@ describe("Alter Commands", function() {
}) })
}) })
it('alters logging with multiple parameters', function() {
return verifyCommand('alter logging maxlog true syslog true', 'maxscale/logs')
.then(function(res) {
res.data.attributes.parameters.maxlog.should.equal(true)
res.data.attributes.parameters.syslog.should.equal(true)
})
})
it('will not alter logging with bad parameter', function() { it('will not alter logging with bad parameter', function() {
doCommand('alter logging some-parameter maybe') doCommand('alter logging some-parameter maybe')
.should.be.rejectted .should.be.rejectted
}) })
it('alter maxscale', function() { it('will not alter logging with missing value for parameter', function() {
return doCommand('alter logging maxlog false syslog')
.should.be.rejected
})
it('alters maxscale', function() {
return verifyCommand('alter maxscale auth_connect_timeout 5', 'maxscale') return verifyCommand('alter maxscale auth_connect_timeout 5', 'maxscale')
.then(function(res) { .then(function(res) {
res.data.attributes.parameters.auth_connect_timeout.should.equal(5) res.data.attributes.parameters.auth_connect_timeout.should.equal(5)
}) })
}) })
it('alters maxscale with multiple parameters', function() {
return verifyCommand('alter maxscale auth_connect_timeout 123 auth_read_timeout 123', 'maxscale')
.then(function(res) {
res.data.attributes.parameters.auth_connect_timeout.should.equal(123)
res.data.attributes.parameters.auth_read_timeout.should.equal(123)
})
})
it('will not alter maxscale with bad parameter', function() { it('will not alter maxscale with bad parameter', function() {
return doCommand('alter maxscale some_timeout 123') return doCommand('alter maxscale some_timeout 123')
.should.be.rejected .should.be.rejected
}) })
it('will not alter maxscale with missing value for parameter', function() {
return doCommand('alter maxscale auth_connect_timeout 5 auth_read_timeout')
.should.be.rejected
})
it('rejects negative size values', function() { it('rejects negative size values', function() {
return doCommand('alter maxscale query_classifier_cache_size -1M') return doCommand('alter maxscale query_classifier_cache_size -1M')
.should.be.rejected .should.be.rejected