/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.mozstumbler.client;
import android.content.Context;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mozilla.mozstumbler.service.stumblerthread.datahandling.DataStorageManager;
import org.mozilla.mozstumbler.service.stumblerthread.datahandling.StorageIsEmptyTracker;
import org.mozilla.mozstumbler.svclocator.ServiceLocator;
import org.mozilla.mozstumbler.svclocator.services.ISystemClock;
import org.mozilla.mozstumbler.svclocator.services.MockSystemClock;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
@Config(emulateSdk = 18)
@RunWith(RobolectricTestRunner.class)
public class QueuedCountsTrackerTest {
public class StorageTracker implements StorageIsEmptyTracker {
public void notifyStorageStateEmpty(boolean isEmpty) {
}
}
@Before
public void setup() {
DataStorageManager.sInstance = null;
}
@Test
public void testNoDataStorageManager() {
QueuedCountsTracker qct = QueuedCountsTracker.getInstance();
QueuedCountsTracker.QueuedCounts qc = qct.getQueuedCounts();
assertNotNull(qc);
assertEquals(0, qc.mBytes);
assertEquals(0, qc.mCellCount);
assertEquals(0, qc.mReportCount);
assertEquals(0, qc.mWifiCount);
}
@Test
public void testCachedValues() {
Context ctx = Robolectric.application;
StorageTracker tracker = new StorageTracker();
long maxBytes = 20000;
int maxWeeks = 10;
MockSystemClock clock = new MockSystemClock();
ServiceLocator.getInstance().putService(ISystemClock.class, clock);
ClientDataStorageManager.createGlobalInstance(ctx, tracker, maxBytes, maxWeeks);
QueuedCountsTracker qct = QueuedCountsTracker.getInstance();
assertNotNull(DataStorageManager.getInstance());
DataStorageManager.sInstance = spy(DataStorageManager.sInstance);
doReturn(5).when(DataStorageManager.sInstance).getQueuedWifiCount();
doReturn(3).when(DataStorageManager.sInstance).getQueuedCellCount();
doReturn(9).when(DataStorageManager.sInstance).getQueuedReportCount();
doReturn(new byte[]{0x15, 0x17, 0x18}).when(DataStorageManager.sInstance).getCurrentReportsRawBytes();
clock.setCurrentTime(900000);
QueuedCountsTracker.QueuedCounts qc = qct.getQueuedCounts();
assertEquals(5, qc.mWifiCount);
assertEquals(3, qc.mCellCount);
assertEquals(9, qc.mReportCount);
assertEquals(23, qc.mBytes);
doReturn(new byte[]{
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29
}).when(DataStorageManager.sInstance).getCurrentReportsRawBytes();
QueuedCountsTracker.QueuedCounts qc2 = qct.getQueuedCounts();
// These should be the same object because we haven't pushed the clock forward.
assertEquals(23, qc.mBytes);
clock.setCurrentTime(999999);
QueuedCountsTracker.QueuedCounts qc3 = qct.getQueuedCounts();
assertEquals(40, qc3.mBytes);
}
}