1c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman/* 2c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman t Copyright (C) 2016 The Android Open Source Project 3c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * 4c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * Licensed under the Apache License, Version 2.0 (the "License"); 5c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * you may not use this file except in compliance with the License. 6c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * You may obtain a copy of the License at 7c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * 8c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * http://www.apache.org/licenses/LICENSE-2.0 9c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * 10c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * Unless required by applicable law or agreed to in writing, software 11c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * distributed under the License is distributed on an "AS IS" BASIS, 12c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * See the License for the specific language governing permissions and 14c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman * limitations under the License 15c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman */ 16c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 17c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghumanpackage android.net; 18c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 19c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghumanimport static org.junit.Assert.*; 20c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 21c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghumanimport android.os.Bundle; 22c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghumanimport android.os.Parcel; 23c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghumanimport android.support.test.runner.AndroidJUnit4; 24c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 25c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghumanimport org.junit.Test; 26c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghumanimport org.junit.runner.RunWith; 27c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 28c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghumanimport java.util.Arrays; 29c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 30c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman/** Unit tests for {@link ScoredNetwork}. */ 31c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman@RunWith(AndroidJUnit4.class) 32c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghumanpublic class ScoredNetworkTest { 33c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 34c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman private static final int RSSI_START = -110; 35c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman private static final int TEST_RSSI = -50; 36c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman private static final byte TEST_SCORE = 5; 37c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman private static final RssiCurve CURVE = 38c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman new RssiCurve(RSSI_START, 10, new byte[] {-1, 0, 1, 2, 3, 4, TEST_SCORE, 6, 7}); 39c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 40c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman private static final byte RANKING_SCORE_OFFSET = 13; 41c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman private static final Bundle ATTRIBUTES; 42c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman static { 43c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ATTRIBUTES = new Bundle(); 44c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ATTRIBUTES.putInt( 45c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork.ATTRIBUTES_KEY_RANKING_SCORE_OFFSET, RANKING_SCORE_OFFSET); 46c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 47c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 48c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman private static final NetworkKey KEY 49c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman = new NetworkKey(new WifiKey("\"ssid\"", "00:00:00:00:00:00")); 50c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 51c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 524efd1ca53643c9608700d32da05504a315821d7dStephen Chen public void scoredNetworksWithBothNullAttributeBundle_equal() { 534efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork1 = 544efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, null /* attributes */); 554efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork2 = 564efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, null /* attributes */); 574efd1ca53643c9608700d32da05504a315821d7dStephen Chen assertTrue(scoredNetwork1.equals(scoredNetwork2)); 584efd1ca53643c9608700d32da05504a315821d7dStephen Chen } 594efd1ca53643c9608700d32da05504a315821d7dStephen Chen 604efd1ca53643c9608700d32da05504a315821d7dStephen Chen @Test 614efd1ca53643c9608700d32da05504a315821d7dStephen Chen public void scoredNetworksWithOneNullAttributeBundle_notEqual() { 624efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork1 = 634efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES); 644efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork2 = 654efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, null /* attributes */); 664efd1ca53643c9608700d32da05504a315821d7dStephen Chen assertFalse(scoredNetwork1.equals(scoredNetwork2)); 674efd1ca53643c9608700d32da05504a315821d7dStephen Chen } 684efd1ca53643c9608700d32da05504a315821d7dStephen Chen 694efd1ca53643c9608700d32da05504a315821d7dStephen Chen @Test 704efd1ca53643c9608700d32da05504a315821d7dStephen Chen public void scoredNetworksWithDifferentSizedAttributeBundle_notEqual() { 714efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork1 = 724efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES); 734efd1ca53643c9608700d32da05504a315821d7dStephen Chen Bundle attr = new Bundle(ATTRIBUTES); 744efd1ca53643c9608700d32da05504a315821d7dStephen Chen attr.putBoolean(ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL, true); 754efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork2 = 764efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr); 774efd1ca53643c9608700d32da05504a315821d7dStephen Chen assertFalse(scoredNetwork1.equals(scoredNetwork2)); 784efd1ca53643c9608700d32da05504a315821d7dStephen Chen } 794efd1ca53643c9608700d32da05504a315821d7dStephen Chen 804efd1ca53643c9608700d32da05504a315821d7dStephen Chen @Test 814efd1ca53643c9608700d32da05504a315821d7dStephen Chen public void scoredNetworksWithDifferentAttributeValues_notEqual() { 824efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork1 = 834efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES); 844efd1ca53643c9608700d32da05504a315821d7dStephen Chen Bundle attr = new Bundle(); 854efd1ca53643c9608700d32da05504a315821d7dStephen Chen attr.putInt(ScoredNetwork.ATTRIBUTES_KEY_RANKING_SCORE_OFFSET, Integer.MIN_VALUE); 864efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork2 = 874efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr); 884efd1ca53643c9608700d32da05504a315821d7dStephen Chen assertFalse(scoredNetwork1.equals(scoredNetwork2)); 894efd1ca53643c9608700d32da05504a315821d7dStephen Chen } 904efd1ca53643c9608700d32da05504a315821d7dStephen Chen 914efd1ca53643c9608700d32da05504a315821d7dStephen Chen @Test 924efd1ca53643c9608700d32da05504a315821d7dStephen Chen public void scoredNetworksWithSameAttributeValuesAndSize_equal() { 934efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork1 = 944efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES); 954efd1ca53643c9608700d32da05504a315821d7dStephen Chen ScoredNetwork scoredNetwork2 = 964efd1ca53643c9608700d32da05504a315821d7dStephen Chen new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES); 974efd1ca53643c9608700d32da05504a315821d7dStephen Chen assertTrue(scoredNetwork1.equals(scoredNetwork2)); 984efd1ca53643c9608700d32da05504a315821d7dStephen Chen } 994efd1ca53643c9608700d32da05504a315821d7dStephen Chen 1004efd1ca53643c9608700d32da05504a315821d7dStephen Chen @Test 101c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void calculateRankingOffsetShouldThrowUnsupportedOperationException() { 102c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman // No curve or ranking score offset set in curve 103c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork scoredNetwork = new ScoredNetwork(KEY, null); 104c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman try { 105c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman scoredNetwork.calculateRankingScore(TEST_RSSI); 106c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman fail("Should have thrown UnsupportedOperationException"); 107c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } catch (UnsupportedOperationException e) { 108c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman // expected 109c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 110c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 111c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 112c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 113c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void calculateRankingOffsetWithRssiCurveShouldReturnExpectedScore() { 114c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork scoredNetwork = new ScoredNetwork(KEY, CURVE); 115c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertEquals(TEST_SCORE << Byte.SIZE, scoredNetwork.calculateRankingScore(TEST_RSSI)); 116c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 117c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 118c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 119c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void rankingScoresShouldDifferByRankingScoreOffset() { 120c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork scoredNetwork1 = new ScoredNetwork(KEY, CURVE); 121c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork scoredNetwork2 122c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman = new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES); 123c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman int scoreDifference = 124c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman scoredNetwork2.calculateRankingScore(TEST_RSSI) 125c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman - scoredNetwork1.calculateRankingScore(TEST_RSSI); 126c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertEquals(RANKING_SCORE_OFFSET, scoreDifference); 127c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 128c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 129c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 130c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void calculateRankingScoreShouldNotResultInIntegerOverflow() { 131c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman Bundle attr = new Bundle(); 132c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman attr.putInt(ScoredNetwork.ATTRIBUTES_KEY_RANKING_SCORE_OFFSET, Integer.MAX_VALUE); 133c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork scoredNetwork 134c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman = new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr); 135c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertEquals(Integer.MAX_VALUE, scoredNetwork.calculateRankingScore(TEST_RSSI)); 136c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 137c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 138c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 139c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void calculateRankingScoreShouldNotResultInIntegerUnderflow() { 140c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman Bundle attr = new Bundle(); 141c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman attr.putInt(ScoredNetwork.ATTRIBUTES_KEY_RANKING_SCORE_OFFSET, Integer.MIN_VALUE); 142c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork scoredNetwork = 143c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr); 144c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertEquals(Integer.MIN_VALUE, scoredNetwork.calculateRankingScore(RSSI_START)); 145c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 146c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 147c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 148c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void hasRankingScoreShouldReturnFalse() { 149c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork network = new ScoredNetwork(KEY, null /* rssiCurve */); 150c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertFalse(network.hasRankingScore()); 151c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 152c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 153c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 154c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void hasRankingScoreShouldReturnTrueWhenAttributesHasRankingScoreOffset() { 155c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork network = 156c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman new ScoredNetwork(KEY, null /* rssiCurve */, false /* meteredHint */, ATTRIBUTES); 157c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertTrue(network.hasRankingScore()); 158c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 159c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 160c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 161c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void hasRankingScoreShouldReturnTrueWhenCurveIsPresent() { 162c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork network = 163c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman new ScoredNetwork(KEY, CURVE , false /* meteredHint */); 164c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertTrue(network.hasRankingScore()); 165c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 166c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 167c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 168c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void shouldWriteAndReadFromParcelWhenAllFieldsSet() { 169c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork network = new ScoredNetwork(KEY, CURVE, true /* meteredHint */, ATTRIBUTES); 170c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork newNetwork; 171c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 172c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman Parcel parcel = null; 173c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman try { 174c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman parcel = Parcel.obtain(); 175c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman network.writeToParcel(parcel, 0 /* flags */); 176c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman parcel.setDataPosition(0); 177c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman newNetwork = ScoredNetwork.CREATOR.createFromParcel(parcel); 178c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } finally { 179c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman if (parcel != null) { 180c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman parcel.recycle(); 181c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 182c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 183c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertEquals(CURVE.start, newNetwork.rssiCurve.start); 184c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertEquals(CURVE.bucketWidth, newNetwork.rssiCurve.bucketWidth); 185c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertTrue(Arrays.equals(CURVE.rssiBuckets, newNetwork.rssiCurve.rssiBuckets)); 186c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertTrue(newNetwork.meteredHint); 187c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertNotNull(newNetwork.attributes); 188c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertEquals( 189c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman RANKING_SCORE_OFFSET, 190c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman newNetwork.attributes.getInt(ScoredNetwork.ATTRIBUTES_KEY_RANKING_SCORE_OFFSET)); 191c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 192c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 193c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman @Test 194c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman public void shouldWriteAndReadFromParcelWithoutBundle() { 195c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork network = new ScoredNetwork(KEY, CURVE, true /* meteredHint */); 196c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman ScoredNetwork newNetwork; 197c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman 198c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman Parcel parcel = null; 199c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman try { 200c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman parcel = Parcel.obtain(); 201c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman network.writeToParcel(parcel, 0 /* flags */); 202c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman parcel.setDataPosition(0); 203c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman newNetwork = ScoredNetwork.CREATOR.createFromParcel(parcel); 204c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } finally { 205c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman if (parcel != null) { 206c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman parcel.recycle(); 207c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 208c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 209c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertEquals(CURVE.start, newNetwork.rssiCurve.start); 210c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertEquals(CURVE.bucketWidth, newNetwork.rssiCurve.bucketWidth); 211c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertTrue(Arrays.equals(CURVE.rssiBuckets, newNetwork.rssiCurve.rssiBuckets)); 212c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertTrue(newNetwork.meteredHint); 213c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman assertNull(newNetwork.attributes); 214c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman } 2156c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman 2166c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman @Test 2176c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman public void calculateBadgeShouldReturnNoBadgeWhenNoAttributesBundle() { 2186c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman ScoredNetwork network = new ScoredNetwork(KEY, CURVE); 219699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman assertEquals(NetworkBadging.BADGING_NONE, network.calculateBadge(TEST_RSSI)); 2206c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman } 2216c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman 2226c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman @Test 2236c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman public void calculateBadgeShouldReturnNoBadgeWhenNoBadgingCurveInBundle() { 2246c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman ScoredNetwork network = new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES); 225699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman assertEquals(NetworkBadging.BADGING_NONE, network.calculateBadge(TEST_RSSI)); 2266c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman } 2276c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman 2286c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman @Test 2296c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman public void calculateBadgeShouldReturn4kBadge() { 2306c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman ScoredNetwork network = 231699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman buildScoredNetworkWithGivenBadgeForTestRssi(NetworkBadging.BADGING_4K); 232699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman assertEquals(NetworkBadging.BADGING_4K, network.calculateBadge(TEST_RSSI)); 2336c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman } 2346c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman 2356c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman @Test 2366c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman public void calculateBadgeShouldReturnHdBadge() { 2376c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman ScoredNetwork network = 238699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman buildScoredNetworkWithGivenBadgeForTestRssi(NetworkBadging.BADGING_HD); 239699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman assertEquals(NetworkBadging.BADGING_HD, network.calculateBadge(TEST_RSSI)); 2406c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman } 2416c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman 2426c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman @Test 2436c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman public void calculateBadgeShouldReturnSdBadge() { 2446c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman ScoredNetwork network = 245699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman buildScoredNetworkWithGivenBadgeForTestRssi(NetworkBadging.BADGING_SD); 246699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman assertEquals(NetworkBadging.BADGING_SD, network.calculateBadge(TEST_RSSI)); 2476c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman } 2486c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman 2496c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman @Test 2506c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman public void calculateBadgeShouldReturnNoBadge() { 2516c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman ScoredNetwork network = 252699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman buildScoredNetworkWithGivenBadgeForTestRssi(NetworkBadging.BADGING_NONE); 253699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman assertEquals(NetworkBadging.BADGING_NONE, network.calculateBadge(TEST_RSSI)); 2546c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman } 2556c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman 2566c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman private ScoredNetwork buildScoredNetworkWithGivenBadgeForTestRssi(int badge) { 2576c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman RssiCurve badgingCurve = 2586c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman new RssiCurve(RSSI_START, 10, new byte[] {0, 0, 0, 0, 0, 0, (byte) badge}); 2596c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman Bundle attr = new Bundle(); 2606c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman attr.putParcelable(ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE, badgingCurve); 2616c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman return new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr); 2626c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman } 263c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman} 264