From e17e5f6bd751adc88148aad39e003dd00cf57a61 Mon Sep 17 00:00:00 2001 From: ardevd Date: Tue, 9 Apr 2019 14:59:18 +0200 Subject: [PATCH] test: added PowerMocked unit tests for the ConnectivityUtils class. Added necessary PowerMock dependencies in addition to a JSON dependency which is required in order to unit test with JSON objects. The default JSON library is part of AOSP and would need to be mocked which is not what we want. Signed-off-by: ardevd --- build.gradle | 4 ++ .../android/utils/ConnectivityUtilsTest.java | 63 ++++++++++++++++++- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e450802eb0..c67b2836b0 100644 --- a/build.gradle +++ b/build.gradle @@ -287,6 +287,10 @@ dependencies { testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.26.0' testImplementation 'androidx.test:core:1.1.0' + testImplementation 'org.powermock:powermock-core:2.0.0' + testImplementation 'org.powermock:powermock-module-junit4:2.0.0' + testImplementation 'org.powermock:powermock-api-mockito2:2.0.0' + testImplementation 'org.json:json:20180813' // dependencies for instrumented tests // JUnit4 Rules diff --git a/src/test/java/com/owncloud/android/utils/ConnectivityUtilsTest.java b/src/test/java/com/owncloud/android/utils/ConnectivityUtilsTest.java index f3875bb7ca..c348e0992a 100644 --- a/src/test/java/com/owncloud/android/utils/ConnectivityUtilsTest.java +++ b/src/test/java/com/owncloud/android/utils/ConnectivityUtilsTest.java @@ -20,20 +20,39 @@ */ package com.owncloud.android.utils; +import android.accounts.Account; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import com.owncloud.android.authentication.AccountUtils; +import com.owncloud.android.lib.common.OwnCloudAccount; +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.OwnCloudClientFactory; +import com.owncloud.android.lib.resources.status.OwnCloudVersion; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.json.JSONObject; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.contains; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.powermock.api.mockito.PowerMockito.mockStatic; +@RunWith(PowerMockRunner.class) +@PowerMockIgnore({"org.slf4j.*" }) +@PrepareForTest({AccountUtils.class, OwnCloudClientFactory.class, ConnectivityUtils.class}) public class ConnectivityUtilsTest { @Mock @@ -45,9 +64,22 @@ public class ConnectivityUtilsTest { @Mock private NetworkInfo mNetworkInfo; + @Mock + private Account mAccount; + + @Mock + private OwnCloudAccount mOcAccount; + + @Mock + private OwnCloudClient mClient; + + @Mock + private GetMethod mGetMethod; + @Before public void setUp() { MockitoAnnotations.initMocks(this); + when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(mConnectivityManager); when(mConnectivityManager.getActiveNetworkInfo()).thenReturn(mNetworkInfo); } @@ -81,4 +113,33 @@ public class ConnectivityUtilsTest { assertFalse("Falsely indicated connection on WiFi", ConnectivityUtils.isOnlineWithWifi(mContext)); } + + @Test + public void isInternetWalled_assertFalseWhenAllIsGood() throws Exception { + mockStatic(AccountUtils.class); + mockStatic(OwnCloudClientFactory.class); + // Ensure we are on WiFi + when(mNetworkInfo.isConnectedOrConnecting()).thenReturn(true); + when(mNetworkInfo.getType()).thenReturn(ConnectivityManager.TYPE_WIFI); + + PowerMockito.when(AccountUtils.getCurrentOwnCloudAccount(eq(mContext))).thenReturn(mAccount); + PowerMockito.whenNew(OwnCloudAccount.class).withAnyArguments().thenReturn(mOcAccount); + PowerMockito.when(AccountUtils.getServerVersion(eq(mAccount))).thenReturn(OwnCloudVersion.nextcloud_14); + PowerMockito.when(OwnCloudClientFactory.createOwnCloudClient(eq(mAccount), eq(mContext))).thenReturn(mClient); + PowerMockito.whenNew(GetMethod.class).withAnyArguments().thenReturn(mGetMethod); + + // Return SC_OK + when(mClient.executeMethod(mGetMethod)).thenReturn(HttpStatus.SC_OK); + + // Content length should be > 0. + when(mGetMethod.getResponseContentLength()).thenReturn(1024L); + + JSONObject jsonObj = new JSONObject(); + jsonObj.put("maintenance", false); + + when(mGetMethod.getResponseBodyAsString()).thenReturn(jsonObj.toString()); + + assertFalse("internet was falsely claimed to be walled", + ConnectivityUtils.isInternetWalled(mContext)); + } }