summaryrefslogtreecommitdiffstats
path: root/tests/wifitests/src/com/android/server/wifi/hotspot2
diff options
context:
space:
mode:
authorPeter Qiu <zqiu@google.com>2017-02-16 10:27:40 -0800
committerPeter Qiu <zqiu@google.com>2017-02-24 09:25:06 -0800
commit15eeedd83c258ae7eec5065880b0887545124456 (patch)
treea2440c7754adab3161700c3561ba4c8aa8c810ef /tests/wifitests/src/com/android/server/wifi/hotspot2
parent5a2c880635ee0e2d3498ba22c584b61e15440708 (diff)
downloadandroid_frameworks_opt_net_wifi-15eeedd83c258ae7eec5065880b0887545124456.tar.gz
android_frameworks_opt_net_wifi-15eeedd83c258ae7eec5065880b0887545124456.tar.bz2
android_frameworks_opt_net_wifi-15eeedd83c258ae7eec5065880b0887545124456.zip
hotspot2: add config parser for legacy Passpoint configuration file
For Hotspot 2.0 Release 1, most of the configuration data are already stored as part of WifiConfiguration across multiple files in N and older. There are number of fields contained in the legacy Passpoint configuration file (/data/misc/wifi/PerProviderSubscription.conf) that needed in order to complete the configuration. Mainly: - Friendly Name - Roaming Consortium OI - Realm - IMSI (for SIM credential) So add the parsing support for the legacy Passpoint configuration file to retrieve the missing configuration fields. Refer to the javadoc in LegacyPasspointConfigParser for the format of the configuration file. Bug: 34206769 Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh Change-Id: I1d1a96a2534e123fcd06e91eaa9fc18af842bea1
Diffstat (limited to 'tests/wifitests/src/com/android/server/wifi/hotspot2')
-rw-r--r--tests/wifitests/src/com/android/server/wifi/hotspot2/LegacyPasspointConfigParserTest.java210
1 files changed, 210 insertions, 0 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/hotspot2/LegacyPasspointConfigParserTest.java b/tests/wifitests/src/com/android/server/wifi/hotspot2/LegacyPasspointConfigParserTest.java
new file mode 100644
index 000000000..932a302b6
--- /dev/null
+++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/LegacyPasspointConfigParserTest.java
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.wifi.hotspot2;
+
+import static org.junit.Assert.*;
+
+import android.os.FileUtils;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Unit tests for {@link com.android.server.wifi.hotspot2.LegacyPasspointConfigParser}.
+ */
+@SmallTest
+public class LegacyPasspointConfigParserTest {
+ private static final String TEST_CONFIG =
+ "tree 3:1.2(urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0)\n"
+ + "8:MgmtTree+\n"
+ + "17:PerProviderSubscription+\n"
+ + "4:r1i1+\n"
+ + "6:HomeSP+\n"
+ + "c:FriendlyName=12:Test Provider 1™\n"
+ + "4:FQDN=9:test1.net\n"
+ + "13:RoamingConsortiumOI=9:1234,5678\n"
+ + ".\n"
+ + "a:Credential+\n"
+ + "10:UsernamePassword+\n"
+ + "8:Username=5:user1\n"
+ + "8:Password=5:pass1\n"
+ + "\n"
+ + "9:EAPMethod+\n"
+ + "7:EAPType=2:21\n"
+ + "b:InnerMethod=3:PAP\n"
+ + ".\n"
+ + ".\n"
+ + "5:Realm=9:test1.com\n"
+ + ".\n"
+ + ".\n"
+ + ".\n"
+ + "17:PerProviderSubscription+\n"
+ + "4:r1i2+\n"
+ + "6:HomeSP+\n"
+ + "c:FriendlyName=f:Test Provider 2\n"
+ + "4:FQDN=9:test2.net\n"
+ + ".\n"
+ + "a:Credential+\n"
+ + "10:UsernamePassword+\n"
+ + "8:Username=5:user2\n"
+ + "8:Password=5:pass2\n"
+ + "\n"
+ + "9:EAPMethod+\n"
+ + "7:EAPType=2:21\n"
+ + "b:InnerMethod=a:MS-CHAP-V2\n"
+ + ".\n"
+ + ".\n"
+ + "5:Realm=9:test2.com\n"
+ + "4:IMSI=4:1234\n"
+ + ".\n"
+ + ".\n"
+ + ".\n"
+ + ".\n";
+
+ /**
+ * Helper function for generating {@link LegacyPasspointConfig} objects based on the predefined
+ * test configuration string {@link #TEST_CONFIG}
+ *
+ * @return Map of FQDN to {@link LegacyPasspointConfig}
+ */
+ private Map<String, LegacyPasspointConfig> generateTestConfig() {
+ Map<String, LegacyPasspointConfig> configs = new HashMap<>();
+
+ LegacyPasspointConfig config1 = new LegacyPasspointConfig();
+ config1.mFqdn = "test1.net";
+ config1.mFriendlyName = "Test Provider 1™";
+ config1.mRoamingConsortiumOis = new long[] {0x1234, 0x5678};
+ config1.mRealm = "test1.com";
+ configs.put("test1.net", config1);
+
+ LegacyPasspointConfig config2 = new LegacyPasspointConfig();
+ config2.mFqdn = "test2.net";
+ config2.mFriendlyName = "Test Provider 2";
+ config2.mRealm = "test2.com";
+ config2.mImsi = "1234";
+ configs.put("test2.net", config2);
+
+ return configs;
+ }
+
+ /**
+ * Helper function for parsing configuration data.
+ *
+ * @param data The configuration data to parse
+ * @return Map of FQDN to {@link LegacyPasspointConfig}
+ * @throws Exception
+ */
+ private Map<String, LegacyPasspointConfig> parseConfig(String data) throws Exception {
+ // Write configuration data to file.
+ File configFile = File.createTempFile("LegacyPasspointConfig", "");
+ FileUtils.stringToFile(configFile, data);
+
+ // Parse the configuration file.
+ LegacyPasspointConfigParser parser = new LegacyPasspointConfigParser();
+ Map<String, LegacyPasspointConfig> configMap =
+ parser.parseConfig(configFile.getAbsolutePath());
+
+ configFile.delete();
+ return configMap;
+ }
+
+ /**
+ * Verify that the expected {@link LegacyPasspointConfig} objects are return when parsing
+ * predefined test configuration data {@link #TEST_CONFIG}.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void parseTestConfig() throws Exception {
+ Map<String, LegacyPasspointConfig> parsedConfig = parseConfig(TEST_CONFIG);
+ assertEquals(generateTestConfig(), parsedConfig);
+ }
+
+ /**
+ * Verify that an empty map is return when parsing a configuration containing an empty
+ * configuration (MgmtTree).
+ *
+ * @throws Exception
+ */
+ @Test
+ public void parseEmptyConfig() throws Exception {
+ String emptyConfig = "tree 3:1.2(urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0)\n"
+ + "8:MgmtTree+\n"
+ + ".\n";
+ Map<String, LegacyPasspointConfig> parsedConfig = parseConfig(emptyConfig);
+ assertTrue(parsedConfig.isEmpty());
+ }
+
+ /**
+ * Verify that an empty map is return when parsing an empty configuration data.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void parseEmptyData() throws Exception {
+ Map<String, LegacyPasspointConfig> parsedConfig = parseConfig("");
+ assertTrue(parsedConfig.isEmpty());
+ }
+
+ /**
+ * Verify that an IOException is thrown when parsing a configuration containing an unknown
+ * root name. The expected root name is "MgmtTree".
+ *
+ * @throws Exception
+ */
+ @Test(expected = IOException.class)
+ public void parseConfigWithUnknownRootName() throws Exception {
+ String config = "tree 3:1.2(urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0)\n"
+ + "8:TestTest+\n"
+ + ".\n";
+ parseConfig(config);
+ }
+
+ /**
+ * Verify that an IOException is thrown when parsing a configuration containing a line with
+ * mismatched string length for the name.
+ *
+ * @throws Exception
+ */
+ @Test(expected = IOException.class)
+ public void parseConfigWithMismatchedStringLengthInName() throws Exception {
+ String config = "tree 3:1.2(urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0)\n"
+ + "9:MgmtTree+\n"
+ + ".\n";
+ parseConfig(config);
+ }
+
+ /**
+ * Verify that an IOException is thrown when parsing a configuration containing a line with
+ * mismatched string length for the value.
+ *
+ * @throws Exception
+ */
+ @Test(expected = IOException.class)
+ public void parseConfigWithMismatchedStringLengthInValue() throws Exception {
+ String config = "tree 3:1.2(urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0)\n"
+ + "8:MgmtTree+\n"
+ + "4:test=5:test\n"
+ + ".\n";
+ parseConfig(config);
+ }
+}