response_stream_spec.js
3.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
var should = require('should'),
needle = require('./../'),
http = require('http'),
stream = require('stream'),
fs = require('fs'),
port = 11111,
server;
describe('response streams', function() {
describe('when the server sends back json', function(){
before(function() {
server = http.createServer(function(req, res) {
res.setHeader('Content-Type', 'application/json')
res.end('{"foo":"bar"}')
}).listen(port);
});
after(function() {
server.close();
})
describe('and the client uses streams', function(){
it('should create a proper streams2 stream', function(done) {
var stream = needle.get('localhost:' + port)
// newer node versions set this to null instead of false
var bool = !!stream._readableState.flowing;
should.equal(false, bool);
var readableCalled = false;
stream.on('readable', function() {
readableCalled = true;
})
stream.on('done', function() {
readableCalled.should.be.true;
done();
});
stream.resume()
})
it('emits a single data item which is our JSON object', function(done) {
var stream = needle.get('localhost:' + port)
var chunks = [];
stream.on('readable', function () {
while (chunk = this.read()) {
chunk.should.be.an.Object;
chunks.push(chunk);
}
})
stream.on('done', function () {
chunks.should.have.length(1)
chunks[0].should.have.property('foo', 'bar');
done();
});
})
it('emits a raw buffer if we do not want to parse JSON', function(done) {
var stream = needle.get('localhost:' + port, { parse: false })
var chunks = [];
stream.on('readable', function () {
while (chunk = this.read()) {
Buffer.isBuffer(chunk).should.be.true;
chunks.push(chunk);
}
})
stream.on('done', function() {
var body = Buffer.concat(chunks).toString();
body.should.equal('{"foo":"bar"}')
done();
});
})
})
})
describe('when the server sends back what was posted to it', function () {
var file = 'asdf.txt';
before(function(done){
server = http.createServer(function(req, res) {
res.setHeader('Content-Type', 'application/octet')
req.pipe(res);
}).listen(port);
fs.writeFile(file, 'contents of stream', done);
});
after(function(done){
server.close();
fs.unlink(file, done);
})
it('can PUT a stream', function (done) {
var stream = needle.put('localhost:' + port, fs.createReadStream(file), { stream: true });
var chunks = [];
stream.on('readable', function () {
while (chunk = this.read()) {
Buffer.isBuffer(chunk).should.be.true;
chunks.push(chunk);
}
})
stream.on('end', function () {
var body = Buffer.concat(chunks).toString();
body.should.equal('contents of stream')
done();
});
});
it('can PATCH a stream', function (done) {
var stream = needle.patch('localhost:' + port, fs.createReadStream(file), { stream: true });
var chunks = [];
stream.on('readable', function () {
while (chunk = this.read()) {
Buffer.isBuffer(chunk).should.be.true;
chunks.push(chunk);
}
})
stream.on('end', function () {
var body = Buffer.concat(chunks).toString();
body.should.equal('contents of stream')
done();
});
});
})
})