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