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

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

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

Powered by Google App Engine
This is Rietveld 408576698