summaryrefslogtreecommitdiff
path: root/std/examples/tests/echo_server_test.ts
blob: 6bfcbbc3da0a891678e1389d63f276f99b389388 (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
45
46
47
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
import { assertStrictEquals, assertNotEquals } from "../../testing/asserts.ts";
import { BufReader, ReadLineResult } from "../../io/bufio.ts";
import { resolve, dirname, fromFileUrl } from "../../path/mod.ts";

const moduleDir = resolve(dirname(fromFileUrl(import.meta.url)), "..");

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

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

    assertNotEquals(message, null);
    assertStrictEquals(
      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, null);

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

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