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
140fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * limitations under the License.
15bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski */
16bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
17bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskipackage com.android.server.wifi;
18bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
19bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport android.net.wifi.WifiConfiguration;
20bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowskiimport android.net.wifi.WifiEnterpriseConfig;
21bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski
22bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski/**
23bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski * Helper for creating and populating WifiConfigurations in unit tests.
24bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski */
250fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskipublic class WifiConfigurationTestUtil {
26b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe    /**
27b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe     * These values are used to describe AP's security setting. One AP can support multiple of them,
28b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe     * only if there is no conflict.
29b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe     */
30b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe    public static final int SECURITY_NONE = 0;
31b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe    public static final int SECURITY_WEP =  1 << 0;
32b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe    public static final int SECURITY_PSK =  1 << 1;
33b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe    public static final int SECURITY_EAP =  1 << 2;
34b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe
350fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    /**
360fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * Construct a {@link android.net.wifi.WifiConfiguration}.
370fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param networkId the configuration's networkId
380fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param uid the configuration's creator uid
390fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param ssid the configuration's ssid
400fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param shared whether the configuration is shared with other users on the device
410fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param enabled whether the configuration is enabled
420fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param fqdn the configuration's FQDN (Hotspot 2.0 only)
430fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param providerFriendlyName the configuration's provider's friendly name (Hotspot 2.0 only)
440fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @return the constructed {@link android.net.wifi.WifiConfiguration}
450fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     */
46bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    public static WifiConfiguration generateWifiConfig(int networkId, int uid, String ssid,
47bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            boolean shared, boolean enabled, String fqdn, String providerFriendlyName) {
48bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        final WifiConfiguration config = new WifiConfiguration();
49bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        config.SSID = ssid;
50bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        config.networkId = networkId;
51bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        config.creatorUid = uid;
52bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        config.shared = shared;
53bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        config.status = enabled ? WifiConfiguration.Status.ENABLED
54bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski                : WifiConfiguration.Status.DISABLED;
55bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        if (fqdn != null) {
56bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            config.FQDN = fqdn;
57bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            config.providerFriendlyName = providerFriendlyName;
58bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski            config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.SIM);
59bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        }
60bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski        return config;
61bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski    }
62b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe
630fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski    /**
640fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * Construct a {@link android.net.wifi.WifiConfiguration}.
650fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param networkId the configuration's networkId
660fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param uid the configuration's creator uid
670fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param ssid the configuration's ssid
680fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param shared whether the configuration is shared with other users on the device
690fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param enabled whether the configuration is enabled
700fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param fqdn the configuration's FQDN (Hotspot 2.0 only)
710fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param providerFriendlyName the configuration's provider's friendly name (Hotspot 2.0 only)
720fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @param security the configuration's security type
730fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     * @return the constructed {@link android.net.wifi.WifiConfiguration}
740fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski     */
75b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe    public static WifiConfiguration generateWifiConfig(int networkId, int uid, String ssid,
76b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe            boolean shared, boolean enabled, String fqdn, String providerFriendlyName,
77b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe            int security) {
78b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe        WifiConfiguration config = generateWifiConfig(networkId, uid, ssid, shared, enabled, fqdn,
79b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe                providerFriendlyName);
80b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe
81b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe        if (security == SECURITY_NONE) {
82b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
83b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe        } else {
84b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe            if (((security & SECURITY_WEP) != 0) || ((security & SECURITY_PSK) != 0)) {
85b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
86b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe            }
87b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe
88b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe            if ((security & SECURITY_EAP) != 0) {
89b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
90b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
91b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe            }
92b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe        }
93b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe        return config;
94b50356194ccfdaf5e127d9f705f99713d6f1e98cxinhe    }
95bcdabb1fa1894fcca610692ec94459fe623afa74Bartosz Fabianowski}
96