deno/tests/unit_node/mod.rs
David Sherret 0a162aaecc
ci: upload test results as artifacts (#31686)
This will allow us to track slow and flaky tests.
2025-12-22 12:49:29 -05:00

102 lines
2.9 KiB
Rust

// Copyright 2018-2025 the Deno authors. MIT license.
use std::num::NonZeroUsize;
use std::sync::Arc;
use file_test_runner::RunOptions;
use file_test_runner::TestResult;
use file_test_runner::collection::CollectOptions;
use file_test_runner::collection::CollectedTest;
use file_test_runner::collection::collect_tests_or_exit;
use file_test_runner::collection::strategies::TestPerFileCollectionStrategy;
use test_util as util;
use test_util::test_runner::FlakyTestTracker;
use test_util::test_runner::Parallelism;
use test_util::test_runner::flaky_test_ci;
use test_util::tests_path;
use util::deno_config_path;
use util::env_vars_for_npm_tests;
fn main() {
let category = collect_tests_or_exit(CollectOptions {
base: tests_path().join("unit_node").to_path_buf(),
strategy: Box::new(TestPerFileCollectionStrategy {
file_pattern: Some(".*_test\\.ts$".to_string()),
}),
filter_override: None,
});
if category.is_empty() {
return;
}
let parallelism = Parallelism::default();
let flaky_test_tracker = Arc::new(FlakyTestTracker::default());
let _g = util::http_server();
// Run the crypto category tests separately without concurrency because they run in Deno with --parallel
let (crypto_category, category) =
category.partition(|test| test.name.contains("::crypto::"));
let reporter = test_util::test_runner::get_test_reporter(
"unit_node",
flaky_test_tracker.clone(),
);
file_test_runner::run_tests(
&category,
RunOptions {
parallelism: parallelism.max_parallelism(),
reporter: reporter.clone(),
},
{
let flaky_test_tracker = flaky_test_tracker.clone();
move |test| {
flaky_test_ci(
&test.name,
&flaky_test_tracker,
Some(&parallelism),
|| run_test(test),
)
}
},
);
file_test_runner::run_tests(
&crypto_category,
RunOptions {
parallelism: NonZeroUsize::new(1).unwrap(),
reporter: reporter.clone(),
},
move |test| {
flaky_test_ci(&test.name, &flaky_test_tracker, None, || run_test(test))
},
);
}
fn run_test(test: &CollectedTest) -> TestResult {
let mut deno = util::deno_cmd()
.disable_diagnostic_logging()
.current_dir(util::root_path())
.arg("test")
.arg("--config")
.arg(deno_config_path())
.arg("--no-lock")
.arg("--unstable-net")
.arg("-A");
// Some tests require the root CA cert file to be loaded.
if test.name.ends_with("::http2_test")
|| test.name.ends_with("::http_test")
|| test.name.ends_with("::https_test")
{
deno = deno.arg("--cert=./tests/testdata/tls/RootCA.pem");
}
// Parallel tests for crypto
if test.name.contains("::crypto::") {
deno = deno.arg("--parallel");
}
deno
.arg(test.path.clone())
.envs(env_vars_for_npm_tests())
.piped_output()
.spawn()
.expect("failed to spawn script")
.wait_to_test_result(&test.name)
}