@@ -6,130 +6,16 @@ use std::io::{Read, Write};
6
6
use std:: mem:: { size_of, MaybeUninit } ;
7
7
use std:: os:: unix:: ffi:: OsStrExt ;
8
8
use std:: os:: unix:: net:: { UnixListener , UnixStream } ;
9
- use std:: path:: Path ;
10
- use std:: process:: { Command , Stdio } ;
11
9
use std:: slice:: from_raw_parts_mut;
12
10
use std:: thread;
13
11
use std:: time:: Duration ;
14
12
15
- use process_control:: { ChildExt , Output , Timeout } ;
16
13
use serial_test:: serial;
17
14
use std:: sync:: Arc ;
18
15
use tempdir:: TempDir ;
19
16
20
- const CRATE : & str = env ! ( "CARGO_MANIFEST_DIR" ) ;
21
- const KEEP_BIN : & str = env ! ( "CARGO_BIN_EXE_enarx-keepldr" ) ;
22
- const OUT_DIR : & str = env ! ( "OUT_DIR" ) ;
23
- const TEST_BINS_OUT : & str = "bin" ;
24
- const TIMEOUT_SECS : u64 = 10 ;
25
- const MAX_ASSERT_ELEMENTS : usize = 100 ;
26
-
27
- fn assert_eq_slices ( expected_output : & [ u8 ] , output : & [ u8 ] , what : & str ) {
28
- let max_len = usize:: min ( output. len ( ) , expected_output. len ( ) ) ;
29
- let max_len = max_len. min ( MAX_ASSERT_ELEMENTS ) ;
30
- assert_eq ! (
31
- output[ ..max_len] ,
32
- expected_output[ ..max_len] ,
33
- "Expected contents of {} differs" ,
34
- what
35
- ) ;
36
- assert_eq ! (
37
- output. len( ) ,
38
- expected_output. len( ) ,
39
- "Expected length of {} differs" ,
40
- what
41
- ) ;
42
- assert_eq ! (
43
- output, expected_output,
44
- "Expected contents of {} differs" ,
45
- what
46
- ) ;
47
- }
48
-
49
- /// Returns a handle to a child process through which output (stdout, stderr) can
50
- /// be accessed.
51
- fn run_test < ' a > (
52
- bin : & str ,
53
- status : i32 ,
54
- input : impl Into < Option < & ' a [ u8 ] > > ,
55
- expected_stdout : impl Into < Option < & ' a [ u8 ] > > ,
56
- expected_stderr : impl Into < Option < & ' a [ u8 ] > > ,
57
- ) -> Output {
58
- let expected_stdout = expected_stdout. into ( ) ;
59
- let expected_stderr = expected_stderr. into ( ) ;
60
- let bin_path = Path :: new ( CRATE ) . join ( OUT_DIR ) . join ( TEST_BINS_OUT ) . join ( bin) ;
61
-
62
- let mut child = Command :: new ( & String :: from ( KEEP_BIN ) )
63
- . current_dir ( CRATE )
64
- . arg ( "exec" )
65
- . arg ( bin_path)
66
- . stdin ( Stdio :: piped ( ) )
67
- . stdout ( Stdio :: piped ( ) )
68
- . stderr ( Stdio :: piped ( ) )
69
- . spawn ( )
70
- . unwrap_or_else ( |e| panic ! ( "failed to run `{}`: {:#?}" , bin, e) ) ;
71
-
72
- if let Some ( input) = input. into ( ) {
73
- child
74
- . stdin
75
- . as_mut ( )
76
- . unwrap ( )
77
- . write_all ( input)
78
- . expect ( "failed to write stdin to child" ) ;
79
-
80
- drop ( child. stdin . take ( ) ) ;
81
- }
82
-
83
- let output = child
84
- . with_output_timeout ( Duration :: from_secs ( TIMEOUT_SECS ) )
85
- . terminating ( )
86
- . wait ( )
87
- . unwrap_or_else ( |e| panic ! ( "failed to run `{}`: {:#?}" , bin, e) )
88
- . unwrap_or_else ( || panic ! ( "process `{}` timed out" , bin) ) ;
89
-
90
- let exit_status = output. status . code ( ) . unwrap_or_else ( || {
91
- panic ! (
92
- "process `{}` terminated by signal {:?}" ,
93
- bin,
94
- output. status. signal( )
95
- )
96
- } ) ;
97
-
98
- // Output potential error messages
99
- if expected_stderr. is_none ( ) && !output. stderr . is_empty ( ) {
100
- let _ = std:: io:: stderr ( ) . write_all ( & output. stderr ) ;
101
- }
102
-
103
- if let Some ( expected_stdout) = expected_stdout {
104
- if output. stdout . len ( ) < MAX_ASSERT_ELEMENTS && expected_stdout. len ( ) < MAX_ASSERT_ELEMENTS
105
- {
106
- assert_eq ! (
107
- output. stdout, expected_stdout,
108
- "Expected contents of stdout output differs"
109
- ) ;
110
- } else {
111
- assert_eq_slices ( expected_stdout, & output. stdout , "stdout output" ) ;
112
- }
113
- }
114
-
115
- if let Some ( expected_stderr) = expected_stderr {
116
- if output. stderr . len ( ) < MAX_ASSERT_ELEMENTS && expected_stderr. len ( ) < MAX_ASSERT_ELEMENTS
117
- {
118
- assert_eq ! (
119
- output. stderr, expected_stderr,
120
- "Expected contents of stderr output differs."
121
- ) ;
122
- } else {
123
- assert_eq_slices ( expected_stderr, & output. stderr , "stderr output" ) ;
124
- }
125
- }
126
-
127
- if exit_status != status as i64 {
128
- assert_eq ! ( exit_status, status as i64 , "Expected exit status differs." ) ;
129
- }
130
-
131
- output
132
- }
17
+ mod common;
18
+ use common:: { run_test, assert_eq_slices} ;
133
19
134
20
fn read_item < T : Copy > ( mut rdr : impl Read ) -> std:: io:: Result < T > {
135
21
let mut item = MaybeUninit :: uninit ( ) ;
0 commit comments