mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Modify serial associator to use batch
https://fedorahosted.org/freeipa/ticket/1688 The serial associator is used to execute a command multiple times with different parameters. This is used for adding/removing a user into/from multiple groups. It has some issues: Each command is executed one-by-one, so it could be slow. * If there's a failure the rest of the commands will not be executed. * This can be fixed by putting the commands into a batch and execute them at once.
This commit is contained in:
parent
fcd927a126
commit
50a898855c
@ -64,28 +64,30 @@ IPA.serial_associator = function(spec) {
|
||||
return;
|
||||
}
|
||||
|
||||
var value = that.values.shift();
|
||||
if (!value) {
|
||||
that.on_success();
|
||||
return;
|
||||
}
|
||||
|
||||
var args = [value];
|
||||
var options = {};
|
||||
options[that.entity.name] = that.pkey;
|
||||
|
||||
var command = IPA.command({
|
||||
entity: that.other_entity,
|
||||
method: that.method,
|
||||
args: args,
|
||||
options: options,
|
||||
on_success: that.execute,
|
||||
var batch = IPA.batch_command({
|
||||
on_success: that.on_success,
|
||||
on_error: that.on_error
|
||||
});
|
||||
|
||||
var args, options, command;
|
||||
|
||||
for(var i=0; i < that.values.length; i++) {
|
||||
args = [that.values[i]];
|
||||
options = {};
|
||||
options[that.entity.name] = that.pkey;
|
||||
|
||||
command = IPA.command({
|
||||
entity: that.other_entity,
|
||||
method: that.method,
|
||||
args: args,
|
||||
options: options
|
||||
});
|
||||
|
||||
batch.add_command(command);
|
||||
}
|
||||
//alert(JSON.stringify(command.to_json()));
|
||||
|
||||
command.execute();
|
||||
batch.execute();
|
||||
};
|
||||
|
||||
return that;
|
||||
|
@ -23,11 +23,9 @@ module('association');
|
||||
|
||||
test("Testing serial_associator().", function() {
|
||||
|
||||
expect(10);
|
||||
expect(11);
|
||||
|
||||
var orig_ipa_command = IPA.command;
|
||||
|
||||
var counter = 0;
|
||||
var orig_ipa_batch_command = IPA.batch_command;
|
||||
|
||||
var params = {
|
||||
method: 'add_member',
|
||||
@ -38,27 +36,34 @@ test("Testing serial_associator().", function() {
|
||||
|
||||
params.values = ['user1', 'user2', 'user3'];
|
||||
|
||||
IPA.command = function(spec) {
|
||||
IPA.batch_command = function(spec) {
|
||||
|
||||
var that = orig_ipa_command(spec);
|
||||
var that = orig_ipa_batch_command(spec);
|
||||
|
||||
that.execute = function() {
|
||||
counter++;
|
||||
equals(that.commands.length, params.values.length,
|
||||
'Checking IPA.batch_command command count');
|
||||
|
||||
equals(
|
||||
that.entity, params.other_entity,
|
||||
'Checking IPA.command() parameter: entity'
|
||||
);
|
||||
var i, command;
|
||||
|
||||
equals(
|
||||
that.method, params.method,
|
||||
'Checking IPA.command() parameter: method'
|
||||
);
|
||||
for(i=0; i < params.values.length; i++) {
|
||||
command = that.commands[i];
|
||||
|
||||
equals(
|
||||
that.args[0], 'user'+counter,
|
||||
'Checking IPA.command() parameter: primary key'
|
||||
);
|
||||
equals(
|
||||
command.entity, params.other_entity,
|
||||
'Checking IPA.command() parameter: entity'
|
||||
);
|
||||
|
||||
equals(
|
||||
command.method, params.method,
|
||||
'Checking IPA.command() parameter: method'
|
||||
);
|
||||
|
||||
equals(
|
||||
command.args[0], 'user'+(i+1),
|
||||
'Checking IPA.command() parameter: primary key'
|
||||
);
|
||||
}
|
||||
|
||||
that.on_success({});
|
||||
};
|
||||
@ -73,7 +78,7 @@ test("Testing serial_associator().", function() {
|
||||
var associator = IPA.serial_associator(params);
|
||||
associator.execute();
|
||||
|
||||
IPA.command = orig_ipa_command;
|
||||
IPA.batch_command = orig_ipa_batch_command;
|
||||
});
|
||||
|
||||
test("Testing bulk_associator().", function() {
|
||||
|
Loading…
Reference in New Issue
Block a user