From 06d401948ba7451d8ed10b4a58e1e2d08c0094f7 Mon Sep 17 00:00:00 2001 From: Sean Patrick Santos Date: Thu, 15 Jan 2015 13:49:23 -0700 Subject: [PATCH 1/3] For issue 15149 test, don't execute from tmpfs, and wait to see if the child panics before passing. --- src/test/run-pass/issue-15149.rs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/test/run-pass/issue-15149.rs b/src/test/run-pass/issue-15149.rs index 57dc6fd75f08c..59b1bb287fa74 100644 --- a/src/test/run-pass/issue-15149.rs +++ b/src/test/run-pass/issue-15149.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::io::{TempDir, Command, fs}; +use std::io::{Command, fs, USER_RWX}; use std::os; fn main() { @@ -22,19 +22,23 @@ fn main() { } fn test() { - // If we're the parent, copy our own binary to a tempr directory, and then - // make it executable. - let dir = TempDir::new("mytest").unwrap(); - let me = os::self_exe_name().unwrap(); - let dest = dir.path().join(format!("mytest{}", os::consts::EXE_SUFFIX)); - fs::copy(&me, &dest).unwrap(); - - // Append the temp directory to our own PATH. + // If we're the parent, copy our own binary to a new directory. + let my_path = os::self_exe_name().unwrap(); + let my_dir = my_path.dir_path(); + + let child_dir = Path::new(my_dir.join("issue-15149-child")); + drop(fs::mkdir(&child_dir, USER_RWX)); + + let child_path = child_dir.join(format!("mytest{}", + os::consts::EXE_SUFFIX)); + fs::copy(&my_path, &child_path).unwrap(); + + // Append the new directory to our own PATH. let mut path = os::split_paths(os::getenv("PATH").unwrap_or(String::new())); - path.push(dir.path().clone()); + path.push(child_dir.clone()); let path = os::join_paths(path.as_slice()).unwrap(); - Command::new("mytest").env("PATH", path.as_slice()) - .arg("child") - .spawn().unwrap(); + assert!(Command::new("mytest").env("PATH", path.as_slice()) + .arg("child") + .status().unwrap().success()); } From 918dd3488f450383c5ce27f0a27f45fa3fc9d0d6 Mon Sep 17 00:00:00 2001 From: Sean Patrick Santos Date: Thu, 22 Jan 2015 11:54:45 -0700 Subject: [PATCH 2/3] Attempt fix for assertion on Windows, and add extra output for debugging. --- src/test/run-pass/issue-15149.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/test/run-pass/issue-15149.rs b/src/test/run-pass/issue-15149.rs index 59b1bb287fa74..4b345f639e4cb 100644 --- a/src/test/run-pass/issue-15149.rs +++ b/src/test/run-pass/issue-15149.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use std::path::BytesContainer; use std::io::{Command, fs, USER_RWX}; use std::os; @@ -15,7 +16,8 @@ fn main() { // If we're the child, make sure we were invoked correctly let args = os::args(); if args.len() > 1 && args[1].as_slice() == "child" { - return assert_eq!(args[0].as_slice(), "mytest"); + return assert_eq!(args[0], + format!("mytest{}", os::consts::EXE_SUFFIX)); } test(); @@ -38,7 +40,12 @@ fn test() { path.push(child_dir.clone()); let path = os::join_paths(path.as_slice()).unwrap(); - assert!(Command::new("mytest").env("PATH", path.as_slice()) - .arg("child") - .status().unwrap().success()); + let child_output = Command::new("mytest").env("PATH", path.as_slice()) + .arg("child") + .output().unwrap(); + + assert!(child_output.status.success(), + format!("child assertion failed\n child stdout:\n {}\n child stderr:\n {}", + child_output.output.container_as_str().unwrap(), + child_output.error.container_as_str().unwrap())); } From 7f45dc9e68ffe80d399560644af48383a25427fd Mon Sep 17 00:00:00 2001 From: Sean Patrick Santos Date: Thu, 22 Jan 2015 18:34:58 -0700 Subject: [PATCH 3/3] Add a random number string to the end of the issue-15149 test's child directory's name, and remove the directory after a successful test. --- src/test/run-pass/issue-15149.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/test/run-pass/issue-15149.rs b/src/test/run-pass/issue-15149.rs index 4b345f639e4cb..5d3571e4d748b 100644 --- a/src/test/run-pass/issue-15149.rs +++ b/src/test/run-pass/issue-15149.rs @@ -8,9 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::path::BytesContainer; use std::io::{Command, fs, USER_RWX}; use std::os; +use std::path::BytesContainer; +use std::rand::random; fn main() { // If we're the child, make sure we were invoked correctly @@ -28,8 +29,10 @@ fn test() { let my_path = os::self_exe_name().unwrap(); let my_dir = my_path.dir_path(); - let child_dir = Path::new(my_dir.join("issue-15149-child")); - drop(fs::mkdir(&child_dir, USER_RWX)); + let random_u32: u32 = random(); + let child_dir = Path::new(my_dir.join(format!("issue-15149-child-{}", + random_u32))); + fs::mkdir(&child_dir, USER_RWX).unwrap(); let child_path = child_dir.join(format!("mytest{}", os::consts::EXE_SUFFIX)); @@ -48,4 +51,7 @@ fn test() { format!("child assertion failed\n child stdout:\n {}\n child stderr:\n {}", child_output.output.container_as_str().unwrap(), child_output.error.container_as_str().unwrap())); + + fs::rmdir_recursive(&child_dir).unwrap(); + }