%PDF- %PDF-
| Direktori : /home/opti/workflow/node_modules/aws-sdk/features/extra/ |
| Current File : /home/opti/workflow/node_modules/aws-sdk/features/extra/helpers.js |
module.exports = {
assert: require('./assertions').assert,
uniqueName: function uniqueName(base) {
if (base === "") return "";
return base + '-' + new Date().getTime();
},
/**
* Call this function with a block that will be executed multiple times
* to deal with eventually consistent conditions.
*
* this.When(/^I something is eventually consistent$/, function(callback) {
* this.eventually(callback, function(next) {
* doSomething(function(response) {
* if (response != notWhatIExpect) {
* next.fail();
* } else {
* next();
* }
* });
* });
* });
*
* You can pass in a few options after the function:
*
* delay: The number of milliseconds to delay before retrying.
* backoff: Add this number of milliseconds to the delay between each attempt.
* maxTime: Maximum duration of milliseconds to wait for success.
*/
eventually: function eventually(callback, block, options) {
if (!options) options = {};
if (!options.delay) options.delay = 0;
if (!options.backoff) options.backoff = 500;
if (!options.maxTime) options.maxTime = 5;
var delay = options.delay;
var started = this.AWS.util.date.getDate();
var self = this;
var retry = function() { callback(); };
retry.fail = function(err) {
var now = self.AWS.util.date.getDate();
if (now - started < options.maxTime * 1000) {
setTimeout(function () {
delay += options.backoff;
block.call(self, retry);
}, delay);
} else {
callback.fail(err || new Error('Eventually block timed out'));
}
};
block.call(this, retry);
},
/**
* A short-cut for calling a service operation and waiting for it to
* finish execution before moving onto the next step in the scenario.
*/
request: function request(svc, operation, params, next, extra) {
var world = this;
if (!svc) svc = this.service;
if (typeof svc == 'string') svc = this[svc];
svc[operation](params, function(err, data) {
world.response = this;
world.error = err;
world.data = data;
try {
if (typeof next.condition === 'function') {
var condition = next.condition.call(world, world);
if (!condition) {
next.fail(new Error('Request success condition failed'));
return;
}
}
if (extra) {
extra.call(world, world.response);
next.call(world);
}
else if (extra !== false && err) {
world.unexpectedError(world.response, next);
} else {
next.call(world);
}
} catch (err) {
next.fail(err);
}
});
},
/**
* Given a response that contains an error, this fails the current
* step with a formatted error message that indicates which service and
* operation failed.
*/
unexpectedError: function unexpectedError(resp, next) {
var svc = resp.request.service.api.serviceName;
var op = resp.request.operation;
var code = resp.error.code;
var msg = resp.error.message;
var err = 'Received unexpected error from ' + svc + '.' + op + ', ' + code + ': ' + msg;
next.fail(new Error(err));
}
};