Second attempt to fix server test CI failures

Switch process redirection off and instead consume streams
and copy to System.out/System.err.

See gh-12689
pull/12697/head
Phillip Webb 7 years ago
parent 7498e7f2cd
commit 69cbf1318c

@ -18,13 +18,16 @@ package org.springframework.boot.context.embedded;
import java.io.File;
import java.io.FileReader;
import java.lang.ProcessBuilder.Redirect;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import org.junit.rules.ExternalResource;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils;
/**
@ -76,12 +79,12 @@ abstract class AbstractApplicationLauncher extends ExternalResource {
arguments.addAll(getArguments(archive));
ProcessBuilder processBuilder = new ProcessBuilder(
StringUtils.toStringArray(arguments));
processBuilder.redirectOutput(Redirect.INHERIT);
processBuilder.redirectError(Redirect.INHERIT);
if (workingDirectory != null) {
processBuilder.directory(workingDirectory);
}
Process process = processBuilder.start();
new ConsoleCopy(process.getInputStream(), System.out).start();
new ConsoleCopy(process.getErrorStream(), System.err).start();
this.httpPort = awaitServerPort(process, serverPortFile);
return process;
}
@ -102,4 +105,26 @@ abstract class AbstractApplicationLauncher extends ExternalResource {
.parseInt(FileCopyUtils.copyToString(new FileReader(serverPortFile)));
}
private static class ConsoleCopy extends Thread {
private final InputStream input;
private final PrintStream output;
ConsoleCopy(InputStream input, PrintStream output) {
this.input = input;
this.output = output;
}
@Override
public void run() {
try {
StreamUtils.copy(this.input, this.output);
}
catch (IOException ex) {
}
}
}
}

Loading…
Cancel
Save