WifiApConfigStoreTest.java revision c79666b79e273ceaa2f74090b02ca6cf83c61387
1/* 2 * Copyright (C) 2016 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 17package com.android.server.wifi; 18 19import static org.junit.Assert.assertEquals; 20import static org.junit.Assert.assertTrue; 21import static org.mockito.Mockito.when; 22 23import android.content.Context; 24import android.net.wifi.WifiConfiguration; 25import android.net.wifi.WifiConfiguration.KeyMgmt; 26import android.test.suitebuilder.annotation.SmallTest; 27 28import com.android.internal.R; 29 30import org.junit.After; 31import org.junit.Before; 32import org.junit.Test; 33import org.mockito.Mock; 34import org.mockito.MockitoAnnotations; 35 36import java.io.File; 37import java.lang.reflect.Method; 38 39/** 40 * Unit tests for {@link com.android.server.wifi.WifiApConfigStore}. 41 */ 42@SmallTest 43public class WifiApConfigStoreTest { 44 45 private static final String TAG = "WifiApConfigStoreTest"; 46 47 private static final String TEST_AP_CONFIG_FILE_PREFIX = "APConfig_"; 48 private static final String TEST_DEFAULT_2G_CHANNEL_LIST = "1,2,3,4,5,6"; 49 private static final String TEST_DEFAULT_AP_SSID = "TestAP"; 50 private static final String TEST_CONFIGURED_AP_SSID = "ConfiguredAP"; 51 52 @Mock Context mContext; 53 File mApConfigFile; 54 55 @Before 56 public void setUp() throws Exception { 57 MockitoAnnotations.initMocks(this); 58 59 /* Create a temporary file for AP config file storage. */ 60 mApConfigFile = File.createTempFile(TEST_AP_CONFIG_FILE_PREFIX, ""); 61 62 /* Setup expectations for Resources to return some default settings. */ 63 MockResources resources = new MockResources(); 64 resources.setString(R.string.config_wifi_framework_sap_2G_channel_list, 65 TEST_DEFAULT_2G_CHANNEL_LIST); 66 resources.setString(R.string.wifi_tether_configure_ssid_default, 67 TEST_DEFAULT_AP_SSID); 68 when(mContext.getResources()).thenReturn(resources); 69 } 70 71 @After 72 public void cleanUp() { 73 /* Remove the temporary AP config file. */ 74 mApConfigFile.delete(); 75 } 76 77 /** 78 * Generate a WifiConfiguration based on the specified parameters. 79 */ 80 private WifiConfiguration setupApConfig( 81 String ssid, String preSharedKey, int keyManagement, int band, int channel) { 82 WifiConfiguration config = new WifiConfiguration(); 83 config.SSID = ssid; 84 config.preSharedKey = preSharedKey; 85 config.allowedKeyManagement.set(keyManagement); 86 config.apBand = band; 87 config.apChannel = channel; 88 return config; 89 } 90 91 private boolean writeApConfigFile(WifiConfiguration config) throws Exception { 92 Method m = WifiApConfigStore.class.getDeclaredMethod( 93 "writeApConfiguration", String.class, WifiConfiguration.class); 94 m.setAccessible(true); 95 return (boolean) m.invoke(null, mApConfigFile.getPath(), config); 96 } 97 98 private void verifyApConfig(WifiConfiguration config1, WifiConfiguration config2) { 99 assertEquals(config1.SSID, config2.SSID); 100 assertEquals(config1.preSharedKey, config2.preSharedKey); 101 assertEquals(config1.getAuthType(), config2.getAuthType()); 102 assertEquals(config1.apBand, config2.apBand); 103 assertEquals(config1.apChannel, config2.apChannel); 104 } 105 106 private void verifyDefaultApConfig(WifiConfiguration config) { 107 assertEquals(TEST_DEFAULT_AP_SSID, config.SSID); 108 assertTrue(config.allowedKeyManagement.get(KeyMgmt.WPA2_PSK)); 109 } 110 111 /** 112 * AP Configuration is not specified in the config file, 113 * WifiApConfigStore should fallback to use the default configuration. 114 */ 115 @Test 116 public void initWithDefaultConfiguration() throws Exception { 117 WifiApConfigStore store = new WifiApConfigStore(mContext, mApConfigFile.getPath()); 118 verifyDefaultApConfig(store.getApConfiguration()); 119 } 120 121 /** 122 * Verify WifiApConfigStore can correctly load the existing configuration 123 * from the config file. 124 */ 125 @Test 126 public void initWithExistingConfiguration() throws Exception { 127 WifiConfiguration expectedConfig = setupApConfig( 128 "ConfiguredAP", /* SSID */ 129 "randomKey", /* preshared key */ 130 KeyMgmt.WPA_EAP, /* key management */ 131 1, /* AP band (5GHz) */ 132 40 /* AP channel */); 133 assertTrue(writeApConfigFile(expectedConfig)); 134 WifiApConfigStore store = new WifiApConfigStore(mContext, mApConfigFile.getPath()); 135 verifyApConfig(expectedConfig, store.getApConfiguration()); 136 } 137 138 /** 139 * Verify the handling of setting a null ap configuration. 140 * WifiApConfigStore should fallback to the default configuration when 141 * null ap configuration is provided. 142 */ 143 @Test 144 public void setNullApConfiguration() throws Exception { 145 /* Initialize WifiApConfigStore with existing configuration. */ 146 WifiConfiguration expectedConfig = setupApConfig( 147 "ConfiguredAP", /* SSID */ 148 "randomKey", /* preshared key */ 149 KeyMgmt.WPA_EAP, /* key management */ 150 1, /* AP band (5GHz) */ 151 40 /* AP channel */); 152 assertTrue(writeApConfigFile(expectedConfig)); 153 WifiApConfigStore store = new WifiApConfigStore(mContext, mApConfigFile.getPath()); 154 verifyApConfig(expectedConfig, store.getApConfiguration()); 155 156 store.setApConfiguration(null); 157 verifyDefaultApConfig(store.getApConfiguration()); 158 } 159 160 /** 161 * Verify AP configuration is correctly updated via setApConfiguration call. 162 */ 163 @Test 164 public void updateApConfiguration() throws Exception { 165 /* Initialize WifiApConfigStore with default configuration. */ 166 WifiApConfigStore store = new WifiApConfigStore(mContext, mApConfigFile.getPath()); 167 verifyDefaultApConfig(store.getApConfiguration()); 168 169 /* Update with a valid configuration. */ 170 WifiConfiguration expectedConfig = setupApConfig( 171 "ConfiguredAP", /* SSID */ 172 "randomKey", /* preshared key */ 173 KeyMgmt.WPA_EAP, /* key management */ 174 1, /* AP band (5GHz) */ 175 40 /* AP channel */); 176 store.setApConfiguration(expectedConfig); 177 verifyApConfig(expectedConfig, store.getApConfiguration()); 178 } 179} 180