| 91 | } |
| 92 | |
| 93 | fn parent_process() { |
| 94 | let me = std::env::current_exe().unwrap(); |
| 95 | let mut cmd = Command::new(me); |
| 96 | cmd.env(VAR_NAME, "1"); |
| 97 | cmd.stdin(std::process::Stdio::piped()); |
| 98 | |
| 99 | if std::env::args().any(|arg| arg == "--nocapture") { |
| 100 | cmd.stdout(std::process::Stdio::inherit()); |
| 101 | } else { |
| 102 | cmd.stdout(std::process::Stdio::null()); |
| 103 | } |
| 104 | |
| 105 | cmd.stderr(std::process::Stdio::piped()); |
| 106 | let mut child = cmd.spawn().unwrap(); |
| 107 | |
| 108 | let mut stdin_write = child.stdin.take().unwrap(); |
| 109 | let mut result_read = std::io::BufReader::new(child.stderr.take().unwrap()); |
| 110 | |
| 111 | let mut line = String::new(); |
| 112 | result_read.read_line(&mut line).unwrap(); |
| 113 | assert_eq!(line, "start\n"); |
| 114 | |
| 115 | for i in 0..5 { |
| 116 | let message = format!("some bytes {i}\n"); |
| 117 | stdin_write.write_all(message.as_bytes()).unwrap(); |
| 118 | line.clear(); |
| 119 | result_read.read_line(&mut line).unwrap(); |
| 120 | assert_eq!(line, message); |
| 121 | } |
| 122 | |
| 123 | writeln!(&mut stdin_write, "restart_task").unwrap(); |
| 124 | line.clear(); |
| 125 | result_read.read_line(&mut line).unwrap(); |
| 126 | assert_eq!(line, "restarting\n"); |
| 127 | line.clear(); |
| 128 | |
| 129 | result_read.read_line(&mut line).unwrap(); |
| 130 | assert_eq!(line, "start\n"); |
| 131 | |
| 132 | for i in 0..10 { |
| 133 | let message = format!("more bytes {i}\n"); |
| 134 | stdin_write.write_all(message.as_bytes()).unwrap(); |
| 135 | line.clear(); |
| 136 | result_read.read_line(&mut line).unwrap(); |
| 137 | assert_eq!(line, message); |
| 138 | } |
| 139 | |
| 140 | writeln!(&mut stdin_write, "restart_runtime").unwrap(); |
| 141 | line.clear(); |
| 142 | result_read.read_line(&mut line).unwrap(); |
| 143 | assert_eq!(line, "restarting\n"); |
| 144 | line.clear(); |
| 145 | |
| 146 | result_read.read_line(&mut line).unwrap(); |
| 147 | assert_eq!(line, "start\n"); |
| 148 | |
| 149 | for i in 0..17 { |
| 150 | let message = format!("even more bytes {i}\n"); |