| 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 |