@@ -41,6 +41,7 @@ macro_rules! t {
41
41
42
42
static TEST : AtomicUsize = AtomicUsize :: new ( 0 ) ;
43
43
44
+ #[ derive( Copy , Clone ) ]
44
45
struct Config {
45
46
pub remote : bool ,
46
47
pub verbose : bool ,
@@ -71,6 +72,12 @@ impl Config {
71
72
}
72
73
}
73
74
75
+ fn print_verbose ( s : & str , conf : Config ) {
76
+ if conf. verbose {
77
+ println ! ( "{}" , s) ;
78
+ }
79
+ }
80
+
74
81
fn main ( ) {
75
82
println ! ( "starting test server" ) ;
76
83
@@ -83,16 +90,19 @@ fn main() {
83
90
} ;
84
91
85
92
let listener = t ! ( TcpListener :: bind( bind_addr) ) ;
86
- let work: PathBuf = if cfg ! ( target_os = "android" ) {
87
- "/data/tmp/work" . into ( )
93
+ let ( work, tmp ) : ( PathBuf , PathBuf ) = if cfg ! ( target_os = "android" ) {
94
+ ( "/data/tmp/work" . into ( ) , "/data/tmp/work/tmp" . into ( ) )
88
95
} else {
89
- let mut temp_dir = env:: temp_dir ( ) ;
90
- temp_dir. push ( "work" ) ;
91
- temp_dir
96
+ let mut work_dir = env:: temp_dir ( ) ;
97
+ work_dir. push ( "work" ) ;
98
+ let mut tmp_dir = work_dir. clone ( ) ;
99
+ tmp_dir. push ( "tmp" ) ;
100
+ ( work_dir, tmp_dir)
92
101
} ;
93
- println ! ( "listening!" ) ;
102
+ println ! ( "listening on {}!" , bind_addr ) ;
94
103
95
104
t ! ( fs:: create_dir_all( & work) ) ;
105
+ t ! ( fs:: create_dir_all( & tmp) ) ;
96
106
97
107
let lock = Arc :: new ( Mutex :: new ( ( ) ) ) ;
98
108
@@ -103,22 +113,25 @@ fn main() {
103
113
continue ;
104
114
}
105
115
if & buf[ ..] == b"ping" {
116
+ print_verbose ( "Received ping" , config) ;
106
117
t ! ( socket. write_all( b"pong" ) ) ;
107
118
} else if & buf[ ..] == b"push" {
108
- handle_push ( socket, & work) ;
119
+ handle_push ( socket, & work, config ) ;
109
120
} else if & buf[ ..] == b"run " {
110
121
let lock = lock. clone ( ) ;
111
122
let work = work. clone ( ) ;
112
- thread:: spawn ( move || handle_run ( socket, & work, & lock) ) ;
123
+ let tmp = tmp. clone ( ) ;
124
+ thread:: spawn ( move || handle_run ( socket, & work, & tmp, & lock, config) ) ;
113
125
} else {
114
126
panic ! ( "unknown command {:?}" , buf) ;
115
127
}
116
128
}
117
129
}
118
130
119
- fn handle_push ( socket : TcpStream , work : & Path ) {
131
+ fn handle_push ( socket : TcpStream , work : & Path , config : Config ) {
120
132
let mut reader = BufReader :: new ( socket) ;
121
- recv ( & work, & mut reader) ;
133
+ let dst = recv ( & work, & mut reader) ;
134
+ print_verbose ( & format ! ( "push {:#?}" , dst) , config) ;
122
135
123
136
let mut socket = reader. into_inner ( ) ;
124
137
t ! ( socket. write_all( b"ack " ) ) ;
@@ -134,7 +147,7 @@ impl Drop for RemoveOnDrop<'_> {
134
147
}
135
148
}
136
149
137
- fn handle_run ( socket : TcpStream , work : & Path , lock : & Mutex < ( ) > ) {
150
+ fn handle_run ( socket : TcpStream , work : & Path , tmp : & Path , lock : & Mutex < ( ) > , config : Config ) {
138
151
let mut arg = Vec :: new ( ) ;
139
152
let mut reader = BufReader :: new ( socket) ;
140
153
@@ -201,6 +214,7 @@ fn handle_run(socket: TcpStream, work: &Path, lock: &Mutex<()>) {
201
214
// binary is and then we'll download it all to the exe path we calculated
202
215
// earlier.
203
216
let exe = recv ( & path, & mut reader) ;
217
+ print_verbose ( & format ! ( "run {:#?}" , exe) , config) ;
204
218
205
219
let mut cmd = Command :: new ( & exe) ;
206
220
cmd. args ( args) ;
@@ -226,6 +240,9 @@ fn handle_run(socket: TcpStream, work: &Path, lock: &Mutex<()>) {
226
240
cmd. env ( "LD_LIBRARY_PATH" , format ! ( "{}:{}" , work. display( ) , path. display( ) ) ) ;
227
241
}
228
242
243
+ // Some tests assume RUST_TEST_TMPDIR exists
244
+ cmd. env ( "RUST_TEST_TMPDIR" , tmp. to_owned ( ) ) ;
245
+
229
246
// Spawn the child and ferry over stdout/stderr to the socket in a framed
230
247
// fashion (poor man's style)
231
248
let mut child =
0 commit comments