assert = require('assert'),
http = require('http');
-var testIndex = 0,
- responses = 0;
+var testIndex = 0;
+const testCount = 4 * 6;
+const responseBody = 'Hi mars!';
var server = http.createServer(function(req, res) {
- switch (testIndex++) {
+ function reply(header) {
+ switch (testIndex % 4) {
case 0:
- res.writeHead(200, { test: 'foo \r\ninvalid: bar' });
+ res.writeHead(200, { a: header, b: header });
break;
case 1:
- res.writeHead(200, { test: 'foo \ninvalid: bar' });
+ res.setHeader('a', header);
+ res.setHeader('b', header);
+ res.writeHead(200);
break;
case 2:
- res.writeHead(200, { test: 'foo \rinvalid: bar' });
+ res.setHeader('a', header);
+ res.writeHead(200, { b: header });
break;
case 3:
- res.writeHead(200, { test: 'foo \n\n\ninvalid: bar' });
+ res.setHeader('a', [header]);
+ res.writeHead(200, { b: header });
+ break;
+ default:
+ assert.fail('unreachable');
+ }
+ res.end(responseBody);
+ }
+ switch ((testIndex / 4) | 0) {
+ case 0:
+ reply('foo \r\ninvalid: bar');
+ break;
+ case 1:
+ reply('foo \ninvalid: bar');
+ break;
+ case 2:
+ reply('foo \rinvalid: bar');
+ break;
+ case 3:
+ reply('foo \n\n\ninvalid: bar');
break;
case 4:
- res.writeHead(200, { test: 'foo \r\n \r\n \r\ninvalid: bar' });
- server.close();
+ reply('foo \r\n \r\n \r\ninvalid: bar');
+ break;
+ case 5:
+ reply('foo \r \n \r \n \r \ninvalid: bar');
break;
default:
assert(false);
}
- res.end('Hi mars!');
+ if (++testIndex === testCount) {
+ server.close();
+ }
});
-server.listen(common.PORT, function() {
- for (var i = 0; i < 5; i++) {
- var req = http.get({ port: common.PORT, path: '/' }, function(res) {
- assert.strictEqual(res.headers.test, 'foo invalid: bar');
+server.listen(common.PORT, common.mustCall(function() {
+ for (var i = 0; i < testCount; i++) {
+ http.get({ port: common.PORT, path: '/' }, common.mustCall(function(res) {
+ assert.strictEqual(res.headers.a, 'foo invalid: bar');
+ assert.strictEqual(res.headers.b, 'foo invalid: bar');
+ assert.strictEqual(res.headers.foo, undefined);
assert.strictEqual(res.headers.invalid, undefined);
- responses++;
+ var data = '';
+ res.setEncoding('utf8');
+ res.on('data', function(s) { data += s; });
+ res.on('end', common.mustCall(function() {
+ assert.equal(data, responseBody);
+ }));
res.resume();
- });
+ }));
}
-});
-
-process.on('exit', function() {
- assert.strictEqual(responses, 5);
-});
+}));