Refine search
public static void main(String... args) throws IOException, InterruptedException { MockWebServer server = new MockWebServer(); server.start(); server.enqueue(new MockResponse()); Retrofit retrofit = new Retrofit.Builder() .baseUrl(server.url("/")) .addConverterFactory(new JsonStringConverterFactory(GsonConverterFactory.create())) .build(); Service service = retrofit.create(Service.class); Call<ResponseBody> call = service.example(new Filter("123")); Response<ResponseBody> response = call.execute(); // TODO handle user response... // Print the request path that the server saw to show the JSON query param: RecordedRequest recordedRequest = server.takeRequest(); System.out.println(recordedRequest.getPath()); server.shutdown(); } }
private MockResponse getRequest(RecordedRequest request, byte[] body, String contentType) { if (request.getMethod().equals("OPTIONS")) { return new MockResponse().setResponseCode(200).setHeader("Allow", "GET, OPTIONS, HEAD, TRACE"); } Buffer buf = new Buffer(); buf.write(body); MockResponse response = new MockResponse() .setHeader("Content-Length", body.length) .setBody(buf) .setResponseCode(200); if (contentType != null) { response = response.setHeader("Content-Type", contentType); } return response; }
HttpUrl requestUrl = mockWebServer.url(request.getPath()); String code = requestUrl.queryParameter("code"); String stateString = requestUrl.queryParameter("state"); ByteString state = stateString != null ? ByteString.decodeBase64(stateString) : null; return new MockResponse() .setResponseCode(404) .setBody("unexpected request"); listener.sessionGranted(session); } catch (IOException e) { return new MockResponse() .setResponseCode(400) .setBody("code exchange failed: " + e.getMessage()); return new MockResponse() .setResponseCode(302) .addHeader("Location", "https://twitter.com/CuteEmergency/status/789457462864863232");
/** * Attempts to perform a web socket upgrade on the connection. This will overwrite any previously * set status or body. */ public MockResponse withWebSocketUpgrade(WebSocketListener listener) { setStatus("HTTP/1.1 101 Switching Protocols"); setHeader("Connection", "Upgrade"); setHeader("Upgrade", "websocket"); body = null; webSocketListener = listener; return this; }
/** * Returns an early guess of the next response, used for policy on how an incoming request should * be received. The default implementation returns an empty response. Mischievous implementations * can return other values to test HTTP edge cases, such as unhappy socket policies or throttled * request bodies. */ public MockResponse peek() { return new MockResponse().setSocketPolicy(SocketPolicy.KEEP_OPEN); }
/** Creates a new mock response with an empty body. */ public MockResponse() { setResponseCode(200); setHeader("Content-Length", 0); }
@Test public void testHandlesRedirect302s() throws Exception { String expected = "fakedata"; mockWebServer.enqueue(new MockResponse().setResponseCode(302) .setHeader("Location", mockWebServer.url("/redirect").toString())); mockWebServer.enqueue(new MockResponse().setResponseCode(200).setBody(expected)); getFetcher().loadData(Priority.LOW, callback); waitForResponseLatch.await(); verify(callback).onDataReady(streamCaptor.capture()); assertStreamOf(expected, streamCaptor.getValue()); }
@Test public void testHandlesRedirect301s() throws Exception { String expected = "fakedata"; mockWebServer.enqueue(new MockResponse().setResponseCode(301) .setHeader("Location", mockWebServer.url("/redirect").toString())); mockWebServer.enqueue(new MockResponse().setResponseCode(200).setBody(expected)); getFetcher().loadData(Priority.LOW, callback); verify(callback).onDataReady(streamCaptor.capture()); TestUtil.assertStreamOf(expected, streamCaptor.getValue()); assertThat(mockWebServer.takeRequest().getMethod()).isEqualTo("GET"); assertThat(mockWebServer.takeRequest().getMethod()).isEqualTo("GET"); }
@Before public void setup() throws Exception { this.server = new MockWebServer(); this.server.start(); this.server.enqueue(new MockResponse().setBody(jwkSet)); this.decoder = new NimbusReactiveJwtDecoder(this.server.url("/certs").toString()); }
private void doSingleParseHttpClientExecuteWithGzipResponse( int responseCode, String responseStatus, final String responseContent, ParseHttpClient client) throws Exception { MockWebServer server = new MockWebServer(); Buffer buffer = new Buffer(); ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); GZIPOutputStream gzipOut = new GZIPOutputStream(byteOut); gzipOut.write(responseContent.getBytes()); gzipOut.close(); buffer.write(byteOut.toByteArray()); MockResponse mockResponse = new MockResponse() .setStatus("HTTP/1.1 " + responseCode + " " + responseStatus) .setBody(buffer) .setHeader("Content-Encoding", "gzip"); server.enqueue(mockResponse); server.start(); String requestUrl = server.url("/").toString(); ParseHttpRequest parseRequest = new ParseHttpRequest.Builder() .setUrl(requestUrl) assertEquals(ParseHttpRequest.Method.GET.toString(), recordedRequest.getMethod()); Headers recordedHeaders = recordedRequest.getHeaders();
@Test public void send_posts_payload_to_http_server() throws Exception { Webhook webhook = new Webhook(WEBHOOK_UUID, PROJECT_UUID, CE_TASK_UUID, RandomStringUtils.randomAlphanumeric(40),"my-webhook", server.url("/ping").toString()); server.enqueue(new MockResponse().setBody("pong").setResponseCode(201)); WebhookDelivery delivery = newSender().call(webhook, PAYLOAD); assertThat(delivery.getHttpStatus()).hasValue(201); assertThat(delivery.getWebhook().getUuid()).isEqualTo(WEBHOOK_UUID); assertThat(delivery.getDurationInMs().get()).isGreaterThanOrEqualTo(0); assertThat(delivery.getError()).isEmpty(); assertThat(delivery.getAt()).isEqualTo(NOW); assertThat(delivery.getWebhook()).isSameAs(webhook); assertThat(delivery.getPayload()).isSameAs(PAYLOAD); RecordedRequest recordedRequest = server.takeRequest(); assertThat(recordedRequest.getMethod()).isEqualTo("POST"); assertThat(recordedRequest.getPath()).isEqualTo("/ping"); assertThat(recordedRequest.getBody().readUtf8()).isEqualTo(PAYLOAD.getJson()); assertThat(recordedRequest.getHeader("User-Agent")).isEqualTo("SonarQube/6.2"); assertThat(recordedRequest.getHeader("Content-Type")).isEqualTo("application/json; charset=utf-8"); assertThat(recordedRequest.getHeader("X-SonarQube-Project")).isEqualTo(PAYLOAD.getProjectKey()); }
@Test public void testParseOkHttpClientExecuteWithGZIPResponse() throws Exception { // Make mock response Buffer buffer = new Buffer(); final ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); GZIPOutputStream gzipOut = new GZIPOutputStream(byteOut); gzipOut.write("content".getBytes()); gzipOut.close(); buffer.write(byteOut.toByteArray()); MockResponse mockResponse = new MockResponse() .setStatus("HTTP/1.1 " + 201 + " " + "OK") .setBody(buffer) .setHeader("Content-Encoding", "gzip"); // Start mock server server.enqueue(mockResponse); server.start(); ParseHttpClient client = ParseHttpClient.createClient(new OkHttpClient.Builder()); // We do not need to add Accept-Encoding header manually, httpClient library should do that. String requestUrl = server.url("/").toString(); ParseHttpRequest parseRequest = new ParseHttpRequest.Builder() .setUrl(requestUrl) .setMethod(ParseHttpRequest.Method.GET) .build(); // Execute request ParseHttpResponse parseResponse = client.execute(parseRequest); // Make sure the response we get is ungziped by OkHttp library byte[] content = ParseIOUtils.toByteArray(parseResponse.getContent()); assertArrayEquals("content".getBytes(), content); server.shutdown(); }
private MockResponse patchRequest(RecordedRequest request, String expectedRequestContent, String contentType, byte[] responseBody) { assertEquals("PATCH", request.getMethod()); assertTrue("Invalid request content-length", Integer.parseInt(request.getHeader("Content-Length")) > 0); String requestContentType = request.getHeader("Content-Type"); assertNotNull("No content-type", requestContentType); Charset charset = StandardCharsets.ISO_8859_1; if (requestContentType.contains("charset=")) { String charsetName = requestContentType.split("charset=")[1]; charset = Charset.forName(charsetName); } assertEquals("Invalid request body", expectedRequestContent, request.getBody().readString(charset)); Buffer buf = new Buffer(); buf.write(responseBody); return new MockResponse().setResponseCode(201) .setHeader("Content-Length", responseBody.length) .setHeader("Content-Type", contentType) .setBody(buf); }
private void doSingleParseHttpClientExecuteWithResponse(int responseCode, String responseStatus, String responseContent, ParseHttpClient client) throws Exception { MockWebServer server = new MockWebServer(); MockResponse mockResponse = new MockResponse() .setStatus("HTTP/1.1 " + responseCode + " " + responseStatus) .setBody(responseContent); server.enqueue(mockResponse); server.start(); requestHeaders.put("User-Agent", "Parse Android SDK"); String requestUrl = server.url("/").toString(); JSONObject json = new JSONObject(); json.put("key", "value"); assertEquals(ParseHttpRequest.Method.POST.toString(), recordedApacheRequest.getMethod()); Headers recordedApacheHeaders = recordedApacheRequest.getHeaders(); Set<String> recordedApacheHeadersNames = recordedApacheHeaders.names(); for (String name : parseRequest.getAllHeaders().keySet()) { assertEquals(requestContentLength, recordedApacheRequest.getBodySize()); assertArrayEquals(requestContent.getBytes(), recordedApacheRequest.getBody().readByteArray());
@Test public void testWithResponseCompression() throws IOException { ByteArrayOutputStream capturedOutput = hookAlmostRealInterpretResponseStream(mMockEventReporter); byte[] uncompressedData = repeat(".", 1024).getBytes(); byte[] compressedData = compress(uncompressedData); MockWebServer server = new MockWebServer(); server.start(); server.enqueue(new MockResponse() .setBody(new Buffer().write(compressedData)) .addHeader("Content-Encoding: gzip")); Request request = new Request.Builder() .url(server.url("/")) .build(); Response response = mClientWithInterceptor.newCall(request).execute(); // Verify that the final output and the caller both saw the uncompressed stream. assertArrayEquals(uncompressedData, response.body().bytes()); assertArrayEquals(uncompressedData, capturedOutput.toByteArray()); // And verify that the StethoInterceptor was able to see both. Mockito.verify(mMockEventReporter) .dataReceived( anyString(), eq(compressedData.length), eq(uncompressedData.length)); server.shutdown(); }
@Test public void use_proxy_authentication_wrong_crendentials() throws Exception { try (MockWebServer proxy = new MockWebServer()) { proxy.start(); underTest = HttpConnector.newBuilder() .url(serverUrl) .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy.getHostName(), proxy.getPort()))) .proxyCredentials("theProxyLogin", "wrongPassword") .build(); GetRequest request = new GetRequest("api/issues/search"); proxy.enqueue(new MockResponse().setResponseCode(407)); proxy.enqueue(new MockResponse().setResponseCode(407)); proxy.enqueue(new MockResponse().setResponseCode(407)); underTest.call(request); RecordedRequest recordedRequest = proxy.takeRequest(); assertThat(recordedRequest.getHeader("Proxy-Authorization")).isNull(); recordedRequest = proxy.takeRequest(); assertThat(recordedRequest.getHeader("Proxy-Authorization")).isEqualTo(basic("theProxyLogin", "wrongPassword")); assertThat(proxy.getRequestCount()).isEqualTo(2); } }
@Test public void send_basic_authentication_header_if_url_contains_credentials() throws Exception { HttpUrl url = server.url("/ping").newBuilder().username("theLogin").password("thePassword").build(); Webhook webhook = new Webhook(WEBHOOK_UUID, PROJECT_UUID, CE_TASK_UUID, RandomStringUtils.randomAlphanumeric(40),"my-webhook", url.toString()); server.enqueue(new MockResponse().setBody("pong")); WebhookDelivery delivery = newSender().call(webhook, PAYLOAD); assertThat(delivery.getWebhook().getUrl()) .isEqualTo(url.toString()) .contains("://theLogin:thePassword@"); RecordedRequest recordedRequest = takeAndVerifyPostRequest("/ping"); assertThat(recordedRequest.getHeader("Authorization")).isEqualTo(Credentials.basic(url.username(), url.password())); }
@Test public void follow_redirects_post() throws IOException, InterruptedException { MockWebServer server2 = new MockWebServer(); server2.start(); server2.url("").url().toString(); server.enqueue(new MockResponse() .setResponseCode(302) .setHeader("Location", server2.url("").url().toString())); server2.enqueue(new MockResponse() .setResponseCode(200)); underTest = HttpConnector.newBuilder().url(serverUrl).build(); PostRequest request = new PostRequest("api/ce/submit").setParam("projectKey", "project"); WsResponse response = underTest.call(request); RecordedRequest recordedRequest = server2.takeRequest(); assertThat(recordedRequest.getMethod()).isEqualTo("POST"); assertThat(recordedRequest.getBody().readUtf8()).isEqualTo("projectKey=project"); assertThat(response.requestUrl()).isEqualTo(server2.url("").url().toString()); assertThat(response.code()).isEqualTo(200); }
@Test public void credentials_are_propagated_to_POST_redirects() throws Exception { HttpUrl url = server.url("/redirect").newBuilder().username("theLogin").password("thePassword").build(); Webhook webhook = new Webhook(WEBHOOK_UUID, PROJECT_UUID, CE_TASK_UUID, RandomStringUtils.randomAlphanumeric(40),"my-webhook", url.toString()); // /redirect redirects to /target server.enqueue(new MockResponse().setResponseCode(307).setHeader("Location", server.url("target"))); server.enqueue(new MockResponse().setResponseCode(200)); WebhookDelivery delivery = newSender().call(webhook, PAYLOAD); assertThat(delivery.getHttpStatus().get()).isEqualTo(200); RecordedRequest redirectedRequest = takeAndVerifyPostRequest("/redirect"); assertThat(redirectedRequest.getHeader("Authorization")).isEqualTo(Credentials.basic(url.username(), url.password())); RecordedRequest targetRequest = takeAndVerifyPostRequest("/target"); assertThat(targetRequest.getHeader("Authorization")).isEqualTo(Credentials.basic(url.username(), url.password())); }
/** * Enqueue download of file with a MD5 that may not be returned (null) or not valid */ private void enqueueDownload(File file, @Nullable String md5) throws IOException { Buffer body = new Buffer(); body.write(FileUtils.readFileToByteArray(file)); MockResponse response = new MockResponse().setBody(body); if (md5 != null) { response.setHeader("Sonar-MD5", md5); } server.enqueue(response); }