• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2019 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.net.test;
6 
7 import static com.google.common.truth.Truth.assertThat;
8 
9 import static org.junit.Assert.assertThrows;
10 
11 import android.content.Context;
12 
13 import androidx.test.core.app.ApplicationProvider;
14 import androidx.test.ext.junit.runners.AndroidJUnit4;
15 import androidx.test.filters.SmallTest;
16 
17 import com.google.common.collect.Range;
18 
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 
23 import org.chromium.net.CronetEngine;
24 import org.chromium.net.impl.JavaCronetEngineBuilderImpl;
25 
26 import java.util.AbstractMap;
27 import java.util.List;
28 import java.util.Map;
29 
30 /** Test functionality of {@link FakeCronetController}. */
31 @RunWith(AndroidJUnit4.class)
32 public class FakeCronetControllerTest {
33     Context mContext;
34     FakeCronetController mFakeCronetController;
35 
36     @Before
setUp()37     public void setUp() {
38         mContext = ApplicationProvider.getApplicationContext();
39         mFakeCronetController = new FakeCronetController();
40     }
41 
42     @Test
43     @SmallTest
testGetFakeCronetEnginesStartsEmpty()44     public void testGetFakeCronetEnginesStartsEmpty() {
45         List<CronetEngine> engines = FakeCronetController.getFakeCronetEngines();
46         assertThat(engines).isEmpty();
47     }
48 
49     @Test
50     @SmallTest
testGetFakeCronetEnginesIncludesCreatedEngineInOrder()51     public void testGetFakeCronetEnginesIncludesCreatedEngineInOrder() {
52         // Create an instance with the controller.
53         CronetEngine engine = mFakeCronetController.newFakeCronetEngineBuilder(mContext).build();
54         // Create an instance with the provider.
55         FakeCronetProvider provider = new FakeCronetProvider(mContext);
56         CronetEngine providerEngine = provider.createBuilder().build();
57         List<CronetEngine> engines = FakeCronetController.getFakeCronetEngines();
58 
59         assertThat(engines).containsExactly(engine, providerEngine).inOrder();
60     }
61 
62     @Test
63     @SmallTest
testGetControllerGetsCorrectController()64     public void testGetControllerGetsCorrectController() {
65         // Create an instance with the controller.
66         CronetEngine engine = mFakeCronetController.newFakeCronetEngineBuilder(mContext).build();
67         CronetEngine engine2 = mFakeCronetController.newFakeCronetEngineBuilder(mContext).build();
68 
69         // Create two engines with a second controller.
70         FakeCronetController newController = new FakeCronetController();
71         CronetEngine newControllerEngine =
72                 newController.newFakeCronetEngineBuilder(mContext).build();
73         CronetEngine newControllerEngine2 =
74                 newController.newFakeCronetEngineBuilder(mContext).build();
75 
76         // Create an instance with the provider.
77         FakeCronetProvider provider = new FakeCronetProvider(mContext);
78         CronetEngine providerEngine = provider.createBuilder().build();
79 
80         assertThat(FakeCronetController.getControllerForFakeEngine(engine))
81                 .isEqualTo(mFakeCronetController);
82         assertThat(FakeCronetController.getControllerForFakeEngine(engine2))
83                 .isEqualTo(mFakeCronetController);
84         assertThat(FakeCronetController.getControllerForFakeEngine(newControllerEngine))
85                 .isEqualTo(newController);
86         assertThat(FakeCronetController.getControllerForFakeEngine(newControllerEngine2))
87                 .isEqualTo(newController);
88 
89         // TODO(kirchman): Test which controller the provider-created engine uses once the fake
90         // UrlRequest class has been implemented.
91         assertThat(FakeCronetController.getControllerForFakeEngine(providerEngine))
92                 .isNotEqualTo(mFakeCronetController);
93         assertThat(FakeCronetController.getControllerForFakeEngine(providerEngine))
94                 .isNotEqualTo(newController);
95         assertThat(FakeCronetController.getControllerForFakeEngine(providerEngine)).isNotNull();
96     }
97 
98     @Test
99     @SmallTest
testAddNonFakeCronetEngineNotAllowed()100     public void testAddNonFakeCronetEngineNotAllowed() {
101         CronetEngine javaEngine = new JavaCronetEngineBuilderImpl(mContext).build();
102 
103         IllegalArgumentException e =
104                 assertThrows(
105                         IllegalArgumentException.class,
106                         () -> FakeCronetController.getControllerForFakeEngine(javaEngine));
107         assertThat(e)
108                 .hasMessageThat()
109                 .isEqualTo("Provided CronetEngine is not a fake CronetEngine");
110     }
111 
112     @Test
113     @SmallTest
testShutdownRemovesCronetEngine()114     public void testShutdownRemovesCronetEngine() {
115         CronetEngine engine = mFakeCronetController.newFakeCronetEngineBuilder(mContext).build();
116         CronetEngine engine2 = mFakeCronetController.newFakeCronetEngineBuilder(mContext).build();
117         List<CronetEngine> engines = FakeCronetController.getFakeCronetEngines();
118         assertThat(engines).containsExactly(engine, engine2);
119 
120         engine.shutdown();
121         engines = FakeCronetController.getFakeCronetEngines();
122 
123         assertThat(engines).containsExactly(engine2);
124     }
125 
126     @Test
127     @SmallTest
testResponseMatchersConsultedInOrderOfAddition()128     public void testResponseMatchersConsultedInOrderOfAddition() {
129         String url = "url";
130         FakeUrlResponse response =
131                 new FakeUrlResponse.Builder().setResponseBody("body text".getBytes()).build();
132         ResponseMatcher matcher = new UrlResponseMatcher(url, response);
133         mFakeCronetController.addResponseMatcher(matcher);
134         mFakeCronetController.addSuccessResponse(url, "different text".getBytes());
135 
136         FakeUrlResponse foundResponse = mFakeCronetController.getResponse(url, null, null, null);
137 
138         assertThat(foundResponse).isEqualTo(response);
139     }
140 
141     @Test
142     @SmallTest
testRemoveResponseMatcher()143     public void testRemoveResponseMatcher() {
144         String url = "url";
145         FakeUrlResponse response =
146                 new FakeUrlResponse.Builder().setResponseBody("body text".getBytes()).build();
147         ResponseMatcher matcher = new UrlResponseMatcher(url, response);
148         mFakeCronetController.addResponseMatcher(matcher);
149         mFakeCronetController.removeResponseMatcher(matcher);
150 
151         FakeUrlResponse foundResponse = mFakeCronetController.getResponse(url, null, null, null);
152 
153         assertThat(foundResponse.getHttpStatusCode()).isEqualTo(404);
154         assertThat(foundResponse).isNotEqualTo(response);
155     }
156 
157     @Test
158     @SmallTest
testClearResponseMatchers()159     public void testClearResponseMatchers() {
160         String url = "url";
161         FakeUrlResponse response =
162                 new FakeUrlResponse.Builder().setResponseBody("body text".getBytes()).build();
163         ResponseMatcher matcher = new UrlResponseMatcher(url, response);
164         mFakeCronetController.addResponseMatcher(matcher);
165         mFakeCronetController.clearResponseMatchers();
166 
167         FakeUrlResponse foundResponse = mFakeCronetController.getResponse(url, null, null, null);
168 
169         assertThat(foundResponse.getHttpStatusCode()).isEqualTo(404);
170         assertThat(foundResponse).isNotEqualTo(response);
171     }
172 
173     @Test
174     @SmallTest
testAddUrlResponseMatcher()175     public void testAddUrlResponseMatcher() {
176         String url = "url";
177         FakeUrlResponse response =
178                 new FakeUrlResponse.Builder().setResponseBody("body text".getBytes()).build();
179         mFakeCronetController.addResponseForUrl(response, url);
180 
181         FakeUrlResponse foundResponse = mFakeCronetController.getResponse(url, null, null, null);
182 
183         assertThat(foundResponse).isEqualTo(response);
184     }
185 
186     @Test
187     @SmallTest
testDefaultResponseIs404()188     public void testDefaultResponseIs404() {
189         FakeUrlResponse foundResponse = mFakeCronetController.getResponse("url", null, null, null);
190 
191         assertThat(foundResponse.getHttpStatusCode()).isEqualTo(404);
192     }
193 
194     @Test
195     @SmallTest
testAddRedirectResponse()196     public void testAddRedirectResponse() {
197         String url = "url";
198         String location = "/TEST_REDIRECT_LOCATION";
199         mFakeCronetController.addRedirectResponse(location, url);
200 
201         FakeUrlResponse foundResponse = mFakeCronetController.getResponse("url", null, null, null);
202         Map.Entry<String, String> headerEntry = new AbstractMap.SimpleEntry<>("location", location);
203 
204         assertThat(foundResponse.getAllHeadersList()).contains(headerEntry);
205         assertThat(foundResponse.getHttpStatusCode()).isIn(Range.closedOpen(300, 400));
206     }
207 
208     @Test
209     @SmallTest
testAddErrorResponse()210     public void testAddErrorResponse() {
211         String url = "url";
212         int httpStatusCode = 400;
213         mFakeCronetController.addHttpErrorResponse(httpStatusCode, url);
214 
215         FakeUrlResponse foundResponse = mFakeCronetController.getResponse(url, null, null, null);
216 
217         assertThat(foundResponse.getHttpStatusCode()).isEqualTo(httpStatusCode);
218     }
219 
220     @Test
221     @SmallTest
testAddErrorResponseWithNonErrorCodeThrowsException()222     public void testAddErrorResponseWithNonErrorCodeThrowsException() {
223         int nonErrorCode = 200;
224         IllegalArgumentException e =
225                 assertThrows(
226                         IllegalArgumentException.class,
227                         () -> mFakeCronetController.addHttpErrorResponse(nonErrorCode, "url"));
228         assertThat(e)
229                 .hasMessageThat()
230                 .isEqualTo("Expected HTTP error code (code >= 400), but was: " + nonErrorCode);
231     }
232 
233     @Test
234     @SmallTest
testAddSuccessResponse()235     public void testAddSuccessResponse() {
236         String url = "url";
237         String body = "TEST_BODY";
238         mFakeCronetController.addSuccessResponse(url, body.getBytes());
239 
240         FakeUrlResponse foundResponse = mFakeCronetController.getResponse(url, null, null, null);
241 
242         assertThat(foundResponse.getHttpStatusCode()).isIn(Range.closedOpen(200, 300));
243         assertThat(new String(foundResponse.getResponseBody())).isEqualTo(body);
244     }
245 }
246