11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_ciconst common = require('../common');
31cb0ef41Sopenharmony_ciconst assert = require('assert');
41cb0ef41Sopenharmony_ciconst http = require('http');
51cb0ef41Sopenharmony_ciconst net = require('net');
61cb0ef41Sopenharmony_ciconst dc = require('diagnostics_channel');
71cb0ef41Sopenharmony_ci
81cb0ef41Sopenharmony_ciconst isHTTPServer = (server) => server instanceof http.Server;
91cb0ef41Sopenharmony_ciconst isIncomingMessage = (object) => object instanceof http.IncomingMessage;
101cb0ef41Sopenharmony_ciconst isOutgoingMessage = (object) => object instanceof http.OutgoingMessage;
111cb0ef41Sopenharmony_ciconst isNetSocket = (socket) => socket instanceof net.Socket;
121cb0ef41Sopenharmony_ci
131cb0ef41Sopenharmony_cidc.subscribe('http.client.request.start', common.mustCall(({ request }) => {
141cb0ef41Sopenharmony_ci  assert.strictEqual(isOutgoingMessage(request), true);
151cb0ef41Sopenharmony_ci}));
161cb0ef41Sopenharmony_ci
171cb0ef41Sopenharmony_cidc.subscribe('http.client.response.finish', common.mustCall(({
181cb0ef41Sopenharmony_ci  request,
191cb0ef41Sopenharmony_ci  response
201cb0ef41Sopenharmony_ci}) => {
211cb0ef41Sopenharmony_ci  assert.strictEqual(isOutgoingMessage(request), true);
221cb0ef41Sopenharmony_ci  assert.strictEqual(isIncomingMessage(response), true);
231cb0ef41Sopenharmony_ci}));
241cb0ef41Sopenharmony_ci
251cb0ef41Sopenharmony_cidc.subscribe('http.server.request.start', common.mustCall(({
261cb0ef41Sopenharmony_ci  request,
271cb0ef41Sopenharmony_ci  response,
281cb0ef41Sopenharmony_ci  socket,
291cb0ef41Sopenharmony_ci  server,
301cb0ef41Sopenharmony_ci}) => {
311cb0ef41Sopenharmony_ci  assert.strictEqual(isIncomingMessage(request), true);
321cb0ef41Sopenharmony_ci  assert.strictEqual(isOutgoingMessage(response), true);
331cb0ef41Sopenharmony_ci  assert.strictEqual(isNetSocket(socket), true);
341cb0ef41Sopenharmony_ci  assert.strictEqual(isHTTPServer(server), true);
351cb0ef41Sopenharmony_ci}));
361cb0ef41Sopenharmony_ci
371cb0ef41Sopenharmony_cidc.subscribe('http.server.response.finish', common.mustCall(({
381cb0ef41Sopenharmony_ci  request,
391cb0ef41Sopenharmony_ci  response,
401cb0ef41Sopenharmony_ci  socket,
411cb0ef41Sopenharmony_ci  server,
421cb0ef41Sopenharmony_ci}) => {
431cb0ef41Sopenharmony_ci  assert.strictEqual(isIncomingMessage(request), true);
441cb0ef41Sopenharmony_ci  assert.strictEqual(isOutgoingMessage(response), true);
451cb0ef41Sopenharmony_ci  assert.strictEqual(isNetSocket(socket), true);
461cb0ef41Sopenharmony_ci  assert.strictEqual(isHTTPServer(server), true);
471cb0ef41Sopenharmony_ci}));
481cb0ef41Sopenharmony_ci
491cb0ef41Sopenharmony_ciconst server = http.createServer(common.mustCall((req, res) => {
501cb0ef41Sopenharmony_ci  res.end('done');
511cb0ef41Sopenharmony_ci}));
521cb0ef41Sopenharmony_ci
531cb0ef41Sopenharmony_ciserver.listen(() => {
541cb0ef41Sopenharmony_ci  const { port } = server.address();
551cb0ef41Sopenharmony_ci  http.get(`http://localhost:${port}`, (res) => {
561cb0ef41Sopenharmony_ci    res.resume();
571cb0ef41Sopenharmony_ci    res.on('end', () => {
581cb0ef41Sopenharmony_ci      server.close();
591cb0ef41Sopenharmony_ci    });
601cb0ef41Sopenharmony_ci  });
611cb0ef41Sopenharmony_ci});
62