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

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

Issue 2892013002: [Cronet] Clean up tests (Closed)
Patch Set: fix Created 3 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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.content.Context; 7 import android.content.Context;
8 import android.content.ContextWrapper; 8 import android.content.ContextWrapper;
9 import android.os.ConditionVariable; 9 import android.os.ConditionVariable;
10 import android.os.Handler; 10 import android.os.Handler;
11 import android.os.Looper; 11 import android.os.Looper;
12 import android.os.Process; 12 import android.os.Process;
13 import android.support.test.filters.SmallTest; 13 import android.support.test.filters.SmallTest;
14 14
15 import org.json.JSONObject; 15 import org.json.JSONObject;
16 16
17 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_IN_MEMORY; 17 import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_IN_MEMORY;
18 18
19 import org.chromium.base.FileUtils; 19 import org.chromium.base.FileUtils;
20 import org.chromium.base.PathUtils; 20 import org.chromium.base.PathUtils;
21 import org.chromium.base.annotations.JNINamespace; 21 import org.chromium.base.annotations.JNINamespace;
22 import org.chromium.base.test.util.Feature; 22 import org.chromium.base.test.util.Feature;
23 import org.chromium.net.TestUrlRequestCallback.ResponseStep; 23 import org.chromium.net.TestUrlRequestCallback.ResponseStep;
24 import org.chromium.net.impl.CronetEngineBase;
25 import org.chromium.net.impl.CronetEngineBuilderImpl; 24 import org.chromium.net.impl.CronetEngineBuilderImpl;
26 import org.chromium.net.impl.CronetLibraryLoader; 25 import org.chromium.net.impl.CronetLibraryLoader;
27 import org.chromium.net.impl.CronetUrlRequestContext; 26 import org.chromium.net.impl.CronetUrlRequestContext;
28 import org.chromium.net.test.EmbeddedTestServer; 27 import org.chromium.net.test.EmbeddedTestServer;
29 28
30 import java.io.BufferedReader; 29 import java.io.BufferedReader;
31 import java.io.File; 30 import java.io.File;
32 import java.io.FileReader; 31 import java.io.FileReader;
33 import java.net.URL; 32 import java.net.URL;
34 import java.nio.ByteBuffer; 33 import java.nio.ByteBuffer;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 mUrl404 = mTestServer.getURL("/echo?status=404"); 65 mUrl404 = mTestServer.getURL("/echo?status=404");
67 mUrl500 = mTestServer.getURL("/echo?status=500"); 66 mUrl500 = mTestServer.getURL("/echo?status=500");
68 } 67 }
69 68
70 @Override 69 @Override
71 protected void tearDown() throws Exception { 70 protected void tearDown() throws Exception {
72 mTestServer.stopAndDestroyServer(); 71 mTestServer.stopAndDestroyServer();
73 super.tearDown(); 72 super.tearDown();
74 } 73 }
75 74
76 static class RequestThread extends Thread { 75 class RequestThread extends Thread {
77 public TestUrlRequestCallback mCallback; 76 public TestUrlRequestCallback mCallback;
78 77
79 final CronetTestFramework mTestFramework;
80 final String mUrl; 78 final String mUrl;
81 final ConditionVariable mRunBlocker; 79 final ConditionVariable mRunBlocker;
82 80
83 public RequestThread( 81 public RequestThread(String url, ConditionVariable runBlocker) {
84 CronetTestFramework testFramework, String url, ConditionVariable runBlocker) {
85 mTestFramework = testFramework;
86 mUrl = url; 82 mUrl = url;
87 mRunBlocker = runBlocker; 83 mRunBlocker = runBlocker;
88 } 84 }
89 85
90 @Override 86 @Override
91 public void run() { 87 public void run() {
92 mRunBlocker.block(); 88 mRunBlocker.block();
93 CronetEngine cronetEngine = mTestFramework.initCronetEngine(); 89 CronetEngine cronetEngine = new CronetEngine.Builder(getContext()).b uild();
94 mCallback = new TestUrlRequestCallback(); 90 mCallback = new TestUrlRequestCallback();
95 UrlRequest.Builder urlRequestBuilder = 91 UrlRequest.Builder urlRequestBuilder =
96 cronetEngine.newUrlRequestBuilder(mUrl, mCallback, mCallback .getExecutor()); 92 cronetEngine.newUrlRequestBuilder(mUrl, mCallback, mCallback .getExecutor());
97 urlRequestBuilder.build().start(); 93 urlRequestBuilder.build().start();
98 mCallback.blockForDone(); 94 mCallback.blockForDone();
99 } 95 }
100 } 96 }
101 97
102 /** 98 /**
103 * Callback that shutdowns the request context when request has succeeded 99 * Callback that shutdowns the request context when request has succeeded
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 @SuppressWarnings("deprecation") 132 @SuppressWarnings("deprecation")
137 public void testConfigUserAgent() throws Exception { 133 public void testConfigUserAgent() throws Exception {
138 String userAgentName = "User-Agent"; 134 String userAgentName = "User-Agent";
139 String userAgentValue = "User-Agent-Value"; 135 String userAgentValue = "User-Agent-Value";
140 ExperimentalCronetEngine.Builder cronetEngineBuilder = 136 ExperimentalCronetEngine.Builder cronetEngineBuilder =
141 new ExperimentalCronetEngine.Builder(getContext()); 137 new ExperimentalCronetEngine.Builder(getContext());
142 if (testingJavaImpl()) { 138 if (testingJavaImpl()) {
143 cronetEngineBuilder = createJavaEngineBuilder(); 139 cronetEngineBuilder = createJavaEngineBuilder();
144 } 140 }
145 cronetEngineBuilder.setUserAgent(userAgentValue); 141 cronetEngineBuilder.setUserAgent(userAgentValue);
146 final CronetTestFramework testFramework = 142 final CronetEngine cronetEngine = cronetEngineBuilder.build();
147 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(mUrl, cron etEngineBuilder);
148 NativeTestServer.shutdownNativeTestServer(); // startNativeTestServer re turns false if it's 143 NativeTestServer.shutdownNativeTestServer(); // startNativeTestServer re turns false if it's
149 // already running 144 // already running
150 assertTrue(NativeTestServer.startNativeTestServer(getContext())); 145 assertTrue(NativeTestServer.startNativeTestServer(getContext()));
151 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 146 TestUrlRequestCallback callback = new TestUrlRequestCallback();
152 UrlRequest.Builder urlRequestBuilder = testFramework.mCronetEngine.newUr lRequestBuilder( 147 UrlRequest.Builder urlRequestBuilder = cronetEngine.newUrlRequestBuilder (
153 NativeTestServer.getEchoHeaderURL(userAgentName), callback, call back.getExecutor()); 148 NativeTestServer.getEchoHeaderURL(userAgentName), callback, call back.getExecutor());
154 urlRequestBuilder.build().start(); 149 urlRequestBuilder.build().start();
155 callback.blockForDone(); 150 callback.blockForDone();
156 assertEquals(userAgentValue, callback.mResponseAsString); 151 assertEquals(userAgentValue, callback.mResponseAsString);
157 } 152 }
158 153
159 @SmallTest 154 @SmallTest
160 @Feature({"Cronet"}) 155 @Feature({"Cronet"})
161 // TODO: Remove the annotation after fixing http://crbug.com/637979 & http:/ /crbug.com/637972 156 // TODO: Remove the annotation after fixing http://crbug.com/637979 & http:/ /crbug.com/637972
162 @OnlyRunNativeCronet 157 @OnlyRunNativeCronet
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 callback.startNextRead(urlRequest); 201 callback.startNextRead(urlRequest);
207 callback.blockForDone(); 202 callback.blockForDone();
208 callback.blockForCallbackToComplete(); 203 callback.blockForCallbackToComplete();
209 callback.shutdownExecutor(); 204 callback.shutdownExecutor();
210 } 205 }
211 206
212 @SmallTest 207 @SmallTest
213 @Feature({"Cronet"}) 208 @Feature({"Cronet"})
214 @OnlyRunNativeCronet 209 @OnlyRunNativeCronet
215 public void testShutdownDuringInit() throws Exception { 210 public void testShutdownDuringInit() throws Exception {
216 final CronetTestFramework testFramework = startCronetTestFrameworkAndSki pLibraryInit();
217 final ConditionVariable block = new ConditionVariable(false); 211 final ConditionVariable block = new ConditionVariable(false);
218 212
219 // Post a task to main thread to block until shutdown is called to test 213 // Post a task to main thread to block until shutdown is called to test
220 // scenario when shutdown is called right after construction before 214 // scenario when shutdown is called right after construction before
221 // context is fully initialized on the main thread. 215 // context is fully initialized on the main thread.
222 Runnable blockingTask = new Runnable() { 216 Runnable blockingTask = new Runnable() {
223 @Override 217 @Override
224 public void run() { 218 public void run() {
225 try { 219 try {
226 block.block(); 220 block.block();
227 } catch (Exception e) { 221 } catch (Exception e) {
228 fail("Caught " + e.getMessage()); 222 fail("Caught " + e.getMessage());
229 } 223 }
230 } 224 }
231 }; 225 };
232 // Ensure that test is not running on the main thread. 226 // Ensure that test is not running on the main thread.
233 assertTrue(Looper.getMainLooper() != Looper.myLooper()); 227 assertTrue(Looper.getMainLooper() != Looper.myLooper());
234 new Handler(Looper.getMainLooper()).post(blockingTask); 228 new Handler(Looper.getMainLooper()).post(blockingTask);
235 229
236 // Create new request context, but its initialization on the main thread 230 // Create new request context, but its initialization on the main thread
237 // will be stuck behind blockingTask. 231 // will be stuck behind blockingTask.
238 final CronetUrlRequestContext cronetEngine = 232 final CronetUrlRequestContext cronetEngine =
239 (CronetUrlRequestContext) testFramework.initCronetEngine(); 233 (CronetUrlRequestContext) new CronetEngine.Builder(getContext()) .build();
240 // Unblock the main thread, so context gets initialized and shutdown on 234 // Unblock the main thread, so context gets initialized and shutdown on
241 // it. 235 // it.
242 block.open(); 236 block.open();
243 // Shutdown will wait for init to complete on main thread. 237 // Shutdown will wait for init to complete on main thread.
244 cronetEngine.shutdown(); 238 cronetEngine.shutdown();
245 // Verify that context is shutdown. 239 // Verify that context is shutdown.
246 try { 240 try {
247 cronetEngine.getUrlRequestContextAdapter(); 241 cronetEngine.getUrlRequestContextAdapter();
248 fail("Should throw an exception."); 242 fail("Should throw an exception.");
249 } catch (Exception e) { 243 } catch (Exception e) {
250 assertEquals("Engine is shut down.", e.getMessage()); 244 assertEquals("Engine is shut down.", e.getMessage());
251 } 245 }
252 } 246 }
253 247
254 @SmallTest 248 @SmallTest
255 @Feature({"Cronet"}) 249 @Feature({"Cronet"})
256 @OnlyRunNativeCronet 250 @OnlyRunNativeCronet
257 public void testInitAndShutdownOnMainThread() throws Exception { 251 public void testInitAndShutdownOnMainThread() throws Exception {
258 final CronetTestFramework testFramework = startCronetTestFrameworkAndSki pLibraryInit();
259 final ConditionVariable block = new ConditionVariable(false); 252 final ConditionVariable block = new ConditionVariable(false);
260 253
261 // Post a task to main thread to init and shutdown on the main thread. 254 // Post a task to main thread to init and shutdown on the main thread.
262 Runnable blockingTask = new Runnable() { 255 Runnable blockingTask = new Runnable() {
263 @Override 256 @Override
264 public void run() { 257 public void run() {
265 // Create new request context, loading the library. 258 // Create new request context, loading the library.
266 final CronetUrlRequestContext cronetEngine = 259 final CronetUrlRequestContext cronetEngine =
267 (CronetUrlRequestContext) testFramework.initCronetEngine (); 260 (CronetUrlRequestContext) new CronetEngine.Builder(getCo ntext()).build();
268 // Shutdown right after init. 261 // Shutdown right after init.
269 cronetEngine.shutdown(); 262 cronetEngine.shutdown();
270 // Verify that context is shutdown. 263 // Verify that context is shutdown.
271 try { 264 try {
272 cronetEngine.getUrlRequestContextAdapter(); 265 cronetEngine.getUrlRequestContextAdapter();
273 fail("Should throw an exception."); 266 fail("Should throw an exception.");
274 } catch (Exception e) { 267 } catch (Exception e) {
275 assertEquals("Engine is shut down.", e.getMessage()); 268 assertEquals("Engine is shut down.", e.getMessage());
276 } 269 }
277 block.open(); 270 block.open();
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 assertFalse(netLogDir1.exists()); 540 assertFalse(netLogDir1.exists());
548 FileUtils.recursivelyDeleteFile(netLogDir2); 541 FileUtils.recursivelyDeleteFile(netLogDir2);
549 assertFalse(netLogDir2.exists()); 542 assertFalse(netLogDir2.exists());
550 } 543 }
551 @SmallTest 544 @SmallTest
552 @Feature({"Cronet"}) 545 @Feature({"Cronet"})
553 @OnlyRunNativeCronet 546 @OnlyRunNativeCronet
554 // Tests that if CronetEngine is shut down on the network thread, an appropr iate exception 547 // Tests that if CronetEngine is shut down on the network thread, an appropr iate exception
555 // is thrown. 548 // is thrown.
556 public void testShutDownEngineOnNetworkThread() throws Exception { 549 public void testShutDownEngineOnNetworkThread() throws Exception {
557 final CronetTestFramework testFramework = 550 final CronetEngine cronetEngine = createCronetEngine(CronetEngine.Builde r.HTTP_CACHE_DISK);
558 startCronetTestFrameworkWithCacheEnabled(CronetEngine.Builder.HT TP_CACHE_DISK);
559 String url = NativeTestServer.getFileURL("/cacheable.txt"); 551 String url = NativeTestServer.getFileURL("/cacheable.txt");
560 // Make a request to a cacheable resource. 552 // Make a request to a cacheable resource.
561 checkRequestCaching(testFramework.mCronetEngine, url, false); 553 checkRequestCaching(cronetEngine, url, false);
562 554
563 final AtomicReference<Throwable> thrown = new AtomicReference<>(); 555 final AtomicReference<Throwable> thrown = new AtomicReference<>();
564 // Shut down the server. 556 // Shut down the server.
565 NativeTestServer.shutdownNativeTestServer(); 557 NativeTestServer.shutdownNativeTestServer();
566 class CancelUrlRequestCallback extends TestUrlRequestCallback { 558 class CancelUrlRequestCallback extends TestUrlRequestCallback {
567 @Override 559 @Override
568 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) { 560 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) {
569 super.onResponseStarted(request, info); 561 super.onResponseStarted(request, info);
570 request.cancel(); 562 request.cancel();
571 // Shut down CronetEngine immediately after request is destroyed . 563 // Shut down CronetEngine immediately after request is destroyed .
572 try { 564 try {
573 testFramework.mCronetEngine.shutdown(); 565 cronetEngine.shutdown();
574 } catch (Exception e) { 566 } catch (Exception e) {
575 thrown.set(e); 567 thrown.set(e);
576 } 568 }
577 } 569 }
578 570
579 @Override 571 @Override
580 public void onSucceeded(UrlRequest request, UrlResponseInfo info) { 572 public void onSucceeded(UrlRequest request, UrlResponseInfo info) {
581 // onSucceeded will not happen, because the request is canceled 573 // onSucceeded will not happen, because the request is canceled
582 // after sending first read and the executor is single threaded. 574 // after sending first read and the executor is single threaded.
583 throw new RuntimeException("Unexpected"); 575 throw new RuntimeException("Unexpected");
584 } 576 }
585 577
586 @Override 578 @Override
587 public void onFailed(UrlRequest request, UrlResponseInfo info, Crone tException error) { 579 public void onFailed(UrlRequest request, UrlResponseInfo info, Crone tException error) {
588 throw new RuntimeException("Unexpected"); 580 throw new RuntimeException("Unexpected");
589 } 581 }
590 } 582 }
591 Executor directExecutor = new Executor() { 583 Executor directExecutor = new Executor() {
592 @Override 584 @Override
593 public void execute(Runnable command) { 585 public void execute(Runnable command) {
594 command.run(); 586 command.run();
595 } 587 }
596 }; 588 };
597 CancelUrlRequestCallback callback = new CancelUrlRequestCallback(); 589 CancelUrlRequestCallback callback = new CancelUrlRequestCallback();
598 callback.setAllowDirectExecutor(true); 590 callback.setAllowDirectExecutor(true);
599 UrlRequest.Builder urlRequestBuilder = 591 UrlRequest.Builder urlRequestBuilder =
600 testFramework.mCronetEngine.newUrlRequestBuilder(url, callback, directExecutor); 592 cronetEngine.newUrlRequestBuilder(url, callback, directExecutor) ;
601 urlRequestBuilder.allowDirectExecutor(); 593 urlRequestBuilder.allowDirectExecutor();
602 urlRequestBuilder.build().start(); 594 urlRequestBuilder.build().start();
603 callback.blockForDone(); 595 callback.blockForDone();
604 assertTrue(thrown.get() instanceof RuntimeException); 596 assertTrue(thrown.get() instanceof RuntimeException);
605 } 597 }
606 598
607 @SmallTest 599 @SmallTest
608 @Feature({"Cronet"}) 600 @Feature({"Cronet"})
609 @OnlyRunNativeCronet 601 @OnlyRunNativeCronet
610 // Tests that if CronetEngine is shut down when reading from disk cache, 602 // Tests that if CronetEngine is shut down when reading from disk cache,
611 // there isn't a crash. See crbug.com/486120. 603 // there isn't a crash. See crbug.com/486120.
612 public void testShutDownEngineWhenReadingFromDiskCache() throws Exception { 604 public void testShutDownEngineWhenReadingFromDiskCache() throws Exception {
613 final CronetTestFramework testFramework = 605 final CronetEngine cronetEngine = createCronetEngine(CronetEngine.Builde r.HTTP_CACHE_DISK);
614 startCronetTestFrameworkWithCacheEnabled(CronetEngine.Builder.HT TP_CACHE_DISK);
615 String url = NativeTestServer.getFileURL("/cacheable.txt"); 606 String url = NativeTestServer.getFileURL("/cacheable.txt");
616 // Make a request to a cacheable resource. 607 // Make a request to a cacheable resource.
617 checkRequestCaching(testFramework.mCronetEngine, url, false); 608 checkRequestCaching(cronetEngine, url, false);
618 609
619 // Shut down the server. 610 // Shut down the server.
620 NativeTestServer.shutdownNativeTestServer(); 611 NativeTestServer.shutdownNativeTestServer();
621 class CancelUrlRequestCallback extends TestUrlRequestCallback { 612 class CancelUrlRequestCallback extends TestUrlRequestCallback {
622 @Override 613 @Override
623 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) { 614 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) {
624 super.onResponseStarted(request, info); 615 super.onResponseStarted(request, info);
625 request.cancel(); 616 request.cancel();
626 // Shut down CronetEngine immediately after request is destroyed . 617 // Shut down CronetEngine immediately after request is destroyed .
627 testFramework.mCronetEngine.shutdown(); 618 cronetEngine.shutdown();
628 } 619 }
629 620
630 @Override 621 @Override
631 public void onSucceeded(UrlRequest request, UrlResponseInfo info) { 622 public void onSucceeded(UrlRequest request, UrlResponseInfo info) {
632 // onSucceeded will not happen, because the request is canceled 623 // onSucceeded will not happen, because the request is canceled
633 // after sending first read and the executor is single threaded. 624 // after sending first read and the executor is single threaded.
634 throw new RuntimeException("Unexpected"); 625 throw new RuntimeException("Unexpected");
635 } 626 }
636 627
637 @Override 628 @Override
638 public void onFailed(UrlRequest request, UrlResponseInfo info, Crone tException error) { 629 public void onFailed(UrlRequest request, UrlResponseInfo info, Crone tException error) {
639 throw new RuntimeException("Unexpected"); 630 throw new RuntimeException("Unexpected");
640 } 631 }
641 } 632 }
642 CancelUrlRequestCallback callback = new CancelUrlRequestCallback(); 633 CancelUrlRequestCallback callback = new CancelUrlRequestCallback();
643 UrlRequest.Builder urlRequestBuilder = testFramework.mCronetEngine.newUr lRequestBuilder( 634 UrlRequest.Builder urlRequestBuilder =
644 url, callback, callback.getExecutor()); 635 cronetEngine.newUrlRequestBuilder(url, callback, callback.getExe cutor());
645 urlRequestBuilder.build().start(); 636 urlRequestBuilder.build().start();
646 callback.blockForDone(); 637 callback.blockForDone();
647 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 638 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
648 assertTrue(callback.mResponseInfo.wasCached()); 639 assertTrue(callback.mResponseInfo.wasCached());
649 assertTrue(callback.mOnCanceledCalled); 640 assertTrue(callback.mOnCanceledCalled);
650 } 641 }
651 642
652 @SmallTest 643 @SmallTest
653 @Feature({"Cronet"}) 644 @Feature({"Cronet"})
654 @OnlyRunNativeCronet 645 @OnlyRunNativeCronet
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 private void makeRequestAndCheckStatus( 883 private void makeRequestAndCheckStatus(
893 CronetEngine engine, String url, int expectedStatusCode) { 884 CronetEngine engine, String url, int expectedStatusCode) {
894 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 885 TestUrlRequestCallback callback = new TestUrlRequestCallback();
895 UrlRequest request = 886 UrlRequest request =
896 engine.newUrlRequestBuilder(url, callback, callback.getExecutor( )).build(); 887 engine.newUrlRequestBuilder(url, callback, callback.getExecutor( )).build();
897 request.start(); 888 request.start();
898 callback.blockForDone(); 889 callback.blockForDone();
899 assertEquals(expectedStatusCode, callback.mResponseInfo.getHttpStatusCod e()); 890 assertEquals(expectedStatusCode, callback.mResponseInfo.getHttpStatusCod e());
900 } 891 }
901 892
902 private CronetTestFramework startCronetTestFrameworkWithCacheEnabled(int cac heType) 893 private CronetEngine createCronetEngine(int cacheType) {
mgersh 2017/05/23 18:12:13 Since this is now used in a test earlier in the fi
pauljensen 2017/05/25 15:15:15 Done.
903 throws Exception { 894 CronetEngine.Builder builder = new CronetEngine.Builder(getContext());
904 String cacheTypeString = "";
905 if (cacheType == CronetEngine.Builder.HTTP_CACHE_DISK) { 895 if (cacheType == CronetEngine.Builder.HTTP_CACHE_DISK) {
906 cacheTypeString = CronetTestFramework.CACHE_DISK; 896 enableDiskCache(builder);
mgersh 2017/05/23 18:12:13 This way of separating things is a little strange.
pauljensen 2017/05/25 15:15:15 Done.
907 } else if (cacheType == CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP) { 897 } else {
908 cacheTypeString = CronetTestFramework.CACHE_DISK_NO_HTTP; 898 builder.enableHttpCache(cacheType, 100 * 1024);
909 } else if (cacheType == HTTP_CACHE_IN_MEMORY) {
910 cacheTypeString = CronetTestFramework.CACHE_IN_MEMORY;
911 } 899 }
912 String[] commandLineArgs = {CronetTestFramework.CACHE_KEY, cacheTypeStri ng};
913 CronetTestFramework testFramework =
914 startCronetTestFrameworkWithUrlAndCommandLineArgs(null, commandL ineArgs);
915 assertTrue(NativeTestServer.startNativeTestServer(getContext())); 900 assertTrue(NativeTestServer.startNativeTestServer(getContext()));
916 return testFramework; 901 return builder.build();
917 } 902 }
918 903
919 private void checkRequestCaching(CronetEngine engine, String url, boolean ex pectCached) { 904 private void checkRequestCaching(CronetEngine engine, String url, boolean ex pectCached) {
920 checkRequestCaching(engine, url, expectCached, false); 905 checkRequestCaching(engine, url, expectCached, false);
921 } 906 }
922 907
923 private void checkRequestCaching( 908 private void checkRequestCaching(
924 CronetEngine engine, String url, boolean expectCached, boolean disab leCache) { 909 CronetEngine engine, String url, boolean expectCached, boolean disab leCache) {
925 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 910 TestUrlRequestCallback callback = new TestUrlRequestCallback();
926 UrlRequest.Builder urlRequestBuilder = 911 UrlRequest.Builder urlRequestBuilder =
927 engine.newUrlRequestBuilder(url, callback, callback.getExecutor( )); 912 engine.newUrlRequestBuilder(url, callback, callback.getExecutor( ));
928 if (disableCache) { 913 if (disableCache) {
929 urlRequestBuilder.disableCache(); 914 urlRequestBuilder.disableCache();
930 } 915 }
931 urlRequestBuilder.build().start(); 916 urlRequestBuilder.build().start();
932 callback.blockForDone(); 917 callback.blockForDone();
933 assertEquals(expectCached, callback.mResponseInfo.wasCached()); 918 assertEquals(expectCached, callback.mResponseInfo.wasCached());
934 assertEquals("this is a cacheable file\n", callback.mResponseAsString); 919 assertEquals("this is a cacheable file\n", callback.mResponseAsString);
935 } 920 }
936 921
937 @SmallTest 922 @SmallTest
938 @Feature({"Cronet"}) 923 @Feature({"Cronet"})
939 @OnlyRunNativeCronet 924 @OnlyRunNativeCronet
940 public void testEnableHttpCacheDisabled() throws Exception { 925 public void testEnableHttpCacheDisabled() throws Exception {
941 final CronetTestFramework testFramework = 926 CronetEngine cronetEngine = createCronetEngine(CronetEngine.Builder.HTTP _CACHE_DISABLED);
942 startCronetTestFrameworkWithCacheEnabled(CronetEngine.Builder.HT TP_CACHE_DISABLED);
943 String url = NativeTestServer.getFileURL("/cacheable.txt"); 927 String url = NativeTestServer.getFileURL("/cacheable.txt");
944 checkRequestCaching(testFramework.mCronetEngine, url, false); 928 checkRequestCaching(cronetEngine, url, false);
945 checkRequestCaching(testFramework.mCronetEngine, url, false); 929 checkRequestCaching(cronetEngine, url, false);
946 checkRequestCaching(testFramework.mCronetEngine, url, false); 930 checkRequestCaching(cronetEngine, url, false);
947 } 931 }
948 932
949 @SmallTest 933 @SmallTest
950 @Feature({"Cronet"}) 934 @Feature({"Cronet"})
951 public void testEnableHttpCacheInMemory() throws Exception { 935 public void testEnableHttpCacheInMemory() throws Exception {
952 final CronetTestFramework testFramework = 936 CronetEngine cronetEngine = createCronetEngine(CronetEngine.Builder.HTTP _CACHE_IN_MEMORY);
953 startCronetTestFrameworkWithCacheEnabled(HTTP_CACHE_IN_MEMORY);
954 String url = NativeTestServer.getFileURL("/cacheable.txt"); 937 String url = NativeTestServer.getFileURL("/cacheable.txt");
955 checkRequestCaching(testFramework.mCronetEngine, url, false); 938 checkRequestCaching(cronetEngine, url, false);
956 checkRequestCaching(testFramework.mCronetEngine, url, true); 939 checkRequestCaching(cronetEngine, url, true);
957 NativeTestServer.shutdownNativeTestServer(); 940 NativeTestServer.shutdownNativeTestServer();
958 checkRequestCaching(testFramework.mCronetEngine, url, true); 941 checkRequestCaching(cronetEngine, url, true);
959 } 942 }
960 943
961 @SmallTest 944 @SmallTest
962 @Feature({"Cronet"}) 945 @Feature({"Cronet"})
963 public void testEnableHttpCacheDisk() throws Exception { 946 public void testEnableHttpCacheDisk() throws Exception {
964 final CronetTestFramework testFramework = 947 CronetEngine cronetEngine = createCronetEngine(CronetEngine.Builder.HTTP _CACHE_DISK);
965 startCronetTestFrameworkWithCacheEnabled(CronetEngine.Builder.HT TP_CACHE_DISK);
966 String url = NativeTestServer.getFileURL("/cacheable.txt"); 948 String url = NativeTestServer.getFileURL("/cacheable.txt");
967 checkRequestCaching(testFramework.mCronetEngine, url, false); 949 checkRequestCaching(cronetEngine, url, false);
968 checkRequestCaching(testFramework.mCronetEngine, url, true); 950 checkRequestCaching(cronetEngine, url, true);
969 NativeTestServer.shutdownNativeTestServer(); 951 NativeTestServer.shutdownNativeTestServer();
970 checkRequestCaching(testFramework.mCronetEngine, url, true); 952 checkRequestCaching(cronetEngine, url, true);
971 } 953 }
972 954
973 @SmallTest 955 @SmallTest
974 @Feature({"Cronet"}) 956 @Feature({"Cronet"})
975 @OnlyRunNativeCronet 957 @OnlyRunNativeCronet
976 public void testEnableHttpCacheDiskNoHttp() throws Exception { 958 public void testEnableHttpCacheDiskNoHttp() throws Exception {
977 final CronetTestFramework testFramework = 959 // TODO(pauljensen): This should be testing HTTP_CACHE_DISK_NO_HTTP.
978 startCronetTestFrameworkWithCacheEnabled(CronetEngine.Builder.HT TP_CACHE_DISABLED); 960 CronetEngine cronetEngine = createCronetEngine(CronetEngine.Builder.HTTP _CACHE_DISABLED);
979 String url = NativeTestServer.getFileURL("/cacheable.txt"); 961 String url = NativeTestServer.getFileURL("/cacheable.txt");
980 checkRequestCaching(testFramework.mCronetEngine, url, false); 962 checkRequestCaching(cronetEngine, url, false);
981 checkRequestCaching(testFramework.mCronetEngine, url, false); 963 checkRequestCaching(cronetEngine, url, false);
982 checkRequestCaching(testFramework.mCronetEngine, url, false); 964 checkRequestCaching(cronetEngine, url, false);
983 } 965 }
984 966
985 @SmallTest 967 @SmallTest
986 @Feature({"Cronet"}) 968 @Feature({"Cronet"})
987 public void testDisableCache() throws Exception { 969 public void testDisableCache() throws Exception {
988 final CronetTestFramework testFramework = 970 CronetEngine cronetEngine = createCronetEngine(CronetEngine.Builder.HTTP _CACHE_DISK);
989 startCronetTestFrameworkWithCacheEnabled(CronetEngine.Builder.HT TP_CACHE_DISK);
990 String url = NativeTestServer.getFileURL("/cacheable.txt"); 971 String url = NativeTestServer.getFileURL("/cacheable.txt");
991 972
992 // When cache is disabled, making a request does not write to the cache. 973 // When cache is disabled, making a request does not write to the cache.
993 checkRequestCaching(testFramework.mCronetEngine, url, false, true /** di sable cache */); 974 checkRequestCaching(cronetEngine, url, false, true /** disable cache */) ;
994 checkRequestCaching(testFramework.mCronetEngine, url, false); 975 checkRequestCaching(cronetEngine, url, false);
995 976
996 // When cache is enabled, the second request is cached. 977 // When cache is enabled, the second request is cached.
997 checkRequestCaching(testFramework.mCronetEngine, url, false, true /** di sable cache */); 978 checkRequestCaching(cronetEngine, url, false, true /** disable cache */) ;
998 checkRequestCaching(testFramework.mCronetEngine, url, true); 979 checkRequestCaching(cronetEngine, url, true);
999 980
1000 // Shut down the server, next request should have a cached response. 981 // Shut down the server, next request should have a cached response.
1001 NativeTestServer.shutdownNativeTestServer(); 982 NativeTestServer.shutdownNativeTestServer();
1002 checkRequestCaching(testFramework.mCronetEngine, url, true); 983 checkRequestCaching(cronetEngine, url, true);
1003 984
1004 // Cache is disabled after server is shut down, request should fail. 985 // Cache is disabled after server is shut down, request should fail.
1005 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 986 TestUrlRequestCallback callback = new TestUrlRequestCallback();
1006 UrlRequest.Builder urlRequestBuilder = testFramework.mCronetEngine.newUr lRequestBuilder( 987 UrlRequest.Builder urlRequestBuilder =
1007 url, callback, callback.getExecutor()); 988 cronetEngine.newUrlRequestBuilder(url, callback, callback.getExe cutor());
1008 urlRequestBuilder.disableCache(); 989 urlRequestBuilder.disableCache();
1009 urlRequestBuilder.build().start(); 990 urlRequestBuilder.build().start();
1010 callback.blockForDone(); 991 callback.blockForDone();
1011 assertNotNull(callback.mError); 992 assertNotNull(callback.mError);
1012 assertContains("Exception in CronetUrlRequest: net::ERR_CONNECTION_REFUS ED", 993 assertContains("Exception in CronetUrlRequest: net::ERR_CONNECTION_REFUS ED",
1013 callback.mError.getMessage()); 994 callback.mError.getMessage());
1014 } 995 }
1015 996
1016 @SmallTest 997 @SmallTest
1017 @Feature({"Cronet"}) 998 @Feature({"Cronet"})
1018 public void testEnableHttpCacheDiskNewEngine() throws Exception { 999 public void testEnableHttpCacheDiskNewEngine() throws Exception {
1019 final CronetTestFramework testFramework = 1000 CronetEngine cronetEngine = createCronetEngine(CronetEngine.Builder.HTTP _CACHE_DISK);
1020 startCronetTestFrameworkWithCacheEnabled(CronetEngine.Builder.HT TP_CACHE_DISK);
1021 String url = NativeTestServer.getFileURL("/cacheable.txt"); 1001 String url = NativeTestServer.getFileURL("/cacheable.txt");
1022 checkRequestCaching(testFramework.mCronetEngine, url, false); 1002 checkRequestCaching(cronetEngine, url, false);
1023 checkRequestCaching(testFramework.mCronetEngine, url, true); 1003 checkRequestCaching(cronetEngine, url, true);
1024 NativeTestServer.shutdownNativeTestServer(); 1004 NativeTestServer.shutdownNativeTestServer();
1025 checkRequestCaching(testFramework.mCronetEngine, url, true); 1005 checkRequestCaching(cronetEngine, url, true);
1026 1006
1027 // Shutdown original context and create another that uses the same cache . 1007 // Shutdown original context and create another that uses the same cache .
1028 testFramework.mCronetEngine.shutdown(); 1008 cronetEngine.shutdown();
1029 testFramework.mCronetEngine = 1009 cronetEngine = enableDiskCache(new CronetEngine.Builder(getContext())).b uild();
1030 (CronetEngineBase) testFramework.getCronetEngineBuilder().build( ); 1010 checkRequestCaching(cronetEngine, url, true);
1031 checkRequestCaching(testFramework.mCronetEngine, url, true);
1032 } 1011 }
1033 1012
1034 @SmallTest 1013 @SmallTest
1035 @Feature({"Cronet"}) 1014 @Feature({"Cronet"})
1036 public void testInitEngineAndStartRequest() { 1015 public void testInitEngineAndStartRequest() {
1037 CronetTestFramework testFramework = startCronetTestFrameworkAndSkipLibra ryInit();
1038
1039 // Immediately make a request after initializing the engine. 1016 // Immediately make a request after initializing the engine.
1040 CronetEngine cronetEngine = testFramework.initCronetEngine(); 1017 CronetEngine cronetEngine = new CronetEngine.Builder(getContext()).build ();
1041 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 1018 TestUrlRequestCallback callback = new TestUrlRequestCallback();
1042 UrlRequest.Builder urlRequestBuilder = 1019 UrlRequest.Builder urlRequestBuilder =
1043 cronetEngine.newUrlRequestBuilder(mUrl, callback, callback.getEx ecutor()); 1020 cronetEngine.newUrlRequestBuilder(mUrl, callback, callback.getEx ecutor());
1044 urlRequestBuilder.build().start(); 1021 urlRequestBuilder.build().start();
1045 callback.blockForDone(); 1022 callback.blockForDone();
1046 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 1023 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
1047 } 1024 }
1048 1025
1049 @SmallTest 1026 @SmallTest
1050 @Feature({"Cronet"}) 1027 @Feature({"Cronet"})
1051 public void testEmptyGetCertVerifierData() { 1028 public void testEmptyGetCertVerifierData() {
1052 CronetTestFramework testFramework = startCronetTestFrameworkAndSkipLibra ryInit();
1053
1054 // Immediately make a request after initializing the engine. 1029 // Immediately make a request after initializing the engine.
1055 ExperimentalCronetEngine cronetEngine = testFramework.initCronetEngine() ; 1030 ExperimentalCronetEngine cronetEngine =
1031 new ExperimentalCronetEngine.Builder(getContext()).build();
1056 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 1032 TestUrlRequestCallback callback = new TestUrlRequestCallback();
1057 UrlRequest.Builder urlRequestBuilder = 1033 UrlRequest.Builder urlRequestBuilder =
1058 cronetEngine.newUrlRequestBuilder(mUrl, callback, callback.getEx ecutor()); 1034 cronetEngine.newUrlRequestBuilder(mUrl, callback, callback.getEx ecutor());
1059 urlRequestBuilder.build().start(); 1035 urlRequestBuilder.build().start();
1060 callback.blockForDone(); 1036 callback.blockForDone();
1061 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 1037 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
1062 1038
1063 try { 1039 try {
1064 cronetEngine.getCertVerifierData(-1); 1040 cronetEngine.getCertVerifierData(-1);
1065 fail("Should throw an exception"); 1041 fail("Should throw an exception");
1066 } catch (Exception e) { 1042 } catch (Exception e) {
1067 assertEquals("timeout must be a positive value", e.getMessage()); 1043 assertEquals("timeout must be a positive value", e.getMessage());
1068 } 1044 }
1069 // Because mUrl is http, getCertVerifierData() will return empty data. 1045 // Because mUrl is http, getCertVerifierData() will return empty data.
1070 String data = cronetEngine.getCertVerifierData(100); 1046 String data = cronetEngine.getCertVerifierData(100);
1071 assertTrue(data.isEmpty()); 1047 assertTrue(data.isEmpty());
1072 } 1048 }
1073 1049
1074 @SmallTest 1050 @SmallTest
1075 @Feature({"Cronet"}) 1051 @Feature({"Cronet"})
1076 public void testInitEngineStartTwoRequests() throws Exception { 1052 public void testInitEngineStartTwoRequests() throws Exception {
1077 CronetTestFramework testFramework = startCronetTestFrameworkAndSkipLibra ryInit();
1078
1079 // Make two requests after initializing the context. 1053 // Make two requests after initializing the context.
1080 CronetEngine cronetEngine = testFramework.initCronetEngine(); 1054 CronetEngine cronetEngine = new CronetEngine.Builder(getContext()).build ();
1081 int[] statusCodes = {0, 0}; 1055 int[] statusCodes = {0, 0};
1082 String[] urls = {mUrl, mUrl404}; 1056 String[] urls = {mUrl, mUrl404};
1083 for (int i = 0; i < 2; i++) { 1057 for (int i = 0; i < 2; i++) {
1084 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 1058 TestUrlRequestCallback callback = new TestUrlRequestCallback();
1085 UrlRequest.Builder urlRequestBuilder = 1059 UrlRequest.Builder urlRequestBuilder =
1086 cronetEngine.newUrlRequestBuilder(urls[i], callback, callbac k.getExecutor()); 1060 cronetEngine.newUrlRequestBuilder(urls[i], callback, callbac k.getExecutor());
1087 urlRequestBuilder.build().start(); 1061 urlRequestBuilder.build().start();
1088 callback.blockForDone(); 1062 callback.blockForDone();
1089 statusCodes[i] = callback.mResponseInfo.getHttpStatusCode(); 1063 statusCodes[i] = callback.mResponseInfo.getHttpStatusCode();
1090 } 1064 }
1091 assertEquals(200, statusCodes[0]); 1065 assertEquals(200, statusCodes[0]);
1092 assertEquals(404, statusCodes[1]); 1066 assertEquals(404, statusCodes[1]);
1093 } 1067 }
1094 1068
1095 @SmallTest 1069 @SmallTest
1096 @Feature({"Cronet"}) 1070 @Feature({"Cronet"})
1097 public void testInitTwoEnginesSimultaneously() throws Exception { 1071 public void testInitTwoEnginesSimultaneously() throws Exception {
1098 final CronetTestFramework testFramework = startCronetTestFrameworkAndSki pLibraryInit();
1099
1100 // Threads will block on runBlocker to ensure simultaneous execution. 1072 // Threads will block on runBlocker to ensure simultaneous execution.
1101 ConditionVariable runBlocker = new ConditionVariable(false); 1073 ConditionVariable runBlocker = new ConditionVariable(false);
1102 RequestThread thread1 = new RequestThread(testFramework, mUrl, runBlocke r); 1074 RequestThread thread1 = new RequestThread(mUrl, runBlocker);
1103 RequestThread thread2 = new RequestThread(testFramework, mUrl404, runBlo cker); 1075 RequestThread thread2 = new RequestThread(mUrl404, runBlocker);
1104 1076
1105 thread1.start(); 1077 thread1.start();
1106 thread2.start(); 1078 thread2.start();
1107 runBlocker.open(); 1079 runBlocker.open();
1108 thread1.join(); 1080 thread1.join();
1109 thread2.join(); 1081 thread2.join();
1110 assertEquals(200, thread1.mCallback.mResponseInfo.getHttpStatusCode()); 1082 assertEquals(200, thread1.mCallback.mResponseInfo.getHttpStatusCode());
1111 assertEquals(404, thread2.mCallback.mResponseInfo.getHttpStatusCode()); 1083 assertEquals(404, thread2.mCallback.mResponseInfo.getHttpStatusCode());
1112 } 1084 }
1113 1085
1114 @SmallTest 1086 @SmallTest
1115 @Feature({"Cronet"}) 1087 @Feature({"Cronet"})
1116 public void testInitTwoEnginesInSequence() throws Exception { 1088 public void testInitTwoEnginesInSequence() throws Exception {
1117 final CronetTestFramework testFramework = startCronetTestFrameworkAndSki pLibraryInit();
1118
1119 ConditionVariable runBlocker = new ConditionVariable(true); 1089 ConditionVariable runBlocker = new ConditionVariable(true);
1120 RequestThread thread1 = new RequestThread(testFramework, mUrl, runBlocke r); 1090 RequestThread thread1 = new RequestThread(mUrl, runBlocker);
1121 RequestThread thread2 = new RequestThread(testFramework, mUrl404, runBlo cker); 1091 RequestThread thread2 = new RequestThread(mUrl404, runBlocker);
1122 1092
1123 thread1.start(); 1093 thread1.start();
1124 thread1.join(); 1094 thread1.join();
1125 thread2.start(); 1095 thread2.start();
1126 thread2.join(); 1096 thread2.join();
1127 assertEquals(200, thread1.mCallback.mResponseInfo.getHttpStatusCode()); 1097 assertEquals(200, thread1.mCallback.mResponseInfo.getHttpStatusCode());
1128 assertEquals(404, thread2.mCallback.mResponseInfo.getHttpStatusCode()); 1098 assertEquals(404, thread2.mCallback.mResponseInfo.getHttpStatusCode());
1129 } 1099 }
1130 1100
1131 @SmallTest 1101 @SmallTest
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 String resolverTestHostname = "some-weird-hostname"; 1230 String resolverTestHostname = "some-weird-hostname";
1261 URL testUrl = new URL(mUrl); 1231 URL testUrl = new URL(mUrl);
1262 ExperimentalCronetEngine.Builder cronetEngineBuilder = 1232 ExperimentalCronetEngine.Builder cronetEngineBuilder =
1263 new ExperimentalCronetEngine.Builder(getContext()); 1233 new ExperimentalCronetEngine.Builder(getContext());
1264 JSONObject hostResolverRules = new JSONObject().put( 1234 JSONObject hostResolverRules = new JSONObject().put(
1265 "host_resolver_rules", "MAP " + resolverTestHostname + " " + tes tUrl.getHost()); 1235 "host_resolver_rules", "MAP " + resolverTestHostname + " " + tes tUrl.getHost());
1266 JSONObject experimentalOptions = 1236 JSONObject experimentalOptions =
1267 new JSONObject().put("HostResolverRules", hostResolverRules); 1237 new JSONObject().put("HostResolverRules", hostResolverRules);
1268 cronetEngineBuilder.setExperimentalOptions(experimentalOptions.toString( )); 1238 cronetEngineBuilder.setExperimentalOptions(experimentalOptions.toString( ));
1269 1239
1270 final CronetTestFramework testFramework = 1240 final CronetEngine cronetEngine = cronetEngineBuilder.build();
1271 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, cron etEngineBuilder);
1272 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 1241 TestUrlRequestCallback callback = new TestUrlRequestCallback();
1273 URL requestUrl = 1242 URL requestUrl =
1274 new URL("http", resolverTestHostname, testUrl.getPort(), testUrl .getFile()); 1243 new URL("http", resolverTestHostname, testUrl.getPort(), testUrl .getFile());
1275 UrlRequest.Builder urlRequestBuilder = testFramework.mCronetEngine.newUr lRequestBuilder( 1244 UrlRequest.Builder urlRequestBuilder = cronetEngine.newUrlRequestBuilder (
1276 requestUrl.toString(), callback, callback.getExecutor()); 1245 requestUrl.toString(), callback, callback.getExecutor());
1277 urlRequestBuilder.build().start(); 1246 urlRequestBuilder.build().start();
1278 callback.blockForDone(); 1247 callback.blockForDone();
1279 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 1248 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
1280 } 1249 }
1281 1250
1282 /** 1251 /**
1283 * Runs {@code r} on {@code engine}'s network thread. 1252 * Runs {@code r} on {@code engine}'s network thread.
1284 */ 1253 */
1285 private static void postToNetworkThread(final CronetEngine engine, final Run nable r) { 1254 private static void postToNetworkThread(final CronetEngine engine, final Run nable r) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1345 } 1314 }
1346 // Test that valid thread priority range (-20..19) is working. 1315 // Test that valid thread priority range (-20..19) is working.
1347 for (int threadPriority = -20; threadPriority < 20; threadPriority++) { 1316 for (int threadPriority = -20; threadPriority < 20; threadPriority++) {
1348 builder.setThreadPriority(threadPriority); 1317 builder.setThreadPriority(threadPriority);
1349 CronetEngine engine = builder.build(); 1318 CronetEngine engine = builder.build();
1350 assertEquals(threadPriority, getThreadPriority(engine)); 1319 assertEquals(threadPriority, getThreadPriority(engine));
1351 engine.shutdown(); 1320 engine.shutdown();
1352 } 1321 }
1353 } 1322 }
1354 } 1323 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698