rollbar 2.26.2 → 2.26.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +32 -10
- package/.lgtm.yml +7 -7
- package/.prettierignore +18 -0
- package/.vscode/settings.json +39 -0
- package/CHANGELOG.md +121 -35
- package/Gruntfile.js +51 -71
- package/README.md +2 -4
- package/bower.json +1 -3
- package/defaults.js +17 -5
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +5699 -5052
- package/dist/rollbar.js.map +1 -1
- package/dist/rollbar.min.js +1 -1
- package/dist/rollbar.min.js.map +1 -1
- package/dist/rollbar.named-amd.js +5704 -5062
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +1 -1
- package/dist/rollbar.named-amd.min.js.map +1 -1
- package/dist/rollbar.noconflict.umd.js +5693 -5052
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +1 -1
- package/dist/rollbar.noconflict.umd.min.js.map +1 -1
- package/dist/rollbar.snippet.js +1 -1
- package/dist/rollbar.umd.js +5704 -5063
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +1 -1
- package/dist/rollbar.umd.min.js.map +1 -1
- package/docs/extension-exceptions.md +35 -30
- package/docs/migration_v0_to_v1.md +41 -38
- package/index.d.ts +270 -231
- package/karma.conf.js +16 -34
- package/package.json +21 -17
- package/prettier.config.js +7 -0
- package/src/api.js +21 -10
- package/src/apiUtility.js +12 -8
- package/src/browser/core.js +103 -65
- package/src/browser/defaults/scrubFields.js +3 -3
- package/src/browser/detection.js +7 -8
- package/src/browser/domUtility.js +18 -8
- package/src/browser/globalSetup.js +12 -6
- package/src/browser/logger.js +1 -1
- package/src/browser/plugins/jquery.js +35 -35
- package/src/browser/predicates.js +1 -1
- package/src/browser/rollbar.js +1 -1
- package/src/browser/rollbarWrapper.js +8 -5
- package/src/browser/shim.js +43 -19
- package/src/browser/snippet_callback.js +6 -4
- package/src/browser/telemetry.js +573 -354
- package/src/browser/transforms.js +46 -27
- package/src/browser/transport/fetch.js +16 -14
- package/src/browser/transport/xhr.js +29 -13
- package/src/browser/transport.js +82 -25
- package/src/browser/url.js +16 -8
- package/src/browser/wrapGlobals.js +27 -8
- package/src/defaults.js +3 -3
- package/src/errorParser.js +14 -11
- package/src/merge.js +32 -23
- package/src/notifier.js +16 -13
- package/src/predicates.js +43 -23
- package/src/queue.js +71 -39
- package/src/rateLimiter.js +59 -18
- package/src/react-native/logger.js +1 -1
- package/src/react-native/rollbar.js +59 -55
- package/src/react-native/transforms.js +13 -9
- package/src/react-native/transport.js +44 -34
- package/src/rollbar.js +22 -13
- package/src/scrub.js +0 -1
- package/src/server/locals.js +69 -39
- package/src/server/logger.js +4 -4
- package/src/server/parser.js +72 -47
- package/src/server/rollbar.js +133 -55
- package/src/server/sourceMap/stackTrace.js +33 -18
- package/src/server/telemetry/urlHelpers.js +9 -11
- package/src/server/telemetry.js +68 -45
- package/src/server/transforms.js +37 -21
- package/src/server/transport.js +62 -32
- package/src/telemetry.js +92 -28
- package/src/transforms.js +33 -21
- package/src/truncation.js +8 -5
- package/src/utility/headers.js +43 -43
- package/src/utility/replace.js +9 -0
- package/src/utility/traverse.js +1 -1
- package/src/utility.js +89 -52
- package/test/api.test.js +31 -29
- package/test/apiUtility.test.js +43 -44
- package/test/browser.core.test.js +141 -131
- package/test/browser.domUtility.test.js +52 -35
- package/test/browser.predicates.test.js +13 -13
- package/test/browser.rollbar.test.js +597 -503
- package/test/browser.telemetry.test.js +76 -0
- package/test/browser.transforms.test.js +146 -128
- package/test/browser.transport.test.js +54 -46
- package/test/browser.url.test.js +12 -11
- package/test/fixtures/locals.fixtures.js +245 -126
- package/test/notifier.test.js +90 -78
- package/test/predicates.test.js +260 -214
- package/test/queue.test.js +230 -214
- package/test/rateLimiter.test.js +50 -42
- package/test/react-native.rollbar.test.js +149 -115
- package/test/react-native.transforms.test.js +21 -23
- package/test/react-native.transport.test.js +23 -11
- package/test/server.lambda.test.js +70 -53
- package/test/server.locals.test.js +437 -210
- package/test/server.parser.test.js +32 -26
- package/test/server.predicates.test.js +45 -43
- package/test/server.rollbar.test.js +311 -259
- package/test/server.telemetry.test.js +208 -83
- package/test/server.transforms.test.js +455 -361
- package/test/server.transport.test.js +144 -76
- package/test/telemetry.test.js +46 -37
- package/test/transforms.test.js +68 -66
- package/test/truncation.test.js +55 -53
- package/test/utility.test.js +266 -222
- package/webpack.config.js +46 -43
- package/.gitmodules +0 -3
- package/browserstack.browsers.js +0 -153
- package/browserstack.browsers.json +0 -4384
package/test/queue.test.js
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
var Queue = require('../src/queue');
|
|
7
7
|
|
|
8
8
|
function TestRateLimiterGenerator() {
|
|
9
|
-
var TestRateLimiter = function() {
|
|
9
|
+
var TestRateLimiter = function () {
|
|
10
10
|
this.shouldSendValue = true;
|
|
11
11
|
this.handler = null;
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
TestRateLimiter.prototype.shouldSend = function(item) {
|
|
14
|
+
TestRateLimiter.prototype.shouldSend = function (item) {
|
|
15
15
|
if (this.handler && typeof this.handler === 'function') {
|
|
16
16
|
return this.handler(item);
|
|
17
17
|
}
|
|
@@ -22,11 +22,11 @@ function TestRateLimiterGenerator() {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
function TestApiGenerator() {
|
|
25
|
-
var TestApi = function(handler) {
|
|
25
|
+
var TestApi = function (handler) {
|
|
26
26
|
this.handler = handler;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
TestApi.prototype.postItem = function(item, callback) {
|
|
29
|
+
TestApi.prototype.postItem = function (item, callback) {
|
|
30
30
|
if (this.handler && typeof this.handler === 'function') {
|
|
31
31
|
this.handler(item, callback);
|
|
32
32
|
} else {
|
|
@@ -36,34 +36,33 @@ function TestApiGenerator() {
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
TestApi.prototype.configure = function() {};
|
|
39
|
+
TestApi.prototype.configure = function () {};
|
|
40
40
|
|
|
41
41
|
return TestApi;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function TestLoggerGenerator() {
|
|
45
|
-
var TestLogger = function() {
|
|
45
|
+
var TestLogger = function () {
|
|
46
46
|
this.calls = {
|
|
47
47
|
log: [],
|
|
48
48
|
error: [],
|
|
49
|
-
info: []
|
|
49
|
+
info: [],
|
|
50
50
|
};
|
|
51
51
|
};
|
|
52
|
-
TestLogger.prototype.log = function() {
|
|
52
|
+
TestLogger.prototype.log = function () {
|
|
53
53
|
this.calls.log.push(arguments);
|
|
54
54
|
};
|
|
55
|
-
TestLogger.prototype.error = function() {
|
|
55
|
+
TestLogger.prototype.error = function () {
|
|
56
56
|
this.calls.error.push(arguments);
|
|
57
57
|
};
|
|
58
|
-
TestLogger.prototype.info = function() {
|
|
58
|
+
TestLogger.prototype.info = function () {
|
|
59
59
|
this.calls.info.push(arguments);
|
|
60
60
|
};
|
|
61
61
|
return TestLogger;
|
|
62
|
-
}
|
|
63
|
-
|
|
62
|
+
}
|
|
64
63
|
|
|
65
|
-
describe('Queue()', function() {
|
|
66
|
-
it('should have all of the expected methods', function(done) {
|
|
64
|
+
describe('Queue()', function () {
|
|
65
|
+
it('should have all of the expected methods', function (done) {
|
|
67
66
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
68
67
|
var api = new (TestApiGenerator())();
|
|
69
68
|
var logger = new (TestLoggerGenerator())();
|
|
@@ -78,18 +77,18 @@ describe('Queue()', function() {
|
|
|
78
77
|
});
|
|
79
78
|
});
|
|
80
79
|
|
|
81
|
-
describe('configure', function() {
|
|
82
|
-
it('should update the options', function(done) {
|
|
80
|
+
describe('configure', function () {
|
|
81
|
+
it('should update the options', function (done) {
|
|
83
82
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
84
83
|
var api = new (TestApiGenerator())();
|
|
85
84
|
var logger = new (TestLoggerGenerator())();
|
|
86
|
-
var options = {a: 1, b: 42};
|
|
85
|
+
var options = { a: 1, b: 42 };
|
|
87
86
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
88
87
|
|
|
89
88
|
expect(queue.options.a).to.eql(1);
|
|
90
89
|
expect(queue.options.b).to.eql(42);
|
|
91
90
|
|
|
92
|
-
queue.configure({a: 2, c: 15});
|
|
91
|
+
queue.configure({ a: 2, c: 15 });
|
|
93
92
|
|
|
94
93
|
expect(queue.options.a).to.eql(2);
|
|
95
94
|
expect(queue.options.b).to.eql(42);
|
|
@@ -99,398 +98,408 @@ describe('configure', function() {
|
|
|
99
98
|
});
|
|
100
99
|
});
|
|
101
100
|
|
|
102
|
-
describe('addItem', function() {
|
|
103
|
-
describe('not rate limited', function() {
|
|
104
|
-
describe('api success', function() {
|
|
105
|
-
it('should work with no callback', function(done) {
|
|
101
|
+
describe('addItem', function () {
|
|
102
|
+
describe('not rate limited', function () {
|
|
103
|
+
describe('api success', function () {
|
|
104
|
+
it('should work with no callback', function (done) {
|
|
106
105
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
107
106
|
var api = new (TestApiGenerator())();
|
|
108
107
|
var logger = new (TestLoggerGenerator())();
|
|
109
|
-
var options = {transmit: true};
|
|
108
|
+
var options = { transmit: true };
|
|
110
109
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
111
110
|
|
|
112
|
-
var item = {mykey: 'myvalue'};
|
|
113
|
-
var serverResponse = {success: true};
|
|
111
|
+
var item = { mykey: 'myvalue' };
|
|
112
|
+
var serverResponse = { success: true };
|
|
114
113
|
|
|
115
|
-
rateLimiter.handler = function(i) {
|
|
114
|
+
rateLimiter.handler = function (i) {
|
|
116
115
|
expect(i).to.eql(item);
|
|
117
|
-
return {error: null, shouldSend: true, payload: null};
|
|
116
|
+
return { error: null, shouldSend: true, payload: null };
|
|
118
117
|
};
|
|
119
|
-
api.handler = function(i, cb) {
|
|
118
|
+
api.handler = function (i, cb) {
|
|
120
119
|
expect(i).to.eql(item);
|
|
121
120
|
cb(null, serverResponse);
|
|
122
121
|
done();
|
|
123
122
|
};
|
|
124
|
-
queue.addItem({mykey: 'myvalue'});
|
|
123
|
+
queue.addItem({ mykey: 'myvalue' });
|
|
125
124
|
});
|
|
126
|
-
it('should work with a garbage callback', function(done) {
|
|
125
|
+
it('should work with a garbage callback', function (done) {
|
|
127
126
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
128
127
|
var api = new (TestApiGenerator())();
|
|
129
128
|
var logger = new (TestLoggerGenerator())();
|
|
130
|
-
var options = {transmit: true};
|
|
129
|
+
var options = { transmit: true };
|
|
131
130
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
132
131
|
|
|
133
|
-
var item = {mykey: 'myvalue'};
|
|
134
|
-
var serverResponse = {success: true};
|
|
132
|
+
var item = { mykey: 'myvalue' };
|
|
133
|
+
var serverResponse = { success: true };
|
|
135
134
|
|
|
136
|
-
rateLimiter.handler = function(i) {
|
|
135
|
+
rateLimiter.handler = function (i) {
|
|
137
136
|
expect(i).to.eql(item);
|
|
138
|
-
return {error: null, shouldSend: true, payload: null};
|
|
137
|
+
return { error: null, shouldSend: true, payload: null };
|
|
139
138
|
};
|
|
140
|
-
api.handler = function(i, cb) {
|
|
139
|
+
api.handler = function (i, cb) {
|
|
141
140
|
expect(i).to.eql(item);
|
|
142
141
|
cb(null, serverResponse);
|
|
143
142
|
done();
|
|
144
143
|
};
|
|
145
|
-
queue.addItem({mykey: 'myvalue'}, 'woops');
|
|
144
|
+
queue.addItem({ mykey: 'myvalue' }, 'woops');
|
|
146
145
|
});
|
|
147
|
-
it('should work with no predicates', function(done) {
|
|
146
|
+
it('should work with no predicates', function (done) {
|
|
148
147
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
149
148
|
var api = new (TestApiGenerator())();
|
|
150
149
|
var logger = new (TestLoggerGenerator())();
|
|
151
|
-
var options = {transmit: true};
|
|
150
|
+
var options = { transmit: true };
|
|
152
151
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
153
152
|
|
|
154
|
-
var item = {mykey: 'myvalue'};
|
|
155
|
-
var serverResponse = {success: true};
|
|
153
|
+
var item = { mykey: 'myvalue' };
|
|
154
|
+
var serverResponse = { success: true };
|
|
156
155
|
|
|
157
|
-
rateLimiter.handler = function(i) {
|
|
156
|
+
rateLimiter.handler = function (i) {
|
|
158
157
|
expect(i).to.eql(item);
|
|
159
|
-
return {error: null, shouldSend: true, payload: null};
|
|
158
|
+
return { error: null, shouldSend: true, payload: null };
|
|
160
159
|
};
|
|
161
|
-
api.handler = function(i, cb) {
|
|
160
|
+
api.handler = function (i, cb) {
|
|
162
161
|
expect(i).to.eql(item);
|
|
163
162
|
cb(null, serverResponse);
|
|
164
163
|
};
|
|
165
|
-
queue.addItem({mykey: 'myvalue'}, function(err, resp) {
|
|
164
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
166
165
|
expect(resp).to.eql(serverResponse);
|
|
167
166
|
done(err);
|
|
168
167
|
});
|
|
169
168
|
});
|
|
170
|
-
it('should call the logger if an error is about to be logged', function(done) {
|
|
169
|
+
it('should call the logger if an error is about to be logged', function (done) {
|
|
171
170
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
172
171
|
var api = new (TestApiGenerator())();
|
|
173
172
|
var logger = new (TestLoggerGenerator())();
|
|
174
|
-
var options = {verbose: true, transmit: true};
|
|
173
|
+
var options = { verbose: true, transmit: true };
|
|
175
174
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
176
175
|
|
|
177
|
-
var item = {body: {trace: {exception: {message: 'hello'}}}};
|
|
178
|
-
var serverResponse = {success: true};
|
|
176
|
+
var item = { body: { trace: { exception: { message: 'hello' } } } };
|
|
177
|
+
var serverResponse = { success: true };
|
|
179
178
|
|
|
180
|
-
rateLimiter.handler = function(i) {
|
|
179
|
+
rateLimiter.handler = function (i) {
|
|
181
180
|
expect(i).to.eql(item);
|
|
182
|
-
return {error: null, shouldSend: true, payload: null};
|
|
181
|
+
return { error: null, shouldSend: true, payload: null };
|
|
183
182
|
};
|
|
184
|
-
api.handler = function(i, cb) {
|
|
183
|
+
api.handler = function (i, cb) {
|
|
185
184
|
expect(i).to.eql(item);
|
|
186
185
|
cb(null, serverResponse);
|
|
187
186
|
};
|
|
188
|
-
queue.addItem(item, function(err, resp) {
|
|
187
|
+
queue.addItem(item, function (err, resp) {
|
|
189
188
|
expect(resp).to.eql(serverResponse);
|
|
190
189
|
expect(logger.calls.error[0][0]).to.eql('hello');
|
|
191
190
|
done(err);
|
|
192
191
|
});
|
|
193
192
|
});
|
|
194
|
-
it('should call the logger if a message is about to be logged', function(done) {
|
|
193
|
+
it('should call the logger if a message is about to be logged', function (done) {
|
|
195
194
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
196
195
|
var api = new (TestApiGenerator())();
|
|
197
196
|
var logger = new (TestLoggerGenerator())();
|
|
198
|
-
var options = {verbose: true, transmit: true};
|
|
197
|
+
var options = { verbose: true, transmit: true };
|
|
199
198
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
200
199
|
|
|
201
|
-
var item = {body: {message: {body: 'hello'}}};
|
|
202
|
-
var serverResponse = {success: true};
|
|
200
|
+
var item = { body: { message: { body: 'hello' } } };
|
|
201
|
+
var serverResponse = { success: true };
|
|
203
202
|
|
|
204
|
-
rateLimiter.handler = function(i) {
|
|
203
|
+
rateLimiter.handler = function (i) {
|
|
205
204
|
expect(i).to.eql(item);
|
|
206
|
-
return {error: null, shouldSend: true, payload: null};
|
|
205
|
+
return { error: null, shouldSend: true, payload: null };
|
|
207
206
|
};
|
|
208
|
-
api.handler = function(i, cb) {
|
|
207
|
+
api.handler = function (i, cb) {
|
|
209
208
|
expect(i).to.eql(item);
|
|
210
209
|
cb(null, serverResponse);
|
|
211
210
|
};
|
|
212
|
-
queue.addItem(item, function(err, resp) {
|
|
211
|
+
queue.addItem(item, function (err, resp) {
|
|
213
212
|
expect(resp).to.eql(serverResponse);
|
|
214
213
|
expect(logger.calls.log[0][0]).to.eql('hello');
|
|
215
214
|
done(err);
|
|
216
215
|
});
|
|
217
216
|
});
|
|
218
|
-
it('should not call the logger if verbose is false', function(done) {
|
|
217
|
+
it('should not call the logger if verbose is false', function (done) {
|
|
219
218
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
220
219
|
var api = new (TestApiGenerator())();
|
|
221
220
|
var logger = new (TestLoggerGenerator())();
|
|
222
|
-
var options = {verbose: false, transmit: true};
|
|
221
|
+
var options = { verbose: false, transmit: true };
|
|
223
222
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
224
223
|
|
|
225
|
-
var item = {body: {message: {body: 'hello'}}};
|
|
226
|
-
var serverResponse = {success: true};
|
|
224
|
+
var item = { body: { message: { body: 'hello' } } };
|
|
225
|
+
var serverResponse = { success: true };
|
|
227
226
|
|
|
228
|
-
rateLimiter.handler = function(i) {
|
|
227
|
+
rateLimiter.handler = function (i) {
|
|
229
228
|
expect(i).to.eql(item);
|
|
230
|
-
return {error: null, shouldSend: true, payload: null};
|
|
229
|
+
return { error: null, shouldSend: true, payload: null };
|
|
231
230
|
};
|
|
232
|
-
api.handler = function(i, cb) {
|
|
231
|
+
api.handler = function (i, cb) {
|
|
233
232
|
expect(i).to.eql(item);
|
|
234
233
|
cb(null, serverResponse);
|
|
235
234
|
};
|
|
236
|
-
queue.addItem(item, function(err, resp) {
|
|
235
|
+
queue.addItem(item, function (err, resp) {
|
|
237
236
|
expect(resp).to.eql(serverResponse);
|
|
238
237
|
expect(logger.calls.log.length).to.eql(0);
|
|
239
238
|
done(err);
|
|
240
239
|
});
|
|
241
240
|
});
|
|
242
|
-
it('should stop if a predicate returns false', function(done) {
|
|
241
|
+
it('should stop if a predicate returns false', function (done) {
|
|
243
242
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
244
243
|
var api = new (TestApiGenerator())();
|
|
245
244
|
var logger = new (TestLoggerGenerator())();
|
|
246
|
-
var options = {transmit: true};
|
|
245
|
+
var options = { transmit: true };
|
|
247
246
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
248
247
|
|
|
249
|
-
var item = {mykey: 'myvalue'};
|
|
250
|
-
var serverResponse = {success: true};
|
|
248
|
+
var item = { mykey: 'myvalue' };
|
|
249
|
+
var serverResponse = { success: true };
|
|
251
250
|
|
|
252
|
-
rateLimiter.handler = function(i) {
|
|
251
|
+
rateLimiter.handler = function (i) {
|
|
253
252
|
expect(false).to.be.ok();
|
|
254
|
-
return {error: null, shouldSend: true, payload: null};
|
|
253
|
+
return { error: null, shouldSend: true, payload: null };
|
|
255
254
|
};
|
|
256
|
-
api.handler = function(i, cb) {
|
|
255
|
+
api.handler = function (i, cb) {
|
|
257
256
|
expect(false).to.be.ok();
|
|
258
257
|
cb(null, serverResponse);
|
|
259
258
|
};
|
|
260
|
-
queue.addPredicate(function(i, s) {
|
|
259
|
+
queue.addPredicate(function (i, s) {
|
|
261
260
|
return false;
|
|
262
261
|
});
|
|
263
|
-
queue.addItem({mykey: 'myvalue'}, function(err, resp) {
|
|
262
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
264
263
|
expect(resp).to.not.be.ok();
|
|
265
264
|
done(err);
|
|
266
265
|
});
|
|
267
266
|
});
|
|
268
|
-
it('should stop if a predicate returns an error', function(done) {
|
|
267
|
+
it('should stop if a predicate returns an error', function (done) {
|
|
269
268
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
270
269
|
var api = new (TestApiGenerator())();
|
|
271
270
|
var logger = new (TestLoggerGenerator())();
|
|
272
|
-
var options = {transmit: true};
|
|
271
|
+
var options = { transmit: true };
|
|
273
272
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
274
273
|
|
|
275
|
-
var item = {mykey: 'myvalue'};
|
|
276
|
-
var serverResponse = {success: true};
|
|
274
|
+
var item = { mykey: 'myvalue' };
|
|
275
|
+
var serverResponse = { success: true };
|
|
277
276
|
|
|
278
|
-
rateLimiter.handler = function(i) {
|
|
277
|
+
rateLimiter.handler = function (i) {
|
|
279
278
|
expect(false).to.be.ok();
|
|
280
|
-
return {error: null, shouldSend: true, payload: null};
|
|
279
|
+
return { error: null, shouldSend: true, payload: null };
|
|
281
280
|
};
|
|
282
|
-
api.handler = function(i, cb) {
|
|
281
|
+
api.handler = function (i, cb) {
|
|
283
282
|
expect(false).to.be.ok();
|
|
284
283
|
cb(null, serverResponse);
|
|
285
284
|
};
|
|
286
285
|
var predicateError = 'bork bork';
|
|
287
|
-
queue.addPredicate(function(i, s) {
|
|
288
|
-
return {err: predicateError};
|
|
286
|
+
queue.addPredicate(function (i, s) {
|
|
287
|
+
return { err: predicateError };
|
|
289
288
|
});
|
|
290
|
-
queue.addItem({mykey: 'myvalue'}, function(err, resp) {
|
|
289
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
291
290
|
expect(err).to.eql(predicateError);
|
|
292
291
|
expect(resp).to.not.be.ok();
|
|
293
292
|
done();
|
|
294
293
|
});
|
|
295
294
|
});
|
|
296
|
-
it('should stop if any predicate returns an error', function(done) {
|
|
295
|
+
it('should stop if any predicate returns an error', function (done) {
|
|
297
296
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
298
297
|
var api = new (TestApiGenerator())();
|
|
299
298
|
var logger = new (TestLoggerGenerator())();
|
|
300
|
-
var options = {transmit: true};
|
|
299
|
+
var options = { transmit: true };
|
|
301
300
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
302
301
|
|
|
303
|
-
var item = {mykey: 'myvalue'};
|
|
304
|
-
var serverResponse = {success: true};
|
|
302
|
+
var item = { mykey: 'myvalue' };
|
|
303
|
+
var serverResponse = { success: true };
|
|
305
304
|
|
|
306
|
-
rateLimiter.handler = function(i) {
|
|
305
|
+
rateLimiter.handler = function (i) {
|
|
307
306
|
expect(false).to.be.ok();
|
|
308
|
-
return {error: null, shouldSend: true, payload: null};
|
|
307
|
+
return { error: null, shouldSend: true, payload: null };
|
|
309
308
|
};
|
|
310
|
-
api.handler = function(i, cb) {
|
|
309
|
+
api.handler = function (i, cb) {
|
|
311
310
|
expect(false).to.be.ok();
|
|
312
311
|
cb(null, serverResponse);
|
|
313
312
|
};
|
|
314
313
|
var predicateError = 'bork bork';
|
|
315
|
-
queue
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
314
|
+
queue
|
|
315
|
+
.addPredicate(function (i, s) {
|
|
316
|
+
return true;
|
|
317
|
+
})
|
|
318
|
+
.addPredicate(function (i, s) {
|
|
319
|
+
return { err: predicateError };
|
|
320
|
+
})
|
|
321
|
+
.addPredicate(function (i, s) {
|
|
322
|
+
return true;
|
|
323
|
+
});
|
|
324
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
323
325
|
expect(err).to.eql(predicateError);
|
|
324
326
|
expect(resp).to.not.be.ok();
|
|
325
327
|
done();
|
|
326
328
|
});
|
|
327
329
|
});
|
|
328
|
-
it('should call wait if set', function(done) {
|
|
330
|
+
it('should call wait if set', function (done) {
|
|
329
331
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
330
332
|
var api = new (TestApiGenerator())();
|
|
331
333
|
var logger = new (TestLoggerGenerator())();
|
|
332
|
-
var options = {transmit: true};
|
|
334
|
+
var options = { transmit: true };
|
|
333
335
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
334
336
|
|
|
335
|
-
var item = {mykey: 'myvalue'};
|
|
336
|
-
var serverResponse = {success: true};
|
|
337
|
+
var item = { mykey: 'myvalue' };
|
|
338
|
+
var serverResponse = { success: true };
|
|
337
339
|
|
|
338
|
-
rateLimiter.handler = function(i) {
|
|
340
|
+
rateLimiter.handler = function (i) {
|
|
339
341
|
expect(false).to.be.ok();
|
|
340
|
-
return {error: null, shouldSend: true, payload: null};
|
|
342
|
+
return { error: null, shouldSend: true, payload: null };
|
|
341
343
|
};
|
|
342
|
-
api.handler = function(i, cb) {
|
|
344
|
+
api.handler = function (i, cb) {
|
|
343
345
|
expect(false).to.be.ok();
|
|
344
346
|
cb(null, serverResponse);
|
|
345
347
|
};
|
|
346
|
-
queue.wait(function() {
|
|
348
|
+
queue.wait(function () {
|
|
347
349
|
done();
|
|
348
350
|
});
|
|
349
|
-
queue.addItem({mykey: 'myvalue'}, function(err, resp) {
|
|
351
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
350
352
|
expect(resp).to.be.ok();
|
|
351
353
|
});
|
|
352
354
|
});
|
|
353
|
-
it('should work if wait is called with a non-function', function(done) {
|
|
355
|
+
it('should work if wait is called with a non-function', function (done) {
|
|
354
356
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
355
357
|
var api = new (TestApiGenerator())();
|
|
356
358
|
var logger = new (TestLoggerGenerator())();
|
|
357
|
-
var options = {transmit: true};
|
|
359
|
+
var options = { transmit: true };
|
|
358
360
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
359
361
|
|
|
360
|
-
var item = {mykey: 'myvalue'};
|
|
361
|
-
var serverResponse = {success: true};
|
|
362
|
+
var item = { mykey: 'myvalue' };
|
|
363
|
+
var serverResponse = { success: true };
|
|
362
364
|
|
|
363
|
-
rateLimiter.handler = function(i) {
|
|
364
|
-
return {error: null, shouldSend: true, payload: null};
|
|
365
|
+
rateLimiter.handler = function (i) {
|
|
366
|
+
return { error: null, shouldSend: true, payload: null };
|
|
365
367
|
};
|
|
366
|
-
api.handler = function(i, cb) {
|
|
368
|
+
api.handler = function (i, cb) {
|
|
367
369
|
cb(null, serverResponse);
|
|
368
370
|
};
|
|
369
371
|
queue.wait({});
|
|
370
|
-
queue.addItem({mykey: 'myvalue'}, function(err, resp) {
|
|
372
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
371
373
|
expect(resp).to.be.ok();
|
|
372
374
|
done(err);
|
|
373
375
|
});
|
|
374
376
|
});
|
|
375
|
-
it('should work if all predicates return true', function(done) {
|
|
377
|
+
it('should work if all predicates return true', function (done) {
|
|
376
378
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
377
379
|
var api = new (TestApiGenerator())();
|
|
378
380
|
var logger = new (TestLoggerGenerator())();
|
|
379
|
-
var options = {transmit: true};
|
|
381
|
+
var options = { transmit: true };
|
|
380
382
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
381
383
|
|
|
382
|
-
var item = {mykey: 'myvalue'};
|
|
383
|
-
var serverResponse = {success: true};
|
|
384
|
+
var item = { mykey: 'myvalue' };
|
|
385
|
+
var serverResponse = { success: true };
|
|
384
386
|
|
|
385
|
-
rateLimiter.handler = function(i) {
|
|
387
|
+
rateLimiter.handler = function (i) {
|
|
386
388
|
expect(i).to.eql(item);
|
|
387
|
-
return {error: null, shouldSend: true, payload: null};
|
|
389
|
+
return { error: null, shouldSend: true, payload: null };
|
|
388
390
|
};
|
|
389
|
-
api.handler = function(i, cb) {
|
|
391
|
+
api.handler = function (i, cb) {
|
|
390
392
|
expect(i).to.eql(item);
|
|
391
393
|
cb(null, serverResponse);
|
|
392
394
|
};
|
|
393
|
-
queue
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
395
|
+
queue
|
|
396
|
+
.addPredicate(function (i, s) {
|
|
397
|
+
return true;
|
|
398
|
+
})
|
|
399
|
+
.addPredicate(function () {
|
|
400
|
+
return true;
|
|
401
|
+
});
|
|
402
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
399
403
|
expect(resp).to.eql(serverResponse);
|
|
400
404
|
done(err);
|
|
401
405
|
});
|
|
402
406
|
});
|
|
403
407
|
});
|
|
404
|
-
describe('api failure', function() {
|
|
405
|
-
it('should callback if the api throws an exception', function(done) {
|
|
408
|
+
describe('api failure', function () {
|
|
409
|
+
it('should callback if the api throws an exception', function (done) {
|
|
406
410
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
407
411
|
var api = new (TestApiGenerator())();
|
|
408
412
|
var logger = new (TestLoggerGenerator())();
|
|
409
|
-
var options = {transmit: true};
|
|
413
|
+
var options = { transmit: true };
|
|
410
414
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
411
415
|
|
|
412
|
-
var item = {mykey: 'myvalue'};
|
|
416
|
+
var item = { mykey: 'myvalue' };
|
|
413
417
|
var exception = 'boom!';
|
|
414
418
|
|
|
415
|
-
rateLimiter.handler = function(i) {
|
|
419
|
+
rateLimiter.handler = function (i) {
|
|
416
420
|
expect(i).to.eql(item);
|
|
417
|
-
return {error: null, shouldSend: true, payload: null};
|
|
421
|
+
return { error: null, shouldSend: true, payload: null };
|
|
418
422
|
};
|
|
419
|
-
api.handler = function(i, cb) {
|
|
423
|
+
api.handler = function (i, cb) {
|
|
420
424
|
throw exception;
|
|
421
425
|
};
|
|
422
|
-
queue
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
426
|
+
queue
|
|
427
|
+
.addPredicate(function (i, s) {
|
|
428
|
+
return true;
|
|
429
|
+
})
|
|
430
|
+
.addPredicate(function () {
|
|
431
|
+
return true;
|
|
432
|
+
});
|
|
433
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
428
434
|
expect(resp).to.not.be.ok();
|
|
429
435
|
expect(err).to.eql(exception);
|
|
430
436
|
done();
|
|
431
437
|
});
|
|
432
438
|
});
|
|
433
|
-
it('should callback with the api error if not retriable', function(done) {
|
|
439
|
+
it('should callback with the api error if not retriable', function (done) {
|
|
434
440
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
435
441
|
var api = new (TestApiGenerator())();
|
|
436
442
|
var logger = new (TestLoggerGenerator())();
|
|
437
|
-
var options = {retryInterval: 1, transmit: true};
|
|
443
|
+
var options = { retryInterval: 1, transmit: true };
|
|
438
444
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
439
445
|
|
|
440
|
-
var item = {mykey: 'myvalue'};
|
|
441
|
-
var apiError = {code: 'NOPE', message: 'borked'};
|
|
446
|
+
var item = { mykey: 'myvalue' };
|
|
447
|
+
var apiError = { code: 'NOPE', message: 'borked' };
|
|
442
448
|
|
|
443
|
-
rateLimiter.handler = function(i) {
|
|
444
|
-
return {error: null, shouldSend: true, payload: null};
|
|
449
|
+
rateLimiter.handler = function (i) {
|
|
450
|
+
return { error: null, shouldSend: true, payload: null };
|
|
445
451
|
};
|
|
446
|
-
api.handler = function(i, cb) {
|
|
452
|
+
api.handler = function (i, cb) {
|
|
447
453
|
cb(apiError);
|
|
448
454
|
};
|
|
449
|
-
queue.addItem({mykey: 'myvalue'}, function(err, resp) {
|
|
455
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
450
456
|
expect(err).to.eql(apiError);
|
|
451
457
|
expect(resp).to.not.be.ok();
|
|
452
458
|
done();
|
|
453
459
|
});
|
|
454
460
|
});
|
|
455
|
-
it('should callback with the api error if no retryInterval is set', function(done) {
|
|
461
|
+
it('should callback with the api error if no retryInterval is set', function (done) {
|
|
456
462
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
457
463
|
var api = new (TestApiGenerator())();
|
|
458
464
|
var logger = new (TestLoggerGenerator())();
|
|
459
|
-
var options = {transmit: true};
|
|
465
|
+
var options = { transmit: true };
|
|
460
466
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
461
467
|
|
|
462
|
-
var item = {mykey: 'myvalue'};
|
|
463
|
-
var apiError = {code: 'ENOTFOUND', message: 'No internet connection'};
|
|
468
|
+
var item = { mykey: 'myvalue' };
|
|
469
|
+
var apiError = { code: 'ENOTFOUND', message: 'No internet connection' };
|
|
464
470
|
|
|
465
|
-
rateLimiter.handler = function(i) {
|
|
466
|
-
return {error: null, shouldSend: true, payload: null};
|
|
471
|
+
rateLimiter.handler = function (i) {
|
|
472
|
+
return { error: null, shouldSend: true, payload: null };
|
|
467
473
|
};
|
|
468
|
-
api.handler = function(i, cb) {
|
|
474
|
+
api.handler = function (i, cb) {
|
|
469
475
|
cb(apiError);
|
|
470
476
|
};
|
|
471
|
-
queue.addItem({mykey: 'myvalue'}, function(err, resp) {
|
|
477
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
472
478
|
expect(err).to.eql(apiError);
|
|
473
479
|
expect(resp).to.not.be.ok();
|
|
474
480
|
done();
|
|
475
481
|
});
|
|
476
482
|
});
|
|
477
|
-
describe('if we get a retriable error', function() {
|
|
478
|
-
it('should retry', function(done) {
|
|
483
|
+
describe('if we get a retriable error', function () {
|
|
484
|
+
it('should retry', function (done) {
|
|
479
485
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
480
486
|
var api = new (TestApiGenerator())();
|
|
481
487
|
var logger = new (TestLoggerGenerator())();
|
|
482
|
-
var options = {retryInterval: 1, transmit: true};
|
|
488
|
+
var options = { retryInterval: 1, transmit: true };
|
|
483
489
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
484
490
|
|
|
485
|
-
var item = {mykey: 'myvalue'};
|
|
486
|
-
var serverResponse = {success: true};
|
|
487
|
-
var apiError = {
|
|
491
|
+
var item = { mykey: 'myvalue' };
|
|
492
|
+
var serverResponse = { success: true };
|
|
493
|
+
var apiError = {
|
|
494
|
+
code: 'ENOTFOUND',
|
|
495
|
+
message: 'No internet connection',
|
|
496
|
+
};
|
|
488
497
|
|
|
489
498
|
var apiRequestCount = 0;
|
|
490
|
-
rateLimiter.handler = function(i) {
|
|
491
|
-
return {error: null, shouldSend: true, payload: null};
|
|
499
|
+
rateLimiter.handler = function (i) {
|
|
500
|
+
return { error: null, shouldSend: true, payload: null };
|
|
492
501
|
};
|
|
493
|
-
api.handler = function(i, cb) {
|
|
502
|
+
api.handler = function (i, cb) {
|
|
494
503
|
apiRequestCount++;
|
|
495
504
|
if (apiRequestCount === 1) {
|
|
496
505
|
cb(apiError);
|
|
@@ -498,52 +507,55 @@ describe('addItem', function() {
|
|
|
498
507
|
cb(null, serverResponse);
|
|
499
508
|
}
|
|
500
509
|
};
|
|
501
|
-
queue.addItem({mykey: 'myvalue'}, function(err, resp) {
|
|
510
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
502
511
|
expect(err).to.not.be.ok();
|
|
503
512
|
expect(resp).to.eql(serverResponse);
|
|
504
513
|
expect(apiRequestCount).to.eql(2);
|
|
505
514
|
done();
|
|
506
515
|
});
|
|
507
516
|
});
|
|
508
|
-
it('should retry until maxRetries limit is reached', function(done) {
|
|
517
|
+
it('should retry until maxRetries limit is reached', function (done) {
|
|
509
518
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
510
519
|
var api = new (TestApiGenerator())();
|
|
511
520
|
var logger = new (TestLoggerGenerator())();
|
|
512
|
-
var options = {retryInterval: 1, maxRetries: 2, transmit: true};
|
|
521
|
+
var options = { retryInterval: 1, maxRetries: 2, transmit: true };
|
|
513
522
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
514
523
|
|
|
515
|
-
var item = {mykey: 'myvalue'};
|
|
516
|
-
var serverResponse = {success: true};
|
|
517
|
-
var apiError = {
|
|
524
|
+
var item = { mykey: 'myvalue' };
|
|
525
|
+
var serverResponse = { success: true };
|
|
526
|
+
var apiError = {
|
|
527
|
+
code: 'ENOTFOUND',
|
|
528
|
+
message: 'No internet connection',
|
|
529
|
+
};
|
|
518
530
|
|
|
519
531
|
var apiRequestCount = 0;
|
|
520
|
-
rateLimiter.handler = function(i) {
|
|
521
|
-
return {error: null, shouldSend: true, payload: null};
|
|
532
|
+
rateLimiter.handler = function (i) {
|
|
533
|
+
return { error: null, shouldSend: true, payload: null };
|
|
522
534
|
};
|
|
523
|
-
api.handler = function(i, cb) {
|
|
535
|
+
api.handler = function (i, cb) {
|
|
524
536
|
apiRequestCount++;
|
|
525
|
-
cb({...apiError, retry: apiRequestCount});
|
|
537
|
+
cb({ ...apiError, retry: apiRequestCount });
|
|
526
538
|
};
|
|
527
|
-
queue.addItem({mykey: 'myvalue'}, function(err, resp) {
|
|
539
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
528
540
|
var numRequests = options.maxRetries + 1;
|
|
529
541
|
expect(apiRequestCount).to.eql(numRequests);
|
|
530
|
-
expect(err).to.eql({...apiError, retry: numRequests});
|
|
542
|
+
expect(err).to.eql({ ...apiError, retry: numRequests });
|
|
531
543
|
expect(resp).to.not.be.ok();
|
|
532
544
|
done();
|
|
533
545
|
});
|
|
534
546
|
});
|
|
535
547
|
});
|
|
536
548
|
});
|
|
537
|
-
describe('transmit disabled', function() {
|
|
538
|
-
it('should not attempt to send', function(done) {
|
|
549
|
+
describe('transmit disabled', function () {
|
|
550
|
+
it('should not attempt to send', function (done) {
|
|
539
551
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
540
552
|
var api = new (TestApiGenerator())();
|
|
541
553
|
var logger = new (TestLoggerGenerator())();
|
|
542
|
-
var options = {transmit: false};
|
|
554
|
+
var options = { transmit: false };
|
|
543
555
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
544
556
|
var makeApiRequestStub = sinon.stub(queue, '_makeApiRequest');
|
|
545
557
|
|
|
546
|
-
queue.addItem({mykey: 'myvalue'}, function(err) {
|
|
558
|
+
queue.addItem({ mykey: 'myvalue' }, function (err) {
|
|
547
559
|
expect(err.message).to.eql('Transmit disabled');
|
|
548
560
|
});
|
|
549
561
|
|
|
@@ -554,60 +566,64 @@ describe('addItem', function() {
|
|
|
554
566
|
});
|
|
555
567
|
});
|
|
556
568
|
});
|
|
557
|
-
describe('rate limited', function() {
|
|
558
|
-
it('should callback if the rate limiter says not to send and has an error', function(done) {
|
|
569
|
+
describe('rate limited', function () {
|
|
570
|
+
it('should callback if the rate limiter says not to send and has an error', function (done) {
|
|
559
571
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
560
572
|
var api = new (TestApiGenerator())();
|
|
561
573
|
var logger = new (TestLoggerGenerator())();
|
|
562
|
-
var options = {transmit: true};
|
|
574
|
+
var options = { transmit: true };
|
|
563
575
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
564
576
|
|
|
565
|
-
var item = {mykey: 'myvalue'};
|
|
577
|
+
var item = { mykey: 'myvalue' };
|
|
566
578
|
var rateLimitError = 'bork';
|
|
567
579
|
|
|
568
|
-
rateLimiter.handler = function(i) {
|
|
580
|
+
rateLimiter.handler = function (i) {
|
|
569
581
|
expect(i).to.eql(item);
|
|
570
|
-
return {error: rateLimitError, shouldSend: false, payload: null};
|
|
582
|
+
return { error: rateLimitError, shouldSend: false, payload: null };
|
|
571
583
|
};
|
|
572
|
-
api.handler = function(i, cb) {
|
|
584
|
+
api.handler = function (i, cb) {
|
|
573
585
|
cb(null, 'Good times');
|
|
574
586
|
};
|
|
575
|
-
queue
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
587
|
+
queue
|
|
588
|
+
.addPredicate(function (i, s) {
|
|
589
|
+
return true;
|
|
590
|
+
})
|
|
591
|
+
.addPredicate(function () {
|
|
592
|
+
return true;
|
|
593
|
+
});
|
|
594
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
581
595
|
expect(resp).to.not.be.ok();
|
|
582
596
|
expect(err).to.eql(rateLimitError);
|
|
583
597
|
done();
|
|
584
598
|
});
|
|
585
599
|
});
|
|
586
|
-
it('should callback if the rate limiter says not to send and has a payload', function(done) {
|
|
600
|
+
it('should callback if the rate limiter says not to send and has a payload', function (done) {
|
|
587
601
|
var rateLimiter = new (TestRateLimiterGenerator())();
|
|
588
602
|
var api = new (TestApiGenerator())();
|
|
589
603
|
var logger = new (TestLoggerGenerator())();
|
|
590
|
-
var options = {transmit: true};
|
|
604
|
+
var options = { transmit: true };
|
|
591
605
|
var queue = new Queue(rateLimiter, api, logger, options);
|
|
592
606
|
|
|
593
|
-
var item = {mykey: 'myvalue'};
|
|
594
|
-
var rateLimitPayload = {something: 'went wrong'};
|
|
595
|
-
var serverResponse = {message: 'good times'};
|
|
607
|
+
var item = { mykey: 'myvalue' };
|
|
608
|
+
var rateLimitPayload = { something: 'went wrong' };
|
|
609
|
+
var serverResponse = { message: 'good times' };
|
|
596
610
|
|
|
597
|
-
rateLimiter.handler = function(i) {
|
|
611
|
+
rateLimiter.handler = function (i) {
|
|
598
612
|
expect(i).to.eql(item);
|
|
599
|
-
return {error: null, shouldSend: false, payload: rateLimitPayload};
|
|
613
|
+
return { error: null, shouldSend: false, payload: rateLimitPayload };
|
|
600
614
|
};
|
|
601
|
-
api.handler = function(i, cb) {
|
|
615
|
+
api.handler = function (i, cb) {
|
|
602
616
|
expect(i).to.eql(rateLimitPayload);
|
|
603
617
|
cb(null, serverResponse);
|
|
604
618
|
};
|
|
605
|
-
queue
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
619
|
+
queue
|
|
620
|
+
.addPredicate(function (i, s) {
|
|
621
|
+
return true;
|
|
622
|
+
})
|
|
623
|
+
.addPredicate(function () {
|
|
624
|
+
return true;
|
|
625
|
+
});
|
|
626
|
+
queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
|
|
611
627
|
expect(resp).to.eql(serverResponse);
|
|
612
628
|
expect(err).to.not.be.ok();
|
|
613
629
|
done();
|