public static Matcher<RecordedRequest> pathStartsWith(final String path) { return new TypeSafeMatcher<RecordedRequest>() { @Override protected boolean matchesSafely(RecordedRequest item) { return item.getPath().startsWith(path); } @Override public void describeTo(org.hamcrest.Description description) { description.appendText("getPath should return"); } }; }
public void testUserAgentIsSetInRequestHeader() throws Exception { MockWebServer server = new MockWebServer(); server.enqueue(new MockResponse().setBody("OK")); server.play(); String url = server.getUrl("/").toString(); OkHttpClient client = new OkHttpClient(); client.networkInterceptors().add(new UserAgentInterceptor("foo/bar")); Request testRequest = new Request.Builder().url(url).build() String result = client.newCall(testRequest).execute().body().string(); assertEquals("OK", result); RecordedRequest request = server.takeRequest(); assertEquals("foo/bar", request.getHeader("User-Agent")); }
protected static void assertRequestHasCommonProperties(final RecordedRequest request) { assertEquals(request.getMethod(), "POST"); assertEquals(request.getPath(), rootUrl); assertEquals(request.getHeader(HttpHeaders.AUTHORIZATION), authHeader); assertEquals(request.getHeader(HttpHeaders.ACCEPT), MediaType.TEXT_XML); }
protected RecordedRequest assertSentWithFormData(final MockWebServer server, final String method, final String path, final String body) throws InterruptedException { RecordedRequest request = server.takeRequest(); assertThat(request.getMethod()).isEqualTo(method); assertThat(request.getPath()).isEqualTo(path); assertThat(request.getUtf8Body()).isEqualTo(body); assertThat(request.getHeader(HttpHeaders.ACCEPT)).isEqualTo(APPLICATION_JSON); assertThat(request.getHeader(HttpHeaders.CONTENT_TYPE)).isEqualTo(MediaType.APPLICATION_FORM_URLENCODED); return request; }
protected void assertRequest(RecordedRequest request, String method, String format, Map<String, String> params, Object... objects) throws MalformedURLException, UnsupportedEncodingException { assertEquals(method, request.getMethod()); URI uri = URI.create(request.getPath()); assertEquals(String.format(format, objects), uri.getPath()); assertEquals(params, splitQuery(uri)); }
protected RecordedRequest assertPosted(String region, String postParams, String apiVersion) throws InterruptedException { RecordedRequest request = regionToServers.get(region).takeRequest(); assertEquals(request.getMethod(), "POST"); assertEquals(request.getPath(), "/"); assertEquals(request.getHeader("X-Amz-Date"), "20120416T155408Z"); assertThat( request.getHeader(AUTHORIZATION)).startsWith("AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120416/" + region + "/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature="); String body = new String(request.getBody(), Charsets.UTF_8); assertThat(body).contains("&Version=" + apiVersion); assertEquals(body.replace("&Version=" + apiVersion, ""), postParams); return request; } }
/** Stripping out authorization, ensures the following post params were sent. */ protected RecordedRequest assertPosted(String region, String postParams) throws InterruptedException { RecordedRequest request = regionToServers.get(region).takeRequest(); assertEquals(request.getMethod(), "POST"); assertEquals(request.getPath(), "/"); assertEquals(new String(request.getBody(), Charsets.UTF_8).replaceAll("&Signature.*", ""), postParams); return request; } }
@NonNull private JSONObject inspectPostData() throws InterruptedException, JSONException { System.out.println("Testing POST data..."); RecordedRequest recordedRequest = server.takeRequest(); String method = recordedRequest.getMethod(); assertNotNull(method); assertEquals("POST", method.toUpperCase()); assertNotNull(recordedRequest.getBody()); String requestBody = recordedRequest.getBody().readUtf8(); assertNotNull(requestBody); JSONObject postData = new JSONObject(requestBody); assertTrue(postData.has("tags")); assertTrue(postData.has("user")); assertTrue(postData.has("device")); assertTrue(postData.has("app")); System.out.println("POST data validity passed!"); return postData; }
private void handleWebSocketUpgrade(Socket socket, BufferedSource source, BufferedSink sink, RecordedRequest request, MockResponse response) throws IOException { String key = request.getHeader("Sec-WebSocket-Key"); String acceptKey = Util.shaBase64(key + WebSocketProtocol.ACCEPT_MAGIC); response.setHeader("Sec-WebSocket-Accept", acceptKey); Util.threadFactory(String.format("MockWebServer %s WebSocket", request.getPath()), true)); replyExecutor.allowCoreThreadTimeOut(true); final RealWebSocket webSocket = new RealWebSocket(false /* is server */, source, sink, new SecureRandom(), replyExecutor, listener, request.getPath()) { @Override protected void close() throws IOException { connectionClose.countDown(); String scheme = request.getTlsVersion() != null ? "https" : "http"; String authority = request.getHeader("Host"); // Has host and port. final Request fancyRequest = new Request.Builder() .url(scheme + "://" + authority + "/") .headers(request.getHeaders()) .build(); final Response fancyResponse = new Response.Builder()
public void deleteMetadata() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(accountResponse())); try { SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift"); assertTrue(api.getAccountApi("DFW").deleteMetadata(metadata)); assertEquals(server.getRequestCount(), 2); assertEquals(server.takeRequest().getRequestLine(), "POST /tokens HTTP/1.1"); RecordedRequest deleteRequest = server.takeRequest(); assertEquals(deleteRequest.getRequestLine(), "POST /v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9 HTTP/1.1"); for (String key : metadata.keySet()) { assertEquals(deleteRequest.getHeader(ACCOUNT_REMOVE_METADATA_PREFIX + key.toLowerCase()), "ignored"); } } finally { server.shutdown(); } }
public void testDownloadFileByIdOptions() throws Exception { MockWebServer server = createMockWebServer(); server.enqueue(new MockResponse().setBody(stringFromResource("/authorize_account_response.json"))); server.enqueue(new MockResponse() .addHeader(HttpHeaders.CONTENT_TYPE, CONTENT_TYPE) .addHeader(B2Headers.FILE_ID, FILE_ID) .addHeader(B2Headers.FILE_NAME, FILE_NAME) .addHeader(B2Headers.CONTENT_SHA1, SHA1) .addHeader(B2Headers.UPLOAD_TIMESTAMP, String.valueOf(1500000000000L)) .addHeader(B2Headers.FILE_INFO_PREFIX + FILE_INFO.entrySet().iterator().next().getKey(), FILE_INFO.entrySet().iterator().next().getValue()) .setBody(PAYLOAD)); try { ObjectApi api = api(server.getUrl("/").toString(), "b2").getObjectApi(); B2Object b2Object = api.downloadFileById(FILE_ID, new GetOptions().range(42, 69)); assertThat(server.getRequestCount()).isEqualTo(2); RecordedRequest request = server.takeRequest(); assertThat(request.getMethod()).isEqualTo("GET"); assertThat(request.getPath()).isEqualTo("/b2api/v2/b2_authorize_account"); request = server.takeRequest(); assertThat(request.getMethod()).isEqualTo("GET"); assertThat(request.getPath()).isEqualTo("/b2api/v2/b2_download_file_by_id?fileId=4_h4a48fe8875c6214145260818_f000000000000472a_d20140104_m032022_c001_v0000123_t0104"); assertThat(request.getHeaders()).contains("Range: bytes=42-69"); } finally { server.shutdown(); } }
@Override public MockResponse dispatch(RecordedRequest request) throws InterruptedException { // To permit interactive/browser testing, ignore requests for favicons. final String requestLine = request.getRequestLine(); if (requestLine != null && requestLine.equals("GET /favicon.ico HTTP/1.1")) { logger.info("served " + requestLine); return new MockResponse().setResponseCode(HttpURLConnection.HTTP_NOT_FOUND); } if (failFastResponse != null && responseQueue.peek() == null) { // Fail fast if there's no response queued up. return failFastResponse; } return responseQueue.take(); }
public void testUpdateMetadataContentType() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(objectResponse() .addHeader(OBJECT_METADATA_PREFIX + "ApiName", "swift") .addHeader(OBJECT_METADATA_PREFIX + "ApiVersion", "v1.1"))); try { SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift"); api.getObjectApi("DFW", "myContainer").updateMetadata("myObject", metadata); assertEquals(server.getRequestCount(), 2); assertEquals(server.takeRequest().getRequestLine(), "POST /tokens HTTP/1.1"); RecordedRequest replaceRequest = server.takeRequest(); assertEquals(replaceRequest.getHeaders("Content-Type").get(0), "", "updateMetadata should send an empty content-type header, but sent " + replaceRequest.getHeaders("Content-Type").get(0).toString()); assertEquals(replaceRequest.getRequestLine(), "POST /v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/myContainer/myObject HTTP/1.1"); for (Entry<String, String> entry : metadata.entrySet()) { assertEquals(replaceRequest.getHeader(OBJECT_METADATA_PREFIX + entry.getKey().toLowerCase()), entry.getValue()); } } finally { server.shutdown(); } }
protected RecordedRequest assertSent(MockWebServer server, String method, String path, String json) throws InterruptedException { RecordedRequest request = server.takeRequest(); assertEquals(request.getHeader("Content-Type"), APPLICATION_JSON); assertEquals(parser.parse(request.getUtf8Body()), parser.parse(json)); return request; } }
public void testZeroLengthPutHasContentLengthHeader() throws IOException, InterruptedException { MockWebServer server = new MockWebServer(); server.enqueue(new MockResponse().addHeader(ETAG, "ABCDEF")); server.play(); S3Client client = getS3Client(server.getUrl("/")); S3Object nada = client.newS3Object(); nada.getMetadata().setKey("object"); nada.setPayload(new byte[] {}); assertEquals(client.putObject("bucket", nada), "ABCDEF"); RecordedRequest request = server.takeRequest(); assertEquals(request.getRequestLine(), "PUT /bucket/object HTTP/1.1"); assertEquals(request.getHeaders(CONTENT_LENGTH), ImmutableList.of("0")); assertThat(request.getHeaders(EXPECT)).isEmpty(); server.shutdown(); }
public static Matcher<RecordedRequest> httpMethodIs(final String httpMethod) { return new TypeSafeMatcher<RecordedRequest>() { @Override protected boolean matchesSafely(RecordedRequest item) { return httpMethod.equals(item.getMethod()); } @Override public void describeTo(org.hamcrest.Description description) { description.appendText("getMethod should return"); } }; }
/** * Ensures the request has a json header. * * @param request * @see RecordedRequest */ private void assertContentTypeIsJSON(RecordedRequest request) { assertTrue(request.getHeaders().contains("Content-Type: application/json")); }
protected RecordedRequest assertSent(MockWebServer server, String method, String path) throws InterruptedException { RecordedRequest request = server.takeRequest(); assertEquals(request.getMethod(), method); assertEquals(request.getPath(), path); assertEquals(request.getHeader("Accept"), APPLICATION_JSON); assertEquals(request.getHeader("Authorization"), "Bearer " + credential); return request; }