summaryrefslogtreecommitdiff
path: root/cli/installer.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2020-05-09 18:14:56 +0100
committerGitHub <noreply@github.com>2020-05-09 19:14:56 +0200
commit7a635eda5e9132558ad23ea6147ab2fb3764dbdd (patch)
tree5652f3e880d468496b715f24d462b0d80a7f834f /cli/installer.rs
parentb8364a263694e9845a4ad03fac53fb913667f63a (diff)
fix(cli/installer): Fix concurrent env handling in tests (#5182)
Diffstat (limited to 'cli/installer.rs')
-rw-r--r--cli/installer.rs22
1 files changed, 20 insertions, 2 deletions
diff --git a/cli/installer.rs b/cli/installer.rs
index e16c9f892..78840b929 100644
--- a/cli/installer.rs
+++ b/cli/installer.rs
@@ -80,8 +80,10 @@ deno {} "$@"
}
fn get_installer_root() -> Result<PathBuf, Error> {
- if let Ok(env_dir) = env::var("DENO_INSTALL_ROOT").map(PathBuf::from) {
- return env_dir.canonicalize();
+ if let Ok(env_dir) = env::var("DENO_INSTALL_ROOT") {
+ if !env_dir.is_empty() {
+ return PathBuf::from(env_dir).canonicalize();
+ }
}
// In Windows's Powershell $HOME environmental variable maybe null
// if so use $USERPROFILE instead.
@@ -248,8 +250,13 @@ fn is_in_path(dir: &PathBuf) -> bool {
#[cfg(test)]
mod tests {
use super::*;
+ use std::sync::Mutex;
use tempfile::TempDir;
+ lazy_static! {
+ pub static ref ENV_LOCK: Mutex<()> = Mutex::new(());
+ }
+
#[test]
fn test_is_remote_url() {
assert!(is_remote_url("https://deno.land/std/http/file_server.ts"));
@@ -317,6 +324,7 @@ mod tests {
#[test]
fn install_basic() {
+ let _guard = ENV_LOCK.lock().ok();
let temp_dir = TempDir::new().expect("tempdir fail");
let temp_dir_str = temp_dir.path().to_string_lossy().to_string();
// NOTE: this test overrides environmental variables
@@ -325,8 +333,10 @@ mod tests {
// It means that other test can override env vars when this test is running.
let original_home = env::var_os("HOME");
let original_user_profile = env::var_os("HOME");
+ let original_install_root = env::var_os("DENO_INSTALL_ROOT");
env::set_var("HOME", &temp_dir_str);
env::set_var("USERPROFILE", &temp_dir_str);
+ env::set_var("DENO_INSTALL_ROOT", "");
install(
Flags::default(),
@@ -357,6 +367,9 @@ mod tests {
if let Some(user_profile) = original_user_profile {
env::set_var("USERPROFILE", user_profile);
}
+ if let Some(install_root) = original_install_root {
+ env::set_var("DENO_INSTALL_ROOT", install_root);
+ }
}
#[test]
@@ -475,9 +488,11 @@ mod tests {
#[test]
fn install_custom_dir_env_var() {
+ let _guard = ENV_LOCK.lock().ok();
let temp_dir = TempDir::new().expect("tempdir fail");
let bin_dir = temp_dir.path().join("bin");
std::fs::create_dir(&bin_dir).unwrap();
+ let original_install_root = env::var_os("DENO_INSTALL_ROOT");
env::set_var("DENO_INSTALL_ROOT", temp_dir.path().to_path_buf());
install(
@@ -499,6 +514,9 @@ mod tests {
let content = fs::read_to_string(file_path).unwrap();
assert!(content
.contains(r#""run" "http://localhost:4545/cli/tests/echo_server.ts""#));
+ if let Some(install_root) = original_install_root {
+ env::set_var("DENO_INSTALL_ROOT", install_root);
+ }
}
#[test]