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