All Downloads are FREE. Search and download functionalities are using the official Maven repository.

vertx.effect.mock.MockReqHandler Maven / Gradle / Ivy

There is a newer version: 5.0.0
Show newest version
package vertx.effect.mock;

import io.vertx.core.Handler;
import io.vertx.core.MultiMap;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.HttpServerResponse;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;

public class MockReqHandler implements Handler {

    protected AtomicInteger counter = new AtomicInteger(0);

    final List mockReqResp;

    public MockReqHandler(final List mockReqResp) {
        this.mockReqResp = Objects.requireNonNull(mockReqResp);
    }

    @Override
    public void handle(final HttpServerRequest req) {

        int counter = this.counter.incrementAndGet();
        mockReqResp.stream()
                   .filter(it -> it.predicate.test(counter,
                                                    req
                                                   )
                           )
                   .findFirst()
                   .ifPresentOrElse(it -> req.body(event ->
                                                    {
                                                        if (event.succeeded()) {
                                                            Buffer buffer = event.result();
                                                            HttpServerResponse response = req.response()
                                                                                             .setStatusCode(it.code.apply(counter)
                                                                                                                   .apply(buffer)
                                                                                                                   .apply(req)
                                                                                                           );
                                                            MultiMap respHeaders = it.headers.apply(counter)
                                                                                             .apply(buffer)
                                                                                             .apply(req);

                                                            respHeaders.forEach(header -> response.putHeader(header.getKey(),
                                                                                                             header.getValue()
                                                                                                            )
                                                                               );
                                                            response
                                                                    .end(it.body.apply(counter)
                                                                                .apply(buffer)
                                                                                .apply(req)
                                                                        );
                                                        }
                                                        else {
                                                            req.response()
                                                               .setStatusCode(500)
                                                               .end(Arrays.toString(event.cause()
                                                                                         .getStackTrace()));
                                                        }
                                                    }
                                                   )

                            ,
                                     () -> req.response()
                                              .setStatusCode(404)
                                              .end("No handler matched the req")
                                    );

    }

    public void resetCounter() {
        counter.set(0);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy