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.wifi; 18 19 import android.content.Context; 20 import android.view.LayoutInflater; 21 import android.view.View; 22 import android.view.ViewGroup; 23 import android.widget.Spinner; 24 import android.widget.TextView; 25 26 import com.android.settings.R; 27 import com.android.settings.testutils.SettingsRobolectricTestRunner; 28 import com.android.settings.TestConfig; 29 import com.android.settings.testutils.shadow.ShadowConnectivityManager; 30 import com.android.settingslib.wifi.AccessPoint; 31 32 import org.junit.Before; 33 import org.junit.Test; 34 import org.junit.runner.RunWith; 35 import org.mockito.Mock; 36 import org.mockito.MockitoAnnotations; 37 import org.robolectric.RuntimeEnvironment; 38 import org.robolectric.annotation.Config; 39 40 import static com.google.common.truth.Truth.assertThat; 41 import static org.mockito.Mockito.*; 42 43 @RunWith(SettingsRobolectricTestRunner.class) 44 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, 45 shadows = ShadowConnectivityManager.class) 46 public class WifiConfigControllerTest { 47 48 @Mock 49 private WifiConfigUiBase mConfigUiBase; 50 @Mock 51 private Context mContext; 52 @Mock 53 private View mView; 54 @Mock 55 private AccessPoint mAccessPoint; 56 57 public WifiConfigController mController; 58 private static final String HEX_PSK = "01234567012345670123456701234567012345670123456701234567" 59 + "01abcdef"; 60 // An invalid ASCII PSK pass phrase. It is 64 characters long, must not be greater than 63 61 private static final String LONG_PSK = 62 "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl"; 63 // An invalid PSK pass phrase. It is 7 characters long, must be at least 8 64 private static final String SHORT_PSK = "abcdefg"; 65 // Valid PSK pass phrase 66 private static final String GOOD_PSK = "abcdefghijklmnopqrstuvwxyz"; 67 private static final int DHCP = 0; 68 69 @Before setUp()70 public void setUp() { 71 MockitoAnnotations.initMocks(this); 72 mContext = RuntimeEnvironment.application; 73 when(mConfigUiBase.getContext()).thenReturn(mContext); 74 when(mAccessPoint.getSecurity()).thenReturn(AccessPoint.SECURITY_PSK); 75 mView = LayoutInflater.from(mContext).inflate(R.layout.wifi_dialog, null); 76 final Spinner ipSettingsSpinner = mView.findViewById(R.id.ip_settings); 77 ipSettingsSpinner.setSelection(DHCP); 78 79 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 80 WifiConfigUiBase.MODE_CONNECT); 81 } 82 83 @Test ssidExceeds32Bytes_shouldShowSsidTooLongWarning()84 public void ssidExceeds32Bytes_shouldShowSsidTooLongWarning() { 85 mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, 86 WifiConfigUiBase.MODE_CONNECT); 87 final TextView ssid = mView.findViewById(R.id.ssid); 88 ssid.setText("☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎☎"); 89 mController.showWarningMessagesIfAppropriate(); 90 91 assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) 92 .isEqualTo(View.VISIBLE); 93 } 94 95 @Test ssidShorterThan32Bytes_shouldNotShowSsidTooLongWarning()96 public void ssidShorterThan32Bytes_shouldNotShowSsidTooLongWarning() { 97 mController = new TestWifiConfigController(mConfigUiBase, mView, null /* accessPoint */, 98 WifiConfigUiBase.MODE_CONNECT); 99 100 final TextView ssid = mView.findViewById(R.id.ssid); 101 ssid.setText("123456789012345678901234567890"); 102 mController.showWarningMessagesIfAppropriate(); 103 104 assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) 105 .isEqualTo(View.GONE); 106 107 ssid.setText("123"); 108 mController.showWarningMessagesIfAppropriate(); 109 110 assertThat(mView.findViewById(R.id.ssid_too_long_warning).getVisibility()) 111 .isEqualTo(View.GONE); 112 } 113 114 @Test isSubmittable_noSSID_shouldReturnFalse()115 public void isSubmittable_noSSID_shouldReturnFalse() { 116 final TextView ssid = mView.findViewById(R.id.ssid); 117 ssid.setText(""); 118 assertThat(mController.isSubmittable()).isFalse(); 119 } 120 121 @Test isSubmittable_longPsk_shouldReturnFalse()122 public void isSubmittable_longPsk_shouldReturnFalse() { 123 final TextView password = mView.findViewById(R.id.password); 124 password.setText(LONG_PSK); 125 assertThat(mController.isSubmittable()).isFalse(); 126 127 } 128 129 @Test isSubmittable_shortPsk_shouldReturnFalse()130 public void isSubmittable_shortPsk_shouldReturnFalse() { 131 final TextView password = mView.findViewById(R.id.password); 132 password.setText(SHORT_PSK); 133 assertThat(mController.isSubmittable()).isFalse(); 134 } 135 136 @Test isSubmittable_goodPsk_shouldReturnTrue()137 public void isSubmittable_goodPsk_shouldReturnTrue() { 138 final TextView password = mView.findViewById(R.id.password); 139 password.setText(GOOD_PSK); 140 assertThat(mController.isSubmittable()).isTrue(); 141 142 } 143 144 @Test isSubmittable_hexPsk_shouldReturnTrue()145 public void isSubmittable_hexPsk_shouldReturnTrue() { 146 final TextView password = mView.findViewById(R.id.password); 147 password.setText(HEX_PSK); 148 assertThat(mController.isSubmittable()).isTrue(); 149 150 } 151 152 @Test isSubmittable_savedConfigZeroLengthPassword_shouldReturnTrue()153 public void isSubmittable_savedConfigZeroLengthPassword_shouldReturnTrue() { 154 final TextView password = mView.findViewById(R.id.password); 155 password.setText(""); 156 when(mAccessPoint.isSaved()).thenReturn(true); 157 assertThat(mController.isSubmittable()).isTrue(); 158 } 159 160 @Test isSubmittable_nullAccessPoint_noException()161 public void isSubmittable_nullAccessPoint_noException() { 162 mController = new TestWifiConfigController(mConfigUiBase, mView, null, 163 WifiConfigUiBase.MODE_CONNECT); 164 mController.isSubmittable(); 165 } 166 167 @Test getSignalString_notReachable_shouldHaveNoSignalString()168 public void getSignalString_notReachable_shouldHaveNoSignalString() { 169 when(mAccessPoint.isReachable()).thenReturn(false); 170 171 assertThat(mController.getSignalString()).isNull(); 172 } 173 174 @Test showForCarrierAp()175 public void showForCarrierAp() { 176 // Setup the mock view for wifi dialog. 177 View view = mock(View.class); 178 TextView nameText = mock(TextView.class); 179 TextView valueText = mock(TextView.class); 180 when(view.findViewById(R.id.name)).thenReturn(nameText); 181 when(view.findViewById(R.id.value)).thenReturn(valueText); 182 LayoutInflater inflater = mock(LayoutInflater.class); 183 when(inflater.inflate(anyInt(), any(ViewGroup.class), anyBoolean())).thenReturn(view); 184 when(mConfigUiBase.getLayoutInflater()).thenReturn(inflater); 185 186 String carrierName = "Test Carrier"; 187 when(mAccessPoint.isCarrierAp()).thenReturn(true); 188 when(mAccessPoint.getCarrierName()).thenReturn(carrierName); 189 mController = new TestWifiConfigController(mConfigUiBase, mView, mAccessPoint, 190 WifiConfigUiBase.MODE_CONNECT); 191 // Verify the content of the text fields. 192 verify(nameText).setText(R.string.wifi_carrier_connect); 193 verify(valueText).setText( 194 String.format(mContext.getString(R.string.wifi_carrier_content), carrierName)); 195 // Verify that the advance toggle is not visible. 196 assertThat(mView.findViewById(R.id.wifi_advanced_toggle).getVisibility()) 197 .isEqualTo(View.GONE); 198 // Verify that the EAP method menu is not visible. 199 assertThat(mView.findViewById(R.id.eap).getVisibility()).isEqualTo(View.GONE); 200 } 201 202 public class TestWifiConfigController extends WifiConfigController { 203 TestWifiConfigController(WifiConfigUiBase parent, View view, AccessPoint accessPoint, int mode)204 public TestWifiConfigController(WifiConfigUiBase parent, View view, 205 AccessPoint accessPoint, int mode) { 206 super(parent, view, accessPoint, mode); 207 } 208 209 @Override isSplitSystemUser()210 boolean isSplitSystemUser() { 211 return false; 212 } 213 } 214 } 215