MXS-1929: Reject promise on invalid input

If a value that is not of key-value format was given to the create
commands, the code previously threw an exception. This causes tests to
misbehave so changing it to a rejected promise is more appropriate.
This commit is contained in:
Markus Mäkelä
2018-08-09 12:26:33 +03:00
parent db09996bb8
commit 50c20e79ee
2 changed files with 89 additions and 50 deletions

View File

@ -15,13 +15,22 @@ require('./common.js')()
// Converts an array of key=value pairs into an object // Converts an array of key=value pairs into an object
function to_obj(obj, value) { function to_obj(obj, value) {
var kv = value.split('=') var kv = value.split('=')
if (kv.length < 2) {
throw 'Error: Not a key-value parameter: ' + value
}
obj[kv[0]] = kv[1] obj[kv[0]] = kv[1]
return obj return obj
} }
function validateParams(argv, params) {
var rval = null;
params.forEach((value) => {
var kv = value.split('=')
if (!kv || kv.length != 2) {
rval = 'Not a key-value parameter: ' + value
}
})
return rval
}
exports.command = 'create <command>' exports.command = 'create <command>'
exports.desc = 'Create objects' exports.desc = 'Create objects'
exports.handler = function() {} exports.handler = function() {}
@ -182,6 +191,12 @@ exports.builder = function(yargs) {
'are used, they must be defined after the service parameters.') 'are used, they must be defined after the service parameters.')
.usage('Usage: service <name> <router> <params...>') .usage('Usage: service <name> <router> <params...>')
}, function(argv) { }, function(argv) {
maxctrl(argv, function(host) {
err = validateParams(argv, argv.params)
if (err) {
return Promise.reject(err)
}
var service = { var service = {
'data': { 'data': {
@ -205,7 +220,6 @@ exports.builder = function(yargs) {
} }
} }
maxctrl(argv, function(host) {
return doRequest(host, 'services', null, {method: 'POST', body: service}) return doRequest(host, 'services', null, {method: 'POST', body: service})
}) })
}) })
@ -216,6 +230,7 @@ exports.builder = function(yargs) {
'given as the filter parameters.') 'given as the filter parameters.')
.usage('Usage: filter <name> <module> [params...]') .usage('Usage: filter <name> <module> [params...]')
}, function(argv) { }, function(argv) {
maxctrl(argv, function(host) {
var filter = { var filter = {
'data': { 'data': {
@ -227,10 +242,14 @@ exports.builder = function(yargs) {
} }
if (argv.params) { if (argv.params) {
var err = validateParams(argv, argv.params)
if (err) {
return Promise.reject(err)
}
filter.data.attributes.parameters = argv.params.reduce(to_obj, {}) filter.data.attributes.parameters = argv.params.reduce(to_obj, {})
} }
maxctrl(argv, function(host) {
return doRequest(host, 'filters', null, {method: 'POST', body: filter}) return doRequest(host, 'filters', null, {method: 'POST', body: filter})
}) })
}) })
@ -246,9 +265,10 @@ exports.builder = function(yargs) {
return yargs.epilog('The new listener will be taken into use immediately.') return yargs.epilog('The new listener will be taken into use immediately.')
.usage('Usage: create listener <service> <name> <port>') .usage('Usage: create listener <service> <name> <port>')
}, function(argv) { }, function(argv) {
maxctrl(argv, function(host) {
if (!Number.isInteger(argv.port)) { if (!Number.isInteger(argv.port) || argv.port <= 0) {
throw "'" + argv.port + "' is not a valid value for port" return Promise.reject("'" + argv.port + "' is not a valid value for port")
} }
var listener = { var listener = {
@ -272,7 +292,6 @@ exports.builder = function(yargs) {
} }
} }
maxctrl(argv, function(host) {
return doRequest(host, 'services/' + argv.service + '/listeners', null, {method: 'POST', body: listener}) return doRequest(host, 'services/' + argv.service + '/listeners', null, {method: 'POST', body: listener})
}) })
}) })

View File

@ -120,6 +120,16 @@ describe("Create/Destroy Commands", function() {
.should.be.rejected .should.be.rejected
}) })
it('will not create listener with negative port', function() {
return doCommand('create listener RW-Split-Router my-listener3 -123')
.should.be.rejected
})
it('will not create listener with port that is not a number', function() {
return doCommand('create listener RW-Split-Router my-listener3 any-port-is-ok')
.should.be.rejected
})
it('destroy listener', function() { it('destroy listener', function() {
return doCommand('destroy listener RW-Split-Router my-listener') return doCommand('destroy listener RW-Split-Router my-listener')
.should.be.fulfilled .should.be.fulfilled
@ -165,6 +175,11 @@ describe("Create/Destroy Commands", function() {
.should.be.rejected .should.be.rejected
}) })
it('create service with bad parameter', function() {
return doCommand('create service test-service readwritesplit user-not-required')
.should.be.rejected
})
it('create service', function() { it('create service', function() {
return verifyCommand('create service test-service readwritesplit user=maxuser password=maxpwd', return verifyCommand('create service test-service readwritesplit user=maxuser password=maxpwd',
'services/test-service') 'services/test-service')
@ -183,6 +198,11 @@ describe("Create/Destroy Commands", function() {
.should.be.fulfilled .should.be.fulfilled
}) })
it('create filter with bad parameters', function() {
return doCommand('create filter test-filter qlafilter filebase-not-required')
.should.be.rejected
})
it('create filter', function() { it('create filter', function() {
return verifyCommand('create filter test-filter qlafilter filebase=/tmp/qla.log', return verifyCommand('create filter test-filter qlafilter filebase=/tmp/qla.log',
'filters/test-filter') 'filters/test-filter')