149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu/* 249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * Copyright (C) 2016 The Android Open Source Project 349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * 449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * Licensed under the Apache License, Version 2.0 (the "License"); 549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * you may not use this file except in compliance with the License. 649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * You may obtain a copy of the License at 749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * 849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * http://www.apache.org/licenses/LICENSE-2.0 949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * 1049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * Unless required by applicable law or agreed to in writing, software 1149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * distributed under the License is distributed on an "AS IS" BASIS, 1249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * See the License for the specific language governing permissions and 1449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * limitations under the License. 1549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu */ 1649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 1749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiupackage com.android.server.wifi.hotspot2; 1849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 1949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport static org.junit.Assert.assertEquals; 2049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport static org.mockito.Mockito.mock; 2149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport static org.mockito.Mockito.when; 2249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 2349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport android.net.wifi.ScanResult; 247f2a1e30dd5d14320ffc7b185ac25fdb79fe52b0Etan Cohenimport android.support.test.filters.SmallTest; 2549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 2649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport com.android.server.wifi.ScanDetail; 2749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport com.android.server.wifi.hotspot2.anqp.ANQPElement; 2849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport com.android.server.wifi.hotspot2.anqp.Constants; 2949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport com.android.server.wifi.hotspot2.anqp.Constants.ANQPElementType; 3049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport com.android.server.wifi.hotspot2.anqp.HSWanMetricsElement; 3149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport com.android.server.wifi.hotspot2.anqp.IPAddressTypeAvailabilityElement; 3249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 3349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport org.junit.Test; 3449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 3549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport java.util.ArrayList; 3649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport java.util.HashMap; 3749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport java.util.List; 3849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiuimport java.util.Map; 3949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 4049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu/** 4149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * Unit tests for {@link com.android.server.wifi.hotspot2.PasspointNetworkScore}. 4249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu */ 4349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu@SmallTest 4449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiupublic class PasspointNetworkScoreTest { 4549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static class TestData { 4649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu public final boolean isHomeProvider; 4749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu public final boolean isActiveNetwork; 4849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu public final int rssiLevel; 4949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu public final boolean internetAccess; 5049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu public final NetworkDetail.Ant networkType; 5149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu public final Map<ANQPElementType, ANQPElement> anqpElements; 5249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu public int expectedScore; 5349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 5449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TestData(boolean homeProvider, boolean activeNetwork, int rssi, boolean internet, 5549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant type, Map<ANQPElementType, ANQPElement> elements, 5649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu int score) { 5749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu isHomeProvider = homeProvider; 5849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu isActiveNetwork = activeNetwork; 5949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu rssiLevel = rssi; 6049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu internetAccess = internet; 6149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu networkType = type; 6249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu anqpElements = elements; 6349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu expectedScore = score; 6449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu } 6549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu } 6649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 6749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final HSWanMetricsElement WAN_PORT_DOWN_ELEMENT = new HSWanMetricsElement( 6849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu HSWanMetricsElement.LINK_STATUS_DOWN /* status */, true /* symmetric */, 6949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu false /* capped */, 1233 /* downlinkSpeed */, 1233 /* uplinkSpeed */, 7049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 10 /* downlinkLoad */, 10 /* uplinkLoad */, 12 /* lmd */); 7149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 7249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final HSWanMetricsElement WAN_PORT_UP_ELEMENT = new HSWanMetricsElement( 7349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu HSWanMetricsElement.LINK_STATUS_UP /* status */, true /* symmetric */, 7449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu false /* capped */, 1233 /* downlinkSpeed */, 1233 /* uplinkSpeed */, 7549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 10 /* downlinkLoad */, 10 /* uplinkLoad */, 12 /* lmd */); 7649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 7749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final HSWanMetricsElement WAN_PORT_CAPPED_ELEMENT = new HSWanMetricsElement( 7849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu HSWanMetricsElement.LINK_STATUS_UP /* status */, true /* symmetric */, 7949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu true /* capped */, 1233 /* downlinkSpeed */, 1233 /* uplinkSpeed */, 8049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 10 /* downlinkLoad */, 10 /* uplinkLoad */, 12 /* lmd */); 8149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 8249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final IPAddressTypeAvailabilityElement UNRESTRICTED_IP_ADDRESS_ELEMENT = 8349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu new IPAddressTypeAvailabilityElement(IPAddressTypeAvailabilityElement.IPV4_PUBLIC, 8449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu IPAddressTypeAvailabilityElement.IPV6_AVAILABLE); 8549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 8649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final IPAddressTypeAvailabilityElement UNAVAILABLE_IP_ADDRESS_ELEMENT = 8749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu new IPAddressTypeAvailabilityElement( 8849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu IPAddressTypeAvailabilityElement.IPV4_NOT_AVAILABLE, 8949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu IPAddressTypeAvailabilityElement.IPV6_NOT_AVAILABLE); 9049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 9149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final IPAddressTypeAvailabilityElement UNKNOWN_IP_ADDRESS_ELEMENT = 9249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu new IPAddressTypeAvailabilityElement( 9349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu IPAddressTypeAvailabilityElement.IPV4_UNKNOWN, 9449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu IPAddressTypeAvailabilityElement.IPV6_UNKNOWN); 9549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 9649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final Map<ANQPElementType, ANQPElement> TEST_ANQP_WITH_WAN_PORT_DOWN = 9749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu new HashMap<>(); 9849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 9949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final Map<ANQPElementType, ANQPElement> TEST_ANQP_WITH_WAN_PORT_UP = 10049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu new HashMap<>(); 10149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 10249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final Map<ANQPElementType, ANQPElement> TEST_ANQP_WITH_WAN_PORT_CAPPED = 10349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu new HashMap<>(); 10449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 10549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final Map<ANQPElementType, ANQPElement> TEST_ANQP_WITH_UNRESTRICTED_IP = 10649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu new HashMap<>(); 10749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 10849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final Map<ANQPElementType, ANQPElement> TEST_ANQP_WITH_UNAVAILABLE_IP = 10949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu new HashMap<>(); 11049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 11149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final Map<ANQPElementType, ANQPElement> TEST_ANQP_WITH_UNKNOWN_IP = 11249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu new HashMap<>(); 11349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 11449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // List of test data. 11549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static final List<TestData> TEST_DATA_LIST = new ArrayList<>(); 11649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu static { 11749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Setup ANQP elements map for testing. 11849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_WAN_PORT_DOWN.put(Constants.ANQPElementType.HSWANMetrics, 11949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu WAN_PORT_DOWN_ELEMENT); 12049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_WAN_PORT_UP.put(Constants.ANQPElementType.HSWANMetrics, 12149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu WAN_PORT_UP_ELEMENT); 12249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_WAN_PORT_CAPPED.put(Constants.ANQPElementType.HSWANMetrics, 12349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu WAN_PORT_CAPPED_ELEMENT); 12449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_UNRESTRICTED_IP.put(Constants.ANQPElementType.ANQPIPAddrAvailability, 12549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu UNRESTRICTED_IP_ADDRESS_ELEMENT); 12649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_UNAVAILABLE_IP.put(Constants.ANQPElementType.ANQPIPAddrAvailability, 12749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu UNAVAILABLE_IP_ADDRESS_ELEMENT); 12849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_UNKNOWN_IP.put(Constants.ANQPElementType.ANQPIPAddrAvailability, 12949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu UNKNOWN_IP_ADDRESS_ELEMENT); 13049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 13149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network with Internet access that's not the current 13249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // active network. 13349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 13449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 13549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, null /* anqpElements */, 13649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 13749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 13849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 13949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 14049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false))); 14149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 14249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network with Internet access that's the current active network. 14349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, true /* isActiveNetwork */, 14449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 14549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, null /* anqpElements */, 14649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 14749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 14849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 14949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 15049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, true))); 15149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 15249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network without Internet access that's not the current 15349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // active network. 15449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 15549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, false /* internetAccess */, 15649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, null /* anqpElements */, 15749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 15849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 15949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu - PasspointNetworkScore.INTERNET_ACCESS_AWARD 16049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 16149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false))); 16249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 16349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider personal network with Internet access that's not the current active 16449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // network. 16549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 16649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 16749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.Personal /* networkType */, null /* anqpElements */, 16849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 16949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 17049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 17149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PERSONAL_OR_EMERGENCY_NETWORK_AWARDS 17249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false))); 17349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 17449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network with Internet access that's not the current 17549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // active network, and ANPQ element indicating WAN port is up. 17649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 17749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 17849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, 17949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_WAN_PORT_UP /* anqpElements */, 18049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 18149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 18249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 18349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 18449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false))); 18549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 18649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network with Internet access that's not the current 18749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // active network, and ANPQ element indicating WAN port is down. 18849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 18949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 19049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, 19149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_WAN_PORT_DOWN /* anqpElements */, 19249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 19349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 19449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 19549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 19649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false) 19749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu - PasspointNetworkScore.WAN_PORT_DOWN_OR_CAPPED_PENALTY)); 19849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 19949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network with Internet access that's not the current 20049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // active network, and ANPQ element indicating WAN port is capped (max load reached). 20149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 20249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 20349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, 20449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_WAN_PORT_CAPPED /* anqpElements */, 20549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 20649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 20749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 20849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 20949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false) 21049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu - PasspointNetworkScore.WAN_PORT_DOWN_OR_CAPPED_PENALTY)); 21149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 21249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network with Internet access that's not the current 21349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // active network, and ANPQ element indicating both IPv4 and IPv6 addresses are available. 21449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 21549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 21649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, 21749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_UNRESTRICTED_IP /* anqpElements */, 21849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 21949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 22049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 22149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 22249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false) 22349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.UNRESTRICTED_IP_AWARDS * 2 /* one for IPv4 and IPv6 */)); 22449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 22549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network with Internet access that's not the current 22649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // active network, and ANPQ element indicating both IPv4 and IPv6 addresses are available. 22749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 22849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 22949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, 23049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_UNRESTRICTED_IP /* anqpElements */, 23149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 23249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 23349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 23449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 23549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false) 23649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* one each for IPv4 and IPv6. */ 23749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.UNRESTRICTED_IP_AWARDS * 2)); 23849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 23949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network with Internet access that's not the current 24049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // active network, and ANPQ element indicating both IPv4 and IPv6 addresses are 24149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // unavailable. 24249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 24349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 24449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, 24549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_UNAVAILABLE_IP /* anqpElements */, 24649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 24749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 24849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 24949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 25049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false))); 25149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 25249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Home provider public network with Internet access that's not the current 25349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // active network, and ANPQ element indicating both IPv4 and IPv6 addresses are unknown. 25449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(true /* isHomeProvider */, false /* isActiveNetwork */, 25549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 25649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, 25749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_ANQP_WITH_UNKNOWN_IP /* anqpElements */, 25849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 25949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.HOME_PROVIDER_AWARD 26049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.INTERNET_ACCESS_AWARD 26149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 26249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false) 26349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* one each for IPv4 and IPv6. */ 26449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RESTRICTED_OR_UNKNOWN_IP_AWARDS * 2)); 26549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 26649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Roaming provider public network with Internet access that's not the current active 26749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // network. 26849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(false /* isHomeProvider */, false /* isActiveNetwork */, 26949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 27049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, null /* anqpElements */, 27149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 27249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.INTERNET_ACCESS_AWARD 27349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 27449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false))); 27549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 27649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Roaming provider public network with Internet access that's the current active network. 27749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(false /* isHomeProvider */, true /* isActiveNetwork */, 27849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 27949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, null /* anqpElements */, 28049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 28149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.INTERNET_ACCESS_AWARD 28249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 28349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, true))); 28449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 28549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Roaming provider public network without Internet access that's not the current active 28649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // network. 28749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(false /* isHomeProvider */, false /* isActiveNetwork */, 28849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, false /* internetAccess */, 28949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.FreePublic /* networkType */, null /* anqpElements */, 29049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 29149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.PUBLIC_OR_PRIVATE_NETWORK_AWARDS 29249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu - PasspointNetworkScore.INTERNET_ACCESS_AWARD 29349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false))); 29449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 29549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Roaming provider personal network with Internet access that's not the current active 29649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // network. 29749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu TEST_DATA_LIST.add(new TestData(false /* isHomeProvider */, false /* isActiveNetwork */, 29849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu -60 /* rssiLevel */, true /* internetAccess */, 29949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail.Ant.Personal /* networkType */, null /* anqpElements */, 30049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /* expectedScore */ 30149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu PasspointNetworkScore.INTERNET_ACCESS_AWARD 30249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.PERSONAL_OR_EMERGENCY_NETWORK_AWARDS 30349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu + PasspointNetworkScore.RSSI_SCORE.lookupScore(-60, false))); 30449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu } 30549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 30649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /** 30749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * Helper function for generating a {@link ScanDetail} for testing. 30849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * 30949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * @param rssiLevel RSSI level of the network 31049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * @param internetAccess Flag indicating if the network provides Internet access 31149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * @param networkType The type of the network 31249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * @return {@link ScanDetail} 31349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu */ 31449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu private static ScanDetail generateScanDetail(int rssiLevel, boolean internetAccess, 315ec28f863c5e46c0a75e8bdb92283304b875ee0f2Peter Qiu NetworkDetail.Ant networkType) { 31649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Setup ScanResult. 31749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu ScanResult scanResult = new ScanResult(); 31849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu scanResult.level = -60; 31949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 32049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Setup NetworkDetail. 32149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu NetworkDetail networkDetail = mock(NetworkDetail.class); 32249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu when(networkDetail.isInternet()).thenReturn(internetAccess); 32349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu when(networkDetail.getAnt()).thenReturn(networkType); 32449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 32549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu // Setup ScanDetail. 32649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu ScanDetail scanDetail = mock(ScanDetail.class); 32749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu when(scanDetail.getScanResult()).thenReturn(scanResult); 32849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu when(scanDetail.getNetworkDetail()).thenReturn(networkDetail); 32949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 33049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu return scanDetail; 33149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu } 33249036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 33349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu /** 33449036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * Go through the list of the test data {@link #TEST_DATA_LIST} and verify the score for each. 33549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * 33649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu * @throws Exception 33749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu */ 33849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu @Test 33949036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu public void calculateScore() throws Exception { 34049036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu for (TestData data : TEST_DATA_LIST) { 34149036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu ScanDetail scanDetail = generateScanDetail(data.rssiLevel, data.internetAccess, 342ec28f863c5e46c0a75e8bdb92283304b875ee0f2Peter Qiu data.networkType); 34349036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu assertEquals(data.expectedScore, PasspointNetworkScore.calculateScore( 344ec28f863c5e46c0a75e8bdb92283304b875ee0f2Peter Qiu data.isHomeProvider, scanDetail, data.anqpElements, data.isActiveNetwork)); 34549036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu } 34649036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu } 34749036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu 34849036aa383a6dfdaaf84e760e72d627638a9d86aPeter Qiu} 349