• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3const assert = require('assert');
4
5const http = require('http');
6const OutgoingMessage = http.OutgoingMessage;
7const ClientRequest = http.ClientRequest;
8const ServerResponse = http.ServerResponse;
9
10assert.strictEqual(
11  typeof ClientRequest.prototype._implicitHeader, 'function');
12assert.strictEqual(
13  typeof ServerResponse.prototype._implicitHeader, 'function');
14
15// validateHeader
16assert.throws(() => {
17  const outgoingMessage = new OutgoingMessage();
18  outgoingMessage.setHeader();
19}, {
20  code: 'ERR_INVALID_HTTP_TOKEN',
21  name: 'TypeError',
22  message: 'Header name must be a valid HTTP token ["undefined"]'
23});
24
25assert.throws(() => {
26  const outgoingMessage = new OutgoingMessage();
27  outgoingMessage.setHeader('test');
28}, {
29  code: 'ERR_HTTP_INVALID_HEADER_VALUE',
30  name: 'TypeError',
31  message: 'Invalid value "undefined" for header "test"'
32});
33
34assert.throws(() => {
35  const outgoingMessage = new OutgoingMessage();
36  outgoingMessage.setHeader(404);
37}, {
38  code: 'ERR_INVALID_HTTP_TOKEN',
39  name: 'TypeError',
40  message: 'Header name must be a valid HTTP token ["404"]'
41});
42
43assert.throws(() => {
44  const outgoingMessage = new OutgoingMessage();
45  outgoingMessage.setHeader.call({ _header: 'test' }, 'test', 'value');
46}, {
47  code: 'ERR_HTTP_HEADERS_SENT',
48  name: 'Error',
49  message: 'Cannot set headers after they are sent to the client'
50});
51
52assert.throws(() => {
53  const outgoingMessage = new OutgoingMessage();
54  outgoingMessage.setHeader('200', 'あ');
55}, {
56  code: 'ERR_INVALID_CHAR',
57  name: 'TypeError',
58  message: 'Invalid character in header content ["200"]'
59});
60
61// write
62{
63  const outgoingMessage = new OutgoingMessage();
64
65  outgoingMessage.on('error', common.expectsError({
66    code: 'ERR_METHOD_NOT_IMPLEMENTED',
67    name: 'Error',
68    message: 'The _implicitHeader() method is not implemented'
69  }));
70
71  outgoingMessage.write('');
72}
73
74assert(OutgoingMessage.prototype.write.call({ _header: 'test' }));
75
76assert.throws(() => {
77  const outgoingMessage = new OutgoingMessage();
78  outgoingMessage.write.call({ _header: 'test', _hasBody: 'test' });
79}, {
80  code: 'ERR_INVALID_ARG_TYPE',
81  name: 'TypeError',
82  message: 'The first argument must be of type string or an instance of ' +
83           'Buffer or Uint8Array. Received undefined'
84});
85
86assert.throws(() => {
87  const outgoingMessage = new OutgoingMessage();
88  outgoingMessage.write.call({ _header: 'test', _hasBody: 'test' }, 1);
89}, {
90  code: 'ERR_INVALID_ARG_TYPE',
91  name: 'TypeError',
92  message: 'The first argument must be of type string or an instance of ' +
93           'Buffer or Uint8Array. Received type number (1)'
94});
95
96// addTrailers()
97// The `Error` comes from the JavaScript engine so confirm that it is a
98// `TypeError` but do not check the message. It will be different in different
99// JavaScript engines.
100assert.throws(() => {
101  const outgoingMessage = new OutgoingMessage();
102  outgoingMessage.addTrailers();
103}, TypeError);
104
105assert.throws(() => {
106  const outgoingMessage = new OutgoingMessage();
107  outgoingMessage.addTrailers({ 'あ': 'value' });
108}, {
109  code: 'ERR_INVALID_HTTP_TOKEN',
110  name: 'TypeError',
111  message: 'Trailer name must be a valid HTTP token ["あ"]'
112});
113
114assert.throws(() => {
115  const outgoingMessage = new OutgoingMessage();
116  outgoingMessage.addTrailers({ 404: 'あ' });
117}, {
118  code: 'ERR_INVALID_CHAR',
119  name: 'TypeError',
120  message: 'Invalid character in trailer content ["404"]'
121});
122