Ensure the host parameter is correctly pickup up from the service file. Fixes #3200

This commit is contained in:
Murtuza Zabuawala 2018-03-19 12:38:44 +00:00 committed by Dave Page
parent 60893bcdd1
commit 34f1ebc88e
3 changed files with 33 additions and 2 deletions

View File

@ -500,7 +500,7 @@ class ServerNode(PGChildNodeView):
if 'db_res' in data: if 'db_res' in data:
data['db_res'] = ','.join(data['db_res']) data['db_res'] = ','.join(data['db_res'])
if 'hostaddr' in data and data['hostaddr'] != '': if 'hostaddr' in data and data['hostaddr'] and data['hostaddr'] != '':
if not self.pat4.match(data['hostaddr']): if not self.pat4.match(data['hostaddr']):
if not self.pat6.match(data['hostaddr']): if not self.pat6.match(data['hostaddr']):
return make_json_response( return make_json_response(
@ -700,7 +700,7 @@ class ServerNode(PGChildNodeView):
) )
) )
if 'hostaddr' in data and data['hostaddr'] != '': if 'hostaddr' in data and data['hostaddr'] and data['hostaddr'] != '':
if not self.pat4.match(data['hostaddr']): if not self.pat4.match(data['hostaddr']):
if not self.pat6.match(data['hostaddr']): if not self.pat6.match(data['hostaddr']):
return make_json_response( return make_json_response(

View File

@ -31,6 +31,8 @@ export class ModelValidation {
this.checkForEmpty('name', gettext('Name must be specified.')); this.checkForEmpty('name', gettext('Name must be specified.'));
if (ModelValidation.isEmptyString(serviceId)) { if (ModelValidation.isEmptyString(serviceId)) {
// Do not sent empty string
this.setNullValueForEmptyString('service');
this.checkHostAndHostAddress(); this.checkHostAndHostAddress();
this.checkForEmpty('db', gettext('Maintenance database must be specified.')); this.checkForEmpty('db', gettext('Maintenance database must be specified.'));
@ -50,8 +52,20 @@ export class ModelValidation {
return null; return null;
} }
setNullValueForEmptyString(field) {
let val = this.model.get(field);
if (_.isUndefined(val) || _.isNull(val))
return;
// To avoid passing empty string to connection parameter
if(String(val).trim() === '') {
this.model.set(field, null);
}
}
clearHostAddressAndDbErrors() { clearHostAddressAndDbErrors() {
_.each(['host', 'hostaddr', 'db'], (item) => { _.each(['host', 'hostaddr', 'db'], (item) => {
this.setNullValueForEmptyString(item);
this.model.errorModel.unset(item); this.model.errorModel.unset(item);
}); });
} }

View File

@ -20,6 +20,9 @@ describe('Server#ModelValidation', () => {
get: function (key) { get: function (key) {
return this.allValues[key]; return this.allValues[key];
}, },
set: function (key, value) {
this.key = value;
},
sessAttrs: {}, sessAttrs: {},
}; };
model.isNew = jasmine.createSpy('isNew'); model.isNew = jasmine.createSpy('isNew');
@ -51,6 +54,20 @@ describe('Server#ModelValidation', () => {
expect(model.errorModel.set).toHaveBeenCalledWith({}); expect(model.errorModel.set).toHaveBeenCalledWith({});
}); });
}); });
describe('Service id present', () => {
it('sets empty service name which should throw an error', () => {
model.allValues['service'] = '';
expect(modelValidation.validate()).toBe('Either Host name, Address or Service must be specified.');
expect(model.errorModel.set).toHaveBeenCalledWith({
host: 'Either Host name, Address or Service must be specified.',
hostaddr: 'Either Host name, Address or Service must be specified.',
db: 'Maintenance database must be specified.'
});
});
});
}); });
describe('When no parameters are valid', () => { describe('When no parameters are valid', () => {