| /* |
| * Copyright (C) 2011 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.google.mockwebserver; |
| |
| import java.io.BufferedReader; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.InputStreamReader; |
| import java.net.HttpURLConnection; |
| import java.net.SocketTimeoutException; |
| import java.net.URL; |
| import java.net.URLConnection; |
| import junit.framework.TestCase; |
| |
| public final class MockWebServerTest extends TestCase { |
| |
| private MockWebServer server = new MockWebServer(); |
| |
| @Override protected void setUp() throws Exception { |
| super.setUp(); |
| } |
| |
| @Override protected void tearDown() throws Exception { |
| server.shutdown(); |
| super.tearDown(); |
| } |
| |
| public void testRegularResponse() throws Exception { |
| server.enqueue(new MockResponse().setBody("hello world")); |
| server.play(); |
| |
| URL url = server.getUrl("/"); |
| HttpURLConnection connection = (HttpURLConnection) url.openConnection(); |
| connection.setRequestProperty("Accept-Language", "en-US"); |
| InputStream in = connection.getInputStream(); |
| BufferedReader reader = new BufferedReader(new InputStreamReader(in)); |
| assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); |
| assertEquals("hello world", reader.readLine()); |
| |
| RecordedRequest request = server.takeRequest(); |
| assertEquals("GET / HTTP/1.1", request.getRequestLine()); |
| assertTrue(request.getHeaders().contains("Accept-Language: en-US")); |
| } |
| |
| public void testRedirect() throws Exception { |
| server.play(); |
| server.enqueue(new MockResponse() |
| .setResponseCode(HttpURLConnection.HTTP_MOVED_TEMP) |
| .addHeader("Location: " + server.getUrl("/new-path")) |
| .setBody("This page has moved!")); |
| server.enqueue(new MockResponse().setBody("This is the new location!")); |
| |
| URLConnection connection = server.getUrl("/").openConnection(); |
| InputStream in = connection.getInputStream(); |
| BufferedReader reader = new BufferedReader(new InputStreamReader(in)); |
| assertEquals("This is the new location!", reader.readLine()); |
| |
| RecordedRequest first = server.takeRequest(); |
| assertEquals("GET / HTTP/1.1", first.getRequestLine()); |
| RecordedRequest redirect = server.takeRequest(); |
| assertEquals("GET /new-path HTTP/1.1", redirect.getRequestLine()); |
| } |
| |
| public void testNonHexadecimalChunkSize() throws Exception { |
| server.enqueue(new MockResponse() |
| .setBody("G\r\nxxxxxxxxxxxxxxxx\r\n0\r\n\r\n") |
| .clearHeaders() |
| .addHeader("Transfer-encoding: chunked")); |
| server.play(); |
| |
| URLConnection connection = server.getUrl("/").openConnection(); |
| InputStream in = connection.getInputStream(); |
| try { |
| in.read(); |
| fail(); |
| } catch (IOException expected) { |
| } |
| } |
| |
| public void testResponseTimeout() throws Exception { |
| server.enqueue(new MockResponse() |
| .setBody("ABC") |
| .clearHeaders() |
| .addHeader("Content-Length: 4")); |
| server.enqueue(new MockResponse() |
| .setBody("DEF")); |
| server.play(); |
| |
| URLConnection urlConnection = server.getUrl("/").openConnection(); |
| urlConnection.setReadTimeout(1000); |
| InputStream in = urlConnection.getInputStream(); |
| assertEquals('A', in.read()); |
| assertEquals('B', in.read()); |
| assertEquals('C', in.read()); |
| try { |
| in.read(); // if Content-Length was accurate, this would return -1 immediately |
| fail(); |
| } catch (SocketTimeoutException expected) { |
| } |
| |
| URLConnection urlConnection2 = server.getUrl("/").openConnection(); |
| InputStream in2 = urlConnection2.getInputStream(); |
| assertEquals('D', in2.read()); |
| assertEquals('E', in2.read()); |
| assertEquals('F', in2.read()); |
| assertEquals(-1, in2.read()); |
| |
| assertEquals(0, server.takeRequest().getSequenceNumber()); |
| assertEquals(0, server.takeRequest().getSequenceNumber()); |
| } |
| } |