| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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.test.suitebuilder.annotation.SmallTest; | 7 import android.test.suitebuilder.annotation.SmallTest; |
| 8 | 8 |
| 9 import org.chromium.base.test.util.Feature; | 9 import org.chromium.base.test.util.Feature; |
| 10 import org.chromium.net.CronetTestBase.OnlyRunNativeCronet; | 10 import org.chromium.net.CronetTestBase.OnlyRunNativeCronet; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 100 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 101 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); | 101 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); |
| 102 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); | 102 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); |
| 103 } | 103 } |
| 104 | 104 |
| 105 @SmallTest | 105 @SmallTest |
| 106 @Feature({"Cronet"}) | 106 @Feature({"Cronet"}) |
| 107 @OnlyRunNativeCronet | 107 @OnlyRunNativeCronet |
| 108 public void testSimplePostWithFlush() throws Exception { | 108 public void testSimplePostWithFlush() throws Exception { |
| 109 setUp(QuicBidirectionalStreams.ENABLED); | 109 setUp(QuicBidirectionalStreams.ENABLED); |
| 110 String path = "/simple.txt"; | 110 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 111 String quicURL = QuicTestServer.getServerURL() + path; | 111 for (int i = 0; i < 2; i++) { |
| 112 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 112 String path = "/simple.txt"; |
| 113 // Although we have no way to verify data sent at this point, this test | 113 String quicURL = QuicTestServer.getServerURL() + path; |
| 114 // can make sure that onWriteCompleted is invoked appropriately. | 114 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 115 callback.addWriteData("Test String".getBytes(), false); | 115 // Although we have no way to verify data sent at this point, this t
est |
| 116 callback.addWriteData("1234567890".getBytes(), false); | 116 // can make sure that onWriteCompleted is invoked appropriately. |
| 117 callback.addWriteData("woot!".getBytes(), true); | 117 callback.addWriteData("Test String".getBytes(), false); |
| 118 BidirectionalStream stream = new BidirectionalStream | 118 callback.addWriteData("1234567890".getBytes(), false); |
| 119 .Builder(quicURL, callback, callbac
k.getExecutor(), | 119 callback.addWriteData("woot!".getBytes(), true); |
| 120 mTestFramework.mCronetEngin
e) | 120 BidirectionalStream stream = new BidirectionalStream |
| 121 .disableAutoFlush(true) | 121 .Builder(quicURL, callback, cal
lback.getExecutor(), |
| 122 .addHeader("foo", "bar") | 122 mTestFramework.mCronetE
ngine) |
| 123 .addHeader("empty", "") | 123 .disableAutoFlush(true) |
| 124 .addHeader("Content-Type", "zebra") | 124 .delayRequestHeadersUntilFirstF
lush(i == 0) |
| 125 .build(); | 125 .addHeader("foo", "bar") |
| 126 stream.start(); | 126 .addHeader("empty", "") |
| 127 callback.blockForDone(); | 127 .addHeader("Content-Type", "zeb
ra") |
| 128 assertTrue(stream.isDone()); | 128 .build(); |
| 129 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 129 stream.start(); |
| 130 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); | 130 callback.blockForDone(); |
| 131 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); | 131 assertTrue(stream.isDone()); |
| 132 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 133 assertEquals( |
| 134 "This is a simple text file served by QUIC.\n", callback.mRe
sponseAsString); |
| 135 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); |
| 136 } |
| 132 } | 137 } |
| 133 | 138 |
| 134 @SmallTest | 139 @SmallTest |
| 135 @Feature({"Cronet"}) | 140 @Feature({"Cronet"}) |
| 136 @OnlyRunNativeCronet | 141 @OnlyRunNativeCronet |
| 137 public void testSimplePostWithFlushTwice() throws Exception { | 142 public void testSimplePostWithFlushTwice() throws Exception { |
| 138 setUp(QuicBidirectionalStreams.ENABLED); | 143 setUp(QuicBidirectionalStreams.ENABLED); |
| 139 String path = "/simple.txt"; | 144 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 140 String quicURL = QuicTestServer.getServerURL() + path; | 145 for (int i = 0; i < 2; i++) { |
| 141 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 146 String path = "/simple.txt"; |
| 142 // Although we have no way to verify data sent at this point, this test | 147 String quicURL = QuicTestServer.getServerURL() + path; |
| 143 // can make sure that onWriteCompleted is invoked appropriately. | 148 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 144 callback.addWriteData("Test String".getBytes(), false); | 149 // Although we have no way to verify data sent at this point, this t
est |
| 145 callback.addWriteData("1234567890".getBytes(), false); | 150 // can make sure that onWriteCompleted is invoked appropriately. |
| 146 callback.addWriteData("woot!".getBytes(), true); | 151 callback.addWriteData("Test String".getBytes(), false); |
| 147 callback.addWriteData("Test String".getBytes(), false); | 152 callback.addWriteData("1234567890".getBytes(), false); |
| 148 callback.addWriteData("1234567890".getBytes(), false); | 153 callback.addWriteData("woot!".getBytes(), true); |
| 149 callback.addWriteData("woot!".getBytes(), true); | 154 callback.addWriteData("Test String".getBytes(), false); |
| 150 BidirectionalStream stream = new BidirectionalStream | 155 callback.addWriteData("1234567890".getBytes(), false); |
| 151 .Builder(quicURL, callback, callbac
k.getExecutor(), | 156 callback.addWriteData("woot!".getBytes(), true); |
| 152 mTestFramework.mCronetEngin
e) | 157 BidirectionalStream stream = new BidirectionalStream |
| 153 .disableAutoFlush(true) | 158 .Builder(quicURL, callback, cal
lback.getExecutor(), |
| 154 .addHeader("foo", "bar") | 159 mTestFramework.mCronetE
ngine) |
| 155 .addHeader("empty", "") | 160 .disableAutoFlush(true) |
| 156 .addHeader("Content-Type", "zebra") | 161 .delayRequestHeadersUntilFirstF
lush(i == 0) |
| 157 .build(); | 162 .addHeader("foo", "bar") |
| 158 stream.start(); | 163 .addHeader("empty", "") |
| 159 callback.blockForDone(); | 164 .addHeader("Content-Type", "zeb
ra") |
| 160 assertTrue(stream.isDone()); | 165 .build(); |
| 161 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 166 stream.start(); |
| 162 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); | 167 callback.blockForDone(); |
| 163 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); | 168 assertTrue(stream.isDone()); |
| 169 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 170 assertEquals( |
| 171 "This is a simple text file served by QUIC.\n", callback.mRe
sponseAsString); |
| 172 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); |
| 173 } |
| 164 } | 174 } |
| 165 | 175 |
| 166 @SmallTest | 176 @SmallTest |
| 177 @Feature({"Cronet"}) |
| 178 @OnlyRunNativeCronet |
| 179 public void testSimpleGetWithFlush() throws Exception { |
| 180 setUp(QuicBidirectionalStreams.ENABLED); |
| 181 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 182 for (int i = 0; i < 2; i++) { |
| 183 String path = "/simple.txt"; |
| 184 String url = QuicTestServer.getServerURL() + path; |
| 185 |
| 186 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback() { |
| 187 @Override |
| 188 public void onStreamReady(BidirectionalStream stream) { |
| 189 // This flush should send the delayed headers. |
| 190 stream.flush(); |
| 191 super.onStreamReady(stream); |
| 192 } |
| 193 }; |
| 194 BidirectionalStream stream = new BidirectionalStream |
| 195 .Builder(url, callback, callbac
k.getExecutor(), |
| 196 mTestFramework.mCronetE
ngine) |
| 197 .setHttpMethod("GET") |
| 198 .disableAutoFlush(true) |
| 199 .delayRequestHeadersUntilFirstF
lush(i == 0) |
| 200 .addHeader("foo", "bar") |
| 201 .addHeader("empty", "") |
| 202 .build(); |
| 203 // Flush before stream is started should not crash. |
| 204 stream.flush(); |
| 205 |
| 206 stream.start(); |
| 207 callback.blockForDone(); |
| 208 assertTrue(stream.isDone()); |
| 209 |
| 210 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed |
| 211 // adapter. |
| 212 stream.flush(); |
| 213 |
| 214 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 215 assertEquals( |
| 216 "This is a simple text file served by QUIC.\n", callback.mRe
sponseAsString); |
| 217 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); |
| 218 } |
| 219 } |
| 220 |
| 221 @SmallTest |
| 222 @Feature({"Cronet"}) |
| 223 @OnlyRunNativeCronet |
| 224 public void testSimplePostWithFlushAfterOneWrite() throws Exception { |
| 225 setUp(QuicBidirectionalStreams.ENABLED); |
| 226 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 227 for (int i = 0; i < 2; i++) { |
| 228 String path = "/simple.txt"; |
| 229 String url = QuicTestServer.getServerURL() + path; |
| 230 |
| 231 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 232 callback.addWriteData("Test String".getBytes(), true); |
| 233 BidirectionalStream stream = new BidirectionalStream |
| 234 .Builder(url, callback, callbac
k.getExecutor(), |
| 235 mTestFramework.mCronetE
ngine) |
| 236 .disableAutoFlush(true) |
| 237 .delayRequestHeadersUntilFirstF
lush(i == 0) |
| 238 .addHeader("foo", "bar") |
| 239 .addHeader("empty", "") |
| 240 .addHeader("Content-Type", "zeb
ra") |
| 241 .build(); |
| 242 stream.start(); |
| 243 callback.blockForDone(); |
| 244 assertTrue(stream.isDone()); |
| 245 |
| 246 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 247 assertEquals( |
| 248 "This is a simple text file served by QUIC.\n", callback.mRe
sponseAsString); |
| 249 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); |
| 250 } |
| 251 } |
| 252 |
| 253 @SmallTest |
| 167 @Feature({"Cronet"}) | 254 @Feature({"Cronet"}) |
| 168 @OnlyRunNativeCronet | 255 @OnlyRunNativeCronet |
| 169 public void testQuicBidirectionalStreamDisabled() throws Exception { | 256 public void testQuicBidirectionalStreamDisabled() throws Exception { |
| 170 setUp(QuicBidirectionalStreams.DISABLED); | 257 setUp(QuicBidirectionalStreams.DISABLED); |
| 171 String path = "/simple.txt"; | 258 String path = "/simple.txt"; |
| 172 String quicURL = QuicTestServer.getServerURL() + path; | 259 String quicURL = QuicTestServer.getServerURL() + path; |
| 173 | 260 |
| 174 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 261 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 175 BidirectionalStream stream = new BidirectionalStream | 262 BidirectionalStream stream = new BidirectionalStream |
| 176 .Builder(quicURL, callback, callbac
k.getExecutor(), | 263 .Builder(quicURL, callback, callbac
k.getExecutor(), |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 stream.start(); | 309 stream.start(); |
| 223 callback.blockForDone(); | 310 callback.blockForDone(); |
| 224 assertTrue(stream.isDone()); | 311 assertTrue(stream.isDone()); |
| 225 // Server terminated on us, so the stream must fail. | 312 // Server terminated on us, so the stream must fail. |
| 226 // QUIC reports this as ERR_QUIC_PROTOCOL_ERROR. Sometimes we get ERR_CO
NNECTION_REFUSED. | 313 // QUIC reports this as ERR_QUIC_PROTOCOL_ERROR. Sometimes we get ERR_CO
NNECTION_REFUSED. |
| 227 assertNotNull(callback.mError); | 314 assertNotNull(callback.mError); |
| 228 assertTrue(NetError.ERR_QUIC_PROTOCOL_ERROR == callback.mError.getCronet
InternalErrorCode() | 315 assertTrue(NetError.ERR_QUIC_PROTOCOL_ERROR == callback.mError.getCronet
InternalErrorCode() |
| 229 || NetError.ERR_CONNECTION_REFUSED == callback.mError.getCronetI
nternalErrorCode()); | 316 || NetError.ERR_CONNECTION_REFUSED == callback.mError.getCronetI
nternalErrorCode()); |
| 230 } | 317 } |
| 231 } | 318 } |
| OLD | NEW |