1ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande/*
2ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * Copyright (C) 2016 The Android Open Source Project
3ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande *
4ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * Licensed under the Apache License, Version 2.0 (the "License");
5ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * you may not use this file except in compliance with the License.
6ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * You may obtain a copy of the License at
7ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande *
8ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande *      http://www.apache.org/licenses/LICENSE-2.0
9ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande *
10ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * Unless required by applicable law or agreed to in writing, software
11ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * distributed under the License is distributed on an "AS IS" BASIS,
12ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * See the License for the specific language governing permissions and
14ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * limitations under the License.
15ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande */
16ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
178ca4ac971a9b862fbd69c57af3a3c0029a6b9f4dPeter Qiupackage com.android.server.wifi.hotspot2;
18ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
19ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandeimport static org.junit.Assert.assertNotNull;
20ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandeimport static org.junit.Assert.assertNull;
21f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiuimport static org.junit.Assert.assertTrue;
22ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandeimport static org.mockito.Mockito.when;
23ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandeimport static org.mockito.MockitoAnnotations.initMocks;
24ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
25ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandeimport android.test.suitebuilder.annotation.SmallTest;
26ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
278ca4ac971a9b862fbd69c57af3a3c0029a6b9f4dPeter Qiuimport com.android.server.wifi.Clock;
28ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandeimport com.android.server.wifi.hotspot2.ANQPData;
29ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandeimport com.android.server.wifi.hotspot2.AnqpCache;
30ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
31f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiuimport org.junit.Before;
32ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandeimport org.junit.Test;
33ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandeimport org.mockito.Mock;
34ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
35ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande/**
36ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande * Unit tests for {@link com.android.server.wifi.hotspot2.AnqpCache}.
37f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu *
38f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu * TODO(b/33000864): add more test once the ANQP elements cleanup are completed, which will
39f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu * allow easy construction of ANQP elements for testing.
40ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande */
41ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande@SmallTest
42ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpandepublic class AnqpCacheTest {
43f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    private static final ANQPNetworkKey ENTRY_KEY = new ANQPNetworkKey("test", 0L, 0L, 1);
44ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
45f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    @Mock Clock mClock;
46f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    AnqpCache mCache;
47ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
48f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    /**
49f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     * Sets up test.
50f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     */
51f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    @Before
52f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    public void setUp() throws Exception {
53f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        initMocks(this);
54f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        // Returning the initial timestamp.
55f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        when(mClock.getElapsedSinceBootMillis()).thenReturn(0L);
56f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        mCache = new AnqpCache(mClock);
57ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande    }
58ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
59f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    /**
60f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     * Verify expectation for addEntry and getEntry.
61f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     *
62f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     * @throws Exception
63f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     */
64f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    @Test
65f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    public void addAndGetEntry() throws Exception {
66f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        mCache.addEntry(ENTRY_KEY, null);
67f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        ANQPData data = mCache.getEntry(ENTRY_KEY);
68f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        assertNotNull(data);
69f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        assertTrue(data.getElements().isEmpty());
70ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande    }
71ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
72f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    /**
73f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     * Verify that getting a non-existing entry will return a null.
74f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     *
75f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     * @throws Exception
76f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     */
77f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    @Test
78f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    public void getNonExistEntry() throws Exception {
79f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        assertNull(mCache.getEntry(ENTRY_KEY));
80ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande    }
81ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande
82f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    /**
83f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     * Verify the expectation for the sweep function (expired entries will be removed).
84f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     *
85f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     * @throws Exception
86f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu     */
87ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande    @Test
88f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu    public void sweepRemoveExpiredEntry() throws Exception {
89f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        mCache.addEntry(ENTRY_KEY, null);
90f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu
91f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        // Sweep the cache when the entry is not expired.
92f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        when(mClock.getElapsedSinceBootMillis())
93f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu                .thenReturn(AnqpCache.CACHE_SWEEP_INTERVAL_MILLISECONDS);
94f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        mCache.sweep();
95f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        assertNotNull(mCache.getEntry(ENTRY_KEY));
96f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu
97f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        // Sweep the cache when the entry is expired.
98f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        when(mClock.getElapsedSinceBootMillis()).thenReturn(ANQPData.DATA_LIFETIME_MILLISECONDS);
99f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        mCache.sweep();
100f1b7517b04fedc6fd81f34a8cb84ce583b8ea63ePeter Qiu        assertNull(mCache.getEntry(ENTRY_KEY));
101ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande    }
102ae815bc71287f8a85727034c40bb07247a3d9415Vinit Deshpande}
103