1 | var assert = require('assert');
|
2 |
|
3 | var Frames = require('../lib/frame');
|
4 | var HEARTBEAT = Frames.HEARTBEAT;
|
5 | var Stream = require('stream');
|
6 | var PassThrough = Stream.PassThrough ||
|
7 | require('readable-stream/passthrough');
|
8 |
|
9 | var defs = require('../lib/defs');
|
10 |
|
11 |
|
12 |
|
13 | function inputs() {
|
14 | return new PassThrough();
|
15 | }
|
16 |
|
17 | var HB = new Buffer([defs.constants.FRAME_HEARTBEAT,
|
18 | 0, 0,
|
19 | 0, 0, 0, 0,
|
20 | defs.constants.FRAME_END]);
|
21 |
|
22 | suite("Explicit parsing", function() {
|
23 |
|
24 | test('Parse heartbeat', function() {
|
25 | var input = inputs();
|
26 | var frames = new Frames(input);
|
27 | input.write(HB);
|
28 | assert(frames.recvFrame() === HEARTBEAT);
|
29 | assert(!frames.recvFrame());
|
30 | });
|
31 |
|
32 | test('Parse partitioned', function() {
|
33 | var input = inputs();
|
34 | var frames = new Frames(input);
|
35 | input.write(HB.slice(0, 3));
|
36 | assert(!frames.recvFrame());
|
37 | input.write(HB.slice(3));
|
38 | assert(frames.recvFrame() === HEARTBEAT);
|
39 | assert(!frames.recvFrame());
|
40 | });
|
41 | });
|
42 |
|
43 |
|
44 |
|
45 | var amqp = require('./data');
|
46 | var claire = require('claire');
|
47 | var choice = claire.choice;
|
48 | var forAll = claire.forAll;
|
49 | var repeat = claire.repeat;
|
50 | var label = claire.label;
|
51 |
|
52 | var Trace = label('frame trace',
|
53 | repeat(choice.apply(choice, amqp.methods)));
|
54 |
|
55 | suite("Parsing", function() {
|
56 |
|
57 | function testPartitioning(partition) {
|
58 | return forAll(Trace).satisfy(function(t) {
|
59 | var bufs = [];
|
60 | var input = inputs();
|
61 | var frames = new Frames(input);
|
62 | var i = 0;
|
63 | frames.accept = function(f) {
|
64 | assert.deepEqual(f, t[i]);
|
65 | i++;
|
66 | };
|
67 |
|
68 | t.forEach(function(f) {
|
69 | f.channel = 0;
|
70 | bufs.push(defs.encodeMethod(f.id, 0, f.fields));
|
71 | });
|
72 |
|
73 | partition(bufs).forEach(input.write.bind(input));
|
74 | frames.run();
|
75 | return i === t.length;
|
76 | }).asTest({times: 20})
|
77 | };
|
78 |
|
79 | test("Parse trace of methods",
|
80 | testPartitioning(function(bufs) { return bufs; }));
|
81 |
|
82 | test("Parse concat'd methods",
|
83 | testPartitioning(function(bufs) {
|
84 | return [Buffer.concat(bufs)];
|
85 | }));
|
86 |
|
87 | test("Parse partitioned methods",
|
88 | testPartitioning(function(bufs) {
|
89 | var full = Buffer.concat(bufs);
|
90 | var onethird = Math.floor(full.length / 3);
|
91 | var twothirds = 2 * onethird;
|
92 | return [
|
93 | full.slice(0, onethird),
|
94 | full.slice(onethird, twothirds),
|
95 | full.slice(twothirds)
|
96 | ];
|
97 | }));
|
98 | });
|