]>
git.proxmox.com Git - cargo.git/blob - vendor/jobserver/tests/make-as-a-client.rs
1 extern crate jobserver
;
6 use std
::io
::prelude
::*;
7 use std
::net
::{TcpListener, TcpStream}
;
8 use std
::process
::Command
;
10 use jobserver
::Client
;
17 Err(e
) => panic
!("{} failed with {}", stringify
!($e
), e
),
23 if env
::var("_DO_THE_TEST").is_ok() {
25 Command
::new(env
::var_os("MAKE").unwrap())
26 .env("MAKEFLAGS", env
::var_os("CARGO_MAKEFLAGS").unwrap())
27 .env_remove("_DO_THE_TEST")
28 .args(&env
::args_os().skip(1).collect
::<Vec
<_
>>())
36 if let Ok(s
) = env
::var("TEST_ADDR") {
37 let mut contents
= Vec
::new();
38 t
!(t
!(TcpStream
::connect(&s
)).read_to_end(&mut contents
));
42 let c
= t
!(Client
::new(1));
43 let td
= TempDir
::new("foo").unwrap();
45 let prog
= env
::var("MAKE").unwrap_or("make".to_string());
47 let me
= t
!(env
::current_exe());
48 let me
= me
.to_str().unwrap();
50 let mut cmd
= Command
::new(&me
);
51 cmd
.current_dir(td
.path());
52 cmd
.env("MAKE", prog
);
53 cmd
.env("_DO_THE_TEST", "1");
55 t
!(t
!(File
::create(td
.path().join("Makefile"))).write_all(
69 // We're leaking one extra token to `make` sort of violating the makefile
70 // jobserver protocol. It has the desired effect though.
71 c
.configure(&mut cmd
);
73 let listener
= t
!(TcpListener
::bind("127.0.0.1:0"));
74 let addr
= t
!(listener
.local_addr());
75 cmd
.env("TEST_ADDR", addr
.to_string());
76 let mut child
= t
!(cmd
.spawn());
78 // We should get both connections as the two programs should be run
80 let a
= t
!(listener
.accept());
81 let b
= t
!(listener
.accept());
84 assert
!(t
!(child
.wait()).success());