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.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 | 10 |
11 import java.util.Arrays; | 11 import java.util.Arrays; |
12 import java.util.List; | 12 import java.util.List; |
13 import java.util.concurrent.ExecutorService; | 13 import java.util.concurrent.ExecutorService; |
14 import java.util.concurrent.Executors; | 14 import java.util.concurrent.Executors; |
15 | 15 |
16 /** | 16 /** |
17 * Tests that directly drive {@code CronetUploadDataStream} and | 17 * Tests that directly drive {@code CronetUploadDataStream} and |
18 * {@code UploadDataProvider} to simulate different ordering of reset, init, | 18 * {@code UploadDataProvider} to simulate different ordering of reset, init, |
19 * read, and rewind calls. | 19 * read, and rewind calls. |
20 */ | 20 */ |
21 public class CronetUploadTest extends CronetTestBase { | 21 public class CronetUploadTest extends CronetTestBase { |
22 private TestDrivenDataProvider mDataProvider; | 22 private TestDrivenDataProvider mDataProvider; |
23 private CronetUploadDataStream mUploadDataStream; | 23 private CronetUploadDataStream mUploadDataStream; |
24 private TestUploadDataStreamHandler mHandler; | 24 private TestUploadDataStreamHandler mHandler; |
25 // Address of native CronetUploadDataStreamAdapter object. | |
26 private long mAdapter = 0; | |
27 | 25 |
28 @Override | 26 @Override |
29 protected void setUp() throws Exception { | 27 protected void setUp() throws Exception { |
30 super.setUp(); | 28 super.setUp(); |
31 launchCronetTestApp(); | 29 launchCronetTestApp(); |
32 ExecutorService executor = Executors.newSingleThreadExecutor(); | 30 ExecutorService executor = Executors.newSingleThreadExecutor(); |
33 List<byte[]> reads = Arrays.asList("hello".getBytes()); | 31 List<byte[]> reads = Arrays.asList("hello".getBytes()); |
34 mDataProvider = new TestDrivenDataProvider(executor, reads); | 32 mDataProvider = new TestDrivenDataProvider(executor, reads); |
35 mUploadDataStream = new CronetUploadDataStream(mDataProvider, executor); | 33 mUploadDataStream = new CronetUploadDataStream(mDataProvider, executor); |
36 mAdapter = mUploadDataStream.createAdapterForTesting(); | 34 mHandler = new TestUploadDataStreamHandler( |
37 mHandler = new TestUploadDataStreamHandler(mAdapter); | 35 mUploadDataStream.createAdapterForTesting()); |
38 } | 36 } |
39 | 37 |
40 @Override | 38 @Override |
41 protected void tearDown() throws Exception { | 39 protected void tearDown() throws Exception { |
42 // Destroy handler's native objects. | 40 // Destroy handler's native objects. |
43 mHandler.destroyNativeObjects(); | 41 mHandler.destroyNativeObjects(); |
44 super.tearDown(); | 42 super.tearDown(); |
45 } | 43 } |
46 | 44 |
47 /** | 45 /** |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 @SmallTest | 232 @SmallTest |
235 @Feature({"Cronet"}) | 233 @Feature({"Cronet"}) |
236 public void testDestroyAdapterBeforeReadComplete() | 234 public void testDestroyAdapterBeforeReadComplete() |
237 throws Exception { | 235 throws Exception { |
238 // Start a read and wait for it to be pending. | 236 // Start a read and wait for it to be pending. |
239 assertTrue(mHandler.init()); | 237 assertTrue(mHandler.init()); |
240 mHandler.read(); | 238 mHandler.read(); |
241 mDataProvider.waitForReadRequest(); | 239 mDataProvider.waitForReadRequest(); |
242 mHandler.checkReadCallbackNotInvoked(); | 240 mHandler.checkReadCallbackNotInvoked(); |
243 | 241 |
244 // Destroy the C++ object, which should trigger the Java | 242 // Destroy the C++ TestUploadDataStreamHandler. The handler owns the |
245 // onAdapterDestroyed() which should block until the read completes. | 243 // CronetUploadDataStreamAdapter, which this will cause it to destroy on |
246 mAdapter = 0; | 244 // the network thread. Destroying the adapter will result in calling |
| 245 // the CronetUploadDataSteam's onAdapterDestroyed() method on its |
| 246 // executor thread, which will then destroy the |
| 247 // CronetUploadDataStreamDelegate. |
| 248 mHandler.destroyNativeObjects(); |
247 | 249 |
248 // Make the read complete should not encounter a crash. | 250 // Make the read complete should not encounter a crash. |
249 mDataProvider.onReadSucceeded(mUploadDataStream); | 251 mDataProvider.onReadSucceeded(mUploadDataStream); |
250 | 252 |
251 assertEquals(0, mDataProvider.getNumRewindCalls()); | 253 assertEquals(0, mDataProvider.getNumRewindCalls()); |
252 assertEquals(1, mDataProvider.getNumReadCalls()); | 254 assertEquals(1, mDataProvider.getNumReadCalls()); |
253 } | 255 } |
254 | 256 |
255 /** | 257 /** |
256 * Tests that there is no crash when native CronetUploadDataStreamAdapter is | 258 * Tests that there is no crash when native CronetUploadDataStreamAdapter is |
(...skipping 18 matching lines...) Expand all Loading... |
275 assertEquals(1, mDataProvider.getNumReadCalls()); | 277 assertEquals(1, mDataProvider.getNumReadCalls()); |
276 assertEquals("hello", mHandler.getData()); | 278 assertEquals("hello", mHandler.getData()); |
277 | 279 |
278 // Reset and then init, which should trigger a rewind. | 280 // Reset and then init, which should trigger a rewind. |
279 mHandler.reset(); | 281 mHandler.reset(); |
280 assertEquals("", mHandler.getData()); | 282 assertEquals("", mHandler.getData()); |
281 assertFalse(mHandler.init()); | 283 assertFalse(mHandler.init()); |
282 mDataProvider.waitForRewindRequest(); | 284 mDataProvider.waitForRewindRequest(); |
283 mHandler.checkInitCallbackNotInvoked(); | 285 mHandler.checkInitCallbackNotInvoked(); |
284 | 286 |
285 // Destroy the C++ object, which should trigger the Java | 287 // Destroy the C++ TestUploadDataStreamHandler. The handler owns the |
286 // onAdapterDestroyed(). | 288 // CronetUploadDataStreamAdapter, which this will cause it to destroy on |
287 mAdapter = 0; | 289 // the network thread. Destroying the adapter will result in calling |
| 290 // the CronetUploadDataSteam's onAdapterDestroyed() method on its |
| 291 // executor thread, which will then destroy the |
| 292 // CronetUploadDataStreamDelegate. |
| 293 mHandler.destroyNativeObjects(); |
288 | 294 |
289 // Signal rewind completes, and wait for init to complete. | 295 // Signal rewind completes, and wait for init to complete. |
290 mHandler.checkInitCallbackNotInvoked(); | |
291 mDataProvider.onRewindSucceeded(mUploadDataStream); | 296 mDataProvider.onRewindSucceeded(mUploadDataStream); |
292 mHandler.waitForInitComplete(); | |
293 mDataProvider.assertRewindNotPending(); | |
294 | 297 |
295 assertEquals(1, mDataProvider.getNumRewindCalls()); | 298 assertEquals(1, mDataProvider.getNumRewindCalls()); |
296 assertEquals(1, mDataProvider.getNumReadCalls()); | 299 assertEquals(1, mDataProvider.getNumReadCalls()); |
297 } | 300 } |
298 } | 301 } |
OLD | NEW |