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

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

Issue 1801943002: [Cronet] Fix race in UploadDataStream.attachToRequest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2661
Patch Set: 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 final String exceptionMessage = "Bad Length";
185 builder.addHeader("Content-Type", "useless/string");
186 builder.setUploadDataProvider(new UploadDataProvider() {
187 @Override
188 public long getLength() throws IOException {
189 first.open();
190 throw new IOException(exceptionMessage);
191 }
192
193 @Override
194 public void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffe r)
195 throws IOException {}
196
197 @Override
198 public void rewind(UploadDataSink uploadDataSink) throws IOException {}
199 }, callback.getExecutor());
200 UrlRequest urlRequest = builder.build();
201 urlRequest.start();
202 first.block();
203 callback.blockForDone();
204 assertFalse(callback.mOnCanceledCalled);
205 assertEquals(UrlRequestError.LISTENER_EXCEPTION_THROWN, callback.mError. getErrorCode());
206 assertEquals("Exception received from UploadDataProvider", callback.mErr or.getMessage());
207 assertEquals(exceptionMessage, callback.mError.getCause().getMessage());
208 }
140 } 209 }
OLDNEW
« no previous file with comments | « components/cronet/android/java/src/org/chromium/net/CronetUrlRequest.java ('k') | components/cronet/tools/cr_cronet.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698