package dslab; import java.io.Closeable; import java.util.logging.Logger; import static dslab.util.Utils.asUnchecked; /** * Helps you control an instance of a server. Use for readable tests */ public class Control implements Closeable { private static final Logger LOG = Logger.getLogger(Control.class.getSimpleName()); private final Thread thread; private final TestInputStream in; private final TestOutputStream out; public Control(Runnable runnable, TestInputStream in, TestOutputStream out) { thread = new Thread(runnable); thread.start(); this.in = in; this.out = out; } public TestInputStream in() { return in; } public TestOutputStream out() { return out; } @Override public void close() { LOG.info("Closing remote"); in.addLine("shutdown"); asUnchecked(() -> thread.join()); } }