1bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski/*
2bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * Copyright (C) 2016 The Android Open Source Project
3bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski *
4bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * Licensed under the Apache License, Version 2.0 (the "License");
5bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * you may not use this file except in compliance with the License.
6bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * You may obtain a copy of the License at
7bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski *
8bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski *      http://www.apache.org/licenses/LICENSE-2.0
9bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski *
10bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * Unless required by applicable law or agreed to in writing, software
11bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * distributed under the License is distributed on an "AS IS" BASIS,
12bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * See the License for the specific language governing permissions and
14bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * limitations under the License
15bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski */
16bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
17bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskipackage com.android.server.wifi;
18bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
19bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport static org.junit.Assert.assertEquals;
20bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport static org.junit.Assert.assertNull;
210fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport static org.mockito.Mockito.anyInt;
220fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport static org.mockito.Mockito.when;
23bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
240fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport android.content.pm.UserInfo;
25bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport android.net.wifi.WifiConfiguration;
26bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport android.os.UserHandle;
270fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport android.os.UserManager;
28bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport android.test.suitebuilder.annotation.SmallTest;
290fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport android.util.SparseArray;
30bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
310fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport com.android.server.wifi.MockAnswerUtil.AnswerWithArguments;
320fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski
330fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport org.junit.Before;
34bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport org.junit.Test;
350fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport org.mockito.Mock;
360fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport org.mockito.MockitoAnnotations;
37bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
38bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport java.util.ArrayList;
39bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport java.util.Arrays;
40bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport java.util.HashSet;
41bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport java.util.List;
42bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport java.util.Set;
43bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
44bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski/**
45bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * Unit tests for {@link com.android.server.wifi.ConfigurationMapTest}.
46bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski */
47bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski@SmallTest
48bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskipublic class ConfigurationMapTest {
49bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    private static final List<WifiConfiguration> CONFIGS = Arrays.asList(
500fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski            WifiConfigurationTestUtil.generateWifiConfig(
510fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    0, 1000000, "\"red\"", true, true, null, null),
520fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski            WifiConfigurationTestUtil.generateWifiConfig(
530fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    1, 1000001, "\"green\"", true, false, "example.com", "Green"),
540fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski            WifiConfigurationTestUtil.generateWifiConfig(
550fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    2, 1200000, "\"blue\"", false, true, null, null),
560fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski            WifiConfigurationTestUtil.generateWifiConfig(
57bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                    3, 1100000, "\"cyan\"", true, true, null, null),
580fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski            WifiConfigurationTestUtil.generateWifiConfig(
590fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    4, 1100001, "\"yellow\"", true, true, "example.org", "Yellow"),
600fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski            WifiConfigurationTestUtil.generateWifiConfig(
610fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    5, 1100002, "\"magenta\"", false, false, null, null));
620fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski
630fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    private static final SparseArray<List<UserInfo>> USER_PROFILES = new SparseArray<>();
640fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    static {
650fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski        USER_PROFILES.put(UserHandle.USER_SYSTEM, Arrays.asList(
660fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                new UserInfo(UserHandle.USER_SYSTEM, "Owner", 0),
670fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                new UserInfo(12, "Managed Profile", 0)));
680fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski        USER_PROFILES.put(10, Arrays.asList(new UserInfo(10, "Alice", 0)));
690fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski        USER_PROFILES.put(11, Arrays.asList(new UserInfo(11, "Bob", 0)));
700fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    }
710fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski
720fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    @Mock UserManager mUserManager;
73bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
74bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    private int mCurrentUserId = UserHandle.USER_SYSTEM;
750fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    private ConfigurationMap mConfigs;
760fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski
770fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    /**
780fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * Sets up the test harness before running a test.
790fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     */
800fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    @Before
810fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    public void setUp() {
820fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski        MockitoAnnotations.initMocks(this);
830fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski
840fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski        when(mUserManager.getProfiles(anyInt()))
850fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                .then(new AnswerWithArguments() {
860fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    public List<UserInfo> answer(int userId) {
870fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                        return USER_PROFILES.get(userId);
880fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    }
890fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                });
900fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski        mConfigs = new ConfigurationMap(mUserManager);
910fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    }
92bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
93bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    public void switchUser(int newUserId) {
94bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        Set<WifiConfiguration> hiddenConfigurations = new HashSet<>();
95bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        for (WifiConfiguration config : mConfigs.valuesForAllUsers()) {
960fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski            if (WifiConfigurationUtil.isVisibleToAnyProfile(config,
970fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    USER_PROFILES.get(mCurrentUserId))
980fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    && !WifiConfigurationUtil.isVisibleToAnyProfile(config,
990fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                            USER_PROFILES.get(newUserId))) {
100bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                hiddenConfigurations.add(config);
101bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            }
102bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        }
103bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
104bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        mCurrentUserId = newUserId;
105bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        assertEquals(hiddenConfigurations, new HashSet<>(mConfigs.handleUserSwitch(newUserId)));
106bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    }
107bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
108bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    public void verifyGetters(List<WifiConfiguration> configs) {
109bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        final Set<WifiConfiguration> configsForCurrentUser = new HashSet<>();
110bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        final Set<WifiConfiguration> enabledConfigsForCurrentUser = new HashSet<>();
111bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        final List<WifiConfiguration> configsNotForCurrentUser = new ArrayList<>();
112bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
113bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Find out which network configurations should be / should not be visible to the current
114bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // user. Also, check that *ForAllUsers() methods can be used to access all network
115bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // configurations, irrespective of their visibility to the current user.
116bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        for (WifiConfiguration config : configs) {
1170fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski            if (WifiConfigurationUtil.isVisibleToAnyProfile(config,
1180fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski                    USER_PROFILES.get(mCurrentUserId))) {
119bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                configsForCurrentUser.add(config);
120bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                if (config.status != WifiConfiguration.Status.DISABLED) {
121bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                    enabledConfigsForCurrentUser.add(config);
122bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                }
123bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            } else {
124bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                configsNotForCurrentUser.add(config);
125bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            }
126bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
127bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertEquals(config, mConfigs.getForAllUsers(config.networkId));
128bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertEquals(config,
129bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                    mConfigs.getByConfigKeyIDForAllUsers(config.configKey().hashCode()));
130bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        }
131bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
132bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Verify that *ForCurrentUser() methods can be used to access network configurations
133bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // visible to the current user.
134bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        for (WifiConfiguration config : configsForCurrentUser) {
135bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertEquals(config, mConfigs.getForCurrentUser(config.networkId));
136bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            if (config.FQDN != null) {
137bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                assertEquals(config, mConfigs.getByFQDNForCurrentUser(config.FQDN));
138bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            }
139bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertEquals(config, mConfigs.getByConfigKeyForCurrentUser(config.configKey()));
140bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            final boolean wasEphemeral = config.ephemeral;
141bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            config.ephemeral = false;
142bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertNull(mConfigs.getEphemeralForCurrentUser(config.SSID));
143bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            config.ephemeral = true;
144bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertEquals(config, mConfigs.getEphemeralForCurrentUser(config.SSID));
145bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            config.ephemeral = wasEphemeral;
146bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        }
147bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
148bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Verify that *ForCurrentUser() methods cannot be used to access network configurations not
149bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // visible to the current user.
150bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        for (WifiConfiguration config : configsNotForCurrentUser) {
151bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertNull(mConfigs.getForCurrentUser(config.networkId));
152bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            if (config.FQDN != null) {
153bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                assertNull(mConfigs.getByFQDNForCurrentUser(config.FQDN));
154bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            }
155bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertNull(mConfigs.getByConfigKeyForCurrentUser(config.configKey()));
156bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            final boolean wasEphemeral = config.ephemeral;
157bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            config.ephemeral = false;
158bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertNull(mConfigs.getEphemeralForCurrentUser(config.SSID));
159bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            config.ephemeral = true;
160bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertNull(mConfigs.getEphemeralForCurrentUser(config.SSID));
161bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            config.ephemeral = wasEphemeral;
162bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        }
163bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
164bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Verify that the methods which refer to more than one network configuration return the
165bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // correct sets of networks.
166bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        assertEquals(configs.size(), mConfigs.sizeForAllUsers());
167bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        assertEquals(configsForCurrentUser.size(), mConfigs.sizeForCurrentUser());
168bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        assertEquals(enabledConfigsForCurrentUser,
169bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                new HashSet<WifiConfiguration>(mConfigs.getEnabledNetworksForCurrentUser()));
170bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        assertEquals(new HashSet<>(configs),
171bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                new HashSet<WifiConfiguration>(mConfigs.valuesForAllUsers()));
172bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    }
173bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
174bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    /**
175bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski     * Verifies that all getters return the correct network configurations, taking into account the
176bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski     * current user. Also verifies that handleUserSwitch() returns the list of network
177bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski     * configurations that are no longer visible.
178bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski     */
179bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    @Test
180bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    public void testGettersAndHandleUserSwitch() {
181bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        for (WifiConfiguration config : CONFIGS) {
182bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            assertNull(mConfigs.put(config));
183bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        }
184bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
185bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        verifyGetters(CONFIGS);
186bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
187bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        switchUser(10);
188bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        verifyGetters(CONFIGS);
189bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
190bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        switchUser(11);
191bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        verifyGetters(CONFIGS);
192bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    }
193bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
194bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    /**
195bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski     * Verifies put(), remove() and clear().
196bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski     */
197bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    @Test
198bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    public void testPutRemoveClear() {
199bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        final List<WifiConfiguration> configs = new ArrayList<>();
200bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        final WifiConfiguration config1 = CONFIGS.get(0);
201bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
202bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Verify that there are no network configurations to start with.
203bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        switchUser(UserHandle.getUserId(config1.creatorUid));
204bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        verifyGetters(configs);
205bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
206bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Add |config1|.
207bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        assertNull(mConfigs.put(config1));
208bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Verify that the getters return |config1|.
209bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        configs.add(config1);
210bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        verifyGetters(configs);
211bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
212bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Overwrite |config1| with |config2|.
213bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        final WifiConfiguration config2 = CONFIGS.get(1);
214bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        config2.networkId = config1.networkId;
215bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        assertEquals(config1, mConfigs.put(config2));
216bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Verify that the getters return |config2| only.
217bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        configs.clear();
218bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        configs.add(config2);
219bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        verifyGetters(configs);
220bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
2210fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski        // Add |config3|, which belongs to a managed profile of the current user.
222bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        final WifiConfiguration config3 = CONFIGS.get(2);
223bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        assertNull(mConfigs.put(config3));
224bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Verify that the getters return |config2| and |config3|.
225bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        configs.add(config3);
226bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        verifyGetters(configs);
227bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
228bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Remove |config2|.
229bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        assertEquals(config2, mConfigs.remove(config2.networkId));
230bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Verify that the getters return |config3| only.
231bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        configs.remove(config2);
232bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        verifyGetters(configs);
233bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
234bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Clear all network configurations.
235bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        mConfigs.clear();
236bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        // Verify that the getters do not return any network configurations.
237bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        configs.clear();
238bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        verifyGetters(configs);
239bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    }
240bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski}
241