diff options
Diffstat (limited to 'tests/wifitests/src/com/android/server/wifi/hotspot2')
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/hotspot2/LegacyPasspointConfigParserTest.java | 210 |
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); + } +} |