summaryrefslogtreecommitdiff
path: root/cli/tests
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-11-02 16:32:30 +0100
committerGitHub <noreply@github.com>2022-11-02 16:32:30 +0100
commit5dea510b021d78a2c9b6aef9462ae6f4e0fd527a (patch)
tree728b3663f2852fae25df72ab2599c3cbebfc8ac9 /cli/tests
parent630abb58b08827e63e56f519bf59a84c3283ab23 (diff)
fix(lock): autodiscovery of lockfile (#16498)
This commit adds autodiscovery of lockfile. This only happens if Deno discovers the configuration file (either "deno.json" or "deno.jsonc"). In such case Deno tries to load "deno.lock" file that sits next to the configuration file, or creates one for user if the lockfile doesn't exist yet. As a consequence, "--lock" and "--lock-write" flags had been updated. "--lock" no longer requires a value, if one is not provided, it defaults to "./deno.lock" resolved from the current working directory. "--lock-write" description was updated to say that it forces to overwrite a lockfile. Autodiscovery is currently not handled by the LSP.
Diffstat (limited to 'cli/tests')
-rw-r--r--cli/tests/integration/npm_tests.rs48
-rw-r--r--cli/tests/integration/run_tests.rs13
-rw-r--r--cli/tests/testdata/jsx/deno.lock7
-rw-r--r--cli/tests/testdata/npm/lock_file/main.out11
-rw-r--r--cli/tests/testdata/run/auto_discover_lockfile/deno.json3
-rw-r--r--cli/tests/testdata/run/auto_discover_lockfile/deno.lock7
-rw-r--r--cli/tests/testdata/run/auto_discover_lockfile/main.out5
-rw-r--r--cli/tests/testdata/run/auto_discover_lockfile/main.ts1
-rw-r--r--cli/tests/testdata/run/config_types/deno.lock6
-rw-r--r--cli/tests/testdata/run/lock_write_requires_lock.out3
10 files changed, 92 insertions, 12 deletions
diff --git a/cli/tests/integration/npm_tests.rs b/cli/tests/integration/npm_tests.rs
index a5b443171..72af72a76 100644
--- a/cli/tests/integration/npm_tests.rs
+++ b/cli/tests/integration/npm_tests.rs
@@ -998,6 +998,54 @@ fn lock_file_missing_top_level_package() {
);
}
+#[test]
+fn auto_discover_lock_file() {
+ let _server = http_server();
+
+ let deno_dir = util::new_deno_dir();
+ let temp_dir = util::TempDir::new();
+
+ // write empty config file
+ temp_dir.write("deno.json", "{}");
+
+ // write a lock file with borked integrity
+ let lock_file_content = r#"{
+ "version": "2",
+ "remote": {},
+ "npm": {
+ "specifiers": { "@denotest/bin": "@denotest/bin@1.0.0" },
+ "packages": {
+ "@denotest/bin@1.0.0": {
+ "integrity": "sha512-foobar",
+ "dependencies": {}
+ }
+ }
+ }
+ }"#;
+ temp_dir.write("deno.lock", lock_file_content);
+
+ let deno = util::deno_cmd_with_deno_dir(&deno_dir)
+ .current_dir(temp_dir.path())
+ .arg("run")
+ .arg("--unstable")
+ .arg("-A")
+ .arg("npm:@denotest/bin/cli-esm")
+ .arg("test")
+ .envs(env_vars())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .spawn()
+ .unwrap();
+ let output = deno.wait_with_output().unwrap();
+ assert!(!output.status.success());
+ assert_eq!(output.status.code(), Some(10));
+
+ let stderr = String::from_utf8(output.stderr).unwrap();
+ assert!(stderr.contains(
+ "Integrity check failed for npm package: \"@denotest/bin@1.0.0\""
+ ));
+}
+
fn env_vars_no_sync_download() -> Vec<(String, String)> {
vec![
("DENO_NODE_COMPAT_URL".to_string(), util::std_file_url()),
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs
index 99e122c69..68d15bfd9 100644
--- a/cli/tests/integration/run_tests.rs
+++ b/cli/tests/integration/run_tests.rs
@@ -609,12 +609,6 @@ itest!(private_field_presence_no_check {
output: "run/private_field_presence.ts.out",
});
-itest!(lock_write_requires_lock {
- args: "run --lock-write some_file.ts",
- output: "run/lock_write_requires_lock.out",
- exit_code: 1,
-});
-
// TODO(bartlomieju): remove --unstable once Deno.spawn is stabilized
itest!(lock_write_fetch {
args:
@@ -3634,3 +3628,10 @@ fn websocket_server_idletimeout() {
assert!(child.wait().unwrap().success());
}
+
+itest!(auto_discover_lockfile {
+ args: "run run/auto_discover_lockfile/main.ts",
+ output: "run/auto_discover_lockfile/main.out",
+ http_server: true,
+ exit_code: 10,
+});
diff --git a/cli/tests/testdata/jsx/deno.lock b/cli/tests/testdata/jsx/deno.lock
new file mode 100644
index 000000000..64429f30a
--- /dev/null
+++ b/cli/tests/testdata/jsx/deno.lock
@@ -0,0 +1,7 @@
+{
+ "version": "2",
+ "remote": {
+ "http://localhost:4545/jsx/jsx-dev-runtime": "7cac3d940791b3c8e671b24f9678ca37d87d40487ed2b3720a2a40891aa6173d",
+ "http://localhost:4545/jsx/jsx-runtime": "7cac3d940791b3c8e671b24f9678ca37d87d40487ed2b3720a2a40891aa6173d"
+ }
+}
diff --git a/cli/tests/testdata/npm/lock_file/main.out b/cli/tests/testdata/npm/lock_file/main.out
index 4c034d03b..b8447bee6 100644
--- a/cli/tests/testdata/npm/lock_file/main.out
+++ b/cli/tests/testdata/npm/lock_file/main.out
@@ -1,4 +1,9 @@
Download [WILDCARD]
-error: Integrity check failed for npm package: "@babel/parser@7.19.0".
- Cache has "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==" and lockfile has "sha512-foobar!".
- Use "--lock-write" flag to update the lockfile.
+error: Integrity check failed for npm package: "@babel/parser@7.19.0". Unable to verify that the package
+is the same as when the lockfile was generated.
+
+This could be caused by:
+ * the lock file may be corrupt
+ * the source itself may be corrupt
+
+Use "--lock-write" flag to regenerate the lockfile at "[WILDCARD]lock.json".
diff --git a/cli/tests/testdata/run/auto_discover_lockfile/deno.json b/cli/tests/testdata/run/auto_discover_lockfile/deno.json
new file mode 100644
index 000000000..90faa728a
--- /dev/null
+++ b/cli/tests/testdata/run/auto_discover_lockfile/deno.json
@@ -0,0 +1,3 @@
+{
+ "tasks": {}
+}
diff --git a/cli/tests/testdata/run/auto_discover_lockfile/deno.lock b/cli/tests/testdata/run/auto_discover_lockfile/deno.lock
new file mode 100644
index 000000000..059f66789
--- /dev/null
+++ b/cli/tests/testdata/run/auto_discover_lockfile/deno.lock
@@ -0,0 +1,7 @@
+{
+ "version": "2",
+ "remote": {
+ "http://localhost:4545/subdir/mod2.ts": "cae1d3e9f3c38cd415ff52dff854be8f3d17d35f8d7b3d285e813fb0f6393a2f",
+ "http://localhost:4545/subdir/print_hello.ts": "foobar"
+ }
+}
diff --git a/cli/tests/testdata/run/auto_discover_lockfile/main.out b/cli/tests/testdata/run/auto_discover_lockfile/main.out
new file mode 100644
index 000000000..28f4724e9
--- /dev/null
+++ b/cli/tests/testdata/run/auto_discover_lockfile/main.out
@@ -0,0 +1,5 @@
+Download http://localhost:4545/subdir/mod2.ts
+Download http://localhost:4545/subdir/print_hello.ts
+error: The source code is invalid, as it does not match the expected hash in the lock file.
+ Specifier: http://localhost:4545/subdir/print_hello.ts
+ Lock file: [WILDCARD]auto_discover_lockfile[WILDCARD]deno.lock
diff --git a/cli/tests/testdata/run/auto_discover_lockfile/main.ts b/cli/tests/testdata/run/auto_discover_lockfile/main.ts
new file mode 100644
index 000000000..baa52775d
--- /dev/null
+++ b/cli/tests/testdata/run/auto_discover_lockfile/main.ts
@@ -0,0 +1 @@
+import "http://localhost:4545/subdir/mod2.ts";
diff --git a/cli/tests/testdata/run/config_types/deno.lock b/cli/tests/testdata/run/config_types/deno.lock
new file mode 100644
index 000000000..157bd98a2
--- /dev/null
+++ b/cli/tests/testdata/run/config_types/deno.lock
@@ -0,0 +1,6 @@
+{
+ "version": "2",
+ "remote": {
+ "http://localhost:4545/run/config_types/types.d.ts": "741c39165e37de0c12acc5c081841f4362487e3f17dc4cad7017b70af72c4605"
+ }
+}
diff --git a/cli/tests/testdata/run/lock_write_requires_lock.out b/cli/tests/testdata/run/lock_write_requires_lock.out
deleted file mode 100644
index 7cc5906f6..000000000
--- a/cli/tests/testdata/run/lock_write_requires_lock.out
+++ /dev/null
@@ -1,3 +0,0 @@
-error: The following required arguments were not provided:
- --lock <FILE>
-[WILDCARD] \ No newline at end of file