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

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

Issue 1992953004: [Cronet] Make delaying sending request headers explicit in bidirectional stream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: correct a typo Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698