You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.8 KiB
69 lines
1.8 KiB
var test = require('tap').test;
|
|
var responseStream = require('../');
|
|
|
|
var http = require('http');
|
|
var es = require('event-stream');
|
|
var filed = require('filed');
|
|
|
|
var fs = require('fs');
|
|
var fileContents = fs.readFileSync(__dirname + '/data.txt');
|
|
|
|
test('filed response', function (t) {
|
|
t.plan(5);
|
|
|
|
var port = Math.floor(Math.random() * 5e4 + 1e4);
|
|
var server = http.createServer(function (req, res) {
|
|
filed(__dirname + '/data.txt')
|
|
.pipe(capStream())
|
|
.pipe(res)
|
|
;
|
|
});
|
|
server.listen(port);
|
|
|
|
server.on('listening', function () {
|
|
var opts = {
|
|
host : 'localhost',
|
|
port : port,
|
|
path : '/'
|
|
};
|
|
http.get(opts, function (res) {
|
|
var data = '';
|
|
res.on('data', function (buf) { data += buf });
|
|
res.on('end', function () {
|
|
t.equal(data, String(fileContents).toUpperCase());
|
|
t.equal(
|
|
Number(res.headers['content-length']),
|
|
fileContents.length
|
|
);
|
|
t.equal(
|
|
res.headers['content-type'],
|
|
'TEXT/PLAIN'
|
|
);
|
|
t.notOk(res.headers.etag);
|
|
});
|
|
});
|
|
});
|
|
|
|
t.on('end', function () {
|
|
server.close();
|
|
});
|
|
|
|
function capStream () {
|
|
var caps = es.mapSync(function (s) {
|
|
return String(s).toUpperCase()
|
|
});
|
|
var s = responseStream(caps);
|
|
t.notEqual(caps, s);
|
|
|
|
s.on('setHeader', function (args, pass) {
|
|
if (args[0] === 'content-type') {
|
|
args[1] = String(args[1]).toUpperCase();
|
|
}
|
|
if (args[0] === 'etag') {
|
|
pass();
|
|
}
|
|
});
|
|
|
|
return s;
|
|
}
|
|
});
|
|
|