| 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.os.ConditionVariable; | 7 import android.os.ConditionVariable; |
| 8 import android.test.suitebuilder.annotation.SmallTest; | 8 import android.test.suitebuilder.annotation.SmallTest; |
| 9 | 9 |
| 10 import org.json.JSONException; |
| 11 import org.json.JSONObject; |
| 12 |
| 10 import org.chromium.base.test.util.Feature; | 13 import org.chromium.base.test.util.Feature; |
| 11 import org.chromium.net.CronetTestBase.OnlyRunNativeCronet; | 14 import org.chromium.net.CronetTestBase.OnlyRunNativeCronet; |
| 12 import org.chromium.net.impl.CronetUrlRequestContext; | 15 import org.chromium.net.impl.CronetUrlRequestContext; |
| 13 import org.json.JSONException; | |
| 14 import org.json.JSONObject; | |
| 15 | 16 |
| 16 import java.io.BufferedReader; | 17 import java.io.BufferedReader; |
| 17 import java.io.FileReader; | 18 import java.io.FileReader; |
| 18 import java.io.IOException; | 19 import java.io.IOException; |
| 19 import java.util.ArrayList; | 20 import java.util.ArrayList; |
| 20 import java.util.Arrays; | 21 import java.util.Arrays; |
| 21 import java.util.List; | 22 import java.util.List; |
| 22 | 23 |
| 23 /** | 24 /** |
| 24 * Tests Sdch support. | 25 * Tests Sdch support. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 NativeTestServer.shutdownNativeTestServer(); | 62 NativeTestServer.shutdownNativeTestServer(); |
| 62 super.tearDown(); | 63 super.tearDown(); |
| 63 } | 64 } |
| 64 | 65 |
| 65 @SmallTest | 66 @SmallTest |
| 66 @Feature({"Cronet"}) | 67 @Feature({"Cronet"}) |
| 67 @OnlyRunNativeCronet | 68 @OnlyRunNativeCronet |
| 68 public void testSdchEnabled() throws Exception { | 69 public void testSdchEnabled() throws Exception { |
| 69 setUp(Sdch.ENABLED); | 70 setUp(Sdch.ENABLED); |
| 70 String targetUrl = NativeTestServer.getSdchURL() + "/sdch/test"; | 71 String targetUrl = NativeTestServer.getSdchURL() + "/sdch/test"; |
| 71 long contextAdapter = | 72 CronetUrlRequestContext context = (CronetUrlRequestContext) mTestFramewo
rk.mCronetEngine; |
| 72 getContextAdapter((CronetUrlRequestContext) mTestFramework.mCron
etEngine); | 73 DictionaryAddedObserver observer = new DictionaryAddedObserver(targetUrl
, context); |
| 73 DictionaryAddedObserver observer = new DictionaryAddedObserver(targetUrl
, contextAdapter); | |
| 74 | 74 |
| 75 // Make a request to /sdch which advertises the dictionary. | 75 // Make a request to /sdch which advertises the dictionary. |
| 76 TestUrlRequestCallback callback1 = startAndWaitForComplete(mTestFramewor
k.mCronetEngine, | 76 TestUrlRequestCallback callback1 = startAndWaitForComplete(mTestFramewor
k.mCronetEngine, |
| 77 NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O"); | 77 NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O"); |
| 78 assertEquals(200, callback1.mResponseInfo.getHttpStatusCode()); | 78 assertEquals(200, callback1.mResponseInfo.getHttpStatusCode()); |
| 79 assertEquals("This is an index page.\n", callback1.mResponseAsString); | 79 assertEquals("This is an index page.\n", callback1.mResponseAsString); |
| 80 assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"), | 80 assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"), |
| 81 callback1.mResponseInfo.getAllHeaders().get("Get-Dictionary")); | 81 callback1.mResponseInfo.getAllHeaders().get("Get-Dictionary")); |
| 82 | 82 |
| 83 observer.waitForDictionaryAdded(); | 83 observer.waitForDictionaryAdded(); |
| 84 | 84 |
| 85 // Make a request to fetch encoded response at /sdch/test. | 85 // Make a request to fetch encoded response at /sdch/test. |
| 86 TestUrlRequestCallback callback2 = | 86 TestUrlRequestCallback callback2 = |
| 87 startAndWaitForComplete(mTestFramework.mCronetEngine, targetUrl)
; | 87 startAndWaitForComplete(mTestFramework.mCronetEngine, targetUrl)
; |
| 88 assertEquals(200, callback2.mResponseInfo.getHttpStatusCode()); | 88 assertEquals(200, callback2.mResponseInfo.getHttpStatusCode()); |
| 89 assertEquals("The quick brown fox jumps over the lazy dog.\n", callback2
.mResponseAsString); | 89 assertEquals("The quick brown fox jumps over the lazy dog.\n", callback2
.mResponseAsString); |
| 90 | 90 |
| 91 mTestFramework.mCronetEngine.shutdown(); | 91 mTestFramework.mCronetEngine.shutdown(); |
| 92 | 92 |
| 93 // Shutting down the context will make JsonPrefStore to flush pending | 93 // Shutting down the context will make JsonPrefStore to flush pending |
| 94 // writes to disk. | 94 // writes to disk. |
| 95 String dictUrl = NativeTestServer.getSdchURL() + "/sdch/dict/LeQxM80O"; | 95 String dictUrl = NativeTestServer.getSdchURL() + "/sdch/dict/LeQxM80O"; |
| 96 assertTrue(fileContainsString("local_prefs.json", dictUrl)); | 96 assertTrue(fileContainsString("local_prefs.json", dictUrl)); |
| 97 | 97 |
| 98 // Test persistence. | 98 // Test persistence. |
| 99 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder( | 99 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder( |
| 100 null, mTestFramework.getCronetEngineBuilder()); | 100 null, mTestFramework.getCronetEngineBuilder()); |
| 101 CronetUrlRequestContext newContext = (CronetUrlRequestContext) mTestFram
ework.mCronetEngine; | 101 CronetUrlRequestContext newContext = (CronetUrlRequestContext) mTestFram
ework.mCronetEngine; |
| 102 long newContextAdapter = getContextAdapter(newContext); | 102 DictionaryAddedObserver newObserver = new DictionaryAddedObserver(target
Url, newContext); |
| 103 DictionaryAddedObserver newObserver = | |
| 104 new DictionaryAddedObserver(targetUrl, newContextAdapter); | |
| 105 newObserver.waitForDictionaryAdded(); | 103 newObserver.waitForDictionaryAdded(); |
| 106 | 104 |
| 107 // Make a request to fetch encoded response at /sdch/test. | 105 // Make a request to fetch encoded response at /sdch/test. |
| 108 TestUrlRequestCallback callback3 = startAndWaitForComplete(newContext, t
argetUrl); | 106 TestUrlRequestCallback callback3 = startAndWaitForComplete(newContext, t
argetUrl); |
| 109 assertEquals(200, callback3.mResponseInfo.getHttpStatusCode()); | 107 assertEquals(200, callback3.mResponseInfo.getHttpStatusCode()); |
| 110 assertEquals("The quick brown fox jumps over the lazy dog.\n", callback3
.mResponseAsString); | 108 assertEquals("The quick brown fox jumps over the lazy dog.\n", callback3
.mResponseAsString); |
| 111 } | 109 } |
| 112 | 110 |
| 113 @SmallTest | 111 @SmallTest |
| 114 @Feature({"Cronet"}) | 112 @Feature({"Cronet"}) |
| (...skipping 26 matching lines...) Expand all Loading... |
| 141 // Make a request to fetch /sdch/test, and make sure Sdch encoding is no
t used. | 139 // Make a request to fetch /sdch/test, and make sure Sdch encoding is no
t used. |
| 142 TestUrlRequestCallback callback2 = startAndWaitForComplete( | 140 TestUrlRequestCallback callback2 = startAndWaitForComplete( |
| 143 mTestFramework.mCronetEngine, NativeTestServer.getSdchURL() + "/
sdch/test"); | 141 mTestFramework.mCronetEngine, NativeTestServer.getSdchURL() + "/
sdch/test"); |
| 144 assertEquals(200, callback2.mResponseInfo.getHttpStatusCode()); | 142 assertEquals(200, callback2.mResponseInfo.getHttpStatusCode()); |
| 145 assertEquals("Sdch is not used.\n", callback2.mResponseAsString); | 143 assertEquals("Sdch is not used.\n", callback2.mResponseAsString); |
| 146 } | 144 } |
| 147 | 145 |
| 148 private static class DictionaryAddedObserver extends SdchObserver { | 146 private static class DictionaryAddedObserver extends SdchObserver { |
| 149 ConditionVariable mBlock = new ConditionVariable(); | 147 ConditionVariable mBlock = new ConditionVariable(); |
| 150 | 148 |
| 151 public DictionaryAddedObserver(String targetUrl, long contextAdapter) { | 149 public DictionaryAddedObserver(String targetUrl, CronetUrlRequestContext
context) { |
| 152 super(targetUrl, contextAdapter); | 150 super(targetUrl, context); |
| 153 } | 151 } |
| 154 | 152 |
| 155 @Override | 153 @Override |
| 156 public void onDictionaryAdded() { | 154 public void onDictionaryAdded() { |
| 157 mBlock.open(); | 155 mBlock.open(); |
| 158 } | 156 } |
| 159 | 157 |
| 160 public void waitForDictionaryAdded() { | 158 public void waitForDictionaryAdded() { |
| 161 if (!mDictionaryAlreadyPresent) { | 159 if (!mDictionaryAlreadyPresent) { |
| 162 mBlock.block(); | 160 mBlock.block(); |
| 163 mBlock.close(); | 161 mBlock.close(); |
| 164 } | 162 } |
| 165 } | 163 } |
| 166 } | 164 } |
| 167 | 165 |
| 168 private long getContextAdapter(CronetUrlRequestContext requestContext) { | |
| 169 return requestContext.getUrlRequestContextAdapter(); | |
| 170 } | |
| 171 | |
| 172 private TestUrlRequestCallback startAndWaitForComplete(CronetEngine cronetEn
gine, String url) | 166 private TestUrlRequestCallback startAndWaitForComplete(CronetEngine cronetEn
gine, String url) |
| 173 throws Exception { | 167 throws Exception { |
| 174 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 168 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 175 UrlRequest.Builder builder = | 169 UrlRequest.Builder builder = |
| 176 new UrlRequest.Builder(url, callback, callback.getExecutor(), cr
onetEngine); | 170 new UrlRequest.Builder(url, callback, callback.getExecutor(), cr
onetEngine); |
| 177 builder.build().start(); | 171 builder.build().start(); |
| 178 callback.blockForDone(); | 172 callback.blockForDone(); |
| 179 return callback; | 173 return callback; |
| 180 } | 174 } |
| 181 | 175 |
| 182 // Returns whether a file contains a particular string. | 176 // Returns whether a file contains a particular string. |
| 183 private boolean fileContainsString(String filename, String content) throws I
OException { | 177 private boolean fileContainsString(String filename, String content) throws I
OException { |
| 184 BufferedReader reader = new BufferedReader(new FileReader( | 178 BufferedReader reader = new BufferedReader(new FileReader( |
| 185 CronetTestFramework.getTestStorage(getContext()) + "/prefs/" + f
ilename)); | 179 CronetTestFramework.getTestStorage(getContext()) + "/prefs/" + f
ilename)); |
| 186 String line; | 180 String line; |
| 187 while ((line = reader.readLine()) != null) { | 181 while ((line = reader.readLine()) != null) { |
| 188 if (line.contains(content)) { | 182 if (line.contains(content)) { |
| 189 reader.close(); | 183 reader.close(); |
| 190 return true; | 184 return true; |
| 191 } | 185 } |
| 192 } | 186 } |
| 193 reader.close(); | 187 reader.close(); |
| 194 return false; | 188 return false; |
| 195 } | 189 } |
| 196 } | 190 } |
| OLD | NEW |