vertx.effect.mock.MockReqHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vertx-effect Show documentation
Show all versions of vertx-effect Show documentation
When actors meet Functional Programming
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