public static ResponseDefinition notConfigured() { final ResponseDefinition response = new ResponseDefinition(HTTP_NOT_FOUND, (byte[]) null); response.wasConfigured = false; return response; }
public static ResponseDefinitionBuilder like(ResponseDefinition responseDefinition) { ResponseDefinitionBuilder builder = new ResponseDefinitionBuilder(); builder.status = responseDefinition.getStatus(); builder.statusMessage = responseDefinition.getStatusMessage(); builder.headers = responseDefinition.getHeaders() != null ? newArrayList(responseDefinition.getHeaders().all()) : Lists.<HttpHeader>newArrayList(); builder.binaryBody = responseDefinition.getByteBodyIfBinary(); builder.stringBody = responseDefinition.getBody(); builder.base64Body = responseDefinition.getBase64Body(); builder.bodyFileName = responseDefinition.getBodyFileName(); builder.fixedDelayMilliseconds = responseDefinition.getFixedDelayMilliseconds(); builder.delayDistribution = responseDefinition.getDelayDistribution(); builder.chunkedDribbleDelay = responseDefinition.getChunkedDribbleDelay(); builder.proxyBaseUrl = responseDefinition.getProxyBaseUrl(); builder.fault = responseDefinition.getFault(); builder.responseTransformerNames = responseDefinition.getTransformers(); builder.transformerParameters = responseDefinition.getTransformerParameters() != null ? Parameters.from(responseDefinition.getTransformerParameters()) : Parameters.empty(); builder.wasConfigured = responseDefinition.isFromConfiguredStub(); return builder; }
private Response.Builder renderDirectly(ServeEvent serveEvent) { ResponseDefinition responseDefinition = serveEvent.getResponseDefinition(); HttpHeaders headers = responseDefinition.getHeaders(); StubMapping stubMapping = serveEvent.getStubMapping(); if (serveEvent.getWasMatched() && stubMapping != null) { .status(responseDefinition.getStatus()) .statusMessage(responseDefinition.getStatusMessage()) .headers(headers) .fault(responseDefinition.getFault()) .configureDelay( globalSettingsHolder.get().getFixedDelay(), globalSettingsHolder.get().getDelayDistribution(), responseDefinition.getFixedDelayMilliseconds(), responseDefinition.getDelayDistribution() .chunkedDribbleDelay(responseDefinition.getChunkedDribbleDelay()); if (responseDefinition.specifiesBodyFile()) { BinaryFile bodyFile = fileSource.getBinaryFileNamed(responseDefinition.getBodyFileName()); responseBuilder.body(bodyFile); } else if (responseDefinition.specifiesBodyContent()) { if(responseDefinition.specifiesBinaryBodyContent()) { responseBuilder.body(responseDefinition.getByteBody()); } else { responseBuilder.body(responseDefinition.getByteBody());
.put("request", RequestTemplateModel.from(request)).build(); if (responseDefinition.specifiesTextBodyContent()) { Template bodyTemplate = uncheckedCompileTemplate(responseDefinition.getBody()); applyTemplatedResponseBody(newResponseDefBuilder, model, bodyTemplate); } else if (responseDefinition.specifiesBodyFile()) { Template filePathTemplate = uncheckedCompileTemplate(responseDefinition.getBodyFileName()); String compiledFilePath = uncheckedApplyTemplate(filePathTemplate, model); TextFile file = files.getTextFileNamed(compiledFilePath); if (responseDefinition.getHeaders() != null) { Iterable<HttpHeader> newResponseHeaders = Iterables.transform(responseDefinition.getHeaders().all(), new Function<HttpHeader, HttpHeader>() { @Override public HttpHeader apply(HttpHeader input) { if (responseDefinition.getProxyBaseUrl() != null) { Template proxyBaseUrlTemplate = uncheckedCompileTemplate(responseDefinition.getProxyBaseUrl()); String newProxyBaseUrl = uncheckedApplyTemplate(proxyBaseUrlTemplate, model); newResponseDefBuilder.proxiedFrom(newProxyBaseUrl);
@Override public MatchResult match(ResponseDefinition responseDefinition) { if (!responseDefinition.specifiesBodyContent()) { return MatchResult.noMatch(); } else if ( responseDefinition.getHeaders() != null && ContentTypes.determineIsTextFromMimeType(responseDefinition.getHeaders().getContentTypeHeader().mimeTypePart()) ) { if (responseDefinition.getBody().length() > textSizeThreshold) { return MatchResult.exactMatch(); } else { return MatchResult.noMatch(); } } else { if (responseDefinition.getByteBody().length > binarySizeThreshold) { return MatchResult.exactMatch(); } else { return MatchResult.noMatch(); } } }
@Override public Response render(ServeEvent serveEvent) { ResponseDefinition responseDefinition = serveEvent.getResponseDefinition(); return response() .status(responseDefinition.getStatus()) .headers(responseDefinition.getHeaders()) .body(responseDefinition.getByteBody()) .build(); } }
private void addRequestHeaders(HttpRequest httpRequest, ResponseDefinition response) { Request originalRequest = response.getOriginalRequest(); for (String key: originalRequest.getAllHeaderKeys()) { if (headerShouldBeTransferred(key)) { if (!HOST_HEADER.equalsIgnoreCase(key) || preserveHostHeader) { List<String> values = originalRequest.header(key).values(); for (String value: values) { httpRequest.addHeader(key, value); } } else { if (hostHeaderValue != null) { httpRequest.addHeader(key, hostHeaderValue); } else if (response.getProxyBaseUrl() != null) { httpRequest.addHeader(key, URI.create(response.getProxyBaseUrl()).getAuthority()); } } } } if (response.getAdditionalProxyRequestHeaders() != null) { for (String key: response.getAdditionalProxyRequestHeaders().keys()) { httpRequest.setHeader(key, response.getAdditionalProxyRequestHeaders().getHeader(key).firstValue()); } } }
@Override public ResponseDefinition execute(Admin admin, Request request, PathParams pathParams) { FileSource fileSource = admin.getOptions().filesRoot().child(FILES_ROOT); File filename = new File(fileSource.getPath(), pathParams.get("filename")); boolean deleted = filename.delete(); if (deleted) { return ResponseDefinition.ok(); } else { return new ResponseDefinition(HTTP_INTERNAL_ERROR, "File not deleted"); } } }
byte[] body = stubMapping.getResponse().getByteBody(); HttpHeaders responseHeaders = stubMapping.getResponse().getHeaders(); String extension = ContentTypes.determineFileExtension( stubMapping.getRequest().getUrl(),
public static ServeEvent forBadRequest(LoggedRequest request, Errors errors) { return new ServeEvent(request, null, ResponseDefinition.badRequest(errors)); }
@Override public ResponseDefinition execute(Admin admin, Request request, PathParams pathParams) { StubMapping newMapping = StubMapping.buildFrom(request.getBodyAsString()); admin.addStubMapping(newMapping); return ResponseDefinition.created(); } }
@Override public ServeEvent serveFor(Request request) { StubMapping matchingMapping = find( mappings, mappingMatchingAndInCorrectScenarioState(request), StubMapping.NOT_CONFIGURED); scenarios.onStubServed(matchingMapping); ResponseDefinition responseDefinition = applyTransformations(request, matchingMapping.getResponse(), ImmutableList.copyOf(transformers.values())); return ServeEvent.of( LoggedRequest.createFrom(request), copyOf(responseDefinition), matchingMapping ); }
@Override public ServeEvent serveStubFor(Request request) { ServeEvent serveEvent = stubMappings.serveFor(request); if (serveEvent.isNoExactMatch()) { LoggedRequest loggedRequest = LoggedRequest.createFrom(request); if (request.isBrowserProxyRequest() && browserProxyingEnabled) { return ServeEvent.of(loggedRequest, ResponseDefinition.browserProxy(request)); } logUnmatchedRequest(loggedRequest); } return serveEvent; }
private void convertBodyFromFileIfNecessary(StubMapping mapping) { String bodyFileName = mapping.getResponse().getBodyFileName(); if (bodyFileName != null) { ResponseDefinitionBuilder responseDefinitionBuilder = ResponseDefinitionBuilder .like(mapping.getResponse()) .withBodyFile(null); String extension = substringAfterLast(bodyFileName, "."); String mimeType = getMimeType(mapping); if (ContentTypes.determineIsText(extension, mimeType)) { TextFile bodyFile = filesFileSource.getTextFileNamed(bodyFileName); responseDefinitionBuilder.withBody(bodyFile.readContentsAsString()); } else { BinaryFile bodyFile = filesFileSource.getBinaryFileNamed(bodyFileName); responseDefinitionBuilder.withBody(bodyFile.readContents()); } mapping.setResponse(responseDefinitionBuilder.build()); } }
public static ResponseDefinition noContent() { return new ResponseDefinition(HTTP_NO_CONTENT, (byte[]) null); }
public static ResponseDefinition notAuthorised() { return new ResponseDefinition(HTTP_UNAUTHORIZED, (byte[]) null); }
public static ResponseDefinition notFound() { return new ResponseDefinition(HTTP_NOT_FOUND, (byte[]) null); }
public static ResponseDefinition ok() { return new ResponseDefinition(HTTP_OK, (byte[]) null); }
public static ResponseDefinition created() { return new ResponseDefinition(HTTP_CREATED, (byte[]) null); }
public static ResponseDefinition copyOf(ResponseDefinition original) { ResponseDefinition newResponseDef = new ResponseDefinition( original.status, original.statusMessage, original.body, original.bodyFileName, original.headers, original.additionalProxyRequestHeaders, original.fixedDelayMilliseconds, original.delayDistribution, original.chunkedDribbleDelay, original.proxyBaseUrl, original.fault, original.transformers, original.transformerParameters, original.wasConfigured ); return newResponseDef; }