summaryrefslogtreecommitdiff
path: root/std/examples/tests/echo_server_test.ts
blob: 20fd7479c24894f2f999096142a0345f9366ddb5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
import { assertStrictEq, assertNotEquals } from "../../testing/asserts.ts";
import { BufReader, ReadLineResult } from "../../io/bufio.ts";

Deno.test("[examples/echo_server]", async () => {
  const encoder = new TextEncoder();
  const decoder = new TextDecoder();
  const process = Deno.run({
    args: [Deno.execPath(), "--allow-net", "echo_server.ts"],
    cwd: "examples",
    stdout: "piped"
  });

  let conn: Deno.Conn | undefined;
  try {
    const processReader = new BufReader(process.stdout!);
    const message = await processReader.readLine();

    assertNotEquals(message, Deno.EOF);
    assertStrictEq(
      decoder.decode((message as ReadLineResult).line).trim(),
      "Listening on 0.0.0.0:8080"
    );

    conn = await Deno.connect({ hostname: "127.0.0.1", port: 8080 });
    const connReader = new BufReader(conn);

    await conn.write(encoder.encode("Hello echo_server\n"));
    const result = await connReader.readLine();

    assertNotEquals(result, Deno.EOF);

    const actualResponse = decoder
      .decode((result as ReadLineResult).line)
      .trim();
    const expectedResponse = "Hello echo_server";

    assertStrictEq(actualResponse, expectedResponse);
  } finally {
    conn?.close();
    process.stdout!.close();
    process.close();
  }
});