Index: libadblockplus-android-tests/src/org/adblockplus/libadblockplus/tests/UpdateCheckTest.java |
diff --git a/libadblockplus-android-tests/src/org/adblockplus/libadblockplus/tests/UpdateCheckTest.java b/libadblockplus-android-tests/src/org/adblockplus/libadblockplus/tests/UpdateCheckTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fb2351bd1d148314ab16d7a8c25e916d2d307711 |
--- /dev/null |
+++ b/libadblockplus-android-tests/src/org/adblockplus/libadblockplus/tests/UpdateCheckTest.java |
@@ -0,0 +1,250 @@ |
+/* |
+ * This file is part of Adblock Plus <https://adblockplus.org/>, |
+ * Copyright (C) 2006-2016 Eyeo GmbH |
+ * |
+ * Adblock Plus is free software: you can redistribute it and/or modify |
+ * it under the terms of the GNU General Public License version 3 as |
+ * published by the Free Software Foundation. |
+ * |
+ * Adblock Plus is distributed in the hope that it will be useful, |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ * GNU General Public License for more details. |
+ * |
+ * You should have received a copy of the GNU General Public License |
+ * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
+ */ |
+ |
+package org.adblockplus.libadblockplus.tests; |
+ |
+import org.adblockplus.libadblockplus.AppInfo; |
+import org.adblockplus.libadblockplus.EventCallback; |
+import org.adblockplus.libadblockplus.FilterEngine; |
+import org.adblockplus.libadblockplus.HeaderEntry; |
+import org.adblockplus.libadblockplus.JsEngine; |
+import org.adblockplus.libadblockplus.JsValue; |
+import org.adblockplus.libadblockplus.LazyLogSystem; |
+import org.adblockplus.libadblockplus.LazyWebRequest; |
+import org.adblockplus.libadblockplus.ServerResponse; |
+import org.adblockplus.libadblockplus.UpdateCheckDoneCallback; |
+ |
+import org.junit.Test; |
+ |
+import java.util.List; |
+ |
+public class UpdateCheckTest extends BaseJsTest { |
+ |
+ protected String previousRequestUrl; |
+ |
+ public class TestWebRequest extends LazyWebRequest { |
+ public ServerResponse response = new ServerResponse(); |
+ |
+ @Override |
+ public ServerResponse httpGET(String url, List<HeaderEntry> headers) { |
+ if (url.indexOf("easylist") >= 0) |
+ return super.httpGET(url, headers); |
+ |
+ previousRequestUrl = url; |
+ return response; |
+ } |
+ } |
+ |
+ protected AppInfo appInfo; |
+ protected TestWebRequest webRequest; |
+ protected JsEngine jsEngine; |
+ protected FilterEngine filterEngine; |
+ |
+ protected boolean eventCallbackCalled; |
+ protected List<JsValue> eventCallbackParams; |
+ protected boolean updateCallbackCalled; |
+ protected String updateError; |
+ |
+ private EventCallback eventCallback = new EventCallback() { |
+ @Override |
+ public void eventCallback(List<JsValue> params) { |
+ eventCallbackCalled = true; |
+ eventCallbackParams = params; |
+ } |
+ }; |
+ |
+ private UpdateCheckDoneCallback updateCallback = new UpdateCheckDoneCallback() { |
+ @Override |
+ public void updateCheckDoneCallback(String error) { |
+ updateCallbackCalled = true; |
+ updateError = error; |
+ } |
+ }; |
+ |
+ public void reset() { |
+ jsEngine = new JsEngine(appInfo); |
+ jsEngine.setLogSystem(new LazyLogSystem()); |
+ jsEngine.setDefaultFileSystem("/"); |
+ jsEngine.setWebRequest(webRequest); |
+ jsEngine.setEventCallback("updateAvailable", eventCallback); |
+ filterEngine = new FilterEngine(jsEngine); |
+ } |
+ |
+ @Override |
+ protected void setUp() throws Exception { |
+ super.setUp(); |
+ |
+ appInfo = AppInfo.builder().build(); |
+ webRequest = new TestWebRequest(); |
+ eventCallbackCalled = false; |
+ updateCallbackCalled = false; |
+ reset(); |
+ } |
+ |
+ public void forceUpdateCheck() { |
+ filterEngine.forceUpdateCheck(updateCallback); |
+ } |
+ |
+ @Test |
+ public void testRequestFailure() throws InterruptedException { |
+ webRequest.response.setStatus(ServerResponse.NsStatus.ERROR_FAILURE); |
+ |
+ appInfo = AppInfo |
+ .builder() |
+ .setName("1") |
+ .setVersion("3") |
+ .setApplication("4") |
+ .setApplicationVersion("2") |
+ .setDevelopmentBuild(false) |
+ .build(); |
+ |
+ reset(); |
+ forceUpdateCheck(); |
+ |
+ Thread.sleep(100); |
+ |
+ assertFalse(eventCallbackCalled); |
+ assertTrue(updateCallbackCalled); |
+ assertNotNull(updateError); |
+ |
+ String expectedUrl = filterEngine.getPref("update_url_release").asString(); |
+ String platform = "libadblockplus"; |
+ String platformVersion = "1.0"; |
+ |
+ expectedUrl = expectedUrl |
+ .replaceAll("%NAME%", appInfo.name) |
+ .replaceAll("%TYPE%", "1"); // manual update |
+ |
+ expectedUrl += |
+ "&addonName=" + appInfo.name + |
+ "&addonVersion=" + appInfo.version + |
+ "&application=" + appInfo.application + |
+ "&applicationVersion=" + appInfo.applicationVersion + |
+ "&platform=" + platform + |
+ "&platformVersion=" + platformVersion + |
+ "&lastVersion=0&downloadCount=0"; |
+ |
+ assertEquals(expectedUrl, previousRequestUrl); |
+ } |
+ |
+ @Test |
+ public void testApplicationUpdateAvailable() throws InterruptedException { |
+ webRequest.response.setStatus(ServerResponse.NsStatus.OK); |
+ webRequest.response.setResponseStatus(200); |
+ webRequest.response.setResponse( |
+ "{\"1/4\": {\"version\":\"3.1\",\"url\":\"https://foo.bar/\"}}"); |
+ |
+ appInfo = AppInfo |
+ .builder() |
+ .setName("1") |
+ .setVersion("3") |
+ .setApplication("4") |
+ .setApplicationVersion("2") |
+ .setDevelopmentBuild(true) |
+ .build(); |
+ |
+ reset(); |
+ forceUpdateCheck(); |
+ |
+ Thread.sleep(1000); |
+ |
+ assertTrue(eventCallbackCalled); |
+ assertNotNull(eventCallbackParams); |
+ assertEquals(1l, eventCallbackParams.size()); |
+ assertEquals("https://foo.bar/", eventCallbackParams.get(0).asString()); |
+ assertTrue(updateCallbackCalled); |
+ assertEquals("", updateError); |
+ } |
+ |
+ @Test |
+ public void testWrongApplication() throws InterruptedException { |
+ webRequest.response.setStatus(ServerResponse.NsStatus.OK); |
+ webRequest.response.setResponseStatus(200); |
+ webRequest.response.setResponse( |
+ "{\"1/3\": {\"version\":\"3.1\",\"url\":\"https://foo.bar/\"}}"); |
+ |
+ appInfo = AppInfo |
+ .builder() |
+ .setName("1") |
+ .setVersion("3") |
+ .setApplication("4") |
+ .setApplicationVersion("2") |
+ .setDevelopmentBuild(true) |
+ .build(); |
+ |
+ reset(); |
+ forceUpdateCheck(); |
+ |
+ Thread.sleep(1000); |
+ |
+ assertFalse(eventCallbackCalled); |
+ assertTrue(updateCallbackCalled); |
+ assertEquals("", updateError); |
+ } |
+ |
+ @Test |
+ public void testWrongVersion() throws InterruptedException { |
+ webRequest.response.setStatus(ServerResponse.NsStatus.OK); |
+ webRequest.response.setResponseStatus(200); |
+ webRequest.response.setResponse( |
+ "{\"1\": {\"version\":\"3\",\"url\":\"https://foo.bar/\"}}"); |
+ |
+ appInfo = AppInfo |
+ .builder() |
+ .setName("1") |
+ .setVersion("3") |
+ .setApplication("4") |
+ .setApplicationVersion("2") |
+ .setDevelopmentBuild(true) |
+ .build(); |
+ |
+ reset(); |
+ forceUpdateCheck(); |
+ |
+ Thread.sleep(1000); |
+ |
+ assertFalse(eventCallbackCalled); |
+ assertTrue(updateCallbackCalled); |
+ assertEquals("", updateError); |
+ } |
+ |
+ @Test |
+ public void testWrongURL() throws InterruptedException { |
+ webRequest.response.setStatus(ServerResponse.NsStatus.OK); |
+ webRequest.response.setResponseStatus(200); |
+ webRequest.response.setResponse( |
+ "{\"1\": {\"version\":\"3.1\",\"url\":\"http://insecure/\"}}"); |
+ |
+ appInfo = AppInfo |
+ .builder() |
+ .setName("1") |
+ .setVersion("3") |
+ .setApplication("4") |
+ .setApplicationVersion("2") |
+ .setDevelopmentBuild(true) |
+ .build(); |
+ |
+ reset(); |
+ forceUpdateCheck(); |
+ |
+ Thread.sleep(1000); |
+ |
+ assertFalse(eventCallbackCalled); |
+ assertTrue(updateCallbackCalled); |
+ assertTrue(updateError.length() > 0); |
+ } |
+} |