1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-26 00:59:24 -05:00
denoland-deno/cli/js/tests
Bartek Iwańczuk d6bbbdda75
Update CLI for unit_test_runner.ts (#4352)
* drop server guard before unit test result check

To prevent cascading test failures when js_unit_test http server
guard is dropped before asserting that tests were successful.
This is really a band-aid and doesn't solve underlying issue with
http server.

* Update CLI for unit_test_runner.ts

* Change cli/js/tests/unit_test_runner.ts command line interface to work in 3
  modes:
  - "one-off" - run tests that match permissions of currently running
    process
  - "master" - run tests for all possible permission combinations, by
   spawning subprocesses running in "worker" mode and communicating via
   TCP socket; requires elevated permissions
  - "worker" - run tests for set of permissions provided by CLI arg;
  requires elevated permissions to setup TCP connection to "master";
  after initial setup process drops permissions to given set

* Support filtering of tests by string passed after "--" CLI arg

* Update cli/js/tests/README.md
2020-03-14 11:53:20 +01:00
..
blob_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
body_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
buffer_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
build_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
chmod_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
chown_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
console_test.ts refactor: Cleanup options object parameters (#4296) 2020-03-10 12:08:58 -04:00
copy_file_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
custom_event_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
dir_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
dispatch_json_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
dispatch_minimal_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
dom_iterable_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
error_stack_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
event_target_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
event_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
fetch_test.ts refactor: uncomment tests broken tests, use skip (#4311) 2020-03-10 16:38:02 +01:00
file_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
files_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
form_data_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
format_error_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
fs_events_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
get_random_values_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
globals_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
headers_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
internals_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
link_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
location_test.ts refactor: unit test runner communicates using TCP socket (#4336) 2020-03-13 15:57:32 +01:00
make_temp_test.ts Stricter permissions for Deno.makeTemp* (#4318) 2020-03-11 15:05:42 -04:00
metrics_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
mkdir_test.ts support permission mode in mkdir (#4286) 2020-03-11 16:14:23 -04:00
net_test.ts Add waker to StreamResource to fix hang on close bugs (#4293) 2020-03-11 18:19:24 -04:00
os_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
performance_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
permissions_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
process_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
read_dir_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
read_file_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
read_link_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
README.md Update CLI for unit_test_runner.ts (#4352) 2020-03-14 11:53:20 +01:00
realpath_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
remove_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
rename_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
request_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
resources_test.ts refactor: unit test runner communicates using TCP socket (#4336) 2020-03-13 15:57:32 +01:00
signal_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
stat_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
symbols_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
symlink_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
test_util.ts Update CLI for unit_test_runner.ts (#4352) 2020-03-14 11:53:20 +01:00
testing_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
text_encoding_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
timers_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
tls_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
truncate_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
tty_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
umask_test.ts Add Deno.umask (#4290) 2020-03-10 15:11:27 -04:00
unit_test_runner.ts Update CLI for unit_test_runner.ts (#4352) 2020-03-14 11:53:20 +01:00
unit_tests.ts refactor: unit test runner communicates using TCP socket (#4336) 2020-03-13 15:57:32 +01:00
url_search_params_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
url_test.ts refactor: uncomment tests broken tests, use skip (#4311) 2020-03-10 16:38:02 +01:00
utime_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
version_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00
write_file_test.ts reorg: move js runtime tests to cli/js/tests/ (#4250) 2020-03-10 01:06:47 +01:00

Deno runtime tests

Files in this directory are unit tests for Deno runtime.

They are run under compiled Deno binary as opposed to files in cli/js/ which are bundled and snapshotted using deno_typescript crate.

Testing Deno runtime code requires checking API under different runtime permissions (ie. running with different --allow-* flags). To accomplish this all tests exercised are created using unitTest() function.

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

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

unitTest({
    skip: Deno.build.os === "win",
    perms: { read: true, write: true },
  },
  function complexTestFn(): void {
    // test code here
  }
);

unitTest is is a wrapper function that enhances Deno.test() API in several ways:

  • ability to conditionally skip tests using UnitTestOptions.skip
  • ability to register required set of permissions for given test case using UnitTestOptions.perms
  • sanitization of resources - ensuring that tests close all opened resources preventing interference between tests
  • sanitization of async ops - ensuring that tests don't leak async ops by ensuring that all started async ops are done before test finishes

Running tests

unit_test_runner.ts is the main script used to run unit tests.

Runner discoveres required permissions combinations by loading cli/js/tests/unit_tests.ts and going through all registered instances of unitTest.

There are three ways to run unit_test_runner.ts:

  • run tests matching current process permissions
// run tests that don't require any permissions
target/debug/deno unit_test_runner.ts

// run tests with "net" permission
target/debug/deno --allow-net unit_test_runner.ts

target/debug/deno --allow-net --allow-read unit_test_runner.ts
  • run all tests - "master" mode, that spawns worker processes for each discovered permission combination:
target/debug/deno -A unit_test_runner.ts --master

By default all output of worker processes is discarded; for debug purposes --verbose flag can be provided to preserve output from worker

target/debug/deno -A unit_test_runner.ts --master --verbose
  • "worker" mode; communicates with parent using TCP socket on provided address; after initial setup drops permissions to specified set. It shouldn't be used directly, only be "master" process.
target/debug/deno -A unit_test_runner.ts --worker --addr=127.0.0.1:4500 --perms=net,write,run

Filtering

Runner supports basic test filtering by name:

target/debug/deno unit_test_runner.ts -- netAccept

target/debug/deno -A unit_test_runner.ts --master -- netAccept

Filter string must be specified after "--" argument