Search in sources :

Example 1 with RECEIVED_REQUEST_MESSAGE_FORMAT

use of org.mockserver.log.model.LogEntryMessages.RECEIVED_REQUEST_MESSAGE_FORMAT in project mockserver by mock-server.

the class HttpState method handle.

public boolean handle(HttpRequest request, ResponseWriter responseWriter, boolean warDeployment) {
    request.withLogCorrelationId(UUIDService.getUUID());
    setPort(request);
    if (MockServerLogger.isEnabled(Level.TRACE)) {
        mockServerLogger.logEvent(new LogEntry().setLogLevel(Level.TRACE).setHttpRequest(request).setMessageFormat(RECEIVED_REQUEST_MESSAGE_FORMAT).setArguments(request));
    }
    if (request.matches("PUT")) {
        CompletableFuture<Boolean> canHandle = new CompletableFuture<>();
        if (request.matches("PUT", PATH_PREFIX + "/expectation", "/expectation")) {
            if (controlPlaneRequestAuthenticated(request, responseWriter)) {
                List<Expectation> upsertedExpectations = new ArrayList<>();
                for (Expectation expectation : getExpectationSerializer().deserializeArray(request.getBodyAsJsonOrXmlString(), false)) {
                    if (!warDeployment || validateSupportedFeatures(expectation, request, responseWriter)) {
                        upsertedExpectations.addAll(add(expectation));
                    }
                }
                responseWriter.writeResponse(request, response().withStatusCode(CREATED.code()).withBody(getExpectationSerializer().serialize(upsertedExpectations), MediaType.JSON_UTF_8), true);
            }
            canHandle.complete(true);
        } else if (request.matches("PUT", PATH_PREFIX + "/openapi", "/openapi")) {
            if (controlPlaneRequestAuthenticated(request, responseWriter)) {
                try {
                    List<Expectation> upsertedExpectations = new ArrayList<>();
                    for (OpenAPIExpectation openAPIExpectation : getOpenAPIExpectationSerializer().deserializeArray(request.getBodyAsJsonOrXmlString(), false)) {
                        upsertedExpectations.addAll(add(openAPIExpectation));
                    }
                    responseWriter.writeResponse(request, response().withStatusCode(CREATED.code()).withBody(getExpectationSerializer().serialize(upsertedExpectations), MediaType.JSON_UTF_8), true);
                } catch (IllegalArgumentException iae) {
                    mockServerLogger.logEvent(new LogEntry().setLogLevel(Level.ERROR).setMessageFormat("exception handling request for open api expectation:{}error:{}").setArguments(request, iae.getMessage()).setThrowable(iae));
                    responseWriter.writeResponse(request, BAD_REQUEST, (!iae.getMessage().startsWith(OPEN_API_LOAD_ERROR) ? OPEN_API_LOAD_ERROR + (isNotBlank(iae.getMessage()) ? ", " : "") : "") + iae.getMessage(), MediaType.create("text", "plain").toString());
                }
            }
            canHandle.complete(true);
        } else if (request.matches("PUT", PATH_PREFIX + "/clear", "/clear")) {
            if (controlPlaneRequestAuthenticated(request, responseWriter)) {
                clear(request);
                responseWriter.writeResponse(request, OK);
            }
            canHandle.complete(true);
        } else if (request.matches("PUT", PATH_PREFIX + "/reset", "/reset")) {
            if (controlPlaneRequestAuthenticated(request, responseWriter)) {
                reset();
                responseWriter.writeResponse(request, OK);
            }
            canHandle.complete(true);
        } else if (request.matches("PUT", PATH_PREFIX + "/retrieve", "/retrieve")) {
            if (controlPlaneRequestAuthenticated(request, responseWriter)) {
                responseWriter.writeResponse(request, retrieve(request), true);
            }
            canHandle.complete(true);
        } else if (request.matches("PUT", PATH_PREFIX + "/verify", "/verify")) {
            if (controlPlaneRequestAuthenticated(request, responseWriter)) {
                verify(getVerificationSerializer().deserialize(request.getBodyAsJsonOrXmlString()), result -> {
                    if (isEmpty(result)) {
                        responseWriter.writeResponse(request, ACCEPTED);
                    } else {
                        responseWriter.writeResponse(request, NOT_ACCEPTABLE, result, MediaType.create("text", "plain").toString());
                    }
                    canHandle.complete(true);
                });
            } else {
                canHandle.complete(true);
            }
        } else if (request.matches("PUT", PATH_PREFIX + "/verifySequence", "/verifySequence")) {
            if (controlPlaneRequestAuthenticated(request, responseWriter)) {
                verify(getVerificationSequenceSerializer().deserialize(request.getBodyAsJsonOrXmlString()), result -> {
                    if (isEmpty(result)) {
                        responseWriter.writeResponse(request, ACCEPTED);
                    } else {
                        responseWriter.writeResponse(request, NOT_ACCEPTABLE, result, MediaType.create("text", "plain").toString());
                    }
                    canHandle.complete(true);
                });
            } else {
                canHandle.complete(true);
            }
        } else {
            canHandle.complete(false);
        }
        try {
            return canHandle.get(configuration.maxFutureTimeoutInMillis(), MILLISECONDS);
        } catch (InterruptedException | ExecutionException | TimeoutException ex) {
            mockServerLogger.logEvent(new LogEntry().setLogLevel(Level.ERROR).setMessageFormat("exception handling request:{}error:{}").setArguments(request, ex.getMessage()).setThrowable(ex));
            return false;
        }
    } else {
        return false;
    }
}
Also used : LocalCallbackRegistry(org.mockserver.closurecallback.websocketregistry.LocalCallbackRegistry) WebSocketClientRegistry(org.mockserver.closurecallback.websocketregistry.WebSocketClientRegistry) Arrays(java.util.Arrays) AuthenticationException(org.mockserver.authentication.AuthenticationException) UUIDService(org.mockserver.uuid.UUIDService) TRACE(org.slf4j.event.Level.TRACE) TimeoutException(java.util.concurrent.TimeoutException) CompletableFuture(java.util.concurrent.CompletableFuture) StringUtils(org.apache.commons.lang3.StringUtils) NEW_LINE(org.mockserver.character.Character.NEW_LINE) ArrayList(java.util.ArrayList) HttpRequest.request(org.mockserver.model.HttpRequest.request) Future(java.util.concurrent.Future) Scheduler(org.mockserver.scheduler.Scheduler) OpenAPIConverter(org.mockserver.openapi.OpenAPIConverter) Level(org.slf4j.event.Level) MemoryMonitoring(org.mockserver.memory.MemoryMonitoring) CLEARED(org.mockserver.log.model.LogEntry.LogMessageType.CLEARED) Cause(org.mockserver.mock.listeners.MockServerMatcherNotifier.Cause) HOST(io.netty.handler.codec.http.HttpHeaderNames.HOST) MockServerEventLog(org.mockserver.log.MockServerEventLog) OPEN_API_LOAD_ERROR(org.mockserver.openapi.OpenAPIParser.OPEN_API_LOAD_ERROR) UTF_8(java.nio.charset.StandardCharsets.UTF_8) HttpResponseStatus(io.netty.handler.codec.http.HttpResponseStatus) MILLISECONDS(java.util.concurrent.TimeUnit.MILLISECONDS) AuthenticationHandler(org.mockserver.authentication.AuthenticationHandler) ExpectationFileSystemPersistence(org.mockserver.persistence.ExpectationFileSystemPersistence) Verification(org.mockserver.verify.Verification) Collectors(java.util.stream.Collectors) ExpectationFileWatcher(org.mockserver.persistence.ExpectationFileWatcher) org.mockserver.serialization(org.mockserver.serialization) RETRIEVED(org.mockserver.log.model.LogEntry.LogMessageType.RETRIEVED) ExecutionException(java.util.concurrent.ExecutionException) Consumer(java.util.function.Consumer) RECEIVED_REQUEST_MESSAGE_FORMAT(org.mockserver.log.model.LogEntryMessages.RECEIVED_REQUEST_MESSAGE_FORMAT) Configuration(org.mockserver.configuration.Configuration) List(java.util.List) org.mockserver.model(org.mockserver.model) ResponseWriter(org.mockserver.responsewriter.ResponseWriter) ExpectationToJavaSerializer(org.mockserver.serialization.java.ExpectationToJavaSerializer) LogEntry(org.mockserver.log.model.LogEntry) VisibleForTesting(com.google.common.annotations.VisibleForTesting) MockServerLogger(org.mockserver.logging.MockServerLogger) ExpectationInitializerLoader(org.mockserver.server.initialize.ExpectationInitializerLoader) Collections(java.util.Collections) SECONDS(java.util.concurrent.TimeUnit.SECONDS) HttpResponse.response(org.mockserver.model.HttpResponse.response) VerificationSequence(org.mockserver.verify.VerificationSequence) ArrayList(java.util.ArrayList) CompletableFuture(java.util.concurrent.CompletableFuture) ArrayList(java.util.ArrayList) List(java.util.List) ExecutionException(java.util.concurrent.ExecutionException) LogEntry(org.mockserver.log.model.LogEntry) TimeoutException(java.util.concurrent.TimeoutException)

Aggregations

VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 HOST (io.netty.handler.codec.http.HttpHeaderNames.HOST)1 HttpResponseStatus (io.netty.handler.codec.http.HttpResponseStatus)1 UTF_8 (java.nio.charset.StandardCharsets.UTF_8)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1 List (java.util.List)1 CompletableFuture (java.util.concurrent.CompletableFuture)1 ExecutionException (java.util.concurrent.ExecutionException)1 Future (java.util.concurrent.Future)1 MILLISECONDS (java.util.concurrent.TimeUnit.MILLISECONDS)1 SECONDS (java.util.concurrent.TimeUnit.SECONDS)1 TimeoutException (java.util.concurrent.TimeoutException)1 Consumer (java.util.function.Consumer)1 Collectors (java.util.stream.Collectors)1 StringUtils (org.apache.commons.lang3.StringUtils)1 AuthenticationException (org.mockserver.authentication.AuthenticationException)1 AuthenticationHandler (org.mockserver.authentication.AuthenticationHandler)1 NEW_LINE (org.mockserver.character.Character.NEW_LINE)1