| var common = require('../common'); |
| var assert = common.assert; |
| var fake = common.fake.create(); |
| var retry = require(common.dir.lib + '/retry'); |
| |
| (function testErrors() { |
| var operation = retry.operation(); |
| |
| var error = new Error('some error'); |
| var error2 = new Error('some other error'); |
| operation._errors.push(error); |
| operation._errors.push(error2); |
| |
| assert.deepEqual(operation.errors(), [error, error2]); |
| })(); |
| |
| (function testMainErrorReturnsMostFrequentError() { |
| var operation = retry.operation(); |
| var error = new Error('some error'); |
| var error2 = new Error('some other error'); |
| |
| operation._errors.push(error); |
| operation._errors.push(error2); |
| operation._errors.push(error); |
| |
| assert.strictEqual(operation.mainError(), error); |
| })(); |
| |
| (function testMainErrorReturnsLastErrorOnEqualCount() { |
| var operation = retry.operation(); |
| var error = new Error('some error'); |
| var error2 = new Error('some other error'); |
| |
| operation._errors.push(error); |
| operation._errors.push(error2); |
| |
| assert.strictEqual(operation.mainError(), error2); |
| })(); |
| |
| (function testAttempt() { |
| var operation = retry.operation(); |
| var fn = new Function(); |
| |
| var timeoutOpts = { |
| timeout: 1, |
| cb: function() {} |
| }; |
| operation.attempt(fn, timeoutOpts); |
| |
| assert.strictEqual(fn, operation._fn); |
| assert.strictEqual(timeoutOpts.timeout, operation._operationTimeout); |
| assert.strictEqual(timeoutOpts.cb, operation._operationTimeoutCb); |
| })(); |
| |
| (function testRetry() { |
| var times = 3; |
| var error = new Error('some error'); |
| var operation = retry.operation([1, 2, 3]); |
| var attempts = 0; |
| |
| var finalCallback = fake.callback('finalCallback'); |
| fake.expectAnytime(finalCallback); |
| |
| var fn = function() { |
| operation.attempt(function(currentAttempt) { |
| attempts++; |
| assert.equal(currentAttempt, attempts); |
| if (operation.retry(error)) { |
| return; |
| } |
| |
| assert.strictEqual(attempts, 4); |
| assert.strictEqual(operation.attempts(), attempts); |
| assert.strictEqual(operation.mainError(), error); |
| finalCallback(); |
| }); |
| }; |
| |
| fn(); |
| })(); |