amqplib 0.4.1 → 0.5.2

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/Makefile +1 -1
  3. package/README.md +26 -17
  4. package/callback_api.js +1 -0
  5. package/channel_api.js +7 -6
  6. package/examples/headers.js +2 -2
  7. package/examples/receive_generator.js +39 -0
  8. package/examples/send_generators.js +42 -0
  9. package/examples/ssl.js +1 -1
  10. package/examples/tutorials/README.md +1 -1
  11. package/examples/tutorials/callback_api/emit_log.js +1 -1
  12. package/examples/tutorials/callback_api/emit_log_direct.js +1 -1
  13. package/examples/tutorials/callback_api/emit_log_topic.js +1 -1
  14. package/examples/tutorials/callback_api/new_task.js +1 -1
  15. package/examples/tutorials/callback_api/rpc_client.js +1 -1
  16. package/examples/tutorials/callback_api/rpc_server.js +1 -1
  17. package/examples/tutorials/callback_api/send.js +1 -1
  18. package/examples/tutorials/emit_log.js +4 -5
  19. package/examples/tutorials/emit_log_direct.js +4 -5
  20. package/examples/tutorials/emit_log_topic.js +4 -5
  21. package/examples/tutorials/new_task.js +5 -6
  22. package/examples/tutorials/package.json +2 -3
  23. package/examples/tutorials/receive.js +4 -4
  24. package/examples/tutorials/receive_logs.js +1 -1
  25. package/examples/tutorials/receive_logs_direct.js +2 -2
  26. package/examples/tutorials/receive_logs_topic.js +6 -6
  27. package/examples/tutorials/rpc_client.js +25 -26
  28. package/examples/tutorials/rpc_server.js +2 -2
  29. package/examples/tutorials/send.js +10 -6
  30. package/examples/tutorials/worker.js +1 -1
  31. package/examples/waitForConfirms.js +2 -2
  32. package/lib/callback_model.js +13 -12
  33. package/lib/channel.js +2 -2
  34. package/lib/channel_model.js +58 -66
  35. package/lib/codec.js +64 -38
  36. package/lib/connect.js +33 -12
  37. package/lib/connection.js +7 -6
  38. package/lib/credentials.js +6 -3
  39. package/lib/defs.js +75 -75
  40. package/lib/frame.js +2 -1
  41. package/lib/heartbeat.js +1 -1
  42. package/package.json +4 -3
  43. package/test/callback_api.js +6 -5
  44. package/test/channel.js +52 -46
  45. package/test/channel_api.js +125 -136
  46. package/test/codec.js +48 -9
  47. package/test/connect.js +63 -3
  48. package/test/connection.js +10 -9
  49. package/test/data.js +32 -9
  50. package/test/frame.js +4 -4
  51. package/test/util.js +33 -19
  52. package/.npmignore +0 -9
package/package.json CHANGED
@@ -2,20 +2,21 @@
2
2
  "name": "amqplib",
3
3
  "homepage": "http://squaremo.github.io/amqp.node/",
4
4
  "main": "./channel_api.js",
5
- "version": "0.4.1",
5
+ "version": "0.5.2",
6
6
  "description": "An AMQP 0-9-1 (e.g., RabbitMQ) library and client.",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "https://github.com/squaremo/amqp.node.git"
10
10
  },
11
11
  "engines": {
12
- "node": ">=0.8 <5 || ^5"
12
+ "node": ">=0.8 <=9"
13
13
  },
14
14
  "dependencies": {
15
15
  "bitsyntax": "~0.0.4",
16
+ "bluebird": "^3.4.6",
16
17
  "buffer-more-ints": "0.0.2",
17
18
  "readable-stream": "1.x >=1.1.9",
18
- "when": "~3.6.2"
19
+ "safe-buffer": "^5.0.1"
19
20
  },
20
21
  "devDependencies": {
21
22
  "mocha": "~1",
@@ -8,6 +8,7 @@ var schedule = util.schedule;
8
8
  var randomString = util.randomString;
9
9
  var kCallback = util.kCallback;
10
10
  var domain = require('domain');
11
+ var Buffer = require('safe-buffer').Buffer;
11
12
 
12
13
  var URL = process.env.URL || 'amqp://localhost';
13
14
 
@@ -159,7 +160,7 @@ channel_test('send to queue and consume noAck', function(ch, done) {
159
160
  else done(new Error("message content doesn't match:" +
160
161
  msg + " =/= " + m.content.toString()));
161
162
  }, {noAck: true, exclusive: true});
162
- ch.sendToQueue(q.queue, new Buffer(msg));
163
+ ch.sendToQueue(q.queue, Buffer.from(msg));
163
164
  });
164
165
  });
165
166
 
@@ -175,7 +176,7 @@ channel_test('send to queue and consume ack', function(ch, done) {
175
176
  else done(new Error("message content doesn't match:" +
176
177
  msg + " =/= " + m.content.toString()));
177
178
  }, {noAck: false, exclusive: true});
178
- ch.sendToQueue(q.queue, new Buffer(msg));
179
+ ch.sendToQueue(q.queue, Buffer.from(msg));
179
180
  });
180
181
  });
181
182
 
@@ -183,7 +184,7 @@ channel_test('send to and get from queue', function(ch, done) {
183
184
  ch.assertQueue('', {exclusive: true}, function(e, q) {
184
185
  if (e != null) return done(e);
185
186
  var msg = randomString();
186
- ch.sendToQueue(q.queue, new Buffer(msg));
187
+ ch.sendToQueue(q.queue, Buffer.from(msg));
187
188
  waitForMessages(ch, q.queue, function(e, _) {
188
189
  if (e != null) return done(e);
189
190
  ch.get(q.queue, {noAck: true}, function(e, m) {
@@ -210,12 +211,12 @@ confirm_channel_test('Receive confirmation', function(ch, done) {
210
211
  // An unroutable message, on the basis that you're not allowed a
211
212
  // queue with an empty name, and you can't make bindings to the
212
213
  // default exchange. Tricky eh?
213
- ch.publish('', '', new Buffer('foo'), {}, done);
214
+ ch.publish('', '', Buffer.from('foo'), {}, done);
214
215
  });
215
216
 
216
217
  confirm_channel_test('Wait for confirms', function(ch, done) {
217
218
  for (var i=0; i < 1000; i++) {
218
- ch.publish('', '', new Buffer('foo'), {});
219
+ ch.publish('', '', Buffer.from('foo'), {});
219
220
  }
220
221
  ch.waitForConfirms(done);
221
222
  });
package/test/channel.js CHANGED
@@ -3,7 +3,7 @@
3
3
  'use strict';
4
4
 
5
5
  var assert = require('assert');
6
- var defer = require('when').defer;
6
+ var Promise = require('bluebird');
7
7
  var Channel = require('../lib/channel').Channel;
8
8
  var Connection = require('../lib/connection').Connection;
9
9
  var util = require('./util');
@@ -12,6 +12,7 @@ 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;
15
16
 
16
17
  var LOG_ERRORS = process.env.LOG_ERRORS;
17
18
 
@@ -59,7 +60,7 @@ function channel_handshake(send, await) {
59
60
  return await(defs.ChannelOpen)()
60
61
  .then(function(open) {
61
62
  assert.notEqual(0, open.channel);
62
- send(defs.ChannelOpenOk, {channelId: new Buffer('')}, open.channel);
63
+ send(defs.ChannelOpenOk, {channelId: Buffer.from('')}, open.channel);
63
64
  return open.channel;
64
65
  });
65
66
  }
@@ -76,14 +77,12 @@ var DELIVER_FIELDS = {
76
77
  };
77
78
 
78
79
  function open(ch) {
79
- var opened = defer();
80
- ch.allocate();
81
- ch._rpc(defs.ChannelOpen, {outOfBand: ''}, defs.ChannelOpenOk,
82
- function(err, _) {
83
- if (err === null) opened.resolve();
84
- else opened.reject(err);
85
- });
86
- return opened.promise;
80
+ return Promise.try(function() {
81
+ ch.allocate();
82
+ return Promise.fromCallback(function(cb) {
83
+ ch._rpc(defs.ChannelOpen, {outOfBand: ''}, defs.ChannelOpenOk, cb);
84
+ });
85
+ });
87
86
  }
88
87
 
89
88
  suite("channel open and close", function() {
@@ -112,10 +111,9 @@ test("open, close", channelTest(
112
111
  function(ch, done) {
113
112
  open(ch)
114
113
  .then(function() {
115
- var closed = defer();
116
- ch.closeBecause("Bye", defs.constants.REPLY_SUCCESS,
117
- closed.resolve);
118
- return closed.promise;
114
+ return new Promise(function(resolve) {
115
+ ch.closeBecause("Bye", defs.constants.REPLY_SUCCESS, resolve);
116
+ });
119
117
  })
120
118
  .then(succeed(done), fail(done));
121
119
  },
@@ -204,7 +202,7 @@ test("RPC", channelTest(
204
202
  prefetchSize: 0,
205
203
  global: false
206
204
  };
207
-
205
+
208
206
  ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom);
209
207
  ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom);
210
208
  ch._rpc(defs.BasicQos, fields, defs.BasicQosOk, wheeboom);
@@ -233,7 +231,7 @@ test("Bad RPC", channelTest(
233
231
  assert.strictEqual(505, error.code);
234
232
  succeed(errLatch)();
235
233
  });
236
-
234
+
237
235
  open(ch)
238
236
  .then(function() {
239
237
  ch._rpc(defs.BasicRecover, {requeue: true}, defs.BasicRecoverOk,
@@ -257,27 +255,34 @@ test("Bad RPC", channelTest(
257
255
  test("RPC on closed channel", channelTest(
258
256
  function(ch, done) {
259
257
  open(ch);
260
- var close = defer(), fail1 = defer(), fail2 = defer();
261
- ch.on('error', function(error) {
262
- assert.strictEqual(504, error.code);
263
- close.resolve();
258
+
259
+ var close = new Promise(function(resolve) {
260
+ ch.on('error', function(error) {
261
+ assert.strictEqual(504, error.code);
262
+ resolve();
263
+ });
264
264
  });
265
265
 
266
- function failureCb(d) {
266
+ function failureCb(resolve, reject) {
267
267
  return function(err) {
268
- if (err !== null) d.resolve();
269
- else d.reject();
268
+ if (err !== null) resolve();
269
+ else reject();
270
270
  }
271
271
  }
272
272
 
273
- ch._rpc(defs.BasicRecover, {requeue:true}, defs.BasicRecoverOk,
274
- failureCb(fail1));
275
- ch._rpc(defs.BasicRecover, {requeue:true}, defs.BasicRecoverOk,
276
- failureCb(fail2));
277
- close.promise
278
- .then(function() { return fail1.promise; })
279
- .then(function() { return fail2.promise; })
280
- .then(succeed(done), fail(done));
273
+ var fail1 = new Promise(function(resolve, reject) {
274
+ return ch._rpc(defs.BasicRecover, {requeue:true}, defs.BasicRecoverOk,
275
+ failureCb(resolve, reject));
276
+ });
277
+
278
+ var fail2 = new Promise(function(resolve, reject) {
279
+ return ch._rpc(defs.BasicRecover, {requeue:true}, defs.BasicRecoverOk,
280
+ failureCb(resolve, reject));
281
+ });
282
+
283
+ Promise.join(close, fail1, fail2)
284
+ .then(succeed(done))
285
+ .catch(fail(done));
281
286
  },
282
287
  function(send, await, done, ch) {
283
288
  await(defs.BasicRecover)()
@@ -289,7 +294,8 @@ test("RPC on closed channel", channelTest(
289
294
  }, ch);
290
295
  return await(defs.ChannelCloseOk);
291
296
  })
292
- .then(succeed(done), fail(done));
297
+ .then(succeed(done))
298
+ .catch(fail(done));
293
299
  }));
294
300
 
295
301
  test("publish all < single chunk threshold", channelTest(
@@ -299,7 +305,7 @@ test("publish all < single chunk threshold", channelTest(
299
305
  ch.sendMessage({
300
306
  exchange: 'foo', routingKey: 'bar',
301
307
  mandatory: false, immediate: false, ticket: 0
302
- }, {}, new Buffer('foobar'));
308
+ }, {}, Buffer.from('foobar'));
303
309
  })
304
310
  .then(succeed(done), fail(done));
305
311
  },
@@ -319,7 +325,7 @@ test("publish content > single chunk threshold", channelTest(
319
325
  ch.sendMessage({
320
326
  exchange: 'foo', routingKey: 'bar',
321
327
  mandatory: false, immediate: false, ticket: 0
322
- }, {}, new Buffer(3000));
328
+ }, {}, Buffer.alloc(3000));
323
329
  }, done);
324
330
  },
325
331
  function(send, await, done, ch) {
@@ -339,8 +345,8 @@ test("publish method & headers > threshold", channelTest(
339
345
  exchange: 'foo', routingKey: 'bar',
340
346
  mandatory: false, immediate: false, ticket: 0
341
347
  }, {
342
- headers: {foo: new Buffer(3000)}
343
- }, new Buffer('foobar'));
348
+ headers: {foo: Buffer.alloc(3000)}
349
+ }, Buffer.from('foobar'));
344
350
  }, done);
345
351
  },
346
352
  function(send, await, done, ch) {
@@ -359,11 +365,11 @@ test("publish zero-length message", channelTest(
359
365
  ch.sendMessage({
360
366
  exchange: 'foo', routingKey: 'bar',
361
367
  mandatory: false, immediate: false, ticket: 0
362
- }, {}, new Buffer(0));
368
+ }, {}, Buffer.alloc(0));
363
369
  ch.sendMessage({
364
370
  exchange: 'foo', routingKey: 'bar',
365
371
  mandatory: false, immediate: false, ticket: 0
366
- }, {}, new Buffer(0));
372
+ }, {}, Buffer.alloc(0));
367
373
  }, done);
368
374
  },
369
375
  function(send, await, done, ch) {
@@ -385,7 +391,7 @@ test("delivery", channelTest(
385
391
  },
386
392
  function(send, await, done, ch) {
387
393
  completes(function() {
388
- send(defs.BasicDeliver, DELIVER_FIELDS, ch, new Buffer('barfoo'));
394
+ send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo'));
389
395
  }, done);
390
396
  }));
391
397
 
@@ -394,13 +400,13 @@ test("zero byte msg", channelTest(
394
400
  open(ch);
395
401
  ch.on('delivery', function(m) {
396
402
  completes(function() {
397
- assert.deepEqual(new Buffer(0), m.content);
403
+ assert.deepEqual(Buffer.alloc(0), m.content);
398
404
  }, done);
399
405
  });
400
406
  },
401
407
  function(send, await, done, ch) {
402
408
  completes(function() {
403
- send(defs.BasicDeliver, DELIVER_FIELDS, ch, new Buffer(''));
409
+ send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from(''));
404
410
  }, done);
405
411
  }));
406
412
 
@@ -447,13 +453,13 @@ test("bad properties send", channelTest(
447
453
  ch.sendMessage({routingKey: 'foo',
448
454
  exchange: 'amq.direct'},
449
455
  {contentEncoding: 7},
450
- new Buffer('foobar'));
456
+ Buffer.from('foobar'));
451
457
  });
452
458
  }, done);
453
459
  },
454
460
  function(send, await, done, ch) {
455
461
  done();
456
- }));
462
+ }));
457
463
 
458
464
  test("bad consumer", channelTest(
459
465
  function(ch, done) {
@@ -469,7 +475,7 @@ test("bad consumer", channelTest(
469
475
  open(ch);
470
476
  },
471
477
  function(send, await, done, ch) {
472
- send(defs.BasicDeliver, DELIVER_FIELDS, ch, new Buffer('barfoo'));
478
+ send(defs.BasicDeliver, DELIVER_FIELDS, ch, Buffer.from('barfoo'));
473
479
  return await(defs.ChannelClose)()
474
480
  .then(function() {
475
481
  send(defs.ChannelCloseOk, {}, ch);
@@ -496,7 +502,7 @@ test("bad send in consumer", channelTest(
496
502
  function(send, await, done, ch) {
497
503
  completes(function() {
498
504
  send(defs.BasicDeliver, DELIVER_FIELDS, ch,
499
- new Buffer('barfoo'));
505
+ Buffer.from('barfoo'));
500
506
  }, done);
501
507
  return await(defs.ChannelClose)()
502
508
  .then(function() {
@@ -515,7 +521,7 @@ test("return", channelTest(
515
521
  },
516
522
  function(send, await, done, ch) {
517
523
  completes(function() {
518
- send(defs.BasicReturn, DELIVER_FIELDS, ch, new Buffer('barfoo'));
524
+ send(defs.BasicReturn, DELIVER_FIELDS, ch, Buffer.from('barfoo'));
519
525
  }, done);
520
526
  }));
521
527