| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  | use std::{
 | 
					
						
							|  |  |  |     env, fs,
 | 
					
						
							|  |  |  |     io::{self, Write},
 | 
					
						
							|  |  |  |     process::{Command, Output},
 | 
					
						
							|  |  |  | };
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-05 17:15:39 -07:00
										 |  |  | #[macro_use]
 | 
					
						
							|  |  |  | extern crate serial_test;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-14 18:02:42 -07:00
										 |  |  | fn run_cargo_build(crate_name: &str, extra_args: &[&str]) -> Output {
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  |     let cwd = env::current_dir().expect("Unable to get current working directory");
 | 
					
						
							|  |  |  |     let root = cwd
 | 
					
						
							|  |  |  |         .parent()
 | 
					
						
							|  |  |  |         .expect("Unable to get parent directory of current working dir")
 | 
					
						
							|  |  |  |         .parent()
 | 
					
						
							|  |  |  |         .expect("Unable to get ../.. of current working dir");
 | 
					
						
							|  |  |  |     let toml = cwd
 | 
					
						
							|  |  |  |         .join("tests")
 | 
					
						
							|  |  |  |         .join("crates")
 | 
					
						
							| 
									
										
										
										
											2021-07-14 18:02:42 -07:00
										 |  |  |         .join(crate_name)
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  |         .join("Cargo.toml");
 | 
					
						
							|  |  |  |     let toml = format!("{}", toml.display());
 | 
					
						
							|  |  |  |     let mut args = vec!["--bpf-sdk", "../bpf", "--manifest-path", &toml];
 | 
					
						
							|  |  |  |     for arg in extra_args {
 | 
					
						
							|  |  |  |         args.push(arg);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  |     let cargo_build_bpf = root.join("target").join("debug").join("cargo-build-bpf");
 | 
					
						
							| 
									
										
										
										
											2021-07-05 17:15:39 -07:00
										 |  |  |     let output = Command::new(cargo_build_bpf)
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  |         .args(&args)
 | 
					
						
							|  |  |  |         .output()
 | 
					
						
							| 
									
										
										
										
											2021-07-05 17:15:39 -07:00
										 |  |  |         .expect("Error running cargo-build-bpf");
 | 
					
						
							|  |  |  |     if !output.status.success() {
 | 
					
						
							|  |  |  |         eprintln!("--- stdout ---");
 | 
					
						
							|  |  |  |         io::stderr().write_all(&output.stdout).unwrap();
 | 
					
						
							|  |  |  |         eprintln!("--- stderr ---");
 | 
					
						
							|  |  |  |         io::stderr().write_all(&output.stderr).unwrap();
 | 
					
						
							|  |  |  |         eprintln!("--------------");
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  |     output
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-07-05 17:15:39 -07:00
										 |  |  | #[serial]
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  | fn test_build() {
 | 
					
						
							| 
									
										
										
										
											2021-07-14 18:02:42 -07:00
										 |  |  |     let output = run_cargo_build("noop", &[]);
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  |     assert!(output.status.success());
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-07-05 17:15:39 -07:00
										 |  |  | #[serial]
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  | fn test_dump() {
 | 
					
						
							| 
									
										
										
										
											2021-07-01 11:17:51 -07:00
										 |  |  |     // This test requires rustfilt.
 | 
					
						
							|  |  |  |     assert!(Command::new("cargo")
 | 
					
						
							|  |  |  |         .args(&["install", "rustfilt"])
 | 
					
						
							|  |  |  |         .status()
 | 
					
						
							|  |  |  |         .expect("Unable to install rustfilt required for --dump option")
 | 
					
						
							|  |  |  |         .success());
 | 
					
						
							| 
									
										
										
										
											2021-07-14 18:02:42 -07:00
										 |  |  |     let output = run_cargo_build("noop", &["--dump"]);
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  |     assert!(output.status.success());
 | 
					
						
							|  |  |  |     let cwd = env::current_dir().expect("Unable to get current working directory");
 | 
					
						
							|  |  |  |     let dump = cwd
 | 
					
						
							|  |  |  |         .join("tests")
 | 
					
						
							|  |  |  |         .join("crates")
 | 
					
						
							|  |  |  |         .join("noop")
 | 
					
						
							|  |  |  |         .join("target")
 | 
					
						
							|  |  |  |         .join("deploy")
 | 
					
						
							|  |  |  |         .join("noop-dump.txt");
 | 
					
						
							|  |  |  |     assert!(dump.exists());
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-07-05 17:15:39 -07:00
										 |  |  | #[serial]
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  | fn test_out_dir() {
 | 
					
						
							| 
									
										
										
										
											2021-07-14 18:02:42 -07:00
										 |  |  |     let output = run_cargo_build("noop", &["--bpf-out-dir", "tmp_out"]);
 | 
					
						
							| 
									
										
										
										
											2021-06-21 11:53:34 -07:00
										 |  |  |     assert!(output.status.success());
 | 
					
						
							|  |  |  |     let cwd = env::current_dir().expect("Unable to get current working directory");
 | 
					
						
							|  |  |  |     let dir = cwd.join("tmp_out");
 | 
					
						
							|  |  |  |     assert!(dir.exists());
 | 
					
						
							|  |  |  |     fs::remove_dir_all("tmp_out").expect("Failed to remove tmp_out dir");
 | 
					
						
							|  |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-07-14 18:02:42 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							|  |  |  | #[serial]
 | 
					
						
							|  |  |  | fn test_generate_child_script_on_failre() {
 | 
					
						
							|  |  |  |     let output = run_cargo_build("fail", &["--generate-child-script-on-failure"]);
 | 
					
						
							|  |  |  |     assert!(!output.status.success());
 | 
					
						
							|  |  |  |     let cwd = env::current_dir().expect("Unable to get current working directory");
 | 
					
						
							|  |  |  |     let scr = cwd
 | 
					
						
							|  |  |  |         .join("tests")
 | 
					
						
							|  |  |  |         .join("crates")
 | 
					
						
							|  |  |  |         .join("fail")
 | 
					
						
							|  |  |  |         .join("cargo-build-bpf-child-script-cargo.sh");
 | 
					
						
							|  |  |  |     assert!(scr.exists());
 | 
					
						
							|  |  |  |     fs::remove_file(scr).expect("Failed to remove script");
 | 
					
						
							|  |  |  | }
 |