From d2b26a65e9646b831128d0d8e5230dcb202015ad Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Wed, 4 Nov 2020 20:33:42 -0800 Subject: [PATCH] Search for program files in 'target/deploy' --- program-test/src/lib.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/program-test/src/lib.rs b/program-test/src/lib.rs index 3bda2f9b2..0ca0beef6 100644 --- a/program-test/src/lib.rs +++ b/program-test/src/lib.rs @@ -322,9 +322,9 @@ impl program_stubs::SyscallStubs for SyscallStubs { } } -fn find_file(filename: &str) -> Option { - for path in &["", "tests/fixtures"] { - let candidate = Path::new(path).join(&filename); +fn find_file(filename: &str, search_path: &[PathBuf]) -> Option { + for path in search_path { + let candidate = path.join(&filename); if candidate.exists() { return Some(candidate); } @@ -348,6 +348,7 @@ pub struct ProgramTest { builtins: Vec, bpf_compute_max_units: Option, prefer_bpf: bool, + search_path: Vec, } impl Default for ProgramTest { @@ -378,11 +379,22 @@ impl Default for ProgramTest { Err(_err) => false, }; + let mut search_path = vec![]; + if let Ok(dir) = std::env::var("CARGO_BUILD_TARGET_DIR") { + let deploy_dir = PathBuf::from(dir).join("deploy"); + search_path.push(deploy_dir); + }; + if let Ok(dir) = std::env::current_dir() { + search_path.push(dir); + } + search_path.push(PathBuf::from("tests/fixtures")); + Self { accounts: vec![], builtins: vec![], bpf_compute_max_units: None, prefer_bpf, + search_path, } } } @@ -433,7 +445,7 @@ impl ProgramTest { address, Account { lamports, - data: read_file(find_file(filename).unwrap_or_else(|| { + data: read_file(find_file(filename, &self.search_path).unwrap_or_else(|| { panic!("Unable to locate {}", filename); })), owner, @@ -479,7 +491,7 @@ impl ProgramTest { process_instruction: Option, ) { let loader = solana_program::bpf_loader::id(); - let program_file = find_file(&format!("{}.so", program_name)); + let program_file = find_file(&format!("{}.so", program_name), &self.search_path); if process_instruction.is_none() && program_file.is_none() { panic!("Unable to add program {} ({})", program_name, program_id);