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 android.os.ConditionVariable; | 7 import android.os.ConditionVariable; |
8 import android.test.suitebuilder.annotation.SmallTest; | 8 import android.test.suitebuilder.annotation.SmallTest; |
9 | 9 |
10 import org.chromium.base.test.util.DisabledTest; | 10 import org.chromium.base.test.util.DisabledTest; |
11 import org.chromium.base.test.util.Feature; | 11 import org.chromium.base.test.util.Feature; |
12 import org.chromium.net.CronetTestBase.OnlyRunNativeCronet; | |
13 import org.chromium.net.TestBidirectionalStreamCallback.FailureType; | 12 import org.chromium.net.TestBidirectionalStreamCallback.FailureType; |
14 import org.chromium.net.TestBidirectionalStreamCallback.ResponseStep; | 13 import org.chromium.net.TestBidirectionalStreamCallback.ResponseStep; |
15 import org.chromium.net.impl.CronetBidirectionalStream; | 14 import org.chromium.net.impl.CronetBidirectionalStream; |
16 | 15 |
17 import java.nio.ByteBuffer; | 16 import java.nio.ByteBuffer; |
18 import java.util.AbstractMap; | 17 import java.util.AbstractMap; |
19 import java.util.ArrayList; | 18 import java.util.ArrayList; |
20 import java.util.Arrays; | 19 import java.util.Arrays; |
21 import java.util.List; | 20 import java.util.List; |
22 import java.util.Map; | 21 import java.util.Map; |
23 import java.util.regex.Matcher; | 22 import java.util.regex.Matcher; |
24 import java.util.regex.Pattern; | 23 import java.util.regex.Pattern; |
25 | 24 |
26 /** | 25 /** |
27 * Test functionality of BidirectionalStream interface. | 26 * Test functionality of BidirectionalStream interface. |
28 */ | 27 */ |
29 public class BidirectionalStreamTest extends CronetTestBase { | 28 public class BidirectionalStreamTest extends CronetTestBase { |
30 private CronetTestFramework mTestFramework; | 29 private CronetTestFramework mTestFramework; |
31 | 30 |
32 @Override | 31 @Override |
33 protected void setUp() throws Exception { | 32 protected void setUp() throws Exception { |
34 super.setUp(); | 33 super.setUp(); |
35 // Load library first to create MockCertVerifier. | 34 // Load library first to create MockCertVerifier. |
36 System.loadLibrary("cronet_tests"); | 35 System.loadLibrary("cronet_tests"); |
37 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 36 ExperimentalCronetEngine.Builder builder = |
38 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); | 37 new ExperimentalCronetEngine.Builder(getContext()); |
| 38 CronetTestUtil.setMockCertVerifierForTesting( |
| 39 builder, QuicTestServer.createMockCertVerifier()); |
39 | 40 |
40 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); | 41 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); |
41 assertTrue(Http2TestServer.startHttp2TestServer( | 42 assertTrue(Http2TestServer.startHttp2TestServer( |
42 getContext(), QuicTestServer.getServerCert(), QuicTestServer.get
ServerCertKey())); | 43 getContext(), QuicTestServer.getServerCert(), QuicTestServer.get
ServerCertKey())); |
43 } | 44 } |
44 | 45 |
45 @Override | 46 @Override |
46 protected void tearDown() throws Exception { | 47 protected void tearDown() throws Exception { |
47 assertTrue(Http2TestServer.shutdownHttp2TestServer()); | 48 assertTrue(Http2TestServer.shutdownHttp2TestServer()); |
48 if (mTestFramework.mCronetEngine != null) { | 49 if (mTestFramework.mCronetEngine != null) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 Arrays.asList(urls), statusCode, message, headersList, false, "h
2", null); | 83 Arrays.asList(urls), statusCode, message, headersList, false, "h
2", null); |
83 urlResponseInfo.setReceivedBytesCount(receivedBytes); | 84 urlResponseInfo.setReceivedBytesCount(receivedBytes); |
84 return urlResponseInfo; | 85 return urlResponseInfo; |
85 } | 86 } |
86 | 87 |
87 private void runSimpleGetWithExpectedReceivedBytesCount(int expectedReceived
Bytes) | 88 private void runSimpleGetWithExpectedReceivedBytesCount(int expectedReceived
Bytes) |
88 throws Exception { | 89 throws Exception { |
89 String url = Http2TestServer.getEchoMethodUrl(); | 90 String url = Http2TestServer.getEchoMethodUrl(); |
90 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 91 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
91 // Create stream. | 92 // Create stream. |
92 BidirectionalStream stream = new BidirectionalStream | 93 BidirectionalStream stream = |
93 .Builder(url, callback, callback.ge
tExecutor(), | 94 mTestFramework.mCronetEngine |
94 mTestFramework.mCronetEngin
e) | 95 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
95 .setHttpMethod("GET") | 96 .setHttpMethod("GET") |
96 .build(); | 97 .build(); |
97 stream.start(); | 98 stream.start(); |
98 callback.blockForDone(); | 99 callback.blockForDone(); |
99 assertTrue(stream.isDone()); | 100 assertTrue(stream.isDone()); |
100 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 101 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
101 // Default method is 'GET'. | 102 // Default method is 'GET'. |
102 assertEquals("GET", callback.mResponseAsString); | 103 assertEquals("GET", callback.mResponseAsString); |
103 UrlResponseInfo urlResponseInfo = createUrlResponseInfo( | 104 UrlResponseInfo urlResponseInfo = createUrlResponseInfo( |
104 new String[] {url}, "", 200, expectedReceivedBytes, ":status", "
200"); | 105 new String[] {url}, "", 200, expectedReceivedBytes, ":status", "
200"); |
105 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); | 106 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); |
106 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); | 107 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); |
107 } | 108 } |
108 | 109 |
109 @SmallTest | 110 @SmallTest |
110 @Feature({"Cronet"}) | 111 @Feature({"Cronet"}) |
| 112 @OnlyRunNativeCronet |
111 public void testBuilderChecks() throws Exception { | 113 public void testBuilderChecks() throws Exception { |
112 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 114 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
113 try { | 115 try { |
114 new BidirectionalStream.Builder( | 116 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
115 null, callback, callback.getExecutor(), mTestFramework.mCron
etEngine); | 117 null, callback, callback.getExecutor()); |
116 fail("URL not null-checked"); | 118 fail("URL not null-checked"); |
117 } catch (NullPointerException e) { | 119 } catch (NullPointerException e) { |
118 assertEquals("URL is required.", e.getMessage()); | 120 assertEquals("URL is required.", e.getMessage()); |
119 } | 121 } |
120 try { | 122 try { |
121 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), null
, | 123 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
122 callback.getExecutor(), mTestFramework.mCronetEngine); | 124 Http2TestServer.getServerUrl(), null, callback.getExecutor()
); |
123 fail("Callback not null-checked"); | 125 fail("Callback not null-checked"); |
124 } catch (NullPointerException e) { | 126 } catch (NullPointerException e) { |
125 assertEquals("Callback is required.", e.getMessage()); | 127 assertEquals("Callback is required.", e.getMessage()); |
126 } | 128 } |
127 try { | 129 try { |
128 new BidirectionalStream.Builder( | 130 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
129 Http2TestServer.getServerUrl(), callback, null, mTestFramewo
rk.mCronetEngine); | 131 Http2TestServer.getServerUrl(), callback, null); |
130 fail("Executor not null-checked"); | 132 fail("Executor not null-checked"); |
131 } catch (NullPointerException e) { | 133 } catch (NullPointerException e) { |
132 assertEquals("Executor is required.", e.getMessage()); | 134 assertEquals("Executor is required.", e.getMessage()); |
133 } | 135 } |
134 try { | |
135 new BidirectionalStream.Builder( | |
136 Http2TestServer.getServerUrl(), callback, callback.getExecut
or(), null); | |
137 fail("CronetEngine not null-checked"); | |
138 } catch (NullPointerException e) { | |
139 assertEquals("CronetEngine is required.", e.getMessage()); | |
140 } | |
141 // Verify successful creation doesn't throw. | 136 // Verify successful creation doesn't throw. |
142 BidirectionalStream.Builder builder = | 137 BidirectionalStream.Builder builder = |
143 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 138 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
144 callback.getExecutor(), mTestFramework.mCronetEngine); | 139 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
145 try { | 140 try { |
146 builder.addHeader(null, "value"); | 141 builder.addHeader(null, "value"); |
147 fail("Header name is not null-checked"); | 142 fail("Header name is not null-checked"); |
148 } catch (NullPointerException e) { | 143 } catch (NullPointerException e) { |
149 assertEquals("Invalid header name.", e.getMessage()); | 144 assertEquals("Invalid header name.", e.getMessage()); |
150 } | 145 } |
151 try { | 146 try { |
152 builder.addHeader("name", null); | 147 builder.addHeader("name", null); |
153 fail("Header value is not null-checked"); | 148 fail("Header value is not null-checked"); |
154 } catch (NullPointerException e) { | 149 } catch (NullPointerException e) { |
155 assertEquals("Invalid header value.", e.getMessage()); | 150 assertEquals("Invalid header value.", e.getMessage()); |
156 } | 151 } |
157 try { | 152 try { |
158 builder.setHttpMethod(null); | 153 builder.setHttpMethod(null); |
159 fail("Method name is not null-checked"); | 154 fail("Method name is not null-checked"); |
160 } catch (NullPointerException e) { | 155 } catch (NullPointerException e) { |
161 assertEquals("Method is required.", e.getMessage()); | 156 assertEquals("Method is required.", e.getMessage()); |
162 } | 157 } |
163 } | 158 } |
164 | 159 |
165 @SmallTest | 160 @SmallTest |
166 @Feature({"Cronet"}) | 161 @Feature({"Cronet"}) |
167 @OnlyRunNativeCronet | 162 @OnlyRunNativeCronet |
168 public void testFailPlainHttp() throws Exception { | 163 public void testFailPlainHttp() throws Exception { |
169 String url = "http://example.com"; | 164 String url = "http://example.com"; |
170 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 165 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
171 // Create stream. | 166 // Create stream. |
172 BidirectionalStream stream = new BidirectionalStream | 167 BidirectionalStream stream = |
173 .Builder(url, callback, callback.ge
tExecutor(), | 168 mTestFramework.mCronetEngine |
174 mTestFramework.mCronetEngin
e) | 169 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
175 .build(); | 170 .build(); |
176 stream.start(); | 171 stream.start(); |
177 callback.blockForDone(); | 172 callback.blockForDone(); |
178 assertTrue(stream.isDone()); | 173 assertTrue(stream.isDone()); |
179 assertEquals("Exception in BidirectionalStream: net::ERR_DISALLOWED_URL_
SCHEME", | 174 assertEquals("Exception in BidirectionalStream: net::ERR_DISALLOWED_URL_
SCHEME", |
180 callback.mError.getMessage()); | 175 callback.mError.getMessage()); |
181 assertEquals(-301, callback.mError.getCronetInternalErrorCode()); | 176 assertEquals(-301, callback.mError.getCronetInternalErrorCode()); |
182 } | 177 } |
183 | 178 |
184 @SmallTest | 179 @SmallTest |
185 @Feature({"Cronet"}) | 180 @Feature({"Cronet"}) |
186 @OnlyRunNativeCronet | 181 @OnlyRunNativeCronet |
187 public void testSimpleGet() throws Exception { | 182 public void testSimpleGet() throws Exception { |
188 // Since this is the first request on the connection, the expected recei
ved bytes count | 183 // Since this is the first request on the connection, the expected recei
ved bytes count |
189 // must account for an HPACK dynamic table size update. | 184 // must account for an HPACK dynamic table size update. |
190 runSimpleGetWithExpectedReceivedBytesCount(31); | 185 runSimpleGetWithExpectedReceivedBytesCount(31); |
191 } | 186 } |
192 | 187 |
193 @SmallTest | 188 @SmallTest |
194 @Feature({"Cronet"}) | 189 @Feature({"Cronet"}) |
195 @OnlyRunNativeCronet | 190 @OnlyRunNativeCronet |
196 public void testSimpleHead() throws Exception { | 191 public void testSimpleHead() throws Exception { |
197 String url = Http2TestServer.getEchoMethodUrl(); | 192 String url = Http2TestServer.getEchoMethodUrl(); |
198 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 193 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
199 // Create stream. | 194 // Create stream. |
200 BidirectionalStream stream = new BidirectionalStream | 195 BidirectionalStream stream = |
201 .Builder(url, callback, callback.ge
tExecutor(), | 196 mTestFramework.mCronetEngine |
202 mTestFramework.mCronetEngin
e) | 197 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
203 .setHttpMethod("HEAD") | 198 .setHttpMethod("HEAD") |
204 .build(); | 199 .build(); |
205 stream.start(); | 200 stream.start(); |
206 callback.blockForDone(); | 201 callback.blockForDone(); |
207 assertTrue(stream.isDone()); | 202 assertTrue(stream.isDone()); |
208 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 203 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
209 assertEquals("HEAD", callback.mResponseAsString); | 204 assertEquals("HEAD", callback.mResponseAsString); |
210 UrlResponseInfo urlResponseInfo = | 205 UrlResponseInfo urlResponseInfo = |
211 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status"
, "200"); | 206 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status"
, "200"); |
212 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); | 207 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); |
213 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); | 208 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); |
214 } | 209 } |
215 | 210 |
216 @SmallTest | 211 @SmallTest |
217 @Feature({"Cronet"}) | 212 @Feature({"Cronet"}) |
218 @OnlyRunNativeCronet | 213 @OnlyRunNativeCronet |
219 public void testSimplePost() throws Exception { | 214 public void testSimplePost() throws Exception { |
220 String url = Http2TestServer.getEchoStreamUrl(); | 215 String url = Http2TestServer.getEchoStreamUrl(); |
221 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 216 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
222 callback.addWriteData("Test String".getBytes()); | 217 callback.addWriteData("Test String".getBytes()); |
223 callback.addWriteData("1234567890".getBytes()); | 218 callback.addWriteData("1234567890".getBytes()); |
224 callback.addWriteData("woot!".getBytes()); | 219 callback.addWriteData("woot!".getBytes()); |
225 // Create stream. | 220 // Create stream. |
226 BidirectionalStream stream = new BidirectionalStream | 221 BidirectionalStream stream = |
227 .Builder(url, callback, callback.ge
tExecutor(), | 222 mTestFramework.mCronetEngine |
228 mTestFramework.mCronetEngin
e) | 223 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
229 .addHeader("foo", "bar") | 224 .addHeader("foo", "bar") |
230 .addHeader("empty", "") | 225 .addHeader("empty", "") |
231 .addHeader("Content-Type", "zebra") | 226 .addHeader("Content-Type", "zebra") |
232 .build(); | 227 .build(); |
233 stream.start(); | 228 stream.start(); |
234 callback.blockForDone(); | 229 callback.blockForDone(); |
235 assertTrue(stream.isDone()); | 230 assertTrue(stream.isDone()); |
236 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 231 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
237 assertEquals("Test String1234567890woot!", callback.mResponseAsString); | 232 assertEquals("Test String1234567890woot!", callback.mResponseAsString); |
238 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 233 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
239 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 234 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
240 assertEquals( | 235 assertEquals( |
241 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 236 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
242 } | 237 } |
243 | 238 |
244 @SmallTest | 239 @SmallTest |
245 @Feature({"Cronet"}) | 240 @Feature({"Cronet"}) |
246 @OnlyRunNativeCronet | 241 @OnlyRunNativeCronet |
247 public void testSimplePostWithFlush() throws Exception { | 242 public void testSimplePostWithFlush() throws Exception { |
248 String url = Http2TestServer.getEchoStreamUrl(); | 243 String url = Http2TestServer.getEchoStreamUrl(); |
249 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 244 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
250 callback.addWriteData("Test String".getBytes(), false); | 245 callback.addWriteData("Test String".getBytes(), false); |
251 callback.addWriteData("1234567890".getBytes(), false); | 246 callback.addWriteData("1234567890".getBytes(), false); |
252 callback.addWriteData("woot!".getBytes(), true); | 247 callback.addWriteData("woot!".getBytes(), true); |
253 BidirectionalStream stream = new BidirectionalStream | 248 BidirectionalStream stream = |
254 .Builder(url, callback, callback.ge
tExecutor(), | 249 mTestFramework.mCronetEngine |
255 mTestFramework.mCronetEngin
e) | 250 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
256 .addHeader("foo", "bar") | 251 .addHeader("foo", "bar") |
257 .addHeader("empty", "") | 252 .addHeader("empty", "") |
258 .addHeader("Content-Type", "zebra") | 253 .addHeader("Content-Type", "zebra") |
259 .build(); | 254 .build(); |
260 // Flush before stream is started should not crash. | 255 // Flush before stream is started should not crash. |
261 stream.flush(); | 256 stream.flush(); |
262 | 257 |
263 stream.start(); | 258 stream.start(); |
264 callback.blockForDone(); | 259 callback.blockForDone(); |
265 assertTrue(stream.isDone()); | 260 assertTrue(stream.isDone()); |
266 | 261 |
267 // Flush after stream is completed is no-op. It shouldn't call into the
destroyed adapter. | 262 // Flush after stream is completed is no-op. It shouldn't call into the
destroyed adapter. |
268 stream.flush(); | 263 stream.flush(); |
269 | 264 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 ((CronetBidirectionalStream) stream).getFlushDataFor
Testing().size()); | 316 ((CronetBidirectionalStream) stream).getFlushDataFor
Testing().size()); |
322 } | 317 } |
323 } | 318 } |
324 }; | 319 }; |
325 callback.addWriteData("1".getBytes(), false); | 320 callback.addWriteData("1".getBytes(), false); |
326 callback.addWriteData("2".getBytes(), false); | 321 callback.addWriteData("2".getBytes(), false); |
327 callback.addWriteData("3".getBytes(), true); | 322 callback.addWriteData("3".getBytes(), true); |
328 callback.addWriteData("4".getBytes(), false); | 323 callback.addWriteData("4".getBytes(), false); |
329 callback.addWriteData("5".getBytes(), true); | 324 callback.addWriteData("5".getBytes(), true); |
330 callback.addWriteData("6".getBytes(), false); | 325 callback.addWriteData("6".getBytes(), false); |
331 CronetBidirectionalStream stream = (CronetBidirectionalStream) new Bidir
ectionalStream | 326 CronetBidirectionalStream stream = |
332 .Builder(url, callback, callb
ack.getExecutor(), | 327 (CronetBidirectionalStream) mTestFramework.mCronetEngine |
333 mTestFramework.mCrone
tEngine) | 328 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
334 .addHeader("foo", "bar") | 329 .addHeader("foo", "bar") |
335 .addHeader("empty", "") | 330 .addHeader("empty", "") |
336 .addHeader("Content-Type", "z
ebra") | 331 .addHeader("Content-Type", "zebra") |
337 .build(); | 332 .build(); |
338 callback.setAutoAdvance(false); | 333 callback.setAutoAdvance(false); |
339 stream.start(); | 334 stream.start(); |
340 callback.waitForNextWriteStep(); // onStreamReady | 335 callback.waitForNextWriteStep(); // onStreamReady |
341 | 336 |
342 assertEquals(0, stream.getPendingDataForTesting().size()); | 337 assertEquals(0, stream.getPendingDataForTesting().size()); |
343 assertEquals(0, stream.getFlushDataForTesting().size()); | 338 assertEquals(0, stream.getFlushDataForTesting().size()); |
344 | 339 |
345 // Write 1, 2, 3 and flush(). | 340 // Write 1, 2, 3 and flush(). |
346 callback.startNextWrite(stream); | 341 callback.startNextWrite(stream); |
347 // Write 4, 5 and flush(). 4, 5 will be in flush queue. | 342 // 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... |
380 stream.flush(); | 375 stream.flush(); |
381 super.onStreamReady(stream); | 376 super.onStreamReady(stream); |
382 try { | 377 try { |
383 // Attempt to write data for GET request. | 378 // Attempt to write data for GET request. |
384 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); | 379 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); |
385 } catch (IllegalArgumentException e) { | 380 } catch (IllegalArgumentException e) { |
386 // Expected. | 381 // Expected. |
387 } | 382 } |
388 } | 383 } |
389 }; | 384 }; |
390 BidirectionalStream stream = new BidirectionalStream | 385 BidirectionalStream stream = |
391 .Builder(url, callback, callbac
k.getExecutor(), | 386 mTestFramework.mCronetEngine |
392 mTestFramework.mCronetE
ngine) | 387 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
393 .setHttpMethod("GET") | 388 .setHttpMethod("GET") |
394 .delayRequestHeadersUntilFirstF
lush(i == 0) | 389 .delayRequestHeadersUntilFirstFlush(i == 0) |
395 .addHeader("foo", "bar") | 390 .addHeader("foo", "bar") |
396 .addHeader("empty", "") | 391 .addHeader("empty", "") |
397 .build(); | 392 .build(); |
398 // Flush before stream is started should not crash. | 393 // Flush before stream is started should not crash. |
399 stream.flush(); | 394 stream.flush(); |
400 | 395 |
401 stream.start(); | 396 stream.start(); |
402 callback.blockForDone(); | 397 callback.blockForDone(); |
403 assertTrue(stream.isDone()); | 398 assertTrue(stream.isDone()); |
404 | 399 |
405 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed | 400 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed |
406 // adapter. | 401 // adapter. |
407 stream.flush(); | 402 stream.flush(); |
408 | 403 |
409 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 404 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
410 assertEquals("", callback.mResponseAsString); | 405 assertEquals("", callback.mResponseAsString); |
411 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 406 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
412 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 407 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
413 } | 408 } |
414 } | 409 } |
415 | 410 |
416 @SmallTest | 411 @SmallTest |
417 @Feature({"Cronet"}) | 412 @Feature({"Cronet"}) |
418 @OnlyRunNativeCronet | 413 @OnlyRunNativeCronet |
419 public void testSimplePostWithFlushAfterOneWrite() throws Exception { | 414 public void testSimplePostWithFlushAfterOneWrite() throws Exception { |
420 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 415 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
421 for (int i = 0; i < 2; i++) { | 416 for (int i = 0; i < 2; i++) { |
422 String url = Http2TestServer.getEchoStreamUrl(); | 417 String url = Http2TestServer.getEchoStreamUrl(); |
423 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 418 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
424 callback.addWriteData("Test String".getBytes(), true); | 419 callback.addWriteData("Test String".getBytes(), true); |
425 BidirectionalStream stream = new BidirectionalStream | 420 BidirectionalStream stream = |
426 .Builder(url, callback, callbac
k.getExecutor(), | 421 mTestFramework.mCronetEngine |
427 mTestFramework.mCronetE
ngine) | 422 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
428 .delayRequestHeadersUntilFirstF
lush(i == 0) | 423 .delayRequestHeadersUntilFirstFlush(i == 0) |
429 .addHeader("foo", "bar") | 424 .addHeader("foo", "bar") |
430 .addHeader("empty", "") | 425 .addHeader("empty", "") |
431 .addHeader("Content-Type", "zeb
ra") | 426 .addHeader("Content-Type", "zebra") |
432 .build(); | 427 .build(); |
433 stream.start(); | 428 stream.start(); |
434 callback.blockForDone(); | 429 callback.blockForDone(); |
435 assertTrue(stream.isDone()); | 430 assertTrue(stream.isDone()); |
436 | 431 |
437 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 432 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
438 assertEquals("Test String", callback.mResponseAsString); | 433 assertEquals("Test String", callback.mResponseAsString); |
439 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 434 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
440 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 435 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
441 assertEquals("zebra", | 436 assertEquals("zebra", |
442 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); | 437 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); |
443 } | 438 } |
444 } | 439 } |
445 | 440 |
446 @SmallTest | 441 @SmallTest |
447 @Feature({"Cronet"}) | 442 @Feature({"Cronet"}) |
448 @OnlyRunNativeCronet | 443 @OnlyRunNativeCronet |
449 public void testSimplePostWithFlushTwice() throws Exception { | 444 public void testSimplePostWithFlushTwice() throws Exception { |
450 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 445 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
451 for (int i = 0; i < 2; i++) { | 446 for (int i = 0; i < 2; i++) { |
452 String url = Http2TestServer.getEchoStreamUrl(); | 447 String url = Http2TestServer.getEchoStreamUrl(); |
453 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 448 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
454 callback.addWriteData("Test String".getBytes(), false); | 449 callback.addWriteData("Test String".getBytes(), false); |
455 callback.addWriteData("1234567890".getBytes(), false); | 450 callback.addWriteData("1234567890".getBytes(), false); |
456 callback.addWriteData("woot!".getBytes(), true); | 451 callback.addWriteData("woot!".getBytes(), true); |
457 callback.addWriteData("Test String".getBytes(), false); | 452 callback.addWriteData("Test String".getBytes(), false); |
458 callback.addWriteData("1234567890".getBytes(), false); | 453 callback.addWriteData("1234567890".getBytes(), false); |
459 callback.addWriteData("woot!".getBytes(), true); | 454 callback.addWriteData("woot!".getBytes(), true); |
460 BidirectionalStream stream = new BidirectionalStream | 455 BidirectionalStream stream = |
461 .Builder(url, callback, callbac
k.getExecutor(), | 456 mTestFramework.mCronetEngine |
462 mTestFramework.mCronetE
ngine) | 457 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
463 .delayRequestHeadersUntilFirstF
lush(i == 0) | 458 .delayRequestHeadersUntilFirstFlush(i == 0) |
464 .addHeader("foo", "bar") | 459 .addHeader("foo", "bar") |
465 .addHeader("empty", "") | 460 .addHeader("empty", "") |
466 .addHeader("Content-Type", "zeb
ra") | 461 .addHeader("Content-Type", "zebra") |
467 .build(); | 462 .build(); |
468 stream.start(); | 463 stream.start(); |
469 callback.blockForDone(); | 464 callback.blockForDone(); |
470 assertTrue(stream.isDone()); | 465 assertTrue(stream.isDone()); |
471 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 466 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
472 assertEquals("Test String1234567890woot!Test String1234567890woot!", | 467 assertEquals("Test String1234567890woot!Test String1234567890woot!", |
473 callback.mResponseAsString); | 468 callback.mResponseAsString); |
474 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 469 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
475 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 470 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
476 assertEquals("zebra", | 471 assertEquals("zebra", |
477 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); | 472 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); |
(...skipping 14 matching lines...) Expand all Loading... |
492 } | 487 } |
493 @Override | 488 @Override |
494 public void onResponseHeadersReceived( | 489 public void onResponseHeadersReceived( |
495 BidirectionalStream stream, UrlResponseInfo info) { | 490 BidirectionalStream stream, UrlResponseInfo info) { |
496 // Do nothing. Skip readng. | 491 // Do nothing. Skip readng. |
497 } | 492 } |
498 }; | 493 }; |
499 callback.addWriteData("Test String".getBytes()); | 494 callback.addWriteData("Test String".getBytes()); |
500 callback.addWriteData("1234567890".getBytes()); | 495 callback.addWriteData("1234567890".getBytes()); |
501 callback.addWriteData("woot!".getBytes()); | 496 callback.addWriteData("woot!".getBytes()); |
502 BidirectionalStream stream = new BidirectionalStream | 497 BidirectionalStream stream = |
503 .Builder(url, callback, callback.ge
tExecutor(), | 498 mTestFramework.mCronetEngine |
504 mTestFramework.mCronetEngin
e) | 499 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
505 .addHeader("foo", "bar") | 500 .addHeader("foo", "bar") |
506 .addHeader("empty", "") | 501 .addHeader("empty", "") |
507 .addHeader("Content-Type", "zebra") | 502 .addHeader("Content-Type", "zebra") |
508 .build(); | 503 .build(); |
509 stream.start(); | 504 stream.start(); |
510 callback.blockForDone(); | 505 callback.blockForDone(); |
511 assertTrue(stream.isDone()); | 506 assertTrue(stream.isDone()); |
512 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 507 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
513 assertEquals("Test String1234567890woot!", callback.mResponseAsString); | 508 assertEquals("Test String1234567890woot!", callback.mResponseAsString); |
514 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 509 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
515 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 510 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
516 assertEquals( | 511 assertEquals( |
517 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 512 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
518 } | 513 } |
(...skipping 13 matching lines...) Expand all Loading... |
532 startNextWrite(stream); | 527 startNextWrite(stream); |
533 assertEquals(0, numPendingWrites()); | 528 assertEquals(0, numPendingWrites()); |
534 } | 529 } |
535 }; | 530 }; |
536 callback.addWriteData("Test String".getBytes(), false); | 531 callback.addWriteData("Test String".getBytes(), false); |
537 callback.addWriteData("1234567890".getBytes(), false); | 532 callback.addWriteData("1234567890".getBytes(), false); |
538 callback.addWriteData("woot!".getBytes(), true); | 533 callback.addWriteData("woot!".getBytes(), true); |
539 callback.addWriteData("Test String".getBytes(), false); | 534 callback.addWriteData("Test String".getBytes(), false); |
540 callback.addWriteData("1234567890".getBytes(), false); | 535 callback.addWriteData("1234567890".getBytes(), false); |
541 callback.addWriteData("woot!".getBytes(), true); | 536 callback.addWriteData("woot!".getBytes(), true); |
542 BidirectionalStream stream = new BidirectionalStream | 537 BidirectionalStream stream = |
543 .Builder(url, callback, callback.ge
tExecutor(), | 538 mTestFramework.mCronetEngine |
544 mTestFramework.mCronetEngin
e) | 539 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
545 .addHeader("foo", "bar") | 540 .addHeader("foo", "bar") |
546 .addHeader("empty", "") | 541 .addHeader("empty", "") |
547 .addHeader("Content-Type", "zebra") | 542 .addHeader("Content-Type", "zebra") |
548 .build(); | 543 .build(); |
549 stream.start(); | 544 stream.start(); |
550 callback.blockForDone(); | 545 callback.blockForDone(); |
551 assertTrue(stream.isDone()); | 546 assertTrue(stream.isDone()); |
552 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 547 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
553 assertEquals( | 548 assertEquals( |
554 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); | 549 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); |
555 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 550 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
556 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 551 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
557 assertEquals( | 552 assertEquals( |
558 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 553 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
559 } | 554 } |
560 | 555 |
561 @SmallTest | 556 @SmallTest |
562 @Feature({"Cronet"}) | 557 @Feature({"Cronet"}) |
563 @OnlyRunNativeCronet | 558 @OnlyRunNativeCronet |
564 public void testSimplePut() throws Exception { | 559 public void testSimplePut() throws Exception { |
565 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 560 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
566 callback.addWriteData("Put This Data!".getBytes()); | 561 callback.addWriteData("Put This Data!".getBytes()); |
567 String methodName = "PUT"; | 562 String methodName = "PUT"; |
568 BidirectionalStream.Builder builder = | 563 BidirectionalStream.Builder builder = |
569 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 564 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
570 callback.getExecutor(), mTestFramework.mCronetEngine); | 565 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
571 builder.setHttpMethod(methodName); | 566 builder.setHttpMethod(methodName); |
572 builder.build().start(); | 567 builder.build().start(); |
573 callback.blockForDone(); | 568 callback.blockForDone(); |
574 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 569 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
575 assertEquals("Put This Data!", callback.mResponseAsString); | 570 assertEquals("Put This Data!", callback.mResponseAsString); |
576 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech
o-method").get(0)); | 571 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech
o-method").get(0)); |
577 } | 572 } |
578 | 573 |
579 @SmallTest | 574 @SmallTest |
580 @Feature({"Cronet"}) | 575 @Feature({"Cronet"}) |
581 @OnlyRunNativeCronet | 576 @OnlyRunNativeCronet |
582 public void testBadMethod() throws Exception { | 577 public void testBadMethod() throws Exception { |
583 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 578 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
584 BidirectionalStream.Builder builder = | 579 BidirectionalStream.Builder builder = |
585 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 580 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
586 callback.getExecutor(), mTestFramework.mCronetEngine); | 581 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
587 try { | 582 try { |
588 builder.setHttpMethod("bad:method!"); | 583 builder.setHttpMethod("bad:method!"); |
589 builder.build().start(); | 584 builder.build().start(); |
590 fail("IllegalArgumentException not thrown."); | 585 fail("IllegalArgumentException not thrown."); |
591 } catch (IllegalArgumentException e) { | 586 } catch (IllegalArgumentException e) { |
592 assertEquals("Invalid http method bad:method!", e.getMessage()); | 587 assertEquals("Invalid http method bad:method!", e.getMessage()); |
593 } | 588 } |
594 } | 589 } |
595 | 590 |
596 @SmallTest | 591 @SmallTest |
597 @Feature({"Cronet"}) | 592 @Feature({"Cronet"}) |
598 @OnlyRunNativeCronet | 593 @OnlyRunNativeCronet |
599 public void testBadHeaderName() throws Exception { | 594 public void testBadHeaderName() throws Exception { |
600 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 595 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
601 BidirectionalStream.Builder builder = | 596 BidirectionalStream.Builder builder = |
602 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 597 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
603 callback.getExecutor(), mTestFramework.mCronetEngine); | 598 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
604 try { | 599 try { |
605 builder.addHeader("goodheader1", "headervalue"); | 600 builder.addHeader("goodheader1", "headervalue"); |
606 builder.addHeader("header:name", "headervalue"); | 601 builder.addHeader("header:name", "headervalue"); |
607 builder.addHeader("goodheader2", "headervalue"); | 602 builder.addHeader("goodheader2", "headervalue"); |
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 header header:name=headervalue", e.getMessage(
)); | 606 assertEquals("Invalid header header:name=headervalue", 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 testBadHeaderValue() throws Exception { | 613 public void testBadHeaderValue() 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("headername", "bad header\r\nvalue"); | 619 builder.addHeader("headername", "bad header\r\nvalue"); |
625 builder.build().start(); | 620 builder.build().start(); |
626 fail("IllegalArgumentException not thrown."); | 621 fail("IllegalArgumentException not thrown."); |
627 } catch (IllegalArgumentException e) { | 622 } catch (IllegalArgumentException e) { |
628 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM
essage()); | 623 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM
essage()); |
629 } | 624 } |
630 } | 625 } |
631 | 626 |
632 @SmallTest | 627 @SmallTest |
633 @Feature({"Cronet"}) | 628 @Feature({"Cronet"}) |
634 @OnlyRunNativeCronet | 629 @OnlyRunNativeCronet |
635 public void testAddHeader() throws Exception { | 630 public void testAddHeader() throws Exception { |
636 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 631 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
637 String headerName = "header-name"; | 632 String headerName = "header-name"; |
638 String headerValue = "header-value"; | 633 String headerValue = "header-value"; |
639 BidirectionalStream.Builder builder = | 634 BidirectionalStream.Builder builder = |
640 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(headerName), | 635 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
641 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 636 Http2TestServer.getEchoHeaderUrl(headerName), callback, |
| 637 callback.getExecutor()); |
642 builder.addHeader(headerName, headerValue); | 638 builder.addHeader(headerName, headerValue); |
643 builder.setHttpMethod("GET"); | 639 builder.setHttpMethod("GET"); |
644 builder.build().start(); | 640 builder.build().start(); |
645 callback.blockForDone(); | 641 callback.blockForDone(); |
646 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 642 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
647 assertEquals(headerValue, callback.mResponseAsString); | 643 assertEquals(headerValue, callback.mResponseAsString); |
648 } | 644 } |
649 | 645 |
650 @SmallTest | 646 @SmallTest |
651 @Feature({"Cronet"}) | 647 @Feature({"Cronet"}) |
652 @OnlyRunNativeCronet | 648 @OnlyRunNativeCronet |
653 public void testMultiRequestHeaders() throws Exception { | 649 public void testMultiRequestHeaders() throws Exception { |
654 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 650 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
655 String headerName = "header-name"; | 651 String headerName = "header-name"; |
656 String headerValue1 = "header-value1"; | 652 String headerValue1 = "header-value1"; |
657 String headerValue2 = "header-value2"; | 653 String headerValue2 = "header-value2"; |
658 BidirectionalStream.Builder builder = | 654 BidirectionalStream.Builder builder = |
659 new BidirectionalStream.Builder(Http2TestServer.getEchoAllHeader
sUrl(), callback, | 655 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
660 callback.getExecutor(), mTestFramework.mCronetEngine); | 656 Http2TestServer.getEchoAllHeadersUrl(), callback, callba
ck.getExecutor()); |
661 builder.addHeader(headerName, headerValue1); | 657 builder.addHeader(headerName, headerValue1); |
662 builder.addHeader(headerName, headerValue2); | 658 builder.addHeader(headerName, headerValue2); |
663 builder.setHttpMethod("GET"); | 659 builder.setHttpMethod("GET"); |
664 builder.build().start(); | 660 builder.build().start(); |
665 callback.blockForDone(); | 661 callback.blockForDone(); |
666 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 662 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
667 String headers = callback.mResponseAsString; | 663 String headers = callback.mResponseAsString; |
668 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); | 664 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); |
669 Matcher matcher = pattern.matcher(headers); | 665 Matcher matcher = pattern.matcher(headers); |
670 List<String> actualValues = new ArrayList<String>(); | 666 List<String> actualValues = new ArrayList<String>(); |
671 while (matcher.find()) { | 667 while (matcher.find()) { |
672 actualValues.add(matcher.group(1)); | 668 actualValues.add(matcher.group(1)); |
673 } | 669 } |
674 assertEquals(1, actualValues.size()); | 670 assertEquals(1, actualValues.size()); |
675 assertEquals("header-value2", actualValues.get(0)); | 671 assertEquals("header-value2", actualValues.get(0)); |
676 } | 672 } |
677 | 673 |
678 @SmallTest | 674 @SmallTest |
679 @Feature({"Cronet"}) | 675 @Feature({"Cronet"}) |
680 @OnlyRunNativeCronet | 676 @OnlyRunNativeCronet |
681 public void testEchoTrailers() throws Exception { | 677 public void testEchoTrailers() throws Exception { |
682 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 678 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
683 String headerName = "header-name"; | 679 String headerName = "header-name"; |
684 String headerValue = "header-value"; | 680 String headerValue = "header-value"; |
685 BidirectionalStream.Builder builder = | 681 BidirectionalStream.Builder builder = |
686 new BidirectionalStream.Builder(Http2TestServer.getEchoTrailersU
rl(), callback, | 682 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
687 callback.getExecutor(), mTestFramework.mCronetEngine); | 683 Http2TestServer.getEchoTrailersUrl(), callback, callback
.getExecutor()); |
688 builder.addHeader(headerName, headerValue); | 684 builder.addHeader(headerName, headerValue); |
689 builder.setHttpMethod("GET"); | 685 builder.setHttpMethod("GET"); |
690 builder.build().start(); | 686 builder.build().start(); |
691 callback.blockForDone(); | 687 callback.blockForDone(); |
692 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 688 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
693 assertNotNull(callback.mTrailers); | 689 assertNotNull(callback.mTrailers); |
694 // Verify that header value is properly echoed in trailers. | 690 // Verify that header value is properly echoed in trailers. |
695 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he
aderName).get(0)); | 691 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he
aderName).get(0)); |
696 } | 692 } |
697 | 693 |
698 @SmallTest | 694 @SmallTest |
699 @Feature({"Cronet"}) | 695 @Feature({"Cronet"}) |
700 @OnlyRunNativeCronet | 696 @OnlyRunNativeCronet |
701 public void testCustomUserAgent() throws Exception { | 697 public void testCustomUserAgent() throws Exception { |
702 String userAgentName = "User-Agent"; | 698 String userAgentName = "User-Agent"; |
703 String userAgentValue = "User-Agent-Value"; | 699 String userAgentValue = "User-Agent-Value"; |
704 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 700 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
705 BidirectionalStream.Builder builder = | 701 BidirectionalStream.Builder builder = |
706 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 702 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
707 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 703 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac
k, |
| 704 callback.getExecutor()); |
708 builder.setHttpMethod("GET"); | 705 builder.setHttpMethod("GET"); |
709 builder.addHeader(userAgentName, userAgentValue); | 706 builder.addHeader(userAgentName, userAgentValue); |
710 builder.build().start(); | 707 builder.build().start(); |
711 callback.blockForDone(); | 708 callback.blockForDone(); |
712 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 709 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
713 assertEquals(userAgentValue, callback.mResponseAsString); | 710 assertEquals(userAgentValue, callback.mResponseAsString); |
714 } | 711 } |
715 | 712 |
716 @SmallTest | 713 @SmallTest |
717 @Feature({"Cronet"}) | 714 @Feature({"Cronet"}) |
718 @OnlyRunNativeCronet | 715 @OnlyRunNativeCronet |
719 public void testCustomCronetEngineUserAgent() throws Exception { | 716 public void testCustomCronetEngineUserAgent() throws Exception { |
720 String userAgentName = "User-Agent"; | 717 String userAgentName = "User-Agent"; |
721 String userAgentValue = "User-Agent-Value"; | 718 String userAgentValue = "User-Agent-Value"; |
722 CronetEngine engine = | 719 ExperimentalCronetEngine.Builder engineBuilder = |
723 new CronetEngine.Builder(getContext()) | 720 new ExperimentalCronetEngine.Builder(getContext()); |
724 .setMockCertVerifierForTesting(QuicTestServer.createMock
CertVerifier()) | 721 engineBuilder.setUserAgent(userAgentValue); |
725 .setUserAgent(userAgentValue) | 722 CronetTestUtil.setMockCertVerifierForTesting( |
726 .build(); | 723 engineBuilder, QuicTestServer.createMockCertVerifier()); |
| 724 ExperimentalCronetEngine engine = engineBuilder.build(); |
727 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 725 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
728 BidirectionalStream.Builder builder = | 726 BidirectionalStream.Builder builder = engine.newBidirectionalStreamBuild
er( |
729 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 727 Http2TestServer.getEchoHeaderUrl(userAgentName), callback, callb
ack.getExecutor()); |
730 callback, callback.getExecutor(), engine); | |
731 builder.setHttpMethod("GET"); | 728 builder.setHttpMethod("GET"); |
732 builder.build().start(); | 729 builder.build().start(); |
733 callback.blockForDone(); | 730 callback.blockForDone(); |
734 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 731 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
735 assertEquals(userAgentValue, callback.mResponseAsString); | 732 assertEquals(userAgentValue, callback.mResponseAsString); |
736 } | 733 } |
737 | 734 |
738 @SmallTest | 735 @SmallTest |
739 @Feature({"Cronet"}) | 736 @Feature({"Cronet"}) |
740 @OnlyRunNativeCronet | 737 @OnlyRunNativeCronet |
741 public void testDefaultUserAgent() throws Exception { | 738 public void testDefaultUserAgent() throws Exception { |
742 String userAgentName = "User-Agent"; | 739 String userAgentName = "User-Agent"; |
743 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 740 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
744 BidirectionalStream.Builder builder = | 741 BidirectionalStream.Builder builder = |
745 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 742 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
746 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 743 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac
k, |
| 744 callback.getExecutor()); |
747 builder.setHttpMethod("GET"); | 745 builder.setHttpMethod("GET"); |
748 builder.build().start(); | 746 builder.build().start(); |
749 callback.blockForDone(); | 747 callback.blockForDone(); |
750 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 748 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
751 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent(
), | 749 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent(
), |
752 callback.mResponseAsString); | 750 callback.mResponseAsString); |
753 } | 751 } |
754 | 752 |
755 @SmallTest | 753 @SmallTest |
756 @Feature({"Cronet"}) | 754 @Feature({"Cronet"}) |
757 @OnlyRunNativeCronet | 755 @OnlyRunNativeCronet |
758 public void testEchoStream() throws Exception { | 756 public void testEchoStream() throws Exception { |
759 String url = Http2TestServer.getEchoStreamUrl(); | 757 String url = Http2TestServer.getEchoStreamUrl(); |
760 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 758 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
761 String[] testData = {"Test String", createLongString("1234567890", 50000
), "woot!"}; | 759 String[] testData = {"Test String", createLongString("1234567890", 50000
), "woot!"}; |
762 StringBuilder stringData = new StringBuilder(); | 760 StringBuilder stringData = new StringBuilder(); |
763 for (String writeData : testData) { | 761 for (String writeData : testData) { |
764 callback.addWriteData(writeData.getBytes()); | 762 callback.addWriteData(writeData.getBytes()); |
765 stringData.append(writeData); | 763 stringData.append(writeData); |
766 } | 764 } |
767 // Create stream. | 765 // Create stream. |
768 BidirectionalStream stream = new BidirectionalStream | 766 BidirectionalStream stream = |
769 .Builder(url, callback, callback.ge
tExecutor(), | 767 mTestFramework.mCronetEngine |
770 mTestFramework.mCronetEngin
e) | 768 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
771 .addHeader("foo", "Value with Space
s") | 769 .addHeader("foo", "Value with Spaces") |
772 .addHeader("Content-Type", "zebra") | 770 .addHeader("Content-Type", "zebra") |
773 .build(); | 771 .build(); |
774 stream.start(); | 772 stream.start(); |
775 callback.blockForDone(); | 773 callback.blockForDone(); |
776 assertTrue(stream.isDone()); | 774 assertTrue(stream.isDone()); |
777 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 775 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
778 assertEquals(stringData.toString(), callback.mResponseAsString); | 776 assertEquals(stringData.toString(), callback.mResponseAsString); |
779 assertEquals( | 777 assertEquals( |
780 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get(
"echo-foo").get(0)); | 778 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get(
"echo-foo").get(0)); |
781 assertEquals( | 779 assertEquals( |
782 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 780 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
783 } | 781 } |
784 | 782 |
785 @SmallTest | 783 @SmallTest |
786 @Feature({"Cronet"}) | 784 @Feature({"Cronet"}) |
787 @OnlyRunNativeCronet | 785 @OnlyRunNativeCronet |
788 public void testEchoStreamEmptyWrite() throws Exception { | 786 public void testEchoStreamEmptyWrite() throws Exception { |
789 String url = Http2TestServer.getEchoStreamUrl(); | 787 String url = Http2TestServer.getEchoStreamUrl(); |
790 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 788 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
791 callback.addWriteData(new byte[0]); | 789 callback.addWriteData(new byte[0]); |
792 // Create stream. | 790 // Create stream. |
793 BidirectionalStream stream = new BidirectionalStream | 791 BidirectionalStream stream = |
794 .Builder(url, callback, callback.ge
tExecutor(), | 792 mTestFramework.mCronetEngine |
795 mTestFramework.mCronetEngin
e) | 793 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
796 .build(); | 794 .build(); |
797 stream.start(); | 795 stream.start(); |
798 callback.blockForDone(); | 796 callback.blockForDone(); |
799 assertTrue(stream.isDone()); | 797 assertTrue(stream.isDone()); |
800 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 798 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
801 assertEquals("", callback.mResponseAsString); | 799 assertEquals("", callback.mResponseAsString); |
802 } | 800 } |
803 | 801 |
804 @SmallTest | 802 @SmallTest |
805 @Feature({"Cronet"}) | 803 @Feature({"Cronet"}) |
806 @OnlyRunNativeCronet | 804 @OnlyRunNativeCronet |
807 public void testDoubleWrite() throws Exception { | 805 public void testDoubleWrite() 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 @Override | 808 @Override |
811 public void onStreamReady(BidirectionalStream stream) { | 809 public void onStreamReady(BidirectionalStream stream) { |
812 // super class will call Write() once. | 810 // super class will call Write() once. |
813 super.onStreamReady(stream); | 811 super.onStreamReady(stream); |
814 // Call Write() again. | 812 // Call Write() again. |
815 startNextWrite(stream); | 813 startNextWrite(stream); |
816 // Make sure there is no pending write. | 814 // Make sure there is no pending write. |
817 assertEquals(0, numPendingWrites()); | 815 assertEquals(0, numPendingWrites()); |
818 } | 816 } |
819 }; | 817 }; |
820 callback.addWriteData("1".getBytes()); | 818 callback.addWriteData("1".getBytes()); |
821 callback.addWriteData("2".getBytes()); | 819 callback.addWriteData("2".getBytes()); |
822 // Create stream. | 820 // Create stream. |
823 BidirectionalStream stream = new BidirectionalStream | 821 BidirectionalStream stream = |
824 .Builder(url, callback, callback.ge
tExecutor(), | 822 mTestFramework.mCronetEngine |
825 mTestFramework.mCronetEngin
e) | 823 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
826 .build(); | 824 .build(); |
827 stream.start(); | 825 stream.start(); |
828 callback.blockForDone(); | 826 callback.blockForDone(); |
829 assertTrue(stream.isDone()); | 827 assertTrue(stream.isDone()); |
830 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 828 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
831 assertEquals("12", callback.mResponseAsString); | 829 assertEquals("12", callback.mResponseAsString); |
832 } | 830 } |
833 | 831 |
834 @SmallTest | 832 @SmallTest |
835 @Feature({"Cronet"}) | 833 @Feature({"Cronet"}) |
836 @OnlyRunNativeCronet | 834 @OnlyRunNativeCronet |
(...skipping 11 matching lines...) Expand all Loading... |
848 stream.read(ByteBuffer.allocateDirect(5)); | 846 stream.read(ByteBuffer.allocateDirect(5)); |
849 fail("Exception is not thrown."); | 847 fail("Exception is not thrown."); |
850 } catch (Exception e) { | 848 } catch (Exception e) { |
851 assertEquals("Unexpected read attempt.", e.getMessage()); | 849 assertEquals("Unexpected read attempt.", e.getMessage()); |
852 } | 850 } |
853 } | 851 } |
854 }; | 852 }; |
855 callback.addWriteData("1".getBytes()); | 853 callback.addWriteData("1".getBytes()); |
856 callback.addWriteData("2".getBytes()); | 854 callback.addWriteData("2".getBytes()); |
857 // Create stream. | 855 // Create stream. |
858 BidirectionalStream stream = new BidirectionalStream | 856 BidirectionalStream stream = |
859 .Builder(url, callback, callback.ge
tExecutor(), | 857 mTestFramework.mCronetEngine |
860 mTestFramework.mCronetEngin
e) | 858 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
861 .build(); | 859 .build(); |
862 stream.start(); | 860 stream.start(); |
863 callback.blockForDone(); | 861 callback.blockForDone(); |
864 assertTrue(stream.isDone()); | 862 assertTrue(stream.isDone()); |
865 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 863 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
866 assertEquals("12", callback.mResponseAsString); | 864 assertEquals("12", callback.mResponseAsString); |
867 } | 865 } |
868 | 866 |
869 @SmallTest | 867 @SmallTest |
870 @Feature({"Cronet"}) | 868 @Feature({"Cronet"}) |
871 @OnlyRunNativeCronet | 869 @OnlyRunNativeCronet |
872 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") | 870 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") |
873 public void testReadAndWrite() throws Exception { | 871 public void testReadAndWrite() throws Exception { |
874 String url = Http2TestServer.getEchoStreamUrl(); | 872 String url = Http2TestServer.getEchoStreamUrl(); |
875 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { | 873 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
876 @Override | 874 @Override |
877 public void onResponseHeadersReceived( | 875 public void onResponseHeadersReceived( |
878 BidirectionalStream stream, UrlResponseInfo info) { | 876 BidirectionalStream stream, UrlResponseInfo info) { |
879 // Start the write, that will not complete until callback comple
tion. | 877 // Start the write, that will not complete until callback comple
tion. |
880 startNextWrite(stream); | 878 startNextWrite(stream); |
881 // Start the read. It is allowed with write in flight. | 879 // Start the read. It is allowed with write in flight. |
882 super.onResponseHeadersReceived(stream, info); | 880 super.onResponseHeadersReceived(stream, info); |
883 } | 881 } |
884 }; | 882 }; |
885 callback.setAutoAdvance(false); | 883 callback.setAutoAdvance(false); |
886 callback.addWriteData("1".getBytes()); | 884 callback.addWriteData("1".getBytes()); |
887 callback.addWriteData("2".getBytes()); | 885 callback.addWriteData("2".getBytes()); |
888 // Create stream. | 886 // Create stream. |
889 BidirectionalStream stream = new BidirectionalStream | 887 BidirectionalStream stream = |
890 .Builder(url, callback, callback.ge
tExecutor(), | 888 mTestFramework.mCronetEngine |
891 mTestFramework.mCronetEngin
e) | 889 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
892 .build(); | 890 .build(); |
893 stream.start(); | 891 stream.start(); |
894 callback.waitForNextWriteStep(); | 892 callback.waitForNextWriteStep(); |
895 callback.waitForNextReadStep(); | 893 callback.waitForNextReadStep(); |
896 callback.startNextRead(stream); | 894 callback.startNextRead(stream); |
897 callback.setAutoAdvance(true); | 895 callback.setAutoAdvance(true); |
898 callback.blockForDone(); | 896 callback.blockForDone(); |
899 assertTrue(stream.isDone()); | 897 assertTrue(stream.isDone()); |
900 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 898 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
901 assertEquals("12", callback.mResponseAsString); | 899 assertEquals("12", callback.mResponseAsString); |
902 } | 900 } |
903 | 901 |
904 @SmallTest | 902 @SmallTest |
905 @Feature({"Cronet"}) | 903 @Feature({"Cronet"}) |
906 @OnlyRunNativeCronet | 904 @OnlyRunNativeCronet |
907 public void testEchoStreamWriteFirst() throws Exception { | 905 public void testEchoStreamWriteFirst() throws Exception { |
908 String url = Http2TestServer.getEchoStreamUrl(); | 906 String url = Http2TestServer.getEchoStreamUrl(); |
909 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 907 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
910 callback.setAutoAdvance(false); | 908 callback.setAutoAdvance(false); |
911 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; | 909 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; |
912 StringBuilder stringData = new StringBuilder(); | 910 StringBuilder stringData = new StringBuilder(); |
913 for (String writeData : testData) { | 911 for (String writeData : testData) { |
914 callback.addWriteData(writeData.getBytes()); | 912 callback.addWriteData(writeData.getBytes()); |
915 stringData.append(writeData); | 913 stringData.append(writeData); |
916 } | 914 } |
917 // Create stream. | 915 // Create stream. |
918 BidirectionalStream stream = new BidirectionalStream | 916 BidirectionalStream stream = |
919 .Builder(url, callback, callback.ge
tExecutor(), | 917 mTestFramework.mCronetEngine |
920 mTestFramework.mCronetEngin
e) | 918 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
921 .build(); | 919 .build(); |
922 stream.start(); | 920 stream.start(); |
923 // Write first. | 921 // Write first. |
924 callback.waitForNextWriteStep(); // onStreamReady | 922 callback.waitForNextWriteStep(); // onStreamReady |
925 for (String expected : testData) { | 923 for (String expected : testData) { |
926 // Write next chunk of test data. | 924 // Write next chunk of test data. |
927 callback.startNextWrite(stream); | 925 callback.startNextWrite(stream); |
928 callback.waitForNextWriteStep(); // onWriteCompleted | 926 callback.waitForNextWriteStep(); // onWriteCompleted |
929 } | 927 } |
930 | 928 |
931 // Wait for read step, but don't read yet. | 929 // Wait for read step, but don't read yet. |
(...skipping 21 matching lines...) Expand all Loading... |
953 String url = Http2TestServer.getEchoStreamUrl(); | 951 String url = Http2TestServer.getEchoStreamUrl(); |
954 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 952 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
955 callback.setAutoAdvance(false); | 953 callback.setAutoAdvance(false); |
956 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; | 954 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; |
957 StringBuilder stringData = new StringBuilder(); | 955 StringBuilder stringData = new StringBuilder(); |
958 for (String writeData : testData) { | 956 for (String writeData : testData) { |
959 callback.addWriteData(writeData.getBytes()); | 957 callback.addWriteData(writeData.getBytes()); |
960 stringData.append(writeData); | 958 stringData.append(writeData); |
961 } | 959 } |
962 // Create stream. | 960 // Create stream. |
963 BidirectionalStream stream = new BidirectionalStream | 961 BidirectionalStream stream = |
964 .Builder(url, callback, callback.ge
tExecutor(), | 962 mTestFramework.mCronetEngine |
965 mTestFramework.mCronetEngin
e) | 963 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
966 .build(); | 964 .build(); |
967 stream.start(); | 965 stream.start(); |
968 callback.waitForNextWriteStep(); | 966 callback.waitForNextWriteStep(); |
969 callback.waitForNextReadStep(); | 967 callback.waitForNextReadStep(); |
970 | 968 |
971 for (String expected : testData) { | 969 for (String expected : testData) { |
972 // Write next chunk of test data. | 970 // Write next chunk of test data. |
973 callback.startNextWrite(stream); | 971 callback.startNextWrite(stream); |
974 callback.waitForNextWriteStep(); | 972 callback.waitForNextWriteStep(); |
975 | 973 |
976 // Read next chunk of test data. | 974 // Read next chunk of test data. |
(...skipping 16 matching lines...) Expand all Loading... |
993 * Checks that the buffer is updated correctly, when starting at an offset. | 991 * Checks that the buffer is updated correctly, when starting at an offset. |
994 */ | 992 */ |
995 @SmallTest | 993 @SmallTest |
996 @Feature({"Cronet"}) | 994 @Feature({"Cronet"}) |
997 @OnlyRunNativeCronet | 995 @OnlyRunNativeCronet |
998 public void testSimpleGetBufferUpdates() throws Exception { | 996 public void testSimpleGetBufferUpdates() throws Exception { |
999 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 997 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
1000 callback.setAutoAdvance(false); | 998 callback.setAutoAdvance(false); |
1001 // Since the method is "GET", the expected response body is also "GET". | 999 // Since the method is "GET", the expected response body is also "GET". |
1002 BidirectionalStream.Builder builder = | 1000 BidirectionalStream.Builder builder = |
1003 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1001 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
1004 callback.getExecutor(), mTestFramework.mCronetEngine); | 1002 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
1005 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1003 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
1006 stream.start(); | 1004 stream.start(); |
1007 callback.waitForNextReadStep(); | 1005 callback.waitForNextReadStep(); |
1008 | 1006 |
1009 assertEquals(null, callback.mError); | 1007 assertEquals(null, callback.mError); |
1010 assertFalse(callback.isDone()); | 1008 assertFalse(callback.isDone()); |
1011 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, | 1009 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, |
1012 callback.mResponseStep); | 1010 callback.mResponseStep); |
1013 | 1011 |
1014 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); | 1012 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1086 runSimpleGetWithExpectedReceivedBytesCount(27); | 1084 runSimpleGetWithExpectedReceivedBytesCount(27); |
1087 } | 1085 } |
1088 | 1086 |
1089 @SmallTest | 1087 @SmallTest |
1090 @Feature({"Cronet"}) | 1088 @Feature({"Cronet"}) |
1091 @OnlyRunNativeCronet | 1089 @OnlyRunNativeCronet |
1092 public void testBadBuffers() throws Exception { | 1090 public void testBadBuffers() throws Exception { |
1093 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1091 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
1094 callback.setAutoAdvance(false); | 1092 callback.setAutoAdvance(false); |
1095 BidirectionalStream.Builder builder = | 1093 BidirectionalStream.Builder builder = |
1096 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1094 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
1097 callback.getExecutor(), mTestFramework.mCronetEngine); | 1095 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
1098 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1096 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
1099 stream.start(); | 1097 stream.start(); |
1100 callback.waitForNextReadStep(); | 1098 callback.waitForNextReadStep(); |
1101 | 1099 |
1102 assertEquals(null, callback.mError); | 1100 assertEquals(null, callback.mError); |
1103 assertFalse(callback.isDone()); | 1101 assertFalse(callback.isDone()); |
1104 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, | 1102 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, |
1105 callback.mResponseStep); | 1103 callback.mResponseStep); |
1106 | 1104 |
1107 // Try to read using a full buffer. | 1105 // Try to read using a full buffer. |
(...skipping 22 matching lines...) Expand all Loading... |
1130 callback.blockForDone(); | 1128 callback.blockForDone(); |
1131 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 1129 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
1132 assertEquals("GET", callback.mResponseAsString); | 1130 assertEquals("GET", callback.mResponseAsString); |
1133 } | 1131 } |
1134 | 1132 |
1135 private void throwOrCancel( | 1133 private void throwOrCancel( |
1136 FailureType failureType, ResponseStep failureStep, boolean expectErr
or) { | 1134 FailureType failureType, ResponseStep failureStep, boolean expectErr
or) { |
1137 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1135 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
1138 callback.setFailure(failureType, failureStep); | 1136 callback.setFailure(failureType, failureStep); |
1139 BidirectionalStream.Builder builder = | 1137 BidirectionalStream.Builder builder = |
1140 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1138 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
1141 callback.getExecutor(), mTestFramework.mCronetEngine); | 1139 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
1142 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1140 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
1143 stream.start(); | 1141 stream.start(); |
1144 callback.blockForDone(); | 1142 callback.blockForDone(); |
1145 // assertEquals(callback.mResponseStep, failureStep); | 1143 // assertEquals(callback.mResponseStep, failureStep); |
1146 assertTrue(stream.isDone()); | 1144 assertTrue(stream.isDone()); |
1147 // Cancellation when stream is ready does not guarantee that | 1145 // Cancellation when stream is ready does not guarantee that |
1148 // mResponseInfo is null because there might be a | 1146 // mResponseInfo is null because there might be a |
1149 // onResponseHeadersReceived already queued in the executor. | 1147 // onResponseHeadersReceived already queued in the executor. |
1150 // See crbug.com/594432. | 1148 // See crbug.com/594432. |
1151 if (failureStep != ResponseStep.ON_STREAM_READY) { | 1149 if (failureStep != ResponseStep.ON_STREAM_READY) { |
(...skipping 29 matching lines...) Expand all Loading... |
1181 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr
ue); | 1179 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr
ue); |
1182 } | 1180 } |
1183 | 1181 |
1184 @SmallTest | 1182 @SmallTest |
1185 @Feature({"Cronet"}) | 1183 @Feature({"Cronet"}) |
1186 @OnlyRunNativeCronet | 1184 @OnlyRunNativeCronet |
1187 public void testThrowOnSucceeded() { | 1185 public void testThrowOnSucceeded() { |
1188 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1186 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
1189 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); | 1187 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); |
1190 BidirectionalStream.Builder builder = | 1188 BidirectionalStream.Builder builder = |
1191 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1189 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
1192 callback.getExecutor(), mTestFramework.mCronetEngine); | 1190 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
1193 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1191 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
1194 stream.start(); | 1192 stream.start(); |
1195 callback.blockForDone(); | 1193 callback.blockForDone(); |
1196 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 1194 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
1197 assertTrue(stream.isDone()); | 1195 assertTrue(stream.isDone()); |
1198 assertNotNull(callback.mResponseInfo); | 1196 assertNotNull(callback.mResponseInfo); |
1199 // Check that error thrown from 'onSucceeded' callback is not reported. | 1197 // Check that error thrown from 'onSucceeded' callback is not reported. |
1200 assertNull(callback.mError); | 1198 assertNull(callback.mError); |
1201 assertFalse(callback.mOnErrorCalled); | 1199 assertFalse(callback.mOnErrorCalled); |
1202 } | 1200 } |
1203 | 1201 |
1204 @SmallTest | 1202 @SmallTest |
1205 @Feature({"Cronet"}) | 1203 @Feature({"Cronet"}) |
1206 @OnlyRunNativeCronet | 1204 @OnlyRunNativeCronet |
1207 public void testExecutorShutdownBeforeStreamIsDone() { | 1205 public void testExecutorShutdownBeforeStreamIsDone() { |
1208 // Test that stream is destroyed even if executor is shut down and rejec
ts posting tasks. | 1206 // Test that stream is destroyed even if executor is shut down and rejec
ts posting tasks. |
1209 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1207 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
1210 callback.setAutoAdvance(false); | 1208 callback.setAutoAdvance(false); |
1211 BidirectionalStream.Builder builder = | 1209 BidirectionalStream.Builder builder = |
1212 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1210 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
1213 callback.getExecutor(), mTestFramework.mCronetEngine); | 1211 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
1214 CronetBidirectionalStream stream = | 1212 CronetBidirectionalStream stream = |
1215 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1213 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
1216 stream.start(); | 1214 stream.start(); |
1217 callback.waitForNextReadStep(); | 1215 callback.waitForNextReadStep(); |
1218 assertFalse(callback.isDone()); | 1216 assertFalse(callback.isDone()); |
1219 assertFalse(stream.isDone()); | 1217 assertFalse(stream.isDone()); |
1220 | 1218 |
1221 final ConditionVariable streamDestroyed = new ConditionVariable(false); | 1219 final ConditionVariable streamDestroyed = new ConditionVariable(false); |
1222 stream.setOnDestroyedCallbackForTesting(new Runnable() { | 1220 stream.setOnDestroyedCallbackForTesting(new Runnable() { |
1223 @Override | 1221 @Override |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1272 @SmallTest | 1270 @SmallTest |
1273 @Feature({"Cronet"}) | 1271 @Feature({"Cronet"}) |
1274 @OnlyRunNativeCronet | 1272 @OnlyRunNativeCronet |
1275 public void testCronetEngineShutdown() throws Exception { | 1273 public void testCronetEngineShutdown() throws Exception { |
1276 // Test that CronetEngine cannot be shut down if there are any active st
reams. | 1274 // Test that CronetEngine cannot be shut down if there are any active st
reams. |
1277 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1275 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
1278 // Block callback when response starts to verify that shutdown fails | 1276 // Block callback when response starts to verify that shutdown fails |
1279 // if there are active streams. | 1277 // if there are active streams. |
1280 callback.setAutoAdvance(false); | 1278 callback.setAutoAdvance(false); |
1281 BidirectionalStream.Builder builder = | 1279 BidirectionalStream.Builder builder = |
1282 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1280 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
1283 callback.getExecutor(), mTestFramework.mCronetEngine); | 1281 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
1284 CronetBidirectionalStream stream = | 1282 CronetBidirectionalStream stream = |
1285 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1283 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
1286 stream.start(); | 1284 stream.start(); |
1287 try { | 1285 try { |
1288 mTestFramework.mCronetEngine.shutdown(); | 1286 mTestFramework.mCronetEngine.shutdown(); |
1289 fail("Should throw an exception"); | 1287 fail("Should throw an exception"); |
1290 } catch (Exception e) { | 1288 } catch (Exception e) { |
1291 assertEquals("Cannot shutdown with active requests.", e.getMessage()
); | 1289 assertEquals("Cannot shutdown with active requests.", e.getMessage()
); |
1292 } | 1290 } |
1293 | 1291 |
(...skipping 23 matching lines...) Expand all Loading... |
1317 callback.blockForDone(); | 1315 callback.blockForDone(); |
1318 } | 1316 } |
1319 | 1317 |
1320 @SmallTest | 1318 @SmallTest |
1321 @Feature({"Cronet"}) | 1319 @Feature({"Cronet"}) |
1322 @OnlyRunNativeCronet | 1320 @OnlyRunNativeCronet |
1323 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { | 1321 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { |
1324 // Test that CronetEngine can be shut down after stream reports a failur
e. | 1322 // Test that CronetEngine can be shut down after stream reports a failur
e. |
1325 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1323 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
1326 BidirectionalStream.Builder builder = | 1324 BidirectionalStream.Builder builder = |
1327 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1325 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
1328 callback.getExecutor(), mTestFramework.mCronetEngine); | 1326 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
1329 CronetBidirectionalStream stream = | 1327 CronetBidirectionalStream stream = |
1330 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1328 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
1331 stream.start(); | 1329 stream.start(); |
1332 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET
ED); | 1330 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET
ED); |
1333 callback.blockForDone(); | 1331 callback.blockForDone(); |
1334 assertTrue(callback.mOnErrorCalled); | 1332 assertTrue(callback.mOnErrorCalled); |
1335 assertNull(mTestFramework.mCronetEngine); | 1333 assertNull(mTestFramework.mCronetEngine); |
1336 } | 1334 } |
1337 | 1335 |
1338 @SmallTest | 1336 @SmallTest |
1339 @Feature({"Cronet"}) | 1337 @Feature({"Cronet"}) |
1340 @OnlyRunNativeCronet | 1338 @OnlyRunNativeCronet |
1341 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { | 1339 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { |
1342 // Test that CronetEngine can be shut down after stream is canceled. | 1340 // Test that CronetEngine can be shut down after stream is canceled. |
1343 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1341 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
1344 BidirectionalStream.Builder builder = | 1342 BidirectionalStream.Builder builder = |
1345 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1343 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
1346 callback.getExecutor(), mTestFramework.mCronetEngine); | 1344 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
1347 CronetBidirectionalStream stream = | 1345 CronetBidirectionalStream stream = |
1348 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1346 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
1349 | 1347 |
1350 // Block callback when response starts to verify that shutdown fails | 1348 // Block callback when response starts to verify that shutdown fails |
1351 // if there are active requests. | 1349 // if there are active requests. |
1352 callback.setAutoAdvance(false); | 1350 callback.setAutoAdvance(false); |
1353 stream.start(); | 1351 stream.start(); |
1354 try { | 1352 try { |
1355 mTestFramework.mCronetEngine.shutdown(); | 1353 mTestFramework.mCronetEngine.shutdown(); |
1356 fail("Should throw an exception"); | 1354 fail("Should throw an exception"); |
(...skipping 13 matching lines...) Expand all Loading... |
1370 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { | 1368 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { |
1371 // Use a duplicate to avoid modifying byteBuffer. | 1369 // Use a duplicate to avoid modifying byteBuffer. |
1372 ByteBuffer duplicate = byteBuffer.duplicate(); | 1370 ByteBuffer duplicate = byteBuffer.duplicate(); |
1373 duplicate.position(start); | 1371 duplicate.position(start); |
1374 duplicate.limit(end); | 1372 duplicate.limit(end); |
1375 byte[] contents = new byte[duplicate.remaining()]; | 1373 byte[] contents = new byte[duplicate.remaining()]; |
1376 duplicate.get(contents); | 1374 duplicate.get(contents); |
1377 return new String(contents); | 1375 return new String(contents); |
1378 } | 1376 } |
1379 } | 1377 } |
OLD | NEW |