1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-23 15:16:54 -05:00
denoland-deno/cli/tests/unit
Matt Mastracci 576d0db372
fix(ext/http): ensure request body resource lives as long as response is alive (#20206)
Deno.serve's fast streaming implementation was not keeping the request
body resource ID alive. We were taking the `Rc<Resource>` from the
resource table during the response, so a hairpin duplex response that
fed back the request body would work.

However, if any JS code attempted to read from the request body (which
requires the resource ID to be valid), the response would fail with a
difficult-to-diagnose "EOF" error.

This was affecting more complex duplex uses of `Deno.fetch` (though as
far as I can tell was unreported).

Simple test:

```ts
        const reader = request.body.getReader();
        return new Response(
          new ReadableStream({
            async pull(controller) {
              const { done, value } = await reader.read();
              if (done) {
                controller.close();
              } else {
                controller.enqueue(value);
              }
            },
          }),
```

And then attempt to use the stream in duplex mode:

```ts

async function testDuplex(
  reader: ReadableStreamDefaultReader<Uint8Array>,
  writable: WritableStreamDefaultWriter<Uint8Array>,
) {
  await writable.write(new Uint8Array([1]));
  const chunk1 = await reader.read();
  assert(!chunk1.done);
  assertEquals(chunk1.value, new Uint8Array([1]));
  await writable.write(new Uint8Array([2]));
  const chunk2 = await reader.read();
  assert(!chunk2.done);
  assertEquals(chunk2.value, new Uint8Array([2]));
  await writable.close();
  const chunk3 = await reader.read();
  assert(chunk3.done);
}
```

In older versions of Deno, this would just lock up. I believe after
23ff0e722e, it started throwing a more
explicit error:

```
httpServerStreamDuplexJavascript => ./cli/tests/unit/serve_test.ts:1339:6
error: TypeError: request or response body error: error reading a body from connection: Connection reset by peer (os error 54)
    at async Object.pull (ext:deno_web/06_streams.js:810:27)
```
2023-08-21 01:35:26 +00:00
..
abort_controller_test.ts chore: add copyright_checker tool and add the missing copyright (#17285) 2023-01-13 16:51:32 +09:00
blob_test.ts chore: update std submodule and its imports (#17408) 2023-01-15 21:09:26 +01:00
body_test.ts fix(fetch): Correctly decode multipart/form-data names and filenames (#19145) 2023-05-16 17:49:35 +02:00
broadcast_channel_test.ts fix: check if BroadcastChannel is open before sending (#17366) 2023-01-12 13:43:36 +01:00
buffer_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
build_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
cache_api_test.ts fix(dts): make globals available on globalThis (#19438) 2023-07-03 14:36:55 -04:00
chmod_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
chown_test.ts chore: fix typos (#19572) 2023-06-26 09:10:27 -04:00
command_test.ts fix(runtime): print process name in case of spawn error (#19855) 2023-07-19 01:24:30 +02:00
console_test.ts fix(console): correct the parseCssColor algorithm (#19645) 2023-06-28 19:46:30 -06:00
copy_file_test.ts fix(runtime/fs): preserve permissions in copyFileSync for macOS (#17412) 2023-01-14 13:45:30 +00:00
custom_event_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
dir_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
dom_exception_test.ts chore: add copyright_checker tool and add the missing copyright (#17285) 2023-01-13 16:51:32 +09:00
error_stack_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
error_test.ts fix: add WouldBlock error (#17339) 2023-02-12 23:14:33 +01:00
esnext_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
event_target_test.ts fix(ext/web): Copy EventTarget list before dispatch (#19360) 2023-06-04 18:03:44 -06:00
event_test.ts perf(ext/event): optimize Event constructor (#20181) 2023-08-17 10:35:18 +02:00
fetch_test.ts fix: release ReadeableStream in fetch (#17365) 2023-08-16 14:02:15 +02:00
ffi_test.ts chore: fix typos (#19572) 2023-06-26 09:10:27 -04:00
file_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
filereader_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
files_test.ts feat: TypeScript 5.0.2 (except decorators) (#18294) 2023-03-21 15:46:40 +00:00
flock_test.ts chore(core): fix flaky flock_test on windows (#19477) 2023-06-12 20:30:29 +00:00
fs_events_test.ts chore: fix typos (#19572) 2023-06-26 09:10:27 -04:00
get_random_values_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
globals_test.ts refactor: remove Deno.core (#16881) 2023-01-24 18:54:10 +01:00
headers_test.ts fix(core): introduce SafeRegExp to primordials (#17592) 2023-03-01 08:14:16 +09:00
http_test.ts chore: use zlib-ng for flate2 (#20059) 2023-08-05 15:43:16 -06:00
internals_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
intl_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
io_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
kv_queue_undelivered_test.ts feat(kv) queue implementation (#19459) 2023-06-13 17:49:57 -07:00
kv_test.ts feat(ext/kv): key expiration (#20091) 2023-08-18 17:34:16 +08:00
link_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
make_temp_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
message_channel_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
metrics_test.ts perf(core): async op pseudo-codegen and performance work (#18887) 2023-04-30 08:50:24 +00:00
mkdir_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
navigator_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
net_test.ts fix(ext/net): fix string port number handling in listen (#19921) 2023-07-25 06:26:18 +00:00
network_interfaces_test.ts chore: add copyright_checker tool and add the missing copyright (#17285) 2023-01-13 16:51:32 +09:00
opcall_test.ts chore: Use relative paths for assert imports to avoid test flakes (#19427) 2023-06-08 18:10:37 +00:00
os_test.ts feat(runtime/os): add Deno.env.has() (#17315) 2023-01-09 20:19:55 +01:00
path_from_url_test.ts chore: add copyright_checker tool and add the missing copyright (#17285) 2023-01-13 16:51:32 +09:00
performance_test.ts chore(cli): measure performance against wall-clock (#18357) 2023-03-22 18:06:29 +00:00
permissions_test.ts feat: Add sync APIs for "Deno.permissions" (#17019) 2023-01-25 00:42:44 +01:00
process_test.ts feat(lint): add Deno.run to no-deprecated-deno-api (#18869) 2023-04-27 02:52:52 +00:00
progressevent_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
promise_hooks_test.ts refactor: remove Deno.core (#16881) 2023-01-24 18:54:10 +01:00
read_dir_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
read_file_test.ts fix(runtime): Extract error code for all OS error variants (#17958) 2023-03-19 00:01:50 +00:00
read_link_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
read_text_file_test.ts Revert "refactor: don't expose Deno[Deno.internal].core namespace" (#18881) 2023-04-28 00:37:03 +02:00
README.md chore: fix flaky netListenUnrefAndRef (#16892) 2022-12-02 12:41:52 -05:00
real_path_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
ref_unref_test.ts refactor: remove Deno.core (#16881) 2023-01-24 18:54:10 +01:00
remove_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
rename_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
request_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
resources_test.ts chore(cli): One Rust test per JS and Node unit test file (#19199) 2023-05-22 13:35:59 -06:00
response_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
serve_test.ts fix(ext/http): ensure request body resource lives as long as response is alive (#20206) 2023-08-21 01:35:26 +00:00
signal_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
stat_test.ts refactor(core): Extract deno_core (#19658) 2023-07-02 00:00:14 +00:00
stdio_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
streams_test.ts feat(ext/web): resourceForReadableStream (#20180) 2023-08-17 07:52:37 -06:00
structured_clone_test.ts chore: add copyright_checker tool and add the missing copyright (#17285) 2023-01-13 16:51:32 +09:00
symlink_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
sync_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
test_util.ts feat(ext/kv): key-value store (#18232) 2023-03-22 12:13:24 +08:00
testing_test.ts fix(test): allow explicit undefined for boolean test options (#18786) 2023-04-21 15:32:37 +02:00
text_encoding_test.ts chore: fix typos (#19572) 2023-06-26 09:10:27 -04:00
timers_test.ts fix(ext/timers): some timers are not resolved (#20055) 2023-08-10 04:01:35 +00:00
tls_test.ts fix(ext/net): implement a graceful error on an invalid SSL certificate (#20157) 2023-08-15 00:11:12 +00:00
truncate_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
tty_color_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
tty_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
umask_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
url_search_params_test.ts chore: fix typos (#19572) 2023-06-26 09:10:27 -04:00
url_test.ts fix(ext/url): throw TypeError for empty argument (#18896) 2023-04-30 12:24:34 +02:00
urlpattern_test.ts fix(dts): URLPatternComponentResult groups should have possibly undefined key values (#18643) 2023-04-26 19:15:25 -04:00
utime_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
version_test.ts feat: upgrade to TypeScript 5.1.6 (#19695) 2023-07-04 00:36:35 +02:00
wasm_test.ts chore: add copyright_checker tool and add the missing copyright (#17285) 2023-01-13 16:51:32 +09:00
webcrypto_test.ts fix(ext/crypto): correctly limit ECDSA and hash algorithms (#18030) 2023-03-05 12:34:07 +00:00
websocket_test.ts fix(ext/websockets): ensure we fully send frames before close (#19484) 2023-06-13 17:16:17 +00:00
webstorage_test.ts fix(ext/webstorage): check size of inputs before insert (#18087) 2023-03-09 12:28:51 +00:00
worker_permissions_test.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
worker_types.ts chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
write_file_test.ts fix(ops): Always close cancel handles for read_async/write_async (#17736) 2023-02-11 14:19:13 +02:00
write_text_file_test.ts chore: add copyright_checker tool and add the missing copyright (#17285) 2023-01-13 16:51:32 +09:00

Deno runtime tests

Files in this directory are unit tests for Deno runtime.

Testing Deno runtime code requires checking API under different runtime permissions. To accomplish this all tests exercised are created using Deno.test() function.

import {} from "./test_util.ts";

Deno.test(function simpleTestFn(): void {
  // test code here
});

Deno.test(
  {
    ignore: Deno.build.os === "windows",
    permissions: { read: true, write: true },
  },
  function complexTestFn(): void {
    // test code here
  },
);

Running tests

There are two ways to run unit_test_runner.ts:

# Run all tests.
cargo run --bin deno -- test --allow-all --unstable --location=http://js-unit-tests/foo/bar cli/tests/unit/

# Run a specific test module
cargo run --bin deno -- test --allow-all --unstable --location=http://js-unit-tests/foo/bar cli/tests/unit/files_test.ts

Http server

target/debug/test_server is required to run when one's running unit tests. During CI it's spawned automatically, but if you want to run tests manually make sure that server is spawned otherwise there'll be cascade of test failures.