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

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

Powered by Google App Engine
This is Rietveld 408576698