1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.network; 18 19 import static com.google.common.truth.Truth.assertThat; 20 import static android.arch.lifecycle.Lifecycle.Event.ON_PAUSE; 21 import static android.arch.lifecycle.Lifecycle.Event.ON_RESUME; 22 import static org.mockito.Matchers.any; 23 import static org.mockito.Matchers.anyString; 24 import static org.mockito.Mockito.doReturn; 25 import static org.mockito.Mockito.spy; 26 import static org.mockito.Mockito.verify; 27 import static org.mockito.Mockito.when; 28 29 import android.arch.lifecycle.LifecycleOwner; 30 import android.content.Context; 31 import android.net.ConnectivityManager; 32 import android.net.IConnectivityManager; 33 import android.net.NetworkRequest; 34 import android.os.IBinder; 35 import android.os.UserHandle; 36 import android.provider.SettingsSlicesContract; 37 import android.support.v7.preference.Preference; 38 import android.support.v7.preference.PreferenceScreen; 39 40 import com.android.internal.net.VpnConfig; 41 import com.android.settings.testutils.SettingsRobolectricTestRunner; 42 import com.android.settingslib.core.lifecycle.Lifecycle; 43 44 import org.junit.Before; 45 import org.junit.Test; 46 import org.junit.runner.RunWith; 47 import org.mockito.Mock; 48 import org.mockito.MockitoAnnotations; 49 import org.robolectric.RuntimeEnvironment; 50 import org.robolectric.shadows.ShadowServiceManager; 51 52 @RunWith(SettingsRobolectricTestRunner.class) 53 public class VpnPreferenceControllerTest { 54 55 @Mock 56 private Context mContext; 57 @Mock 58 private ConnectivityManager mConnectivityManager; 59 @Mock 60 private IBinder mBinder; 61 @Mock 62 private IConnectivityManager mConnectivityManagerService; 63 @Mock 64 private PreferenceScreen mScreen; 65 @Mock 66 private Preference mPreference; 67 private VpnPreferenceController mController; 68 private Lifecycle mLifecycle; 69 private LifecycleOwner mLifecycleOwner; 70 71 @Before 72 public void setUp() { 73 MockitoAnnotations.initMocks(this); 74 when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)) 75 .thenReturn(mConnectivityManager); 76 when(mBinder.queryLocalInterface("android.net.IConnectivityManager")) 77 .thenReturn(mConnectivityManagerService); 78 ShadowServiceManager.addService(Context.CONNECTIVITY_SERVICE, mBinder); 79 when(mScreen.findPreference(anyString())).thenReturn(mPreference); 80 81 mController = spy(new VpnPreferenceController(mContext)); 82 mLifecycleOwner = () -> mLifecycle; 83 mLifecycle = new Lifecycle(mLifecycleOwner); 84 mLifecycle.addObserver(mController); 85 } 86 87 @Test 88 public void displayPreference_available_shouldSetDependency() { 89 doReturn(true).when(mController).isAvailable(); 90 mController.displayPreference(mScreen); 91 92 verify(mPreference).setDependency(SettingsSlicesContract.KEY_AIRPLANE_MODE); 93 } 94 95 @Test 96 public void goThroughLifecycle_shouldRegisterUnregisterListener() { 97 doReturn(true).when(mController).isAvailable(); 98 99 mLifecycle.handleLifecycleEvent(ON_RESUME); 100 verify(mConnectivityManager).registerNetworkCallback( 101 any(NetworkRequest.class), any(ConnectivityManager.NetworkCallback.class)); 102 103 mLifecycle.handleLifecycleEvent(ON_PAUSE); 104 verify(mConnectivityManager).unregisterNetworkCallback( 105 any(ConnectivityManager.NetworkCallback.class)); 106 } 107 108 @Test 109 public void getNameForVpnConfig_legacyVPNConfig_shouldSetSummaryToConnected() { 110 final VpnConfig config = new VpnConfig(); 111 config.legacy = true; 112 final VpnPreferenceController controller = 113 new VpnPreferenceController(RuntimeEnvironment.application); 114 115 final String summary = controller.getNameForVpnConfig(config, UserHandle.CURRENT); 116 117 assertThat(summary).isEqualTo("Connected"); 118 } 119 } 120