1a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath/*
2a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath * Copyright (C) 2013 Square, Inc.
3a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath *
4a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath * Licensed under the Apache License, Version 2.0 (the "License");
5a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath * you may not use this file except in compliance with the License.
6a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath * You may obtain a copy of the License at
7a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath *
8a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath *      http://www.apache.org/licenses/LICENSE-2.0
9a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath *
10a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath * Unless required by applicable law or agreed to in writing, software
11a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath * distributed under the License is distributed on an "AS IS" BASIS,
12a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath * See the License for the specific language governing permissions and
14a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath * limitations under the License.
15a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath */
16a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathpackage com.squareup.okhttp.internal;
17a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
18a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport com.google.mockwebserver.MockResponse;
19a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport com.google.mockwebserver.MockWebServer;
20a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport com.google.mockwebserver.RecordedRequest;
21a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport com.squareup.okhttp.MediaType;
22a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport com.squareup.okhttp.OkHttpClient;
23a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport com.squareup.okhttp.Request;
24a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport org.junit.After;
25a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport org.junit.Test;
26a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
27a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport static org.junit.Assert.assertEquals;
28a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathimport static org.junit.Assert.assertTrue;
29a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
30a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamathpublic final class AsyncApiTest {
31a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath  private MockWebServer server = new MockWebServer();
32a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath  private OkHttpClient client = new OkHttpClient();
33a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath  private RecordingReceiver receiver = new RecordingReceiver();
34a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
35a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath  @After public void tearDown() throws Exception {
36a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    server.shutdown();
37a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath  }
38a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
39a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath  @Test public void get() throws Exception {
40a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    server.enqueue(new MockResponse()
41a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .setBody("abc")
42a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .addHeader("Content-Type: text/plain"));
43a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    server.play();
44a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
45a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    Request request = new Request.Builder(server.getUrl("/"))
46a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .header("User-Agent", "AsyncApiTest")
47a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .build();
48a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    client.enqueue(request, receiver);
49a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
50a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    receiver.await(request)
51a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .assertCode(200)
52a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .assertContainsHeaders("Content-Type: text/plain")
53a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .assertBody("abc");
54a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
55a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    assertTrue(server.takeRequest().getHeaders().contains("User-Agent: AsyncApiTest"));
56a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath  }
57a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
58a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath  @Test public void post() throws Exception {
59a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    server.enqueue(new MockResponse().setBody("abc"));
60a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    server.play();
61a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
62a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    Request request = new Request.Builder(server.getUrl("/"))
63a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .post(Request.Body.create(MediaType.parse("text/plain"), "def"))
64a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .build();
65a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    client.enqueue(request, receiver);
66a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
67a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    receiver.await(request)
68a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .assertCode(200)
69a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath        .assertBody("abc");
70a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath
71a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    RecordedRequest recordedRequest = server.takeRequest();
72a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    assertEquals("def", recordedRequest.getUtf8Body());
73a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath    assertEquals("3", recordedRequest.getHeader("Content-Length"));
74a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath  }
75a82f42bbeedd0b07f3892f3b0efaa8122dc8f264Narayan Kamath}
76