public CompletionStage<E> add(CompletionStage<E> future) throws InterruptedException {
        checkNotNull(future, "future can't be null");
        this.thread = Thread.currentThread();

        down();
        futures.add(future);
        future.whenCompleteAsync((response, t) -> up(), CALLER_RUNS);
        return future;
    }
@Test(expected = NullPointerException.class)
    public void add_whenNull() throws InterruptedException {
        Pipelining<String> pipelining = new Pipelining<>(1);
        pipelining.add(null);
    }