// Spec documentation http://httpwg.github.io/specs/rfc7231.html#header.expect 'use strict'; const common = require('../common'); const assert = require('assert'); const http = require('http'); const tests = [417, 417]; let testsComplete = 0; let testIdx = 0; const s = http.createServer((req, res) => { throw new Error('this should never be executed'); }); s.listen(0, nextTest); function nextTest() { const options = { port: s.address().port, headers: { 'Expect': 'meoww' } }; if (testIdx === tests.length) { return s.close(); } const test = tests[testIdx]; if (testIdx > 0) { s.on('checkExpectation', common.mustCall((req, res) => { res.statusCode = 417; res.end(); })); } http.get(options, (response) => { console.log(`client: expected status: ${test}`); console.log(`client: statusCode: ${response.statusCode}`); assert.strictEqual(response.statusCode, test); assert.strictEqual(response.statusMessage, 'Expectation Failed'); response.on('end', () => { testsComplete++; testIdx++; nextTest(); }); response.resume(); }); } process.on('exit', () => { assert.strictEqual(testsComplete, 2); });