OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-present eyeo GmbH | 3 * Copyright (C) 2006-present eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 package org.adblockplus.libadblockplus.tests; | 18 package org.adblockplus.libadblockplus.tests; |
19 | 19 |
20 import android.os.SystemClock; | 20 import org.adblockplus.libadblockplus.BaseFilterEngineTest; |
21 | |
22 import org.adblockplus.libadblockplus.HeaderEntry; | 21 import org.adblockplus.libadblockplus.HeaderEntry; |
23 import org.adblockplus.libadblockplus.ServerResponse; | 22 import org.adblockplus.libadblockplus.ServerResponse; |
24 import org.adblockplus.libadblockplus.Subscription; | 23 import org.adblockplus.libadblockplus.ThrowingWebRequest; |
25 import org.adblockplus.libadblockplus.WebRequest; | |
26 import org.adblockplus.libadblockplus.android.AndroidWebRequest; | |
27 import org.adblockplus.libadblockplus.android.AndroidWebRequestResourceWrapper; | 24 import org.adblockplus.libadblockplus.android.AndroidWebRequestResourceWrapper; |
28 import org.adblockplus.libadblockplus.android.Utils; | 25 import org.adblockplus.libadblockplus.android.Utils; |
29 import org.adblockplus.libadblockplus.tests.test.R; | 26 import org.adblockplus.libadblockplus.tests.test.R; |
30 import org.junit.Test; | 27 import org.junit.Test; |
31 | 28 |
32 import java.util.Collection; | 29 import java.util.Collection; |
33 import java.util.HashMap; | 30 import java.util.HashMap; |
34 import java.util.HashSet; | 31 import java.util.HashSet; |
35 import java.util.LinkedList; | 32 import java.util.LinkedList; |
36 import java.util.List; | 33 import java.util.List; |
37 import java.util.Map; | 34 import java.util.Map; |
38 import java.util.Set; | 35 import java.util.Set; |
39 | 36 |
40 public class AndroidWebRequestResourceWrapperTest extends BaseFilterEngineTest | 37 public class AndroidWebRequestResourceWrapperTest extends BaseFilterEngineTest |
41 { | 38 { |
42 private static final int UPDATE_SUBSCRIPTIONS_WAIT_DELAY_MS = 5 * 1000; // 5s | 39 private static final class TestRequest extends ThrowingWebRequest |
43 | |
44 private static final class TestRequest extends AndroidWebRequest | |
45 { | 40 { |
46 private List<String> urls = new LinkedList<String>(); | 41 private List<String> urls = new LinkedList<String>(); |
47 | 42 |
48 public List<String> getUrls() | 43 public List<String> getUrls() |
49 { | 44 { |
50 return urls; | 45 return urls; |
51 } | 46 } |
52 | 47 |
53 @Override | 48 @Override |
54 public ServerResponse httpGET(String urlStr, List<HeaderEntry> headers) | 49 public ServerResponse httpGET(String urlStr, List<HeaderEntry> headers) |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 protected void setUp() throws Exception | 102 protected void setUp() throws Exception |
108 { | 103 { |
109 request = new TestRequest(); | 104 request = new TestRequest(); |
110 preloadMap = new HashMap<String, Integer>(); | 105 preloadMap = new HashMap<String, Integer>(); |
111 storage = new TestStorage(); | 106 storage = new TestStorage(); |
112 wrapper = new AndroidWebRequestResourceWrapper( | 107 wrapper = new AndroidWebRequestResourceWrapper( |
113 getInstrumentation().getContext(), request, preloadMap, storage); | 108 getInstrumentation().getContext(), request, preloadMap, storage); |
114 wrapperListener = new TestWrapperListener(); | 109 wrapperListener = new TestWrapperListener(); |
115 wrapper.setListener(wrapperListener); | 110 wrapper.setListener(wrapperListener); |
116 | 111 |
| 112 setWebRequest(wrapper); |
| 113 |
117 super.setUp(); | 114 super.setUp(); |
118 } | 115 } |
119 | 116 |
120 @Override | |
121 protected WebRequest createWebRequest() | |
122 { | |
123 return wrapper; | |
124 } | |
125 | |
126 private void updateSubscriptions() | |
127 { | |
128 for (final Subscription s : this.filterEngine.getListedSubscriptions()) | |
129 { | |
130 try | |
131 { | |
132 s.updateFilters(); | |
133 } | |
134 finally | |
135 { | |
136 s.dispose(); | |
137 } | |
138 } | |
139 } | |
140 | |
141 private List<String> getUrlsListWithoutParams(Collection<String> urlWithParams
) | 117 private List<String> getUrlsListWithoutParams(Collection<String> urlWithParams
) |
142 { | 118 { |
143 List<String> list = new LinkedList<String>(); | 119 List<String> list = new LinkedList<String>(); |
144 for (String eachUrl : urlWithParams) | 120 for (String eachUrl : urlWithParams) |
145 { | 121 { |
146 list.add(Utils.getUrlWithoutParams(eachUrl)); | 122 list.add(Utils.getUrlWithoutParams(eachUrl)); |
147 } | 123 } |
148 return list; | 124 return list; |
149 } | 125 } |
150 | 126 |
| 127 private void reset() |
| 128 { |
| 129 preloadMap.clear(); |
| 130 request.getUrls().clear(); |
| 131 storage.getInterceptedUrls().clear(); |
| 132 wrapperListener.getUrlsToResourceId().clear(); |
| 133 } |
| 134 |
| 135 @Override |
| 136 protected int getUpdateRequestCount() |
| 137 { |
| 138 return request.getUrls().size() + storage.getInterceptedUrls().size(); |
| 139 } |
| 140 |
151 private void testIntercepted(final String preloadUrl, final int resourceId) | 141 private void testIntercepted(final String preloadUrl, final int resourceId) |
152 { | 142 { |
153 preloadMap.clear(); | 143 reset(); |
154 preloadMap.put(preloadUrl, resourceId); | 144 preloadMap.put(preloadUrl, resourceId); |
155 | |
156 assertEquals(0, request.getUrls().size()); | 145 assertEquals(0, request.getUrls().size()); |
157 | |
158 assertEquals(0, storage.getInterceptedUrls().size()); | 146 assertEquals(0, storage.getInterceptedUrls().size()); |
159 | |
160 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); | 147 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); |
161 | 148 |
162 updateSubscriptions(); | 149 updateSubscriptions(); |
163 SystemClock.sleep(UPDATE_SUBSCRIPTIONS_WAIT_DELAY_MS); | |
164 | 150 |
165 if (request.getUrls().size() > 0) | 151 if (request.getUrls().size() > 0) |
166 { | 152 { |
167 List<String> requestsWithoutParams = getUrlsListWithoutParams(request.getU
rls()); | 153 List<String> requestsWithoutParams = getUrlsListWithoutParams(request.getU
rls()); |
168 assertFalse(requestsWithoutParams.contains(preloadUrl)); | 154 assertFalse(requestsWithoutParams.contains(preloadUrl)); |
169 } | 155 } |
170 | 156 |
171 assertEquals(1, storage.getInterceptedUrls().size()); | 157 assertEquals(1, storage.getInterceptedUrls().size()); |
172 assertTrue(storage.getInterceptedUrls().contains(preloadUrl)); | 158 assertTrue(storage.getInterceptedUrls().contains(preloadUrl)); |
173 | 159 |
(...skipping 24 matching lines...) Expand all Loading... |
198 { | 184 { |
199 testIntercepted( | 185 testIntercepted( |
200 AndroidWebRequestResourceWrapper.ACCEPTABLE_ADS, R.raw.exceptionrules); | 186 AndroidWebRequestResourceWrapper.ACCEPTABLE_ADS, R.raw.exceptionrules); |
201 } | 187 } |
202 | 188 |
203 @Test | 189 @Test |
204 public void testIntercepted_OnceOnly() | 190 public void testIntercepted_OnceOnly() |
205 { | 191 { |
206 final String preloadUrl = AndroidWebRequestResourceWrapper.EASYLIST; | 192 final String preloadUrl = AndroidWebRequestResourceWrapper.EASYLIST; |
207 | 193 |
208 preloadMap.clear(); | 194 reset(); |
209 preloadMap.put(preloadUrl, R.raw.easylist); | 195 preloadMap.put(preloadUrl, R.raw.easylist); |
210 | |
211 assertEquals(0, request.getUrls().size()); | 196 assertEquals(0, request.getUrls().size()); |
212 | |
213 assertEquals(0, storage.getInterceptedUrls().size()); | 197 assertEquals(0, storage.getInterceptedUrls().size()); |
214 | |
215 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); | 198 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); |
216 | 199 |
217 // update #1 - should be intercepted | 200 // update #1 - should be intercepted |
218 updateSubscriptions(); | 201 updateSubscriptions(); |
219 SystemClock.sleep(UPDATE_SUBSCRIPTIONS_WAIT_DELAY_MS); | |
220 | 202 |
221 int requestsCount = request.getUrls().size(); | 203 int requestsCount = request.getUrls().size(); |
222 if (requestsCount > 0) | 204 if (requestsCount > 0) |
223 { | 205 { |
224 List<String> requestsWithoutParams = getUrlsListWithoutParams(request.getU
rls()); | 206 List<String> requestsWithoutParams = getUrlsListWithoutParams(request.getU
rls()); |
225 assertFalse(requestsWithoutParams.contains(preloadUrl)); | 207 assertFalse(requestsWithoutParams.contains(preloadUrl)); |
226 } | 208 } |
227 | 209 |
228 assertEquals(1, storage.getInterceptedUrls().size()); | 210 assertEquals(1, storage.getInterceptedUrls().size()); |
229 assertTrue(storage.getInterceptedUrls().contains(preloadUrl)); | 211 assertTrue(storage.getInterceptedUrls().contains(preloadUrl)); |
230 | 212 |
231 assertTrue(wrapperListener.getUrlsToResourceId().size() >= 0); | 213 assertTrue(wrapperListener.getUrlsToResourceId().size() >= 0); |
232 List<String> notifiedInterceptedUrls = getUrlsListWithoutParams( | 214 List<String> notifiedInterceptedUrls = getUrlsListWithoutParams( |
233 wrapperListener.getUrlsToResourceId().keySet()); | 215 wrapperListener.getUrlsToResourceId().keySet()); |
234 assertTrue(notifiedInterceptedUrls.contains(preloadUrl)); | 216 assertTrue(notifiedInterceptedUrls.contains(preloadUrl)); |
235 | 217 |
236 // update #2 - should NOT be intercepted but actually requested from the we
b | 218 // update #2 - should NOT be intercepted but actually requested from the we
b |
237 wrapperListener.getUrlsToResourceId().clear(); | 219 wrapperListener.getUrlsToResourceId().clear(); |
238 | 220 |
239 updateSubscriptions(); | 221 updateSubscriptions(); |
240 SystemClock.sleep(UPDATE_SUBSCRIPTIONS_WAIT_DELAY_MS); | |
241 | 222 |
242 assertTrue(request.getUrls().size() > requestsCount); | 223 assertTrue(request.getUrls().size() > requestsCount); |
243 List<String> requestsWithoutParams = getUrlsListWithoutParams(request.getUrl
s()); | 224 List<String> requestsWithoutParams = getUrlsListWithoutParams(request.getUrl
s()); |
244 assertTrue(requestsWithoutParams.contains(preloadUrl)); | 225 assertTrue(requestsWithoutParams.contains(preloadUrl)); |
245 | 226 |
246 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); | 227 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); |
247 } | 228 } |
248 | 229 |
249 private void testNotIntercepted(final String interceptedUrl, final int resourc
eId, | 230 private void testNotIntercepted(final String interceptedUrl, final int resourc
eId, |
250 final String notInterceptedUrl) | 231 final String notInterceptedUrl) |
251 { | 232 { |
252 preloadMap.clear(); | 233 reset(); |
253 preloadMap.put(interceptedUrl, resourceId); | 234 preloadMap.put(interceptedUrl, resourceId); |
254 | |
255 assertEquals(0, request.getUrls().size()); | 235 assertEquals(0, request.getUrls().size()); |
256 assertEquals(0, storage.getInterceptedUrls().size()); | 236 assertEquals(0, storage.getInterceptedUrls().size()); |
257 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); | 237 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); |
258 | 238 |
259 updateSubscriptions(); | 239 updateSubscriptions(); |
260 SystemClock.sleep(UPDATE_SUBSCRIPTIONS_WAIT_DELAY_MS); | |
261 | 240 |
262 assertEquals(1, request.getUrls().size()); | 241 assertEquals(1, request.getUrls().size()); |
263 List<String> requestUrlsWithoutParams = getUrlsListWithoutParams(request.get
Urls()); | 242 List<String> requestUrlsWithoutParams = getUrlsListWithoutParams(request.get
Urls()); |
264 assertFalse(requestUrlsWithoutParams.contains(interceptedUrl)); | 243 assertFalse(requestUrlsWithoutParams.contains(interceptedUrl)); |
265 assertTrue(requestUrlsWithoutParams.contains(notInterceptedUrl)); | 244 assertTrue(requestUrlsWithoutParams.contains(notInterceptedUrl)); |
266 assertEquals(1, storage.getInterceptedUrls().size()); | 245 assertEquals(1, storage.getInterceptedUrls().size()); |
267 assertTrue(storage.getInterceptedUrls().contains(interceptedUrl)); | 246 assertTrue(storage.getInterceptedUrls().contains(interceptedUrl)); |
268 assertFalse(storage.getInterceptedUrls().contains(notInterceptedUrl)); | 247 assertFalse(storage.getInterceptedUrls().contains(notInterceptedUrl)); |
269 assertTrue(wrapperListener.getUrlsToResourceId().size() > 0); | 248 assertTrue(wrapperListener.getUrlsToResourceId().size() > 0); |
270 | 249 |
271 for (String eachString : wrapperListener.getUrlsToResourceId().keySet()) | 250 for (String eachString : wrapperListener.getUrlsToResourceId().keySet()) |
272 { | 251 { |
273 if (Utils.getUrlWithoutParams(eachString).equals(notInterceptedUrl)) | 252 if (Utils.getUrlWithoutParams(eachString).equals(notInterceptedUrl)) |
274 { | 253 { |
275 fail(); | 254 fail(); |
276 } | 255 } |
277 } | 256 } |
278 } | 257 } |
279 | 258 |
280 @Test | 259 @Test |
281 public void testInterceptedAll() | 260 public void testInterceptedAll() |
282 { | 261 { |
283 preloadMap.clear(); | 262 reset(); |
284 preloadMap.put(AndroidWebRequestResourceWrapper.EASYLIST, R.raw.easylist); | 263 preloadMap.put(AndroidWebRequestResourceWrapper.EASYLIST, R.raw.easylist); |
285 preloadMap.put(AndroidWebRequestResourceWrapper.ACCEPTABLE_ADS, R.raw.except
ionrules); | 264 preloadMap.put(AndroidWebRequestResourceWrapper.ACCEPTABLE_ADS, R.raw.except
ionrules); |
286 | |
287 assertEquals(0, request.getUrls().size()); | 265 assertEquals(0, request.getUrls().size()); |
288 | |
289 assertEquals(0, storage.getInterceptedUrls().size()); | 266 assertEquals(0, storage.getInterceptedUrls().size()); |
290 | |
291 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); | 267 assertEquals(0, wrapperListener.getUrlsToResourceId().size()); |
292 | 268 |
293 updateSubscriptions(); | 269 updateSubscriptions(); |
294 SystemClock.sleep(UPDATE_SUBSCRIPTIONS_WAIT_DELAY_MS); | |
295 | 270 |
296 assertEquals(0, request.getUrls().size()); | 271 assertEquals(0, request.getUrls().size()); |
297 assertEquals(2, storage.getInterceptedUrls().size()); | 272 assertEquals(2, storage.getInterceptedUrls().size()); |
298 assertTrue(storage.getInterceptedUrls().contains(AndroidWebRequestResourceWr
apper.EASYLIST)); | 273 assertTrue(storage.getInterceptedUrls().contains(AndroidWebRequestResourceWr
apper.EASYLIST)); |
299 assertTrue(storage.getInterceptedUrls().contains(AndroidWebRequestResourceWr
apper.ACCEPTABLE_ADS)); | 274 assertTrue(storage.getInterceptedUrls().contains(AndroidWebRequestResourceWr
apper.ACCEPTABLE_ADS)); |
300 | 275 |
301 assertTrue(wrapperListener.getUrlsToResourceId().size() >= 0); | 276 assertTrue(wrapperListener.getUrlsToResourceId().size() >= 0); |
302 List<String> notifiedInterceptedUrls = getUrlsListWithoutParams( | 277 List<String> notifiedInterceptedUrls = getUrlsListWithoutParams( |
303 wrapperListener.getUrlsToResourceId().keySet()); | 278 wrapperListener.getUrlsToResourceId().keySet()); |
304 assertTrue(notifiedInterceptedUrls.contains(AndroidWebRequestResourceWrapper
.EASYLIST)); | 279 assertTrue(notifiedInterceptedUrls.contains(AndroidWebRequestResourceWrapper
.EASYLIST)); |
(...skipping 23 matching lines...) Expand all Loading... |
328 } | 303 } |
329 | 304 |
330 @Test | 305 @Test |
331 public void testNotIntercepted_AcceptableAds() | 306 public void testNotIntercepted_AcceptableAds() |
332 { | 307 { |
333 testNotIntercepted( | 308 testNotIntercepted( |
334 AndroidWebRequestResourceWrapper.EASYLIST, R.raw.easylist, | 309 AndroidWebRequestResourceWrapper.EASYLIST, R.raw.easylist, |
335 AndroidWebRequestResourceWrapper.ACCEPTABLE_ADS); | 310 AndroidWebRequestResourceWrapper.ACCEPTABLE_ADS); |
336 } | 311 } |
337 } | 312 } |
OLD | NEW |