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:
@ -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,30 +191,35 @@ 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) {
|
||||||
|
|
||||||
var service = {
|
err = validateParams(argv, argv.params)
|
||||||
'data': {
|
if (err) {
|
||||||
'id': argv.name,
|
return Promise.reject(err)
|
||||||
'attributes': {
|
}
|
||||||
'router': argv.router,
|
|
||||||
'parameters': argv.params.reduce(to_obj, {})
|
var service = {
|
||||||
|
'data': {
|
||||||
|
'id': argv.name,
|
||||||
|
'attributes': {
|
||||||
|
'router': argv.router,
|
||||||
|
'parameters': argv.params.reduce(to_obj, {})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (argv.servers) {
|
if (argv.servers) {
|
||||||
for (i = 0; i < argv.servers.length; i++) {
|
for (i = 0; i < argv.servers.length; i++) {
|
||||||
_.set(service, 'data.relationships.servers.data[' + i + ']', {id: argv.servers[i], type: 'servers'})
|
_.set(service, 'data.relationships.servers.data[' + i + ']', {id: argv.servers[i], type: 'servers'})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (argv.filters) {
|
if (argv.filters) {
|
||||||
for (i = 0; i < argv.filters.length; i++) {
|
for (i = 0; i < argv.filters.length; i++) {
|
||||||
_.set(service, 'data.relationships.filters.data[' + i + ']', {id: argv.filters[i], type: 'filters'})
|
_.set(service, 'data.relationships.filters.data[' + i + ']', {id: argv.filters[i], type: 'filters'})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
maxctrl(argv, function(host) {
|
|
||||||
return doRequest(host, 'services', null, {method: 'POST', body: service})
|
return doRequest(host, 'services', null, {method: 'POST', body: service})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -216,21 +230,26 @@ 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': {
|
||||||
'id': argv.name,
|
'id': argv.name,
|
||||||
'attributes': {
|
'attributes': {
|
||||||
'module': argv.module
|
'module': argv.module
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (argv.params) {
|
if (argv.params) {
|
||||||
filter.data.attributes.parameters = argv.params.reduce(to_obj, {})
|
var err = validateParams(argv, argv.params)
|
||||||
}
|
if (err) {
|
||||||
|
return Promise.reject(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
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,33 +265,33 @@ 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 = {
|
||||||
'data': {
|
'data': {
|
||||||
'id': argv.name,
|
'id': argv.name,
|
||||||
'type': 'listeners',
|
'type': 'listeners',
|
||||||
'attributes': {
|
'attributes': {
|
||||||
'parameters': {
|
'parameters': {
|
||||||
'port': argv.port,
|
'port': argv.port,
|
||||||
'address': argv.interface,
|
'address': argv.interface,
|
||||||
'protocol': argv.protocol,
|
'protocol': argv.protocol,
|
||||||
'authenticator': argv.authenticator,
|
'authenticator': argv.authenticator,
|
||||||
'authenticator_options': argv.auth_options,
|
'authenticator_options': argv.auth_options,
|
||||||
'ssl_key': argv['tls-key'],
|
'ssl_key': argv['tls-key'],
|
||||||
'ssl_cert': argv['tls-cert'],
|
'ssl_cert': argv['tls-cert'],
|
||||||
'ssl_ca_cert': argv['tls-ca-cert'],
|
'ssl_ca_cert': argv['tls-ca-cert'],
|
||||||
'ssl_version': argv['tls-version'],
|
'ssl_version': argv['tls-version'],
|
||||||
'ssl_cert_verify_depth': argv['tls-cert-verify-depth']
|
'ssl_cert_verify_depth': argv['tls-cert-verify-depth']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
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})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -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')
|
||||||
|
Reference in New Issue
Block a user