amqplib 0.8.0 → 0.10.0
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/test.yml +38 -0
- package/CHANGELOG.md +57 -0
- package/Makefile +6 -7
- package/README.md +66 -64
- package/bin/generate-defs.js +0 -1
- package/channel_api.js +3 -3
- package/examples/tutorials/README.md +6 -6
- package/examples/tutorials/receive_logs_direct.js +1 -2
- package/examples/tutorials/receive_logs_topic.js +1 -2
- package/examples/tutorials/rpc_client.js +0 -1
- package/lib/bitset.js +99 -72
- package/lib/callback_model.js +0 -1
- package/lib/channel.js +7 -6
- package/lib/channel_model.js +271 -287
- package/lib/connect.js +5 -1
- package/lib/connection.js +14 -6
- package/lib/credentials.js +0 -1
- package/lib/defs.js +1 -1
- package/lib/frame.js +0 -1
- package/lib/mux.js +1 -3
- package/package.json +6 -9
- package/test/bitset.js +22 -21
- package/test/callback_api.js +0 -1
- package/test/channel.js +6 -9
- package/test/channel_api.js +36 -37
- package/test/codec.js +0 -1
- package/test/connect.js +47 -2
- package/test/connection.js +0 -1
- package/test/data.js +0 -1
- package/test/frame.js +2 -3
- package/test/util.js +0 -1
- package/.npmignore +0 -8
- package/package-lock.json +0 -1623
package/lib/mux.js
CHANGED
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
// it then writes 'packets' from the upstreams to the given
|
|
9
9
|
// downstream.
|
|
10
10
|
|
|
11
|
-
var inherits = require('util').inherits;
|
|
12
11
|
var assert = require('assert');
|
|
13
12
|
|
|
14
13
|
var schedule = (typeof setImmediate === 'function') ?
|
|
@@ -47,7 +46,6 @@ Mux.prototype._readIncoming = function() {
|
|
|
47
46
|
// become readable
|
|
48
47
|
if (this.blocked) return;
|
|
49
48
|
|
|
50
|
-
var self = this;
|
|
51
49
|
var accepting = true;
|
|
52
50
|
var out = this.out;
|
|
53
51
|
|
|
@@ -79,7 +77,7 @@ Mux.prototype._readIncoming = function() {
|
|
|
79
77
|
}
|
|
80
78
|
else { // ran out of room
|
|
81
79
|
assert(this.newStreams.length > 0, "Expect some new streams to remain");
|
|
82
|
-
this.oldStreams
|
|
80
|
+
Array.prototype.push.apply(this.oldStreams, this.newStreams);
|
|
83
81
|
this.newStreams = [];
|
|
84
82
|
}
|
|
85
83
|
// We may have exhausted all the old queues, or run out of room;
|
package/package.json
CHANGED
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
|
|
2
1
|
{
|
|
3
2
|
"name": "amqplib",
|
|
4
|
-
"homepage": "http://
|
|
3
|
+
"homepage": "http://amqp-node.github.io/amqplib/",
|
|
5
4
|
"main": "./channel_api.js",
|
|
6
|
-
"version": "0.
|
|
5
|
+
"version": "0.10.0",
|
|
7
6
|
"description": "An AMQP 0-9-1 (e.g., RabbitMQ) library and client.",
|
|
8
7
|
"repository": {
|
|
9
8
|
"type": "git",
|
|
10
|
-
"url": "https://github.com/
|
|
9
|
+
"url": "https://github.com/amqp-node/amqplib.git"
|
|
11
10
|
},
|
|
12
11
|
"engines": {
|
|
13
12
|
"node": ">=10"
|
|
14
13
|
},
|
|
15
14
|
"dependencies": {
|
|
16
15
|
"bitsyntax": "~0.1.0",
|
|
17
|
-
"bluebird": "^3.7.2",
|
|
18
16
|
"buffer-more-ints": "~1.0.0",
|
|
19
17
|
"readable-stream": "1.x >=1.1.9",
|
|
20
|
-
"
|
|
21
|
-
"url-parse": "~1.5.1"
|
|
18
|
+
"url-parse": "~1.5.10"
|
|
22
19
|
},
|
|
23
20
|
"devDependencies": {
|
|
24
21
|
"claire": "0.4.1",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
22
|
+
"mocha": "^9.2.2",
|
|
23
|
+
"nyc": "^15.1.0",
|
|
27
24
|
"uglify-js": "2.8.x"
|
|
28
25
|
},
|
|
29
26
|
"scripts": {
|
package/test/bitset.js
CHANGED
|
@@ -1,68 +1,69 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
const claire = require('claire');
|
|
4
|
+
const {BitSet} = require('../lib/bitset');
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const {
|
|
7
|
+
forAll,
|
|
8
|
+
data: arb,
|
|
9
|
+
label,
|
|
10
|
+
choice,
|
|
11
|
+
transform
|
|
12
|
+
} = claire;
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
var PosInt = transform(Math.floor, arb.Positive);
|
|
14
|
+
const PosInt = transform(Math.floor, arb.Positive);
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
const EmptyBitSet = label('bitset', transform(
|
|
17
|
+
size => {
|
|
16
18
|
return new BitSet(size);
|
|
17
19
|
},
|
|
18
20
|
choice(arb.Nothing, PosInt)));
|
|
19
21
|
|
|
20
|
-
suite('BitSet',
|
|
22
|
+
suite('BitSet', () => {
|
|
21
23
|
|
|
22
24
|
test('get bit', forAll(EmptyBitSet, PosInt)
|
|
23
|
-
.satisfy(
|
|
25
|
+
.satisfy((b, bit) => {
|
|
24
26
|
b.set(bit);
|
|
25
27
|
return b.get(bit);
|
|
26
28
|
}).asTest());
|
|
27
|
-
|
|
29
|
+
|
|
28
30
|
test('clear bit', forAll(EmptyBitSet, PosInt)
|
|
29
|
-
.satisfy(
|
|
31
|
+
.satisfy((b, bit) => {
|
|
30
32
|
b.set(bit);
|
|
31
33
|
b.clear(bit);
|
|
32
34
|
return !b.get(bit);
|
|
33
35
|
}).asTest());
|
|
34
36
|
|
|
35
37
|
test('next set of empty', forAll(EmptyBitSet)
|
|
36
|
-
.satisfy(
|
|
38
|
+
.satisfy(b => {
|
|
37
39
|
return b.nextSetBit(0) === -1;
|
|
38
40
|
}).asTest());
|
|
39
41
|
|
|
40
42
|
test('next set of one bit', forAll(EmptyBitSet, PosInt)
|
|
41
|
-
.satisfy(
|
|
43
|
+
.satisfy((b, bit) => {
|
|
42
44
|
b.set(bit);
|
|
43
45
|
return b.nextSetBit(0) === bit;
|
|
44
46
|
}).asTest());
|
|
45
47
|
|
|
46
48
|
test('next set same bit', forAll(EmptyBitSet, PosInt)
|
|
47
|
-
.satisfy(
|
|
49
|
+
.satisfy((b, bit) => {
|
|
48
50
|
b.set(bit);
|
|
49
51
|
return b.nextSetBit(bit) === bit;
|
|
50
52
|
}).asTest());
|
|
51
53
|
|
|
52
54
|
test('next set following bit', forAll(EmptyBitSet, PosInt)
|
|
53
|
-
.satisfy(
|
|
55
|
+
.satisfy((b, bit) => {
|
|
54
56
|
b.set(bit);
|
|
55
57
|
return b.nextSetBit(bit+1) === -1;
|
|
56
58
|
}).asTest());
|
|
57
59
|
|
|
58
60
|
test('next clear of empty', forAll(EmptyBitSet, PosInt)
|
|
59
|
-
.satisfy(
|
|
61
|
+
.satisfy((b, bit) => { return b.nextClearBit(bit) === bit; })
|
|
60
62
|
.asTest());
|
|
61
63
|
|
|
62
64
|
test('next clear of one set', forAll(EmptyBitSet, PosInt)
|
|
63
|
-
.satisfy(
|
|
65
|
+
.satisfy((b, bit) => {
|
|
64
66
|
b.set(bit);
|
|
65
67
|
return b.nextClearBit(bit) === bit + 1;
|
|
66
68
|
}).asTest());
|
|
67
|
-
|
|
68
69
|
});
|
package/test/callback_api.js
CHANGED
package/test/channel.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
5
|
var assert = require('assert');
|
|
6
|
-
var
|
|
6
|
+
var promisify = require('util').promisify;
|
|
7
7
|
var Channel = require('../lib/channel').Channel;
|
|
8
8
|
var Connection = require('../lib/connection').Connection;
|
|
9
9
|
var util = require('./util');
|
|
@@ -12,7 +12,6 @@ var completes = util.completes;
|
|
|
12
12
|
var defs = require('../lib/defs');
|
|
13
13
|
var conn_handshake = require('./connection').connection_handshake;
|
|
14
14
|
var OPEN_OPTS = require('./connection').OPEN_OPTS;
|
|
15
|
-
var Buffer = require('safe-buffer').Buffer;
|
|
16
15
|
|
|
17
16
|
var LOG_ERRORS = process.env.LOG_ERRORS;
|
|
18
17
|
|
|
@@ -77,12 +76,10 @@ var DELIVER_FIELDS = {
|
|
|
77
76
|
};
|
|
78
77
|
|
|
79
78
|
function open(ch) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
});
|
|
85
|
-
});
|
|
79
|
+
ch.allocate();
|
|
80
|
+
return promisify(function(cb) {
|
|
81
|
+
ch._rpc(defs.ChannelOpen, {outOfBand: ''}, defs.ChannelOpenOk, cb);
|
|
82
|
+
})();
|
|
86
83
|
}
|
|
87
84
|
|
|
88
85
|
suite("channel open and close", function() {
|
|
@@ -286,7 +283,7 @@ test("RPC on closed channel", channelTest(
|
|
|
286
283
|
failureCb(resolve, reject));
|
|
287
284
|
});
|
|
288
285
|
|
|
289
|
-
Promise.
|
|
286
|
+
Promise.all([close, fail1, fail2])
|
|
290
287
|
.then(succeed(done))
|
|
291
288
|
.catch(fail(done));
|
|
292
289
|
},
|
package/test/channel_api.js
CHANGED
|
@@ -6,8 +6,7 @@ var util = require('./util');
|
|
|
6
6
|
var succeed = util.succeed, fail = util.fail;
|
|
7
7
|
var schedule = util.schedule;
|
|
8
8
|
var randomString = util.randomString;
|
|
9
|
-
var
|
|
10
|
-
var Buffer = require('safe-buffer').Buffer;
|
|
9
|
+
var promisify = require('util').promisify;
|
|
11
10
|
|
|
12
11
|
var URL = process.env.URL || 'amqp://localhost';
|
|
13
12
|
|
|
@@ -119,9 +118,9 @@ chtest("channel break on publishing to non-exchange", function(ch) {
|
|
|
119
118
|
|
|
120
119
|
chtest("delete queue", function(ch) {
|
|
121
120
|
var q = 'test.delete-queue';
|
|
122
|
-
return Promise.
|
|
121
|
+
return Promise.all([
|
|
123
122
|
ch.assertQueue(q, QUEUE_OPTS),
|
|
124
|
-
ch.checkQueue(q))
|
|
123
|
+
ch.checkQueue(q)])
|
|
125
124
|
.then(function() {
|
|
126
125
|
return ch.deleteQueue(q);})
|
|
127
126
|
.then(function() {
|
|
@@ -130,9 +129,9 @@ chtest("delete queue", function(ch) {
|
|
|
130
129
|
|
|
131
130
|
chtest("delete exchange", function(ch) {
|
|
132
131
|
var ex = 'test.delete-exchange';
|
|
133
|
-
return Promise.
|
|
132
|
+
return Promise.all([
|
|
134
133
|
ch.assertExchange(ex, 'fanout', EX_OPTS),
|
|
135
|
-
ch.checkExchange(ex))
|
|
134
|
+
ch.checkExchange(ex)])
|
|
136
135
|
.then(function() {
|
|
137
136
|
return ch.deleteExchange(ex);})
|
|
138
137
|
.then(function() {
|
|
@@ -178,7 +177,7 @@ suite("sendMessage", function() {
|
|
|
178
177
|
chtest("send to queue and get from queue", function(ch) {
|
|
179
178
|
var q = 'test.send-to-q';
|
|
180
179
|
var msg = randomString();
|
|
181
|
-
return Promise.
|
|
180
|
+
return Promise.all([ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)])
|
|
182
181
|
.then(function() {
|
|
183
182
|
ch.sendToQueue(q, Buffer.from(msg));
|
|
184
183
|
return waitForMessages(q);
|
|
@@ -195,9 +194,9 @@ chtest("send to queue and get from queue", function(ch) {
|
|
|
195
194
|
chtest("send (and get) zero content to queue", function(ch) {
|
|
196
195
|
var q = 'test.send-to-q';
|
|
197
196
|
var msg = Buffer.alloc(0);
|
|
198
|
-
return Promise.
|
|
197
|
+
return Promise.all([
|
|
199
198
|
ch.assertQueue(q, QUEUE_OPTS),
|
|
200
|
-
ch.purgeQueue(q))
|
|
199
|
+
ch.purgeQueue(q)])
|
|
201
200
|
.then(function() {
|
|
202
201
|
ch.sendToQueue(q, msg);
|
|
203
202
|
return waitForMessages(q);})
|
|
@@ -219,11 +218,11 @@ chtest("route message", function(ch) {
|
|
|
219
218
|
var q = 'test.route-message-q';
|
|
220
219
|
var msg = randomString();
|
|
221
220
|
|
|
222
|
-
return Promise.
|
|
221
|
+
return Promise.all([
|
|
223
222
|
ch.assertExchange(ex, 'fanout', EX_OPTS),
|
|
224
223
|
ch.assertQueue(q, QUEUE_OPTS),
|
|
225
224
|
ch.purgeQueue(q),
|
|
226
|
-
ch.bindQueue(q, ex, '', {}))
|
|
225
|
+
ch.bindQueue(q, ex, '', {})])
|
|
227
226
|
.then(function() {
|
|
228
227
|
ch.publish(ex, '', Buffer.from(msg));
|
|
229
228
|
return waitForMessages(q);})
|
|
@@ -257,11 +256,11 @@ chtest("unbind queue", function(ch) {
|
|
|
257
256
|
var viabinding = randomString();
|
|
258
257
|
var direct = randomString();
|
|
259
258
|
|
|
260
|
-
return Promise.
|
|
259
|
+
return Promise.all([
|
|
261
260
|
ch.assertExchange(ex, 'fanout', EX_OPTS),
|
|
262
261
|
ch.assertQueue(q, QUEUE_OPTS),
|
|
263
262
|
ch.purgeQueue(q),
|
|
264
|
-
ch.bindQueue(q, ex, '', {}))
|
|
263
|
+
ch.bindQueue(q, ex, '', {})])
|
|
265
264
|
.then(function() {
|
|
266
265
|
ch.publish(ex, '', Buffer.from('foobar'));
|
|
267
266
|
return waitForMessages(q);})
|
|
@@ -290,14 +289,14 @@ chtest("consume via exchange-exchange binding", function(ch) {
|
|
|
290
289
|
var ex1 = 'test.ex-ex-binding1', ex2 = 'test.ex-ex-binding2';
|
|
291
290
|
var q = 'test.ex-ex-binding-q';
|
|
292
291
|
var rk = 'test.routing.key', msg = randomString();
|
|
293
|
-
return Promise.
|
|
292
|
+
return Promise.all([
|
|
294
293
|
ch.assertExchange(ex1, 'direct', EX_OPTS),
|
|
295
294
|
ch.assertExchange(ex2, 'fanout',
|
|
296
295
|
{durable: false, internal: true}),
|
|
297
296
|
ch.assertQueue(q, QUEUE_OPTS),
|
|
298
297
|
ch.purgeQueue(q),
|
|
299
298
|
ch.bindExchange(ex2, ex1, rk, {}),
|
|
300
|
-
ch.bindQueue(q, ex2, '', {}))
|
|
299
|
+
ch.bindQueue(q, ex2, '', {})])
|
|
301
300
|
.then(function() {
|
|
302
301
|
return new Promise(function(resolve, reject) {
|
|
303
302
|
function delivery(m) {
|
|
@@ -320,13 +319,13 @@ chtest("unbind exchange", function(ch) {
|
|
|
320
319
|
var viabinding = randomString();
|
|
321
320
|
var direct = randomString();
|
|
322
321
|
|
|
323
|
-
return Promise.
|
|
322
|
+
return Promise.all([
|
|
324
323
|
ch.assertExchange(source, 'fanout', EX_OPTS),
|
|
325
324
|
ch.assertExchange(dest, 'fanout', EX_OPTS),
|
|
326
325
|
ch.assertQueue(q, QUEUE_OPTS),
|
|
327
326
|
ch.purgeQueue(q),
|
|
328
327
|
ch.bindExchange(dest, source, '', {}),
|
|
329
|
-
ch.bindQueue(q, dest, '', {}))
|
|
328
|
+
ch.bindQueue(q, dest, '', {})])
|
|
330
329
|
.then(function() {
|
|
331
330
|
ch.publish(source, '', Buffer.from('foobar'));
|
|
332
331
|
return waitForMessages(q);})
|
|
@@ -354,7 +353,7 @@ chtest("cancel consumer", function(ch) {
|
|
|
354
353
|
var q = 'test.consumer-cancel';
|
|
355
354
|
var ctag;
|
|
356
355
|
var recv1 = new Promise(function (resolve, reject) {
|
|
357
|
-
Promise.
|
|
356
|
+
Promise.all([
|
|
358
357
|
ch.assertQueue(q, QUEUE_OPTS),
|
|
359
358
|
ch.purgeQueue(q),
|
|
360
359
|
// My callback is 'resolve the promise in `arrived`'
|
|
@@ -362,17 +361,17 @@ chtest("cancel consumer", function(ch) {
|
|
|
362
361
|
.then(function(ok) {
|
|
363
362
|
ctag = ok.consumerTag;
|
|
364
363
|
ch.sendToQueue(q, Buffer.from('foo'));
|
|
365
|
-
}));
|
|
364
|
+
})]);
|
|
366
365
|
});
|
|
367
366
|
|
|
368
367
|
// A message should arrive because of the consume
|
|
369
368
|
return recv1.then(function() {
|
|
370
|
-
var recv2 = Promise.
|
|
369
|
+
var recv2 = Promise.all([
|
|
371
370
|
ch.cancel(ctag).then(function() {
|
|
372
371
|
return ch.sendToQueue(q, Buffer.from('bar'));
|
|
373
372
|
}),
|
|
374
373
|
// but check a message did arrive in the queue
|
|
375
|
-
waitForMessages(q))
|
|
374
|
+
waitForMessages(q)])
|
|
376
375
|
.then(function() {
|
|
377
376
|
return ch.get(q, {noAck:true});
|
|
378
377
|
})
|
|
@@ -391,13 +390,13 @@ chtest("cancel consumer", function(ch) {
|
|
|
391
390
|
chtest("cancelled consumer", function(ch) {
|
|
392
391
|
var q = 'test.cancelled-consumer';
|
|
393
392
|
return new Promise(function(resolve, reject) {
|
|
394
|
-
return Promise.
|
|
393
|
+
return Promise.all([
|
|
395
394
|
ch.assertQueue(q),
|
|
396
395
|
ch.purgeQueue(q),
|
|
397
396
|
ch.consume(q, function(msg) {
|
|
398
397
|
if (msg === null) resolve();
|
|
399
398
|
else reject(new Error('Message not expected'));
|
|
400
|
-
}))
|
|
399
|
+
})])
|
|
401
400
|
.then(function() {
|
|
402
401
|
return ch.deleteQueue(q);
|
|
403
402
|
});
|
|
@@ -409,9 +408,9 @@ chtest("ack", function(ch) {
|
|
|
409
408
|
var q = 'test.ack';
|
|
410
409
|
var msg1 = randomString(), msg2 = randomString();
|
|
411
410
|
|
|
412
|
-
return Promise.
|
|
411
|
+
return Promise.all([
|
|
413
412
|
ch.assertQueue(q, QUEUE_OPTS),
|
|
414
|
-
ch.purgeQueue(q))
|
|
413
|
+
ch.purgeQueue(q)])
|
|
415
414
|
.then(function() {
|
|
416
415
|
ch.sendToQueue(q, Buffer.from(msg1));
|
|
417
416
|
ch.sendToQueue(q, Buffer.from(msg2));
|
|
@@ -439,8 +438,8 @@ chtest("nack", function(ch) {
|
|
|
439
438
|
var q = 'test.nack';
|
|
440
439
|
var msg1 = randomString();
|
|
441
440
|
|
|
442
|
-
return Promise.
|
|
443
|
-
ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q))
|
|
441
|
+
return Promise.all([
|
|
442
|
+
ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)])
|
|
444
443
|
.then(function() {
|
|
445
444
|
ch.sendToQueue(q, Buffer.from(msg1));
|
|
446
445
|
return waitForMessages(q);})
|
|
@@ -464,8 +463,8 @@ chtest("reject", function(ch) {
|
|
|
464
463
|
var q = 'test.reject';
|
|
465
464
|
var msg1 = randomString();
|
|
466
465
|
|
|
467
|
-
return Promise.
|
|
468
|
-
ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q))
|
|
466
|
+
return Promise.all([
|
|
467
|
+
ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)])
|
|
469
468
|
.then(function() {
|
|
470
469
|
ch.sendToQueue(q, Buffer.from(msg1));
|
|
471
470
|
return waitForMessages(q);})
|
|
@@ -485,9 +484,9 @@ chtest("reject", function(ch) {
|
|
|
485
484
|
|
|
486
485
|
chtest("prefetch", function(ch) {
|
|
487
486
|
var q = 'test.prefetch';
|
|
488
|
-
return Promise.
|
|
487
|
+
return Promise.all([
|
|
489
488
|
ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q),
|
|
490
|
-
ch.prefetch(1))
|
|
489
|
+
ch.prefetch(1)])
|
|
491
490
|
.then(function() {
|
|
492
491
|
ch.sendToQueue(q, Buffer.from('foobar'));
|
|
493
492
|
ch.sendToQueue(q, Buffer.from('foobar'));
|
|
@@ -524,8 +523,8 @@ suite("confirms", function() {
|
|
|
524
523
|
|
|
525
524
|
confirmtest('message is confirmed', function(ch) {
|
|
526
525
|
var q = 'test.confirm-message';
|
|
527
|
-
return Promise.
|
|
528
|
-
ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q))
|
|
526
|
+
return Promise.all([
|
|
527
|
+
ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)])
|
|
529
528
|
.then(function() {
|
|
530
529
|
return ch.sendToQueue(q, Buffer.from('bleep'));
|
|
531
530
|
});
|
|
@@ -538,8 +537,8 @@ confirmtest('message is confirmed', function(ch) {
|
|
|
538
537
|
// multi-ack.
|
|
539
538
|
confirmtest('multiple confirms', function(ch) {
|
|
540
539
|
var q = 'test.multiple-confirms';
|
|
541
|
-
return Promise.
|
|
542
|
-
ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q))
|
|
540
|
+
return Promise.all([
|
|
541
|
+
ch.assertQueue(q, QUEUE_OPTS), ch.purgeQueue(q)])
|
|
543
542
|
.then(function() {
|
|
544
543
|
var multipleRainbows = false;
|
|
545
544
|
ch.on('ack', function(a) {
|
|
@@ -550,9 +549,9 @@ confirmtest('multiple confirms', function(ch) {
|
|
|
550
549
|
var cs = [];
|
|
551
550
|
|
|
552
551
|
function sendAndPushPromise() {
|
|
553
|
-
var conf =
|
|
552
|
+
var conf = promisify(function(cb) {
|
|
554
553
|
return ch.sendToQueue(q, Buffer.from('bleep'), {}, cb);
|
|
555
|
-
});
|
|
554
|
+
})();
|
|
556
555
|
cs.push(conf);
|
|
557
556
|
}
|
|
558
557
|
|
package/test/codec.js
CHANGED
package/test/connect.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var connect = require('../lib/connect').connect;
|
|
4
|
-
var Buffer = require('safe-buffer').Buffer
|
|
5
4
|
var credentialsFromUrl = require('../lib/connect').credentialsFromUrl;
|
|
5
|
+
var defs = require('../lib/defs');
|
|
6
6
|
var assert = require('assert');
|
|
7
7
|
var util = require('./util');
|
|
8
8
|
var net = require('net');
|
|
9
|
-
var fail = util.fail, succeed = util.succeed,
|
|
9
|
+
var fail = util.fail, succeed = util.succeed, latch = util.latch,
|
|
10
10
|
kCallback = util.kCallback,
|
|
11
11
|
succeedIfAttributeEquals = util.succeedIfAttributeEquals;
|
|
12
12
|
var format = require('util').format;
|
|
@@ -148,5 +148,50 @@ suite("Connect API", function() {
|
|
|
148
148
|
else done();
|
|
149
149
|
});
|
|
150
150
|
});
|
|
151
|
+
});
|
|
151
152
|
|
|
153
|
+
suite('Errors on connect', function() {
|
|
154
|
+
var server
|
|
155
|
+
teardown(function() {
|
|
156
|
+
if (server) {
|
|
157
|
+
server.close();
|
|
158
|
+
}
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
test("closes underlying connection on authentication error", function(done) {
|
|
162
|
+
var bothDone = latch(2, done);
|
|
163
|
+
server = net.createServer(function(socket) {
|
|
164
|
+
socket.once('data', function(protocolHeader) {
|
|
165
|
+
assert.deepStrictEqual(
|
|
166
|
+
protocolHeader,
|
|
167
|
+
Buffer.from("AMQP" + String.fromCharCode(0,0,9,1))
|
|
168
|
+
);
|
|
169
|
+
util.runServer(socket, function(send, wait) {
|
|
170
|
+
send(defs.ConnectionStart,
|
|
171
|
+
{versionMajor: 0,
|
|
172
|
+
versionMinor: 9,
|
|
173
|
+
serverProperties: {},
|
|
174
|
+
mechanisms: Buffer.from('PLAIN'),
|
|
175
|
+
locales: Buffer.from('en_US')});
|
|
176
|
+
wait(defs.ConnectionStartOk)().then(function() {
|
|
177
|
+
send(defs.ConnectionClose,
|
|
178
|
+
{replyCode: 403,
|
|
179
|
+
replyText: 'ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN',
|
|
180
|
+
classId: 0,
|
|
181
|
+
methodId: 0});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
// Wait for the connection to be closed after the authentication error
|
|
187
|
+
socket.once('end', function() {
|
|
188
|
+
bothDone();
|
|
189
|
+
});
|
|
190
|
+
}).listen(0);
|
|
191
|
+
|
|
192
|
+
connect('amqp://localhost:' + server.address().port, {}, function(err) {
|
|
193
|
+
if (!err) bothDone(new Error('Expected authentication error'));
|
|
194
|
+
bothDone();
|
|
195
|
+
});
|
|
196
|
+
});
|
|
152
197
|
});
|
package/test/connection.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
var assert = require('assert');
|
|
4
4
|
var defs = require('../lib/defs');
|
|
5
|
-
var Buffer = require('safe-buffer').Buffer;
|
|
6
5
|
var Connection = require('../lib/connection').Connection;
|
|
7
6
|
var HEARTBEAT = require('../lib/frame').HEARTBEAT;
|
|
8
7
|
var HB_BUF = require('../lib/frame').HEARTBEAT_BUF;
|
package/test/data.js
CHANGED
package/test/frame.js
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
var assert = require('assert');
|
|
4
4
|
var succeed = require('./util').succeed;
|
|
5
5
|
var fail = require('./util').fail;
|
|
6
|
-
var Buffer = require('safe-buffer').Buffer;
|
|
7
6
|
var connection = require('../lib/connection');
|
|
8
7
|
var Frames = connection.Connection;
|
|
9
8
|
var HEARTBEAT = require('../lib/frame').HEARTBEAT;
|
|
@@ -27,7 +26,7 @@ var HB = Buffer.from([defs.constants.FRAME_HEARTBEAT,
|
|
|
27
26
|
defs.constants.FRAME_END]);
|
|
28
27
|
|
|
29
28
|
suite("Explicit parsing", function() {
|
|
30
|
-
|
|
29
|
+
|
|
31
30
|
test('Parse heartbeat', function() {
|
|
32
31
|
var input = inputs();
|
|
33
32
|
var frames = new Frames(input);
|
|
@@ -117,7 +116,7 @@ suite("Parsing", function() {
|
|
|
117
116
|
}
|
|
118
117
|
i++;
|
|
119
118
|
};
|
|
120
|
-
|
|
119
|
+
|
|
121
120
|
t.forEach(function(f) {
|
|
122
121
|
f.channel = 0;
|
|
123
122
|
bufs.push(defs.encodeMethod(f.id, 0, f.fields));
|
package/test/util.js
CHANGED