d6bbbdda75
* 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 |
||
---|---|---|
.. | ||
blob_test.ts | ||
body_test.ts | ||
buffer_test.ts | ||
build_test.ts | ||
chmod_test.ts | ||
chown_test.ts | ||
console_test.ts | ||
copy_file_test.ts | ||
custom_event_test.ts | ||
dir_test.ts | ||
dispatch_json_test.ts | ||
dispatch_minimal_test.ts | ||
dom_iterable_test.ts | ||
error_stack_test.ts | ||
event_target_test.ts | ||
event_test.ts | ||
fetch_test.ts | ||
file_test.ts | ||
files_test.ts | ||
form_data_test.ts | ||
format_error_test.ts | ||
fs_events_test.ts | ||
get_random_values_test.ts | ||
globals_test.ts | ||
headers_test.ts | ||
internals_test.ts | ||
link_test.ts | ||
location_test.ts | ||
make_temp_test.ts | ||
metrics_test.ts | ||
mkdir_test.ts | ||
net_test.ts | ||
os_test.ts | ||
performance_test.ts | ||
permissions_test.ts | ||
process_test.ts | ||
read_dir_test.ts | ||
read_file_test.ts | ||
read_link_test.ts | ||
README.md | ||
realpath_test.ts | ||
remove_test.ts | ||
rename_test.ts | ||
request_test.ts | ||
resources_test.ts | ||
signal_test.ts | ||
stat_test.ts | ||
symbols_test.ts | ||
symlink_test.ts | ||
test_util.ts | ||
testing_test.ts | ||
text_encoding_test.ts | ||
timers_test.ts | ||
tls_test.ts | ||
truncate_test.ts | ||
tty_test.ts | ||
umask_test.ts | ||
unit_test_runner.ts | ||
unit_tests.ts | ||
url_search_params_test.ts | ||
url_test.ts | ||
utime_test.ts | ||
version_test.ts | ||
write_file_test.ts |
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