summaryrefslogtreecommitdiff
path: root/tests/integration/cache_tests.rs
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-02-10 13:22:13 -0700
committerGitHub <noreply@github.com>2024-02-10 20:22:13 +0000
commitf5e46c9bf2f50d66a953fa133161fc829cecff06 (patch)
tree8faf2f5831c1c7b11d842cd9908d141082c869a5 /tests/integration/cache_tests.rs
parentd2477f780630a812bfd65e3987b70c0d309385bb (diff)
chore: move cli/tests/ -> tests/ (#22369)
This looks like a massive PR, but it's only a move from cli/tests -> tests, and updates of relative paths for files. This is the first step towards aggregate all of the integration test files under tests/, which will lead to a set of integration tests that can run without the CLI binary being built. While we could leave these tests under `cli`, it would require us to keep a more complex directory structure for the various test runners. In addition, we have a lot of complexity to ignore various test files in the `cli` project itself (cargo publish exclusion rules, autotests = false, etc). And finally, the `tests/` folder will eventually house the `test_ffi`, `test_napi` and other testing code, reducing the size of the root repo directory. For easier review, the extremely large and noisy "move" is in the first commit (with no changes -- just a move), while the remainder of the changes to actual files is in the second commit.
Diffstat (limited to 'tests/integration/cache_tests.rs')
-rw-r--r--tests/integration/cache_tests.rs186
1 files changed, 186 insertions, 0 deletions
diff --git a/tests/integration/cache_tests.rs b/tests/integration/cache_tests.rs
new file mode 100644
index 000000000..2aa0f9d8b
--- /dev/null
+++ b/tests/integration/cache_tests.rs
@@ -0,0 +1,186 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+use test_util::env_vars_for_npm_tests;
+use test_util::TestContext;
+use test_util::TestContextBuilder;
+
+itest!(_036_import_map_fetch {
+ args:
+ "cache --quiet --reload --import-map=import_maps/import_map.json import_maps/test.ts",
+ output: "cache/036_import_map_fetch.out",
+ });
+
+itest!(_037_fetch_multiple {
+ args: "cache --reload --check=all run/fetch/test.ts run/fetch/other.ts",
+ http_server: true,
+ output: "cache/037_fetch_multiple.out",
+});
+
+itest!(_095_cache_with_bare_import {
+ args: "cache cache/095_cache_with_bare_import.ts",
+ output: "cache/095_cache_with_bare_import.ts.out",
+ exit_code: 1,
+});
+
+itest!(cache_extensionless {
+ args: "cache --reload --check=all http://localhost:4545/subdir/no_js_ext",
+ output: "cache/cache_extensionless.out",
+ http_server: true,
+});
+
+itest!(cache_random_extension {
+ args:
+ "cache --reload --check=all http://localhost:4545/subdir/no_js_ext@1.0.0",
+ output: "cache/cache_random_extension.out",
+ http_server: true,
+});
+
+itest!(performance_stats {
+ args: "cache --reload --check=all --log-level debug run/002_hello.ts",
+ output: "cache/performance_stats.out",
+});
+
+itest!(redirect_cache {
+ http_server: true,
+ args:
+ "cache --reload --check=all http://localhost:4548/subdir/redirects/a.ts",
+ output: "cache/redirect_cache.out",
+});
+
+itest!(ignore_require {
+ args: "cache --reload --no-check cache/ignore_require.js",
+ output_str: Some(""),
+ exit_code: 0,
+});
+
+// This test only runs on linux, because it hardcodes the XDG_CACHE_HOME env var
+// which is only used on linux.
+#[cfg(target_os = "linux")]
+#[test]
+fn xdg_cache_home_dir() {
+ let context = TestContext::with_http_server();
+ let deno_dir = context.temp_dir();
+ let xdg_cache_home = deno_dir.path().join("cache");
+ context
+ .new_command()
+ .env_remove("HOME")
+ .env_remove("DENO_DIR")
+ .env_clear()
+ .env("XDG_CACHE_HOME", &xdg_cache_home)
+ .args(
+ "cache --reload --no-check http://localhost:4548/subdir/redirects/a.ts",
+ )
+ .run()
+ .skip_output_check()
+ .assert_exit_code(0);
+ assert!(xdg_cache_home.read_dir().count() > 0);
+}
+
+itest!(check_local_by_default {
+ args: "cache --quiet cache/check_local_by_default.ts",
+ output: "cache/check_local_by_default.out",
+ http_server: true,
+});
+
+itest!(check_local_by_default2 {
+ args: "cache --quiet cache/check_local_by_default2.ts",
+ output: "cache/check_local_by_default2.out",
+ http_server: true,
+});
+
+itest!(json_import {
+ // should not error
+ args: "cache --quiet cache/json_import/main.ts",
+});
+
+itest!(package_json_basic {
+ args: "cache main.ts",
+ output: "package_json/basic/main.cache.out",
+ envs: env_vars_for_npm_tests(),
+ http_server: true,
+ cwd: Some("package_json/basic"),
+ copy_temp_dir: Some("package_json/basic"),
+ exit_code: 0,
+});
+
+#[test]
+fn cache_matching_package_json_dep_should_not_install_all() {
+ let context = TestContextBuilder::for_npm().use_temp_cwd().build();
+ let temp_dir = context.temp_dir();
+ temp_dir.write(
+ "package.json",
+ r#"{ "dependencies": { "@types/node": "18.8.2", "@denotest/esm-basic": "*" } }"#,
+ );
+ let output = context
+ .new_command()
+ .args("cache npm:@types/node@18.8.2")
+ .run();
+ output.assert_matches_text(concat!(
+ "Download http://localhost:4545/npm/registry/@types/node\n",
+ "Download http://localhost:4545/npm/registry/@types/node/node-18.8.2.tgz\n",
+ "Initialize @types/node@18.8.2\n",
+ ));
+}
+
+// Regression test for https://github.com/denoland/deno/issues/17299
+#[test]
+fn cache_put_overwrite() {
+ let test_context = TestContextBuilder::new().use_temp_cwd().build();
+ let temp_dir = test_context.temp_dir();
+
+ let part_one = r#"
+ const req = new Request('http://localhost/abc');
+ const res1 = new Response('res1');
+ const res2 = new Response('res2');
+
+ const cache = await caches.open('test');
+
+ await cache.put(req, res1);
+ await cache.put(req, res2);
+
+ const res = await cache.match(req).then((res) => res?.text());
+ console.log(res);
+ "#;
+
+ let part_two = r#"
+ const req = new Request("http://localhost/abc");
+ const res1 = new Response("res1");
+ const res2 = new Response("res2");
+
+ const cache = await caches.open("test");
+
+ // Swap the order of put() calls.
+ await cache.put(req, res2);
+ await cache.put(req, res1);
+
+ const res = await cache.match(req).then((res) => res?.text());
+ console.log(res);
+ "#;
+
+ temp_dir.write("cache_put.js", part_one);
+
+ let run_command =
+ test_context.new_command().args_vec(["run", "cache_put.js"]);
+
+ let output = run_command.run();
+ output.assert_matches_text("res2\n");
+ output.assert_exit_code(0);
+
+ // The wait will surface the bug as we check last written time
+ // when we overwrite a response.
+ std::thread::sleep(std::time::Duration::from_secs(1));
+
+ temp_dir.write("cache_put.js", part_two);
+ let output = run_command.run();
+ output.assert_matches_text("res1\n");
+ output.assert_exit_code(0);
+}
+
+#[test]
+fn loads_type_graph() {
+ let output = TestContext::default()
+ .new_command()
+ .args("cache --reload -L debug run/type_directives_js_main.js")
+ .run();
+ output.assert_matches_text("[WILDCARD] - FileFetcher::fetch() - specifier: file:///[WILDCARD]/subdir/type_reference.d.ts[WILDCARD]");
+}