19fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu/* 29fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * Copyright (C) 2017 The Android Open Source Project 39fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * 49fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License"); 59fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * you may not use this file except in compliance with the License. 69fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * You may obtain a copy of the License at 79fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * 89fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * http://www.apache.org/licenses/LICENSE-2.0 99fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * 109fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * Unless required by applicable law or agreed to in writing, software 119fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS, 129fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * See the License for the specific language governing permissions and 149fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * limitations under the License. 159fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu */ 169fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu 179fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiupackage com.android.server.wifi.hotspot2.anqp; 189fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu 199fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiuimport static org.junit.Assert.assertEquals; 209fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu 217f2a1e30dd5d14320ffc7b185ac25fdb79fe52b0Etan Cohenimport android.support.test.filters.SmallTest; 229fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu 239fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiuimport org.junit.Test; 249fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu 259fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiuimport java.net.ProtocolException; 269fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiuimport java.nio.BufferUnderflowException; 279fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiuimport java.nio.ByteBuffer; 280169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiuimport java.util.ArrayList; 290169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiuimport java.util.List; 300169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiuimport java.util.Locale; 319fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu 329fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu/** 339fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * Unit tests for {@link com.android.server.wifi.hotspot2.anqp.OsuProviderInfo}. 349fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu */ 359fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu@SmallTest 369fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiupublic class OsuProviderInfoTest { 379fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu /** 389fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * Verify that BufferUnderflowException will be thrown when parsing an empty buffer. 399fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * @throws Exception 409fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu */ 419fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu @Test(expected = BufferUnderflowException.class) 429fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu public void parseEmptyBuffer() throws Exception { 439fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu OsuProviderInfo.parse(ByteBuffer.allocate(0)); 449fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu } 459fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu 469fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu /** 479fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * Verify that BufferUnderflowException will be thrown when parsing a truncated buffer 489fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * (missing a byte at the end). 499fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * 509fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * @throws Exception 519fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu */ 529fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu @Test(expected = BufferUnderflowException.class) 539fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu public void parseTruncatedBuffer() throws Exception { 549fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu ByteBuffer buffer = ByteBuffer.wrap( 559fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu OsuProviderInfoTestUtil.TEST_OSU_PROVIDER_INFO_RAW_BYTES); 569fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu buffer.limit(buffer.remaining() - 1); 579fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu OsuProviderInfo.parse(buffer); 589fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu } 599fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu 609fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu /** 619fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * Verify that ProtocolException will be thrown when parsing a buffer containing an 629fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * invalid length value. 639fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * 649fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * @throws Exception 659fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu */ 669fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu @Test(expected = ProtocolException.class) 679fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu public void parseBufferWithInvalidLength() throws Exception { 689fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu ByteBuffer buffer = ByteBuffer.wrap( 699fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu OsuProviderInfoTestUtil.TEST_OSU_PROVIDER_INFO_RAW_BYTES_WITH_INVALID_LENGTH); 709fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu OsuProviderInfo.parse(buffer); 719fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu } 729fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu 739fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu /** 749fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * Verify that an expected {@link OsuProviderInfo} will be returned when parsing a buffer 759fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * containing pre-defined test data. 769fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * 779fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu * @throws Exception 789fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu */ 799fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu @Test 809fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu public void parseBufferWithTestData() throws Exception { 819fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu ByteBuffer buffer = ByteBuffer.wrap( 829fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu OsuProviderInfoTestUtil.TEST_OSU_PROVIDER_INFO_RAW_BYTES); 839fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu assertEquals(OsuProviderInfoTestUtil.TEST_OSU_PROVIDER_INFO, 849fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu OsuProviderInfo.parse(buffer)); 859fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu } 860169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu 870169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu /** 880169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * Verify that when a provider contained multiple friendly names in different languages, the 890169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * friendly name that's in default language is returned. 900169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * 910169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * @throws Exception 920169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu */ 930169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu @Test 940169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu public void getFriendlyNameMatchingDefaultLocale() throws Exception { 950169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu List<I18Name> friendlyNames = new ArrayList<>(); 960169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu Locale defaultLocale = Locale.getDefault(); 970169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu Locale nonDefaultLocale = Locale.FRENCH; 980169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu if (defaultLocale.equals(nonDefaultLocale)) { 990169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu nonDefaultLocale = Locale.ENGLISH; 1000169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 1010169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu String nonDefaultString = "Non-default"; 1020169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu String defaultString = "Default"; 1030169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu friendlyNames.add( 1040169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new I18Name(nonDefaultLocale.getLanguage(), nonDefaultLocale, nonDefaultString)); 1050169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu friendlyNames.add(new I18Name(defaultLocale.getLanguage(), defaultLocale, defaultString)); 1060169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu OsuProviderInfo providerInfo = 1070169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new OsuProviderInfo(friendlyNames, null, null, null, null, null); 1080169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu assertEquals(defaultString, providerInfo.getFriendlyName()); 1090169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 1100169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu 1110169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu /** 1120169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * Verify that when a provider contained multiple friendly names where no friendly name 1130169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * is in default language, the first name in the list is returned. 1140169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * 1150169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * @throws Exception 1160169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu */ 1170169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu @Test 1180169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu public void getFriendlyNameNotMatchingDefaultLocale() throws Exception { 1190169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu List<I18Name> friendlyNames = new ArrayList<>(); 1200169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu Locale nonDefaultLocale = Locale.FRENCH; 1210169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu if (nonDefaultLocale.equals(Locale.getDefault())) { 1220169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu nonDefaultLocale = Locale.ENGLISH; 1230169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 1240169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu String firstString = "First name"; 1250169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu String secondString = "Second name"; 1260169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu friendlyNames.add( 1270169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new I18Name(nonDefaultLocale.getLanguage(), nonDefaultLocale, firstString)); 1280169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu friendlyNames.add( 1290169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new I18Name(nonDefaultLocale.getLanguage(), nonDefaultLocale, secondString)); 1300169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu OsuProviderInfo providerInfo = 1310169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new OsuProviderInfo(friendlyNames, null, null, null, null, null); 1320169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu assertEquals(firstString, providerInfo.getFriendlyName()); 1330169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 1340169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu 1350169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu /** 1360169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * Verify that null will be returned for a provider containing empty friendly name list. 1370169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * 1380169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * @throws Exception 1390169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu */ 1400169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu @Test 1410169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu public void getFriendlyNameWithEmptyList() throws Exception { 1420169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu OsuProviderInfo providerInfo = 1430169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new OsuProviderInfo(new ArrayList<I18Name>(), null, null, null, null, null); 1440169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu assertEquals(null, providerInfo.getFriendlyName()); 1450169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 1460169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu 1470169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu /** 1480169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * Verify that when a provider contained multiple service descriptions in different languages, 1490169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * the service description that's in default language is returned. 1500169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * 1510169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * @throws Exception 1520169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu */ 1530169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu @Test 1540169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu public void getServiceDescriptionMatchingDefaultLocale() throws Exception { 1550169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu List<I18Name> serviceDescriptions = new ArrayList<>(); 1560169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu Locale defaultLocale = Locale.getDefault(); 1570169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu Locale nonDefaultLocale = Locale.FRENCH; 1580169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu if (defaultLocale.equals(nonDefaultLocale)) { 1590169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu nonDefaultLocale = Locale.ENGLISH; 1600169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 1610169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu String nonDefaultString = "Non-default"; 1620169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu String defaultString = "Default"; 1630169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu serviceDescriptions.add( 1640169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new I18Name(nonDefaultLocale.getLanguage(), nonDefaultLocale, nonDefaultString)); 1650169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu serviceDescriptions.add( 1660169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new I18Name(defaultLocale.getLanguage(), defaultLocale, defaultString)); 1670169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu OsuProviderInfo providerInfo = 1680169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new OsuProviderInfo(null, null, null, null, null, serviceDescriptions); 1690169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu assertEquals(defaultString, providerInfo.getServiceDescription()); 1700169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 1710169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu 1720169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu /** 1730169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * Verify that when a provider contained multiple service descriptions where none of them 1740169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * is in default language, the first element in the list is returned. 1750169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * 1760169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * @throws Exception 1770169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu */ 1780169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu @Test 1790169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu public void getServiceDescriptionNotMatchingDefaultLocale() throws Exception { 1800169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu List<I18Name> serviceDescriptions = new ArrayList<>(); 1810169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu Locale nonDefaultLocale = Locale.FRENCH; 1820169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu if (nonDefaultLocale.equals(Locale.getDefault())) { 1830169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu nonDefaultLocale = Locale.ENGLISH; 1840169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 1850169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu String firstString = "First name"; 1860169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu String secondString = "Second name"; 1870169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu serviceDescriptions.add( 1880169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new I18Name(nonDefaultLocale.getLanguage(), nonDefaultLocale, firstString)); 1890169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu serviceDescriptions.add( 1900169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new I18Name(nonDefaultLocale.getLanguage(), nonDefaultLocale, secondString)); 1910169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu OsuProviderInfo providerInfo = 1920169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new OsuProviderInfo(null, null, null, null, null, serviceDescriptions); 1930169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu assertEquals(firstString, providerInfo.getServiceDescription()); 1940169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 1950169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu 1960169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu /** 1970169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * Verify that null will be returned for a provider containing empty friendly name list. 1980169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * 1990169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu * @throws Exception 2000169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu */ 2010169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu @Test 2020169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu public void getServiceDescriptionWithEmptyList() throws Exception { 2030169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu OsuProviderInfo providerInfo = 2040169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu new OsuProviderInfo(null, null, null, null, null, new ArrayList<I18Name>()); 2050169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu assertEquals(null, providerInfo.getServiceDescription()); 2060169c9350c355acbfe790859a1cc77a1594b4c1bPeter Qiu } 2079fa8195087be42baed9f21ebdedadda9f509c7c6Peter Qiu} 208