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 <edvard.holst@gmail.com>
This commit is contained in:
ardevd 2019-04-09 14:59:18 +02:00
parent b252c6440d
commit e17e5f6bd7
No known key found for this signature in database
GPG key ID: C30729EE3C9A3CCE
2 changed files with 66 additions and 1 deletions

View file

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

View file

@ -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));
}
}