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
52c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void calculateRankingOffsetShouldThrowUnsupportedOperationException() {
53c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        // No curve or ranking score offset set in curve
54c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork scoredNetwork = new ScoredNetwork(KEY, null);
55c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        try {
56c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            scoredNetwork.calculateRankingScore(TEST_RSSI);
57c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            fail("Should have thrown UnsupportedOperationException");
58c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        } catch (UnsupportedOperationException e) {
59c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            // expected
60c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        }
61c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
62c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
63c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    @Test
64c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void calculateRankingOffsetWithRssiCurveShouldReturnExpectedScore() {
65c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork scoredNetwork = new ScoredNetwork(KEY, CURVE);
66c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertEquals(TEST_SCORE << Byte.SIZE, scoredNetwork.calculateRankingScore(TEST_RSSI));
67c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
68c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
69c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    @Test
70c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void rankingScoresShouldDifferByRankingScoreOffset() {
71c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork scoredNetwork1 = new ScoredNetwork(KEY, CURVE);
72c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork scoredNetwork2
73c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            = new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES);
74c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        int scoreDifference =
75c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            scoredNetwork2.calculateRankingScore(TEST_RSSI)
76c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            - scoredNetwork1.calculateRankingScore(TEST_RSSI);
77c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertEquals(RANKING_SCORE_OFFSET, scoreDifference);
78c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
79c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
80c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    @Test
81c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void calculateRankingScoreShouldNotResultInIntegerOverflow() {
82c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        Bundle attr = new Bundle();
83c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        attr.putInt(ScoredNetwork.ATTRIBUTES_KEY_RANKING_SCORE_OFFSET, Integer.MAX_VALUE);
84c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork scoredNetwork
85c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            = new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr);
86c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertEquals(Integer.MAX_VALUE, scoredNetwork.calculateRankingScore(TEST_RSSI));
87c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
88c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
89c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    @Test
90c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void calculateRankingScoreShouldNotResultInIntegerUnderflow() {
91c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        Bundle attr = new Bundle();
92c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        attr.putInt(ScoredNetwork.ATTRIBUTES_KEY_RANKING_SCORE_OFFSET, Integer.MIN_VALUE);
93c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork scoredNetwork =
94c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr);
95c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertEquals(Integer.MIN_VALUE, scoredNetwork.calculateRankingScore(RSSI_START));
96c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
97c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
98c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    @Test
99c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void hasRankingScoreShouldReturnFalse() {
100c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork network = new ScoredNetwork(KEY, null /* rssiCurve */);
101c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertFalse(network.hasRankingScore());
102c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
103c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
104c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    @Test
105c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void hasRankingScoreShouldReturnTrueWhenAttributesHasRankingScoreOffset() {
106c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork network =
107c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman                new ScoredNetwork(KEY, null /* rssiCurve */, false /* meteredHint */, ATTRIBUTES);
108c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertTrue(network.hasRankingScore());
109c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
110c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
111c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    @Test
112c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void hasRankingScoreShouldReturnTrueWhenCurveIsPresent() {
113c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork network =
114c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman                new ScoredNetwork(KEY, CURVE , false /* meteredHint */);
115c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertTrue(network.hasRankingScore());
116c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
117c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
118c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    @Test
119c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void shouldWriteAndReadFromParcelWhenAllFieldsSet() {
120c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork network = new ScoredNetwork(KEY, CURVE, true /* meteredHint */, ATTRIBUTES);
121c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork newNetwork;
122c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
123c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        Parcel parcel = null;
124c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        try {
125c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            parcel = Parcel.obtain();
126c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            network.writeToParcel(parcel, 0 /* flags */);
127c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            parcel.setDataPosition(0);
128c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            newNetwork = ScoredNetwork.CREATOR.createFromParcel(parcel);
129c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        } finally {
130c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            if (parcel != null) {
131c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman                parcel.recycle();
132c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            }
133c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        }
134c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertEquals(CURVE.start, newNetwork.rssiCurve.start);
135c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertEquals(CURVE.bucketWidth, newNetwork.rssiCurve.bucketWidth);
136c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertTrue(Arrays.equals(CURVE.rssiBuckets, newNetwork.rssiCurve.rssiBuckets));
137c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertTrue(newNetwork.meteredHint);
138c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertNotNull(newNetwork.attributes);
139c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertEquals(
140c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman                RANKING_SCORE_OFFSET,
141c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman                newNetwork.attributes.getInt(ScoredNetwork.ATTRIBUTES_KEY_RANKING_SCORE_OFFSET));
142c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
143c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
144c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    @Test
145c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    public void shouldWriteAndReadFromParcelWithoutBundle() {
146c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork network = new ScoredNetwork(KEY, CURVE, true /* meteredHint */);
147c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        ScoredNetwork newNetwork;
148c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman
149c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        Parcel parcel = null;
150c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        try {
151c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            parcel = Parcel.obtain();
152c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            network.writeToParcel(parcel, 0 /* flags */);
153c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            parcel.setDataPosition(0);
154c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            newNetwork = ScoredNetwork.CREATOR.createFromParcel(parcel);
155c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        } finally {
156c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            if (parcel != null) {
157c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman                parcel.recycle();
158c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman            }
159c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        }
160c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertEquals(CURVE.start, newNetwork.rssiCurve.start);
161c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertEquals(CURVE.bucketWidth, newNetwork.rssiCurve.bucketWidth);
162c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertTrue(Arrays.equals(CURVE.rssiBuckets, newNetwork.rssiCurve.rssiBuckets));
163c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertTrue(newNetwork.meteredHint);
164c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman        assertNull(newNetwork.attributes);
165c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman    }
1666c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman
1676c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    @Test
1686c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    public void calculateBadgeShouldReturnNoBadgeWhenNoAttributesBundle() {
1696c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        ScoredNetwork network = new ScoredNetwork(KEY, CURVE);
170699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman        assertEquals(NetworkBadging.BADGING_NONE, network.calculateBadge(TEST_RSSI));
1716c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    }
1726c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman
1736c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    @Test
1746c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    public void calculateBadgeShouldReturnNoBadgeWhenNoBadgingCurveInBundle() {
1756c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        ScoredNetwork network = new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES);
176699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman        assertEquals(NetworkBadging.BADGING_NONE, network.calculateBadge(TEST_RSSI));
1776c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    }
1786c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman
1796c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    @Test
1806c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    public void calculateBadgeShouldReturn4kBadge() {
1816c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        ScoredNetwork network =
182699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman            buildScoredNetworkWithGivenBadgeForTestRssi(NetworkBadging.BADGING_4K);
183699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman        assertEquals(NetworkBadging.BADGING_4K, network.calculateBadge(TEST_RSSI));
1846c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    }
1856c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman
1866c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    @Test
1876c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    public void calculateBadgeShouldReturnHdBadge() {
1886c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        ScoredNetwork network =
189699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman            buildScoredNetworkWithGivenBadgeForTestRssi(NetworkBadging.BADGING_HD);
190699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman        assertEquals(NetworkBadging.BADGING_HD, network.calculateBadge(TEST_RSSI));
1916c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    }
1926c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman
1936c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    @Test
1946c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    public void calculateBadgeShouldReturnSdBadge() {
1956c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        ScoredNetwork network =
196699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman            buildScoredNetworkWithGivenBadgeForTestRssi(NetworkBadging.BADGING_SD);
197699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman        assertEquals(NetworkBadging.BADGING_SD, network.calculateBadge(TEST_RSSI));
1986c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    }
1996c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman
2006c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    @Test
2016c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    public void calculateBadgeShouldReturnNoBadge() {
2026c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        ScoredNetwork network =
203699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman            buildScoredNetworkWithGivenBadgeForTestRssi(NetworkBadging.BADGING_NONE);
204699deaf6103d182dbd291ca2b420f30b439753d4Sundeep Ghuman        assertEquals(NetworkBadging.BADGING_NONE, network.calculateBadge(TEST_RSSI));
2056c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    }
2066c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman
2076c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    private ScoredNetwork buildScoredNetworkWithGivenBadgeForTestRssi(int badge) {
2086c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        RssiCurve badgingCurve =
2096c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman               new RssiCurve(RSSI_START, 10, new byte[] {0, 0, 0, 0, 0, 0, (byte) badge});
2106c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        Bundle attr = new Bundle();
2116c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        attr.putParcelable(ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE, badgingCurve);
2126c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman        return new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr);
2136c929621536664d6c014b177e7e6983f1fbd67acSundeep Ghuman    }
214c63d5b0c74ad7330d9893640cdfce0e03f91c0f1Sundeep Ghuman}
215