DS-Lab / src / test / java / dslab / Control.java
Control.java
Raw
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());
    }
}