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

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

Issue 1777333002: [Cronet] Fix race in UploadDataStream.attachToRequest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: do getLength() outside the lock. Created 4 years, 9 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.os.ConditionVariable;
7 import android.os.ParcelFileDescriptor; 8 import android.os.ParcelFileDescriptor;
8 import android.os.StrictMode; 9 import android.os.StrictMode;
9 import android.test.suitebuilder.annotation.SmallTest; 10 import android.test.suitebuilder.annotation.SmallTest;
10 11
11 import org.chromium.base.annotations.SuppressFBWarnings; 12 import org.chromium.base.annotations.SuppressFBWarnings;
12 import org.chromium.base.test.util.Feature; 13 import org.chromium.base.test.util.Feature;
13 14
14 import java.io.File; 15 import java.io.File;
15 import java.io.FileOutputStream; 16 import java.io.FileOutputStream;
17 import java.io.IOException;
18 import java.nio.ByteBuffer;
16 19
17 /** Test the default provided implementations of {@link UploadDataProvider} */ 20 /** Test the default provided implementations of {@link UploadDataProvider} */
18 public class UploadDataProvidersTest extends CronetTestBase { 21 public class UploadDataProvidersTest extends CronetTestBase {
19 private static final String LOREM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " 22 private static final String LOREM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
20 + "Proin elementum, libero laoreet fringilla faucibus, metus tortor vehicula ante, " 23 + "Proin elementum, libero laoreet fringilla faucibus, metus tortor vehicula ante, "
21 + "lacinia lorem eros vel sapien."; 24 + "lacinia lorem eros vel sapien.";
22 private CronetTestFramework mTestFramework; 25 private CronetTestFramework mTestFramework;
23 private File mFile; 26 private File mFile;
24 private StrictMode.VmPolicy mOldVmPolicy; 27 private StrictMode.VmPolicy mOldVmPolicy;
25 28
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 callback.getExecutor(), mTestFramework.mCronetEngine); 133 callback.getExecutor(), mTestFramework.mCronetEngine);
131 UploadDataProvider dataProvider = UploadDataProviders.create(LOREM.getBy tes("UTF-8")); 134 UploadDataProvider dataProvider = UploadDataProviders.create(LOREM.getBy tes("UTF-8"));
132 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); 135 builder.setUploadDataProvider(dataProvider, callback.getExecutor());
133 builder.addHeader("Content-Type", "useless/string"); 136 builder.addHeader("Content-Type", "useless/string");
134 builder.build().start(); 137 builder.build().start();
135 callback.blockForDone(); 138 callback.blockForDone();
136 139
137 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 140 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
138 assertEquals(LOREM, callback.mResponseAsString); 141 assertEquals(LOREM, callback.mResponseAsString);
139 } 142 }
143
144 @SmallTest
145 @Feature({"Cronet"})
146 public void testNoErrorWhenCanceledDuringStart() throws Exception {
147 TestUrlRequestCallback callback = new TestUrlRequestCallback();
148 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(),
149 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
150 final ConditionVariable first = new ConditionVariable();
151 final ConditionVariable second = new ConditionVariable();
152 builder.addHeader("Content-Type", "useless/string");
153 builder.setUploadDataProvider(new UploadDataProvider() {
154 @Override
155 public long getLength() throws IOException {
156 first.open();
157 second.block();
158 return 0;
159 }
160
161 @Override
162 public void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffe r)
163 throws IOException {}
164
165 @Override
166 public void rewind(UploadDataSink uploadDataSink) throws IOException {}
167 }, callback.getExecutor());
168 UrlRequest urlRequest = builder.build();
169 urlRequest.start();
170 first.block();
171 urlRequest.cancel();
172 second.open();
173 callback.blockForDone();
174 assertTrue(callback.mOnCanceledCalled);
175 }
176
177 @SmallTest
178 @Feature({"Cronet"})
179 public void testNoErrorWhenExceptionDuringStart() throws Exception {
180 TestUrlRequestCallback callback = new TestUrlRequestCallback();
181 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(),
182 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
183 final ConditionVariable first = new ConditionVariable();
184 builder.addHeader("Content-Type", "useless/string");
185 builder.setUploadDataProvider(new UploadDataProvider() {
186 @Override
187 public long getLength() throws IOException {
188 first.open();
189 throw new IOException("Bad Length");
190 }
191
192 @Override
193 public void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffe r)
194 throws IOException {}
195
196 @Override
197 public void rewind(UploadDataSink uploadDataSink) throws IOException {}
198 }, callback.getExecutor());
199 UrlRequest urlRequest = builder.build();
200 urlRequest.start();
201 first.block();
202 callback.blockForDone();
203 assertFalse(callback.mOnCanceledCalled);
xunjieli 2016/03/10 20:32:21 Suggest also check to see that mError is UrlReques
mef 2016/03/10 22:16:30 Done.
204 }
140 } 205 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698