Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(115)

Side by Side Diff: components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java

Issue 2339223002: Cronet API Refactoring (Closed)
Patch Set: Addressed Paul's comments + rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.net; 5 package org.chromium.net;
6 6
7 import static org.chromium.base.CollectionUtil.newHashSet; 7 import static org.chromium.base.CollectionUtil.newHashSet;
8 8
9 import android.os.ConditionVariable; 9 import android.os.ConditionVariable;
10 import android.test.suitebuilder.annotation.SmallTest; 10 import android.test.suitebuilder.annotation.SmallTest;
11 11
12 import org.chromium.base.test.util.DisabledTest; 12 import org.chromium.base.test.util.DisabledTest;
13 import org.chromium.base.test.util.Feature; 13 import org.chromium.base.test.util.Feature;
14 import org.chromium.net.CronetTestBase.OnlyRunNativeCronet;
15 import org.chromium.net.MetricsTestUtil.TestExecutor; 14 import org.chromium.net.MetricsTestUtil.TestExecutor;
16 import org.chromium.net.MetricsTestUtil.TestRequestFinishedListener; 15 import org.chromium.net.MetricsTestUtil.TestRequestFinishedListener;
17 import org.chromium.net.TestBidirectionalStreamCallback.FailureType; 16 import org.chromium.net.TestBidirectionalStreamCallback.FailureType;
18 import org.chromium.net.TestBidirectionalStreamCallback.ResponseStep; 17 import org.chromium.net.TestBidirectionalStreamCallback.ResponseStep;
19 import org.chromium.net.impl.CronetBidirectionalStream; 18 import org.chromium.net.impl.CronetBidirectionalStream;
20 19
21 import java.nio.ByteBuffer; 20 import java.nio.ByteBuffer;
22 import java.util.AbstractMap; 21 import java.util.AbstractMap;
23 import java.util.ArrayList; 22 import java.util.ArrayList;
24 import java.util.Arrays; 23 import java.util.Arrays;
25 import java.util.HashSet; 24 import java.util.HashSet;
26 import java.util.List; 25 import java.util.List;
27 import java.util.Map; 26 import java.util.Map;
28 import java.util.regex.Matcher; 27 import java.util.regex.Matcher;
29 import java.util.regex.Pattern; 28 import java.util.regex.Pattern;
30 29
31 /** 30 /**
32 * Test functionality of BidirectionalStream interface. 31 * Test functionality of BidirectionalStream interface.
33 */ 32 */
34 public class BidirectionalStreamTest extends CronetTestBase { 33 public class BidirectionalStreamTest extends CronetTestBase {
35 private CronetTestFramework mTestFramework; 34 private CronetTestFramework mTestFramework;
36 35
37 @Override 36 @Override
38 protected void setUp() throws Exception { 37 protected void setUp() throws Exception {
39 super.setUp(); 38 super.setUp();
40 // Load library first to create MockCertVerifier. 39 // Load library first to create MockCertVerifier.
41 System.loadLibrary("cronet_tests"); 40 System.loadLibrary("cronet_tests");
42 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); 41 ExperimentalCronetEngine.Builder builder =
43 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif ier()); 42 new ExperimentalCronetEngine.Builder(getContext());
43 CronetTestUtil.setMockCertVerifierForTesting(
44 builder, QuicTestServer.createMockCertVerifier());
44 45
45 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n ull, builder); 46 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n ull, builder);
46 assertTrue(Http2TestServer.startHttp2TestServer( 47 assertTrue(Http2TestServer.startHttp2TestServer(
47 getContext(), QuicTestServer.getServerCert(), QuicTestServer.get ServerCertKey())); 48 getContext(), QuicTestServer.getServerCert(), QuicTestServer.get ServerCertKey()));
48 } 49 }
49 50
50 @Override 51 @Override
51 protected void tearDown() throws Exception { 52 protected void tearDown() throws Exception {
52 assertTrue(Http2TestServer.shutdownHttp2TestServer()); 53 assertTrue(Http2TestServer.shutdownHttp2TestServer());
53 if (mTestFramework.mCronetEngine != null) { 54 if (mTestFramework.mCronetEngine != null) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 Arrays.asList(urls), statusCode, message, headersList, false, "h 2", null); 88 Arrays.asList(urls), statusCode, message, headersList, false, "h 2", null);
88 urlResponseInfo.setReceivedBytesCount(receivedBytes); 89 urlResponseInfo.setReceivedBytesCount(receivedBytes);
89 return urlResponseInfo; 90 return urlResponseInfo;
90 } 91 }
91 92
92 private void runSimpleGetWithExpectedReceivedBytesCount(int expectedReceived Bytes) 93 private void runSimpleGetWithExpectedReceivedBytesCount(int expectedReceived Bytes)
93 throws Exception { 94 throws Exception {
94 String url = Http2TestServer.getEchoMethodUrl(); 95 String url = Http2TestServer.getEchoMethodUrl();
95 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 96 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
96 // Create stream. 97 // Create stream.
97 BidirectionalStream stream = new BidirectionalStream 98 BidirectionalStream stream =
98 .Builder(url, callback, callback.ge tExecutor(), 99 mTestFramework.mCronetEngine
99 mTestFramework.mCronetEngin e) 100 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
100 .setHttpMethod("GET") 101 .setHttpMethod("GET")
101 .build(); 102 .build();
102 stream.start(); 103 stream.start();
103 callback.blockForDone(); 104 callback.blockForDone();
104 assertTrue(stream.isDone()); 105 assertTrue(stream.isDone());
105 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 106 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
106 // Default method is 'GET'. 107 // Default method is 'GET'.
107 assertEquals("GET", callback.mResponseAsString); 108 assertEquals("GET", callback.mResponseAsString);
108 UrlResponseInfo urlResponseInfo = createUrlResponseInfo( 109 UrlResponseInfo urlResponseInfo = createUrlResponseInfo(
109 new String[] {url}, "", 200, expectedReceivedBytes, ":status", " 200"); 110 new String[] {url}, "", 200, expectedReceivedBytes, ":status", " 200");
110 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); 111 assertResponseEquals(urlResponseInfo, callback.mResponseInfo);
111 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU rl(), 200, ""); 112 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU rl(), 200, "");
112 } 113 }
113 114
114 @SmallTest 115 @SmallTest
115 @Feature({"Cronet"}) 116 @Feature({"Cronet"})
116 public void testBuilderChecks() throws Exception { 117 @OnlyRunNativeCronet
pauljensen 2016/10/03 15:22:38 remove
kapishnikov 2016/10/03 23:49:29 Done.
118 public void testBuilderCheck() throws Exception {
119 if (testingJavaImpl()) {
120 testBuilderCheckJavaImpl();
121 } else {
122 testBuilderCheckNativeImpl();
123 }
124 }
125
126 private void testBuilderCheckNativeImpl() throws Exception {
117 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 127 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
118 try { 128 try {
119 new BidirectionalStream.Builder( 129 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
120 null, callback, callback.getExecutor(), mTestFramework.mCron etEngine); 130 null, callback, callback.getExecutor());
121 fail("URL not null-checked"); 131 fail("URL not null-checked");
122 } catch (NullPointerException e) { 132 } catch (NullPointerException e) {
123 assertEquals("URL is required.", e.getMessage()); 133 assertEquals("URL is required.", e.getMessage());
124 } 134 }
125 try { 135 try {
126 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), null , 136 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
127 callback.getExecutor(), mTestFramework.mCronetEngine); 137 Http2TestServer.getServerUrl(), null, callback.getExecutor() );
128 fail("Callback not null-checked"); 138 fail("Callback not null-checked");
129 } catch (NullPointerException e) { 139 } catch (NullPointerException e) {
130 assertEquals("Callback is required.", e.getMessage()); 140 assertEquals("Callback is required.", e.getMessage());
131 } 141 }
132 try { 142 try {
133 new BidirectionalStream.Builder( 143 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
134 Http2TestServer.getServerUrl(), callback, null, mTestFramewo rk.mCronetEngine); 144 Http2TestServer.getServerUrl(), callback, null);
135 fail("Executor not null-checked"); 145 fail("Executor not null-checked");
136 } catch (NullPointerException e) { 146 } catch (NullPointerException e) {
137 assertEquals("Executor is required.", e.getMessage()); 147 assertEquals("Executor is required.", e.getMessage());
138 } 148 }
139 try {
140 new BidirectionalStream.Builder(
141 Http2TestServer.getServerUrl(), callback, callback.getExecut or(), null);
142 fail("CronetEngine not null-checked");
143 } catch (NullPointerException e) {
144 assertEquals("CronetEngine is required.", e.getMessage());
145 }
146 // Verify successful creation doesn't throw. 149 // Verify successful creation doesn't throw.
147 BidirectionalStream.Builder builder = 150 BidirectionalStream.Builder builder =
148 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), callback, 151 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
149 callback.getExecutor(), mTestFramework.mCronetEngine); 152 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
150 try { 153 try {
151 builder.addHeader(null, "value"); 154 builder.addHeader(null, "value");
152 fail("Header name is not null-checked"); 155 fail("Header name is not null-checked");
153 } catch (NullPointerException e) { 156 } catch (NullPointerException e) {
154 assertEquals("Invalid header name.", e.getMessage()); 157 assertEquals("Invalid header name.", e.getMessage());
155 } 158 }
156 try { 159 try {
157 builder.addHeader("name", null); 160 builder.addHeader("name", null);
158 fail("Header value is not null-checked"); 161 fail("Header value is not null-checked");
159 } catch (NullPointerException e) { 162 } catch (NullPointerException e) {
160 assertEquals("Invalid header value.", e.getMessage()); 163 assertEquals("Invalid header value.", e.getMessage());
161 } 164 }
162 try { 165 try {
163 builder.setHttpMethod(null); 166 builder.setHttpMethod(null);
164 fail("Method name is not null-checked"); 167 fail("Method name is not null-checked");
165 } catch (NullPointerException e) { 168 } catch (NullPointerException e) {
166 assertEquals("Method is required.", e.getMessage()); 169 assertEquals("Method is required.", e.getMessage());
167 } 170 }
168 } 171 }
169 172
173 private void testBuilderCheckJavaImpl() {
174 try {
175 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
176 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
177 Http2TestServer.getServerUrl(), callback, callback.getExecut or());
178 fail("JavaCronetEngine doesn't support BidirectionalStream."
179 + " Expected UnsupportedOperationException");
180 } catch (UnsupportedOperationException e) {
181 // Expected.
182 }
183 }
184
170 @SmallTest 185 @SmallTest
171 @Feature({"Cronet"}) 186 @Feature({"Cronet"})
172 @OnlyRunNativeCronet 187 @OnlyRunNativeCronet
173 public void testFailPlainHttp() throws Exception { 188 public void testFailPlainHttp() throws Exception {
174 String url = "http://example.com"; 189 String url = "http://example.com";
175 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 190 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
176 // Create stream. 191 // Create stream.
177 BidirectionalStream stream = new BidirectionalStream 192 BidirectionalStream stream =
178 .Builder(url, callback, callback.ge tExecutor(), 193 mTestFramework.mCronetEngine
179 mTestFramework.mCronetEngin e) 194 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
180 .build(); 195 .build();
181 stream.start(); 196 stream.start();
182 callback.blockForDone(); 197 callback.blockForDone();
183 assertTrue(stream.isDone()); 198 assertTrue(stream.isDone());
184 assertEquals("Exception in BidirectionalStream: net::ERR_DISALLOWED_URL_ SCHEME", 199 assertEquals("Exception in BidirectionalStream: net::ERR_DISALLOWED_URL_ SCHEME",
185 callback.mError.getMessage()); 200 callback.mError.getMessage());
186 assertEquals(-301, callback.mError.getCronetInternalErrorCode()); 201 assertEquals(-301, callback.mError.getCronetInternalErrorCode());
187 } 202 }
188 203
189 @SmallTest 204 @SmallTest
190 @Feature({"Cronet"}) 205 @Feature({"Cronet"})
191 @OnlyRunNativeCronet 206 @OnlyRunNativeCronet
192 public void testSimpleGet() throws Exception { 207 public void testSimpleGet() throws Exception {
193 // Since this is the first request on the connection, the expected recei ved bytes count 208 // Since this is the first request on the connection, the expected recei ved bytes count
194 // must account for an HPACK dynamic table size update. 209 // must account for an HPACK dynamic table size update.
195 runSimpleGetWithExpectedReceivedBytesCount(31); 210 runSimpleGetWithExpectedReceivedBytesCount(31);
196 } 211 }
197 212
198 @SmallTest 213 @SmallTest
199 @Feature({"Cronet"}) 214 @Feature({"Cronet"})
200 @OnlyRunNativeCronet 215 @OnlyRunNativeCronet
201 public void testSimpleHead() throws Exception { 216 public void testSimpleHead() throws Exception {
202 String url = Http2TestServer.getEchoMethodUrl(); 217 String url = Http2TestServer.getEchoMethodUrl();
203 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 218 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
204 // Create stream. 219 // Create stream.
205 BidirectionalStream stream = new BidirectionalStream 220 BidirectionalStream stream =
206 .Builder(url, callback, callback.ge tExecutor(), 221 mTestFramework.mCronetEngine
207 mTestFramework.mCronetEngin e) 222 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
208 .setHttpMethod("HEAD") 223 .setHttpMethod("HEAD")
209 .build(); 224 .build();
210 stream.start(); 225 stream.start();
211 callback.blockForDone(); 226 callback.blockForDone();
212 assertTrue(stream.isDone()); 227 assertTrue(stream.isDone());
213 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 228 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
214 assertEquals("HEAD", callback.mResponseAsString); 229 assertEquals("HEAD", callback.mResponseAsString);
215 UrlResponseInfo urlResponseInfo = 230 UrlResponseInfo urlResponseInfo =
216 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status" , "200"); 231 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status" , "200");
217 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); 232 assertResponseEquals(urlResponseInfo, callback.mResponseInfo);
218 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU rl(), 200, ""); 233 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU rl(), 200, "");
219 } 234 }
220 235
221 @SmallTest 236 @SmallTest
222 @Feature({"Cronet"}) 237 @Feature({"Cronet"})
223 @OnlyRunNativeCronet 238 @OnlyRunNativeCronet
224 public void testSimplePost() throws Exception { 239 public void testSimplePost() throws Exception {
225 String url = Http2TestServer.getEchoStreamUrl(); 240 String url = Http2TestServer.getEchoStreamUrl();
226 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 241 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
227 callback.addWriteData("Test String".getBytes()); 242 callback.addWriteData("Test String".getBytes());
228 callback.addWriteData("1234567890".getBytes()); 243 callback.addWriteData("1234567890".getBytes());
229 callback.addWriteData("woot!".getBytes()); 244 callback.addWriteData("woot!".getBytes());
230 TestExecutor testExecutor = new TestExecutor(); 245 TestExecutor testExecutor = new TestExecutor();
231 TestRequestFinishedListener requestFinishedListener = 246 TestRequestFinishedListener requestFinishedListener =
232 new TestRequestFinishedListener(testExecutor); 247 new TestRequestFinishedListener(testExecutor);
233 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 248 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
234 // Create stream. 249 // Create stream.
235 BidirectionalStream stream = new BidirectionalStream 250 BidirectionalStream stream =
236 .Builder(url, callback, callback.ge tExecutor(), 251 mTestFramework.mCronetEngine
237 mTestFramework.mCronetEngin e) 252 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
238 .addHeader("foo", "bar") 253 .addRequestAnnotation(this)
239 .addHeader("empty", "") 254 .addRequestAnnotation("request annotation")
240 .addHeader("Content-Type", "zebra") 255 .addHeader("foo", "bar")
241 .addRequestAnnotation(this) 256 .addHeader("empty", "")
242 .addRequestAnnotation("request anno tation") 257 .addHeader("Content-Type", "zebra")
243 .build(); 258 .build();
244 stream.start(); 259 stream.start();
245 callback.blockForDone(); 260 callback.blockForDone();
246 testExecutor.runAllTasks(); 261 testExecutor.runAllTasks();
247 assertTrue(stream.isDone()); 262 assertTrue(stream.isDone());
248 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf o(); 263 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf o();
249 assertNotNull("RequestFinishedInfo.Listener must be called", finishedInf o); 264 assertNotNull("RequestFinishedInfo.Listener must be called", finishedInf o);
250 assertEquals(url, finishedInfo.getUrl()); 265 assertEquals(url, finishedInfo.getUrl());
251 assertEquals(newHashSet("request annotation", this), 266 assertEquals(newHashSet("request annotation", this),
252 new HashSet<Object>(finishedInfo.getAnnotations())); 267 new HashSet<Object>(finishedInfo.getAnnotations()));
253 assertNotNull(finishedInfo.getResponseInfo()); 268 assertNotNull(finishedInfo.getResponseInfo());
254 // TODO(xunjieli): Check other fields once metrics support is in crbug.c om/648346. 269 // TODO(xunjieli): Check other fields once metrics support is in crbug.c om/648346.
255 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 270 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
256 assertEquals("Test String1234567890woot!", callback.mResponseAsString); 271 assertEquals("Test String1234567890woot!", callback.mResponseAsString);
257 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0)); 272 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
258 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0)); 273 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
259 assertEquals( 274 assertEquals(
260 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 275 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
261 } 276 }
262 277
263 @SmallTest 278 @SmallTest
264 @Feature({"Cronet"}) 279 @Feature({"Cronet"})
265 @OnlyRunNativeCronet 280 @OnlyRunNativeCronet
266 public void testSimplePostWithFlush() throws Exception { 281 public void testSimplePostWithFlush() throws Exception {
267 String url = Http2TestServer.getEchoStreamUrl(); 282 String url = Http2TestServer.getEchoStreamUrl();
268 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 283 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
269 callback.addWriteData("Test String".getBytes(), false); 284 callback.addWriteData("Test String".getBytes(), false);
270 callback.addWriteData("1234567890".getBytes(), false); 285 callback.addWriteData("1234567890".getBytes(), false);
271 callback.addWriteData("woot!".getBytes(), true); 286 callback.addWriteData("woot!".getBytes(), true);
272 BidirectionalStream stream = new BidirectionalStream 287 BidirectionalStream stream =
273 .Builder(url, callback, callback.ge tExecutor(), 288 mTestFramework.mCronetEngine
274 mTestFramework.mCronetEngin e) 289 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
275 .addHeader("foo", "bar") 290 .addHeader("foo", "bar")
276 .addHeader("empty", "") 291 .addHeader("empty", "")
277 .addHeader("Content-Type", "zebra") 292 .addHeader("Content-Type", "zebra")
278 .build(); 293 .build();
279 // Flush before stream is started should not crash. 294 // Flush before stream is started should not crash.
280 stream.flush(); 295 stream.flush();
281 296
282 stream.start(); 297 stream.start();
283 callback.blockForDone(); 298 callback.blockForDone();
284 assertTrue(stream.isDone()); 299 assertTrue(stream.isDone());
285 300
286 // Flush after stream is completed is no-op. It shouldn't call into the destroyed adapter. 301 // Flush after stream is completed is no-op. It shouldn't call into the destroyed adapter.
287 stream.flush(); 302 stream.flush();
288 303
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 ((CronetBidirectionalStream) stream).getFlushDataFor Testing().size()); 355 ((CronetBidirectionalStream) stream).getFlushDataFor Testing().size());
341 } 356 }
342 } 357 }
343 }; 358 };
344 callback.addWriteData("1".getBytes(), false); 359 callback.addWriteData("1".getBytes(), false);
345 callback.addWriteData("2".getBytes(), false); 360 callback.addWriteData("2".getBytes(), false);
346 callback.addWriteData("3".getBytes(), true); 361 callback.addWriteData("3".getBytes(), true);
347 callback.addWriteData("4".getBytes(), false); 362 callback.addWriteData("4".getBytes(), false);
348 callback.addWriteData("5".getBytes(), true); 363 callback.addWriteData("5".getBytes(), true);
349 callback.addWriteData("6".getBytes(), false); 364 callback.addWriteData("6".getBytes(), false);
350 CronetBidirectionalStream stream = (CronetBidirectionalStream) new Bidir ectionalStream 365 CronetBidirectionalStream stream =
351 .Builder(url, callback, callb ack.getExecutor(), 366 (CronetBidirectionalStream) mTestFramework.mCronetEngine
352 mTestFramework.mCrone tEngine) 367 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
353 .addHeader("foo", "bar") 368 .addHeader("foo", "bar")
354 .addHeader("empty", "") 369 .addHeader("empty", "")
355 .addHeader("Content-Type", "z ebra") 370 .addHeader("Content-Type", "zebra")
356 .build(); 371 .build();
357 callback.setAutoAdvance(false); 372 callback.setAutoAdvance(false);
358 stream.start(); 373 stream.start();
359 callback.waitForNextWriteStep(); // onStreamReady 374 callback.waitForNextWriteStep(); // onStreamReady
360 375
361 assertEquals(0, stream.getPendingDataForTesting().size()); 376 assertEquals(0, stream.getPendingDataForTesting().size());
362 assertEquals(0, stream.getFlushDataForTesting().size()); 377 assertEquals(0, stream.getFlushDataForTesting().size());
363 378
364 // Write 1, 2, 3 and flush(). 379 // Write 1, 2, 3 and flush().
365 callback.startNextWrite(stream); 380 callback.startNextWrite(stream);
366 // Write 4, 5 and flush(). 4, 5 will be in flush queue. 381 // Write 4, 5 and flush(). 4, 5 will be in flush queue.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 stream.flush(); 414 stream.flush();
400 super.onStreamReady(stream); 415 super.onStreamReady(stream);
401 try { 416 try {
402 // Attempt to write data for GET request. 417 // Attempt to write data for GET request.
403 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); 418 stream.write(ByteBuffer.wrap("dummy".getBytes()), true);
404 } catch (IllegalArgumentException e) { 419 } catch (IllegalArgumentException e) {
405 // Expected. 420 // Expected.
406 } 421 }
407 } 422 }
408 }; 423 };
409 BidirectionalStream stream = new BidirectionalStream 424 BidirectionalStream stream =
410 .Builder(url, callback, callbac k.getExecutor(), 425 mTestFramework.mCronetEngine
411 mTestFramework.mCronetE ngine) 426 .newBidirectionalStreamBuilder(url, callback, callba ck.getExecutor())
412 .setHttpMethod("GET") 427 .setHttpMethod("GET")
413 .delayRequestHeadersUntilFirstF lush(i == 0) 428 .delayRequestHeadersUntilFirstFlush(i == 0)
414 .addHeader("foo", "bar") 429 .addHeader("foo", "bar")
415 .addHeader("empty", "") 430 .addHeader("empty", "")
416 .build(); 431 .build();
417 // Flush before stream is started should not crash. 432 // Flush before stream is started should not crash.
418 stream.flush(); 433 stream.flush();
419 434
420 stream.start(); 435 stream.start();
421 callback.blockForDone(); 436 callback.blockForDone();
422 assertTrue(stream.isDone()); 437 assertTrue(stream.isDone());
423 438
424 // Flush after stream is completed is no-op. It shouldn't call into the destroyed 439 // Flush after stream is completed is no-op. It shouldn't call into the destroyed
425 // adapter. 440 // adapter.
426 stream.flush(); 441 stream.flush();
427 442
428 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 443 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
429 assertEquals("", callback.mResponseAsString); 444 assertEquals("", callback.mResponseAsString);
430 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0)); 445 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0));
431 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0)); 446 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0));
432 } 447 }
433 } 448 }
434 449
435 @SmallTest 450 @SmallTest
436 @Feature({"Cronet"}) 451 @Feature({"Cronet"})
437 @OnlyRunNativeCronet 452 @OnlyRunNativeCronet
438 public void testSimplePostWithFlushAfterOneWrite() throws Exception { 453 public void testSimplePostWithFlushAfterOneWrite() throws Exception {
439 // TODO(xunjieli): Use ParameterizedTest instead of the loop. 454 // TODO(xunjieli): Use ParameterizedTest instead of the loop.
440 for (int i = 0; i < 2; i++) { 455 for (int i = 0; i < 2; i++) {
441 String url = Http2TestServer.getEchoStreamUrl(); 456 String url = Http2TestServer.getEchoStreamUrl();
442 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback(); 457 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
443 callback.addWriteData("Test String".getBytes(), true); 458 callback.addWriteData("Test String".getBytes(), true);
444 BidirectionalStream stream = new BidirectionalStream 459 BidirectionalStream stream =
445 .Builder(url, callback, callbac k.getExecutor(), 460 mTestFramework.mCronetEngine
446 mTestFramework.mCronetE ngine) 461 .newBidirectionalStreamBuilder(url, callback, callba ck.getExecutor())
447 .delayRequestHeadersUntilFirstF lush(i == 0) 462 .delayRequestHeadersUntilFirstFlush(i == 0)
448 .addHeader("foo", "bar") 463 .addHeader("foo", "bar")
449 .addHeader("empty", "") 464 .addHeader("empty", "")
450 .addHeader("Content-Type", "zeb ra") 465 .addHeader("Content-Type", "zebra")
451 .build(); 466 .build();
452 stream.start(); 467 stream.start();
453 callback.blockForDone(); 468 callback.blockForDone();
454 assertTrue(stream.isDone()); 469 assertTrue(stream.isDone());
455 470
456 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 471 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
457 assertEquals("Test String", callback.mResponseAsString); 472 assertEquals("Test String", callback.mResponseAsString);
458 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0)); 473 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0));
459 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0)); 474 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0));
460 assertEquals("zebra", 475 assertEquals("zebra",
461 callback.mResponseInfo.getAllHeaders().get("echo-content-typ e").get(0)); 476 callback.mResponseInfo.getAllHeaders().get("echo-content-typ e").get(0));
462 } 477 }
463 } 478 }
464 479
465 @SmallTest 480 @SmallTest
466 @Feature({"Cronet"}) 481 @Feature({"Cronet"})
467 @OnlyRunNativeCronet 482 @OnlyRunNativeCronet
468 public void testSimplePostWithFlushTwice() throws Exception { 483 public void testSimplePostWithFlushTwice() throws Exception {
469 // TODO(xunjieli): Use ParameterizedTest instead of the loop. 484 // TODO(xunjieli): Use ParameterizedTest instead of the loop.
470 for (int i = 0; i < 2; i++) { 485 for (int i = 0; i < 2; i++) {
471 String url = Http2TestServer.getEchoStreamUrl(); 486 String url = Http2TestServer.getEchoStreamUrl();
472 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback(); 487 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
473 callback.addWriteData("Test String".getBytes(), false); 488 callback.addWriteData("Test String".getBytes(), false);
474 callback.addWriteData("1234567890".getBytes(), false); 489 callback.addWriteData("1234567890".getBytes(), false);
475 callback.addWriteData("woot!".getBytes(), true); 490 callback.addWriteData("woot!".getBytes(), true);
476 callback.addWriteData("Test String".getBytes(), false); 491 callback.addWriteData("Test String".getBytes(), false);
477 callback.addWriteData("1234567890".getBytes(), false); 492 callback.addWriteData("1234567890".getBytes(), false);
478 callback.addWriteData("woot!".getBytes(), true); 493 callback.addWriteData("woot!".getBytes(), true);
479 BidirectionalStream stream = new BidirectionalStream 494 BidirectionalStream stream =
480 .Builder(url, callback, callbac k.getExecutor(), 495 mTestFramework.mCronetEngine
481 mTestFramework.mCronetE ngine) 496 .newBidirectionalStreamBuilder(url, callback, callba ck.getExecutor())
482 .delayRequestHeadersUntilFirstF lush(i == 0) 497 .delayRequestHeadersUntilFirstFlush(i == 0)
483 .addHeader("foo", "bar") 498 .addHeader("foo", "bar")
484 .addHeader("empty", "") 499 .addHeader("empty", "")
485 .addHeader("Content-Type", "zeb ra") 500 .addHeader("Content-Type", "zebra")
486 .build(); 501 .build();
487 stream.start(); 502 stream.start();
488 callback.blockForDone(); 503 callback.blockForDone();
489 assertTrue(stream.isDone()); 504 assertTrue(stream.isDone());
490 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 505 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
491 assertEquals("Test String1234567890woot!Test String1234567890woot!", 506 assertEquals("Test String1234567890woot!Test String1234567890woot!",
492 callback.mResponseAsString); 507 callback.mResponseAsString);
493 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0)); 508 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0));
494 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0)); 509 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0));
495 assertEquals("zebra", 510 assertEquals("zebra",
496 callback.mResponseInfo.getAllHeaders().get("echo-content-typ e").get(0)); 511 callback.mResponseInfo.getAllHeaders().get("echo-content-typ e").get(0));
(...skipping 14 matching lines...) Expand all
511 } 526 }
512 @Override 527 @Override
513 public void onResponseHeadersReceived( 528 public void onResponseHeadersReceived(
514 BidirectionalStream stream, UrlResponseInfo info) { 529 BidirectionalStream stream, UrlResponseInfo info) {
515 // Do nothing. Skip readng. 530 // Do nothing. Skip readng.
516 } 531 }
517 }; 532 };
518 callback.addWriteData("Test String".getBytes()); 533 callback.addWriteData("Test String".getBytes());
519 callback.addWriteData("1234567890".getBytes()); 534 callback.addWriteData("1234567890".getBytes());
520 callback.addWriteData("woot!".getBytes()); 535 callback.addWriteData("woot!".getBytes());
521 BidirectionalStream stream = new BidirectionalStream 536 BidirectionalStream stream =
522 .Builder(url, callback, callback.ge tExecutor(), 537 mTestFramework.mCronetEngine
523 mTestFramework.mCronetEngin e) 538 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
524 .addHeader("foo", "bar") 539 .addHeader("foo", "bar")
525 .addHeader("empty", "") 540 .addHeader("empty", "")
526 .addHeader("Content-Type", "zebra") 541 .addHeader("Content-Type", "zebra")
527 .build(); 542 .build();
528 stream.start(); 543 stream.start();
529 callback.blockForDone(); 544 callback.blockForDone();
530 assertTrue(stream.isDone()); 545 assertTrue(stream.isDone());
531 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 546 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
532 assertEquals("Test String1234567890woot!", callback.mResponseAsString); 547 assertEquals("Test String1234567890woot!", callback.mResponseAsString);
533 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0)); 548 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
534 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0)); 549 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
535 assertEquals( 550 assertEquals(
536 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 551 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
537 } 552 }
(...skipping 13 matching lines...) Expand all
551 startNextWrite(stream); 566 startNextWrite(stream);
552 assertEquals(0, numPendingWrites()); 567 assertEquals(0, numPendingWrites());
553 } 568 }
554 }; 569 };
555 callback.addWriteData("Test String".getBytes(), false); 570 callback.addWriteData("Test String".getBytes(), false);
556 callback.addWriteData("1234567890".getBytes(), false); 571 callback.addWriteData("1234567890".getBytes(), false);
557 callback.addWriteData("woot!".getBytes(), true); 572 callback.addWriteData("woot!".getBytes(), true);
558 callback.addWriteData("Test String".getBytes(), false); 573 callback.addWriteData("Test String".getBytes(), false);
559 callback.addWriteData("1234567890".getBytes(), false); 574 callback.addWriteData("1234567890".getBytes(), false);
560 callback.addWriteData("woot!".getBytes(), true); 575 callback.addWriteData("woot!".getBytes(), true);
561 BidirectionalStream stream = new BidirectionalStream 576 BidirectionalStream stream =
562 .Builder(url, callback, callback.ge tExecutor(), 577 mTestFramework.mCronetEngine
563 mTestFramework.mCronetEngin e) 578 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
564 .addHeader("foo", "bar") 579 .addHeader("foo", "bar")
565 .addHeader("empty", "") 580 .addHeader("empty", "")
566 .addHeader("Content-Type", "zebra") 581 .addHeader("Content-Type", "zebra")
567 .build(); 582 .build();
568 stream.start(); 583 stream.start();
569 callback.blockForDone(); 584 callback.blockForDone();
570 assertTrue(stream.isDone()); 585 assertTrue(stream.isDone());
571 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 586 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
572 assertEquals( 587 assertEquals(
573 "Test String1234567890woot!Test String1234567890woot!", callback .mResponseAsString); 588 "Test String1234567890woot!Test String1234567890woot!", callback .mResponseAsString);
574 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0)); 589 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
575 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0)); 590 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
576 assertEquals( 591 assertEquals(
577 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 592 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
578 } 593 }
579 594
580 @SmallTest 595 @SmallTest
581 @Feature({"Cronet"}) 596 @Feature({"Cronet"})
582 @OnlyRunNativeCronet 597 @OnlyRunNativeCronet
583 public void testSimplePut() throws Exception { 598 public void testSimplePut() throws Exception {
584 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 599 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
585 callback.addWriteData("Put This Data!".getBytes()); 600 callback.addWriteData("Put This Data!".getBytes());
586 String methodName = "PUT"; 601 String methodName = "PUT";
587 BidirectionalStream.Builder builder = 602 BidirectionalStream.Builder builder =
588 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), callback, 603 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
589 callback.getExecutor(), mTestFramework.mCronetEngine); 604 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
590 builder.setHttpMethod(methodName); 605 builder.setHttpMethod(methodName);
591 builder.build().start(); 606 builder.build().start();
592 callback.blockForDone(); 607 callback.blockForDone();
593 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 608 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
594 assertEquals("Put This Data!", callback.mResponseAsString); 609 assertEquals("Put This Data!", callback.mResponseAsString);
595 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech o-method").get(0)); 610 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech o-method").get(0));
596 } 611 }
597 612
598 @SmallTest 613 @SmallTest
599 @Feature({"Cronet"}) 614 @Feature({"Cronet"})
600 @OnlyRunNativeCronet 615 @OnlyRunNativeCronet
601 public void testBadMethod() throws Exception { 616 public void testBadMethod() throws Exception {
602 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 617 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
603 BidirectionalStream.Builder builder = 618 BidirectionalStream.Builder builder =
604 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), callback, 619 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
605 callback.getExecutor(), mTestFramework.mCronetEngine); 620 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
606 try { 621 try {
607 builder.setHttpMethod("bad:method!"); 622 builder.setHttpMethod("bad:method!");
608 builder.build().start(); 623 builder.build().start();
609 fail("IllegalArgumentException not thrown."); 624 fail("IllegalArgumentException not thrown.");
610 } catch (IllegalArgumentException e) { 625 } catch (IllegalArgumentException e) {
611 assertEquals("Invalid http method bad:method!", e.getMessage()); 626 assertEquals("Invalid http method bad:method!", e.getMessage());
612 } 627 }
613 } 628 }
614 629
615 @SmallTest 630 @SmallTest
616 @Feature({"Cronet"}) 631 @Feature({"Cronet"})
617 @OnlyRunNativeCronet 632 @OnlyRunNativeCronet
618 public void testBadHeaderName() throws Exception { 633 public void testBadHeaderName() throws Exception {
619 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 634 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
620 BidirectionalStream.Builder builder = 635 BidirectionalStream.Builder builder =
621 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), callback, 636 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
622 callback.getExecutor(), mTestFramework.mCronetEngine); 637 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
623 try { 638 try {
624 builder.addHeader("goodheader1", "headervalue"); 639 builder.addHeader("goodheader1", "headervalue");
625 builder.addHeader("header:name", "headervalue"); 640 builder.addHeader("header:name", "headervalue");
626 builder.addHeader("goodheader2", "headervalue"); 641 builder.addHeader("goodheader2", "headervalue");
627 builder.build().start(); 642 builder.build().start();
628 fail("IllegalArgumentException not thrown."); 643 fail("IllegalArgumentException not thrown.");
629 } catch (IllegalArgumentException e) { 644 } catch (IllegalArgumentException e) {
630 assertEquals("Invalid header header:name=headervalue", e.getMessage( )); 645 assertEquals("Invalid header header:name=headervalue", e.getMessage( ));
631 } 646 }
632 } 647 }
633 648
634 @SmallTest 649 @SmallTest
635 @Feature({"Cronet"}) 650 @Feature({"Cronet"})
636 @OnlyRunNativeCronet 651 @OnlyRunNativeCronet
637 public void testBadHeaderValue() throws Exception { 652 public void testBadHeaderValue() throws Exception {
638 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 653 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
639 BidirectionalStream.Builder builder = 654 BidirectionalStream.Builder builder =
640 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), callback, 655 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
641 callback.getExecutor(), mTestFramework.mCronetEngine); 656 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
642 try { 657 try {
643 builder.addHeader("headername", "bad header\r\nvalue"); 658 builder.addHeader("headername", "bad header\r\nvalue");
644 builder.build().start(); 659 builder.build().start();
645 fail("IllegalArgumentException not thrown."); 660 fail("IllegalArgumentException not thrown.");
646 } catch (IllegalArgumentException e) { 661 } catch (IllegalArgumentException e) {
647 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM essage()); 662 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM essage());
648 } 663 }
649 } 664 }
650 665
651 @SmallTest 666 @SmallTest
652 @Feature({"Cronet"}) 667 @Feature({"Cronet"})
653 @OnlyRunNativeCronet 668 @OnlyRunNativeCronet
654 public void testAddHeader() throws Exception { 669 public void testAddHeader() throws Exception {
655 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 670 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
656 String headerName = "header-name"; 671 String headerName = "header-name";
657 String headerValue = "header-value"; 672 String headerValue = "header-value";
658 BidirectionalStream.Builder builder = 673 BidirectionalStream.Builder builder =
659 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl (headerName), 674 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
660 callback, callback.getExecutor(), mTestFramework.mCronet Engine); 675 Http2TestServer.getEchoHeaderUrl(headerName), callback,
676 callback.getExecutor());
661 builder.addHeader(headerName, headerValue); 677 builder.addHeader(headerName, headerValue);
662 builder.setHttpMethod("GET"); 678 builder.setHttpMethod("GET");
663 builder.build().start(); 679 builder.build().start();
664 callback.blockForDone(); 680 callback.blockForDone();
665 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 681 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
666 assertEquals(headerValue, callback.mResponseAsString); 682 assertEquals(headerValue, callback.mResponseAsString);
667 } 683 }
668 684
669 @SmallTest 685 @SmallTest
670 @Feature({"Cronet"}) 686 @Feature({"Cronet"})
671 @OnlyRunNativeCronet 687 @OnlyRunNativeCronet
672 public void testMultiRequestHeaders() throws Exception { 688 public void testMultiRequestHeaders() throws Exception {
673 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 689 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
674 String headerName = "header-name"; 690 String headerName = "header-name";
675 String headerValue1 = "header-value1"; 691 String headerValue1 = "header-value1";
676 String headerValue2 = "header-value2"; 692 String headerValue2 = "header-value2";
677 BidirectionalStream.Builder builder = 693 BidirectionalStream.Builder builder =
678 new BidirectionalStream.Builder(Http2TestServer.getEchoAllHeader sUrl(), callback, 694 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
679 callback.getExecutor(), mTestFramework.mCronetEngine); 695 Http2TestServer.getEchoAllHeadersUrl(), callback, callba ck.getExecutor());
680 builder.addHeader(headerName, headerValue1); 696 builder.addHeader(headerName, headerValue1);
681 builder.addHeader(headerName, headerValue2); 697 builder.addHeader(headerName, headerValue2);
682 builder.setHttpMethod("GET"); 698 builder.setHttpMethod("GET");
683 builder.build().start(); 699 builder.build().start();
684 callback.blockForDone(); 700 callback.blockForDone();
685 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 701 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
686 String headers = callback.mResponseAsString; 702 String headers = callback.mResponseAsString;
687 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); 703 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n");
688 Matcher matcher = pattern.matcher(headers); 704 Matcher matcher = pattern.matcher(headers);
689 List<String> actualValues = new ArrayList<String>(); 705 List<String> actualValues = new ArrayList<String>();
690 while (matcher.find()) { 706 while (matcher.find()) {
691 actualValues.add(matcher.group(1)); 707 actualValues.add(matcher.group(1));
692 } 708 }
693 assertEquals(1, actualValues.size()); 709 assertEquals(1, actualValues.size());
694 assertEquals("header-value2", actualValues.get(0)); 710 assertEquals("header-value2", actualValues.get(0));
695 } 711 }
696 712
697 @SmallTest 713 @SmallTest
698 @Feature({"Cronet"}) 714 @Feature({"Cronet"})
699 @OnlyRunNativeCronet 715 @OnlyRunNativeCronet
700 public void testEchoTrailers() throws Exception { 716 public void testEchoTrailers() throws Exception {
701 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 717 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
702 String headerName = "header-name"; 718 String headerName = "header-name";
703 String headerValue = "header-value"; 719 String headerValue = "header-value";
704 BidirectionalStream.Builder builder = 720 BidirectionalStream.Builder builder =
705 new BidirectionalStream.Builder(Http2TestServer.getEchoTrailersU rl(), callback, 721 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
706 callback.getExecutor(), mTestFramework.mCronetEngine); 722 Http2TestServer.getEchoTrailersUrl(), callback, callback .getExecutor());
707 builder.addHeader(headerName, headerValue); 723 builder.addHeader(headerName, headerValue);
708 builder.setHttpMethod("GET"); 724 builder.setHttpMethod("GET");
709 builder.build().start(); 725 builder.build().start();
710 callback.blockForDone(); 726 callback.blockForDone();
711 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 727 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
712 assertNotNull(callback.mTrailers); 728 assertNotNull(callback.mTrailers);
713 // Verify that header value is properly echoed in trailers. 729 // Verify that header value is properly echoed in trailers.
714 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he aderName).get(0)); 730 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he aderName).get(0));
715 } 731 }
716 732
717 @SmallTest 733 @SmallTest
718 @Feature({"Cronet"}) 734 @Feature({"Cronet"})
719 @OnlyRunNativeCronet 735 @OnlyRunNativeCronet
720 public void testCustomUserAgent() throws Exception { 736 public void testCustomUserAgent() throws Exception {
721 String userAgentName = "User-Agent"; 737 String userAgentName = "User-Agent";
722 String userAgentValue = "User-Agent-Value"; 738 String userAgentValue = "User-Agent-Value";
723 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 739 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
724 BidirectionalStream.Builder builder = 740 BidirectionalStream.Builder builder =
725 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl (userAgentName), 741 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
726 callback, callback.getExecutor(), mTestFramework.mCronet Engine); 742 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac k,
743 callback.getExecutor());
727 builder.setHttpMethod("GET"); 744 builder.setHttpMethod("GET");
728 builder.addHeader(userAgentName, userAgentValue); 745 builder.addHeader(userAgentName, userAgentValue);
729 builder.build().start(); 746 builder.build().start();
730 callback.blockForDone(); 747 callback.blockForDone();
731 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 748 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
732 assertEquals(userAgentValue, callback.mResponseAsString); 749 assertEquals(userAgentValue, callback.mResponseAsString);
733 } 750 }
734 751
735 @SmallTest 752 @SmallTest
736 @Feature({"Cronet"}) 753 @Feature({"Cronet"})
737 @OnlyRunNativeCronet 754 @OnlyRunNativeCronet
738 public void testCustomCronetEngineUserAgent() throws Exception { 755 public void testCustomCronetEngineUserAgent() throws Exception {
739 String userAgentName = "User-Agent"; 756 String userAgentName = "User-Agent";
740 String userAgentValue = "User-Agent-Value"; 757 String userAgentValue = "User-Agent-Value";
741 CronetEngine engine = 758 ExperimentalCronetEngine.Builder engineBuilder =
742 new CronetEngine.Builder(getContext()) 759 new ExperimentalCronetEngine.Builder(getContext());
743 .setMockCertVerifierForTesting(QuicTestServer.createMock CertVerifier()) 760 engineBuilder.setUserAgent(userAgentValue);
744 .setUserAgent(userAgentValue) 761 CronetTestUtil.setMockCertVerifierForTesting(
745 .build(); 762 engineBuilder, QuicTestServer.createMockCertVerifier());
763 ExperimentalCronetEngine engine = engineBuilder.build();
746 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 764 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
747 BidirectionalStream.Builder builder = 765 BidirectionalStream.Builder builder = engine.newBidirectionalStreamBuild er(
748 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl (userAgentName), 766 Http2TestServer.getEchoHeaderUrl(userAgentName), callback, callb ack.getExecutor());
749 callback, callback.getExecutor(), engine);
750 builder.setHttpMethod("GET"); 767 builder.setHttpMethod("GET");
751 builder.build().start(); 768 builder.build().start();
752 callback.blockForDone(); 769 callback.blockForDone();
753 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 770 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
754 assertEquals(userAgentValue, callback.mResponseAsString); 771 assertEquals(userAgentValue, callback.mResponseAsString);
755 } 772 }
756 773
757 @SmallTest 774 @SmallTest
758 @Feature({"Cronet"}) 775 @Feature({"Cronet"})
759 @OnlyRunNativeCronet 776 @OnlyRunNativeCronet
760 public void testDefaultUserAgent() throws Exception { 777 public void testDefaultUserAgent() throws Exception {
761 String userAgentName = "User-Agent"; 778 String userAgentName = "User-Agent";
762 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 779 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
763 BidirectionalStream.Builder builder = 780 BidirectionalStream.Builder builder =
764 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl (userAgentName), 781 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
765 callback, callback.getExecutor(), mTestFramework.mCronet Engine); 782 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac k,
783 callback.getExecutor());
766 builder.setHttpMethod("GET"); 784 builder.setHttpMethod("GET");
767 builder.build().start(); 785 builder.build().start();
768 callback.blockForDone(); 786 callback.blockForDone();
769 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 787 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
770 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent( ), 788 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent( ),
771 callback.mResponseAsString); 789 callback.mResponseAsString);
772 } 790 }
773 791
774 @SmallTest 792 @SmallTest
775 @Feature({"Cronet"}) 793 @Feature({"Cronet"})
776 @OnlyRunNativeCronet 794 @OnlyRunNativeCronet
777 public void testEchoStream() throws Exception { 795 public void testEchoStream() throws Exception {
778 String url = Http2TestServer.getEchoStreamUrl(); 796 String url = Http2TestServer.getEchoStreamUrl();
779 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 797 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
780 String[] testData = {"Test String", createLongString("1234567890", 50000 ), "woot!"}; 798 String[] testData = {"Test String", createLongString("1234567890", 50000 ), "woot!"};
781 StringBuilder stringData = new StringBuilder(); 799 StringBuilder stringData = new StringBuilder();
782 for (String writeData : testData) { 800 for (String writeData : testData) {
783 callback.addWriteData(writeData.getBytes()); 801 callback.addWriteData(writeData.getBytes());
784 stringData.append(writeData); 802 stringData.append(writeData);
785 } 803 }
786 // Create stream. 804 // Create stream.
787 BidirectionalStream stream = new BidirectionalStream 805 BidirectionalStream stream =
788 .Builder(url, callback, callback.ge tExecutor(), 806 mTestFramework.mCronetEngine
789 mTestFramework.mCronetEngin e) 807 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
790 .addHeader("foo", "Value with Space s") 808 .addHeader("foo", "Value with Spaces")
791 .addHeader("Content-Type", "zebra") 809 .addHeader("Content-Type", "zebra")
792 .build(); 810 .build();
793 stream.start(); 811 stream.start();
794 callback.blockForDone(); 812 callback.blockForDone();
795 assertTrue(stream.isDone()); 813 assertTrue(stream.isDone());
796 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 814 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
797 assertEquals(stringData.toString(), callback.mResponseAsString); 815 assertEquals(stringData.toString(), callback.mResponseAsString);
798 assertEquals( 816 assertEquals(
799 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get( "echo-foo").get(0)); 817 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get( "echo-foo").get(0));
800 assertEquals( 818 assertEquals(
801 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 819 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
802 } 820 }
803 821
804 @SmallTest 822 @SmallTest
805 @Feature({"Cronet"}) 823 @Feature({"Cronet"})
806 @OnlyRunNativeCronet 824 @OnlyRunNativeCronet
807 public void testEchoStreamEmptyWrite() throws Exception { 825 public void testEchoStreamEmptyWrite() throws Exception {
808 String url = Http2TestServer.getEchoStreamUrl(); 826 String url = Http2TestServer.getEchoStreamUrl();
809 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 827 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
810 callback.addWriteData(new byte[0]); 828 callback.addWriteData(new byte[0]);
811 // Create stream. 829 // Create stream.
812 BidirectionalStream stream = new BidirectionalStream 830 BidirectionalStream stream =
813 .Builder(url, callback, callback.ge tExecutor(), 831 mTestFramework.mCronetEngine
814 mTestFramework.mCronetEngin e) 832 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
815 .build(); 833 .build();
816 stream.start(); 834 stream.start();
817 callback.blockForDone(); 835 callback.blockForDone();
818 assertTrue(stream.isDone()); 836 assertTrue(stream.isDone());
819 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 837 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
820 assertEquals("", callback.mResponseAsString); 838 assertEquals("", callback.mResponseAsString);
821 } 839 }
822 840
823 @SmallTest 841 @SmallTest
824 @Feature({"Cronet"}) 842 @Feature({"Cronet"})
825 @OnlyRunNativeCronet 843 @OnlyRunNativeCronet
826 public void testDoubleWrite() throws Exception { 844 public void testDoubleWrite() throws Exception {
827 String url = Http2TestServer.getEchoStreamUrl(); 845 String url = Http2TestServer.getEchoStreamUrl();
828 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() { 846 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() {
829 @Override 847 @Override
830 public void onStreamReady(BidirectionalStream stream) { 848 public void onStreamReady(BidirectionalStream stream) {
831 // super class will call Write() once. 849 // super class will call Write() once.
832 super.onStreamReady(stream); 850 super.onStreamReady(stream);
833 // Call Write() again. 851 // Call Write() again.
834 startNextWrite(stream); 852 startNextWrite(stream);
835 // Make sure there is no pending write. 853 // Make sure there is no pending write.
836 assertEquals(0, numPendingWrites()); 854 assertEquals(0, numPendingWrites());
837 } 855 }
838 }; 856 };
839 callback.addWriteData("1".getBytes()); 857 callback.addWriteData("1".getBytes());
840 callback.addWriteData("2".getBytes()); 858 callback.addWriteData("2".getBytes());
841 // Create stream. 859 // Create stream.
842 BidirectionalStream stream = new BidirectionalStream 860 BidirectionalStream stream =
843 .Builder(url, callback, callback.ge tExecutor(), 861 mTestFramework.mCronetEngine
844 mTestFramework.mCronetEngin e) 862 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
845 .build(); 863 .build();
846 stream.start(); 864 stream.start();
847 callback.blockForDone(); 865 callback.blockForDone();
848 assertTrue(stream.isDone()); 866 assertTrue(stream.isDone());
849 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 867 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
850 assertEquals("12", callback.mResponseAsString); 868 assertEquals("12", callback.mResponseAsString);
851 } 869 }
852 870
853 @SmallTest 871 @SmallTest
854 @Feature({"Cronet"}) 872 @Feature({"Cronet"})
855 @OnlyRunNativeCronet 873 @OnlyRunNativeCronet
(...skipping 11 matching lines...) Expand all
867 stream.read(ByteBuffer.allocateDirect(5)); 885 stream.read(ByteBuffer.allocateDirect(5));
868 fail("Exception is not thrown."); 886 fail("Exception is not thrown.");
869 } catch (Exception e) { 887 } catch (Exception e) {
870 assertEquals("Unexpected read attempt.", e.getMessage()); 888 assertEquals("Unexpected read attempt.", e.getMessage());
871 } 889 }
872 } 890 }
873 }; 891 };
874 callback.addWriteData("1".getBytes()); 892 callback.addWriteData("1".getBytes());
875 callback.addWriteData("2".getBytes()); 893 callback.addWriteData("2".getBytes());
876 // Create stream. 894 // Create stream.
877 BidirectionalStream stream = new BidirectionalStream 895 BidirectionalStream stream =
878 .Builder(url, callback, callback.ge tExecutor(), 896 mTestFramework.mCronetEngine
879 mTestFramework.mCronetEngin e) 897 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
880 .build(); 898 .build();
881 stream.start(); 899 stream.start();
882 callback.blockForDone(); 900 callback.blockForDone();
883 assertTrue(stream.isDone()); 901 assertTrue(stream.isDone());
884 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 902 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
885 assertEquals("12", callback.mResponseAsString); 903 assertEquals("12", callback.mResponseAsString);
886 } 904 }
887 905
888 @SmallTest 906 @SmallTest
889 @Feature({"Cronet"}) 907 @Feature({"Cronet"})
890 @OnlyRunNativeCronet 908 @OnlyRunNativeCronet
891 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") 909 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112")
892 public void testReadAndWrite() throws Exception { 910 public void testReadAndWrite() throws Exception {
893 String url = Http2TestServer.getEchoStreamUrl(); 911 String url = Http2TestServer.getEchoStreamUrl();
894 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() { 912 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() {
895 @Override 913 @Override
896 public void onResponseHeadersReceived( 914 public void onResponseHeadersReceived(
897 BidirectionalStream stream, UrlResponseInfo info) { 915 BidirectionalStream stream, UrlResponseInfo info) {
898 // Start the write, that will not complete until callback comple tion. 916 // Start the write, that will not complete until callback comple tion.
899 startNextWrite(stream); 917 startNextWrite(stream);
900 // Start the read. It is allowed with write in flight. 918 // Start the read. It is allowed with write in flight.
901 super.onResponseHeadersReceived(stream, info); 919 super.onResponseHeadersReceived(stream, info);
902 } 920 }
903 }; 921 };
904 callback.setAutoAdvance(false); 922 callback.setAutoAdvance(false);
905 callback.addWriteData("1".getBytes()); 923 callback.addWriteData("1".getBytes());
906 callback.addWriteData("2".getBytes()); 924 callback.addWriteData("2".getBytes());
907 // Create stream. 925 // Create stream.
908 BidirectionalStream stream = new BidirectionalStream 926 BidirectionalStream stream =
909 .Builder(url, callback, callback.ge tExecutor(), 927 mTestFramework.mCronetEngine
910 mTestFramework.mCronetEngin e) 928 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
911 .build(); 929 .build();
912 stream.start(); 930 stream.start();
913 callback.waitForNextWriteStep(); 931 callback.waitForNextWriteStep();
914 callback.waitForNextReadStep(); 932 callback.waitForNextReadStep();
915 callback.startNextRead(stream); 933 callback.startNextRead(stream);
916 callback.setAutoAdvance(true); 934 callback.setAutoAdvance(true);
917 callback.blockForDone(); 935 callback.blockForDone();
918 assertTrue(stream.isDone()); 936 assertTrue(stream.isDone());
919 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 937 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
920 assertEquals("12", callback.mResponseAsString); 938 assertEquals("12", callback.mResponseAsString);
921 } 939 }
922 940
923 @SmallTest 941 @SmallTest
924 @Feature({"Cronet"}) 942 @Feature({"Cronet"})
925 @OnlyRunNativeCronet 943 @OnlyRunNativeCronet
926 public void testEchoStreamWriteFirst() throws Exception { 944 public void testEchoStreamWriteFirst() throws Exception {
927 String url = Http2TestServer.getEchoStreamUrl(); 945 String url = Http2TestServer.getEchoStreamUrl();
928 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 946 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
929 callback.setAutoAdvance(false); 947 callback.setAutoAdvance(false);
930 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo t!"}; 948 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo t!"};
931 StringBuilder stringData = new StringBuilder(); 949 StringBuilder stringData = new StringBuilder();
932 for (String writeData : testData) { 950 for (String writeData : testData) {
933 callback.addWriteData(writeData.getBytes()); 951 callback.addWriteData(writeData.getBytes());
934 stringData.append(writeData); 952 stringData.append(writeData);
935 } 953 }
936 // Create stream. 954 // Create stream.
937 BidirectionalStream stream = new BidirectionalStream 955 BidirectionalStream stream =
938 .Builder(url, callback, callback.ge tExecutor(), 956 mTestFramework.mCronetEngine
939 mTestFramework.mCronetEngin e) 957 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
940 .build(); 958 .build();
941 stream.start(); 959 stream.start();
942 // Write first. 960 // Write first.
943 callback.waitForNextWriteStep(); // onStreamReady 961 callback.waitForNextWriteStep(); // onStreamReady
944 for (String expected : testData) { 962 for (String expected : testData) {
945 // Write next chunk of test data. 963 // Write next chunk of test data.
946 callback.startNextWrite(stream); 964 callback.startNextWrite(stream);
947 callback.waitForNextWriteStep(); // onWriteCompleted 965 callback.waitForNextWriteStep(); // onWriteCompleted
948 } 966 }
949 967
950 // Wait for read step, but don't read yet. 968 // Wait for read step, but don't read yet.
(...skipping 21 matching lines...) Expand all
972 String url = Http2TestServer.getEchoStreamUrl(); 990 String url = Http2TestServer.getEchoStreamUrl();
973 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 991 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
974 callback.setAutoAdvance(false); 992 callback.setAutoAdvance(false);
975 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo t!"}; 993 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo t!"};
976 StringBuilder stringData = new StringBuilder(); 994 StringBuilder stringData = new StringBuilder();
977 for (String writeData : testData) { 995 for (String writeData : testData) {
978 callback.addWriteData(writeData.getBytes()); 996 callback.addWriteData(writeData.getBytes());
979 stringData.append(writeData); 997 stringData.append(writeData);
980 } 998 }
981 // Create stream. 999 // Create stream.
982 BidirectionalStream stream = new BidirectionalStream 1000 BidirectionalStream stream =
983 .Builder(url, callback, callback.ge tExecutor(), 1001 mTestFramework.mCronetEngine
984 mTestFramework.mCronetEngin e) 1002 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
985 .build(); 1003 .build();
986 stream.start(); 1004 stream.start();
987 callback.waitForNextWriteStep(); 1005 callback.waitForNextWriteStep();
988 callback.waitForNextReadStep(); 1006 callback.waitForNextReadStep();
989 1007
990 for (String expected : testData) { 1008 for (String expected : testData) {
991 // Write next chunk of test data. 1009 // Write next chunk of test data.
992 callback.startNextWrite(stream); 1010 callback.startNextWrite(stream);
993 callback.waitForNextWriteStep(); 1011 callback.waitForNextWriteStep();
994 1012
995 // Read next chunk of test data. 1013 // Read next chunk of test data.
(...skipping 16 matching lines...) Expand all
1012 * Checks that the buffer is updated correctly, when starting at an offset. 1030 * Checks that the buffer is updated correctly, when starting at an offset.
1013 */ 1031 */
1014 @SmallTest 1032 @SmallTest
1015 @Feature({"Cronet"}) 1033 @Feature({"Cronet"})
1016 @OnlyRunNativeCronet 1034 @OnlyRunNativeCronet
1017 public void testSimpleGetBufferUpdates() throws Exception { 1035 public void testSimpleGetBufferUpdates() throws Exception {
1018 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1036 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1019 callback.setAutoAdvance(false); 1037 callback.setAutoAdvance(false);
1020 // Since the method is "GET", the expected response body is also "GET". 1038 // Since the method is "GET", the expected response body is also "GET".
1021 BidirectionalStream.Builder builder = 1039 BidirectionalStream.Builder builder =
1022 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 1040 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
1023 callback.getExecutor(), mTestFramework.mCronetEngine); 1041 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1024 BidirectionalStream stream = builder.setHttpMethod("GET").build(); 1042 BidirectionalStream stream = builder.setHttpMethod("GET").build();
1025 stream.start(); 1043 stream.start();
1026 callback.waitForNextReadStep(); 1044 callback.waitForNextReadStep();
1027 1045
1028 assertEquals(null, callback.mError); 1046 assertEquals(null, callback.mError);
1029 assertFalse(callback.isDone()); 1047 assertFalse(callback.isDone());
1030 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST ARTED, 1048 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST ARTED,
1031 callback.mResponseStep); 1049 callback.mResponseStep);
1032 1050
1033 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); 1051 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 runSimpleGetWithExpectedReceivedBytesCount(27); 1123 runSimpleGetWithExpectedReceivedBytesCount(27);
1106 } 1124 }
1107 1125
1108 @SmallTest 1126 @SmallTest
1109 @Feature({"Cronet"}) 1127 @Feature({"Cronet"})
1110 @OnlyRunNativeCronet 1128 @OnlyRunNativeCronet
1111 public void testBadBuffers() throws Exception { 1129 public void testBadBuffers() throws Exception {
1112 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1130 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1113 callback.setAutoAdvance(false); 1131 callback.setAutoAdvance(false);
1114 BidirectionalStream.Builder builder = 1132 BidirectionalStream.Builder builder =
1115 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 1133 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
1116 callback.getExecutor(), mTestFramework.mCronetEngine); 1134 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1117 BidirectionalStream stream = builder.setHttpMethod("GET").build(); 1135 BidirectionalStream stream = builder.setHttpMethod("GET").build();
1118 stream.start(); 1136 stream.start();
1119 callback.waitForNextReadStep(); 1137 callback.waitForNextReadStep();
1120 1138
1121 assertEquals(null, callback.mError); 1139 assertEquals(null, callback.mError);
1122 assertFalse(callback.isDone()); 1140 assertFalse(callback.isDone());
1123 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST ARTED, 1141 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST ARTED,
1124 callback.mResponseStep); 1142 callback.mResponseStep);
1125 1143
1126 // Try to read using a full buffer. 1144 // Try to read using a full buffer.
(...skipping 22 matching lines...) Expand all
1149 callback.blockForDone(); 1167 callback.blockForDone();
1150 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 1168 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
1151 assertEquals("GET", callback.mResponseAsString); 1169 assertEquals("GET", callback.mResponseAsString);
1152 } 1170 }
1153 1171
1154 private void throwOrCancel( 1172 private void throwOrCancel(
1155 FailureType failureType, ResponseStep failureStep, boolean expectErr or) { 1173 FailureType failureType, ResponseStep failureStep, boolean expectErr or) {
1156 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1174 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1157 callback.setFailure(failureType, failureStep); 1175 callback.setFailure(failureType, failureStep);
1158 BidirectionalStream.Builder builder = 1176 BidirectionalStream.Builder builder =
1159 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 1177 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
1160 callback.getExecutor(), mTestFramework.mCronetEngine); 1178 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1161 BidirectionalStream stream = builder.setHttpMethod("GET").build(); 1179 BidirectionalStream stream = builder.setHttpMethod("GET").build();
1162 stream.start(); 1180 stream.start();
1163 callback.blockForDone(); 1181 callback.blockForDone();
1164 // assertEquals(callback.mResponseStep, failureStep); 1182 // assertEquals(callback.mResponseStep, failureStep);
1165 assertTrue(stream.isDone()); 1183 assertTrue(stream.isDone());
1166 // Cancellation when stream is ready does not guarantee that 1184 // Cancellation when stream is ready does not guarantee that
1167 // mResponseInfo is null because there might be a 1185 // mResponseInfo is null because there might be a
1168 // onResponseHeadersReceived already queued in the executor. 1186 // onResponseHeadersReceived already queued in the executor.
1169 // See crbug.com/594432. 1187 // See crbug.com/594432.
1170 if (failureStep != ResponseStep.ON_STREAM_READY) { 1188 if (failureStep != ResponseStep.ON_STREAM_READY) {
(...skipping 29 matching lines...) Expand all
1200 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr ue); 1218 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr ue);
1201 } 1219 }
1202 1220
1203 @SmallTest 1221 @SmallTest
1204 @Feature({"Cronet"}) 1222 @Feature({"Cronet"})
1205 @OnlyRunNativeCronet 1223 @OnlyRunNativeCronet
1206 public void testThrowOnSucceeded() { 1224 public void testThrowOnSucceeded() {
1207 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1225 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1208 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); 1226 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED);
1209 BidirectionalStream.Builder builder = 1227 BidirectionalStream.Builder builder =
1210 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 1228 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
1211 callback.getExecutor(), mTestFramework.mCronetEngine); 1229 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1212 BidirectionalStream stream = builder.setHttpMethod("GET").build(); 1230 BidirectionalStream stream = builder.setHttpMethod("GET").build();
1213 stream.start(); 1231 stream.start();
1214 callback.blockForDone(); 1232 callback.blockForDone();
1215 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); 1233 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
1216 assertTrue(stream.isDone()); 1234 assertTrue(stream.isDone());
1217 assertNotNull(callback.mResponseInfo); 1235 assertNotNull(callback.mResponseInfo);
1218 // Check that error thrown from 'onSucceeded' callback is not reported. 1236 // Check that error thrown from 'onSucceeded' callback is not reported.
1219 assertNull(callback.mError); 1237 assertNull(callback.mError);
1220 assertFalse(callback.mOnErrorCalled); 1238 assertFalse(callback.mOnErrorCalled);
1221 } 1239 }
1222 1240
1223 @SmallTest 1241 @SmallTest
1224 @Feature({"Cronet"}) 1242 @Feature({"Cronet"})
1225 @OnlyRunNativeCronet 1243 @OnlyRunNativeCronet
1226 public void testExecutorShutdownBeforeStreamIsDone() { 1244 public void testExecutorShutdownBeforeStreamIsDone() {
1227 // Test that stream is destroyed even if executor is shut down and rejec ts posting tasks. 1245 // Test that stream is destroyed even if executor is shut down and rejec ts posting tasks.
1228 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1246 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1229 callback.setAutoAdvance(false); 1247 callback.setAutoAdvance(false);
1230 BidirectionalStream.Builder builder = 1248 BidirectionalStream.Builder builder =
1231 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 1249 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
1232 callback.getExecutor(), mTestFramework.mCronetEngine); 1250 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1233 CronetBidirectionalStream stream = 1251 CronetBidirectionalStream stream =
1234 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ; 1252 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ;
1235 stream.start(); 1253 stream.start();
1236 callback.waitForNextReadStep(); 1254 callback.waitForNextReadStep();
1237 assertFalse(callback.isDone()); 1255 assertFalse(callback.isDone());
1238 assertFalse(stream.isDone()); 1256 assertFalse(stream.isDone());
1239 1257
1240 final ConditionVariable streamDestroyed = new ConditionVariable(false); 1258 final ConditionVariable streamDestroyed = new ConditionVariable(false);
1241 stream.setOnDestroyedCallbackForTesting(new Runnable() { 1259 stream.setOnDestroyedCallbackForTesting(new Runnable() {
1242 @Override 1260 @Override
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 @SmallTest 1309 @SmallTest
1292 @Feature({"Cronet"}) 1310 @Feature({"Cronet"})
1293 @OnlyRunNativeCronet 1311 @OnlyRunNativeCronet
1294 public void testCronetEngineShutdown() throws Exception { 1312 public void testCronetEngineShutdown() throws Exception {
1295 // Test that CronetEngine cannot be shut down if there are any active st reams. 1313 // Test that CronetEngine cannot be shut down if there are any active st reams.
1296 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback(); 1314 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback();
1297 // Block callback when response starts to verify that shutdown fails 1315 // Block callback when response starts to verify that shutdown fails
1298 // if there are active streams. 1316 // if there are active streams.
1299 callback.setAutoAdvance(false); 1317 callback.setAutoAdvance(false);
1300 BidirectionalStream.Builder builder = 1318 BidirectionalStream.Builder builder =
1301 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 1319 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
1302 callback.getExecutor(), mTestFramework.mCronetEngine); 1320 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1303 CronetBidirectionalStream stream = 1321 CronetBidirectionalStream stream =
1304 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ; 1322 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ;
1305 stream.start(); 1323 stream.start();
1306 try { 1324 try {
1307 mTestFramework.mCronetEngine.shutdown(); 1325 mTestFramework.mCronetEngine.shutdown();
1308 fail("Should throw an exception"); 1326 fail("Should throw an exception");
1309 } catch (Exception e) { 1327 } catch (Exception e) {
1310 assertEquals("Cannot shutdown with active requests.", e.getMessage() ); 1328 assertEquals("Cannot shutdown with active requests.", e.getMessage() );
1311 } 1329 }
1312 1330
(...skipping 23 matching lines...) Expand all
1336 callback.blockForDone(); 1354 callback.blockForDone();
1337 } 1355 }
1338 1356
1339 @SmallTest 1357 @SmallTest
1340 @Feature({"Cronet"}) 1358 @Feature({"Cronet"})
1341 @OnlyRunNativeCronet 1359 @OnlyRunNativeCronet
1342 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { 1360 public void testCronetEngineShutdownAfterStreamFailure() throws Exception {
1343 // Test that CronetEngine can be shut down after stream reports a failur e. 1361 // Test that CronetEngine can be shut down after stream reports a failur e.
1344 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback(); 1362 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback();
1345 BidirectionalStream.Builder builder = 1363 BidirectionalStream.Builder builder =
1346 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 1364 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
1347 callback.getExecutor(), mTestFramework.mCronetEngine); 1365 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1348 CronetBidirectionalStream stream = 1366 CronetBidirectionalStream stream =
1349 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ; 1367 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ;
1350 stream.start(); 1368 stream.start();
1351 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET ED); 1369 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET ED);
1352 callback.blockForDone(); 1370 callback.blockForDone();
1353 assertTrue(callback.mOnErrorCalled); 1371 assertTrue(callback.mOnErrorCalled);
1354 assertNull(mTestFramework.mCronetEngine); 1372 assertNull(mTestFramework.mCronetEngine);
1355 } 1373 }
1356 1374
1357 @SmallTest 1375 @SmallTest
1358 @Feature({"Cronet"}) 1376 @Feature({"Cronet"})
1359 @OnlyRunNativeCronet 1377 @OnlyRunNativeCronet
1360 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { 1378 public void testCronetEngineShutdownAfterStreamCancel() throws Exception {
1361 // Test that CronetEngine can be shut down after stream is canceled. 1379 // Test that CronetEngine can be shut down after stream is canceled.
1362 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback(); 1380 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback();
1363 BidirectionalStream.Builder builder = 1381 BidirectionalStream.Builder builder =
1364 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 1382 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder(
1365 callback.getExecutor(), mTestFramework.mCronetEngine); 1383 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1366 CronetBidirectionalStream stream = 1384 CronetBidirectionalStream stream =
1367 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ; 1385 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ;
1368 1386
1369 // Block callback when response starts to verify that shutdown fails 1387 // Block callback when response starts to verify that shutdown fails
1370 // if there are active requests. 1388 // if there are active requests.
1371 callback.setAutoAdvance(false); 1389 callback.setAutoAdvance(false);
1372 stream.start(); 1390 stream.start();
1373 try { 1391 try {
1374 mTestFramework.mCronetEngine.shutdown(); 1392 mTestFramework.mCronetEngine.shutdown();
1375 fail("Should throw an exception"); 1393 fail("Should throw an exception");
(...skipping 13 matching lines...) Expand all
1389 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) { 1407 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) {
1390 // Use a duplicate to avoid modifying byteBuffer. 1408 // Use a duplicate to avoid modifying byteBuffer.
1391 ByteBuffer duplicate = byteBuffer.duplicate(); 1409 ByteBuffer duplicate = byteBuffer.duplicate();
1392 duplicate.position(start); 1410 duplicate.position(start);
1393 duplicate.limit(end); 1411 duplicate.limit(end);
1394 byte[] contents = new byte[duplicate.remaining()]; 1412 byte[] contents = new byte[duplicate.remaining()];
1395 duplicate.get(contents); 1413 duplicate.get(contents);
1396 return new String(contents); 1414 return new String(contents);
1397 } 1415 }
1398 } 1416 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698