blob: 515cec377eedf86a6b42b79167898ad8e72816fb [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.components.background_task_scheduler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.robolectric.annotation.Config;
import org.chromium.base.ContextUtils;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Feature;
import java.util.Set;
/** Unit tests for {@link BackgroundTaskSchedulerUma}. */
@RunWith(BaseRobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class BackgroundTaskSchedulerUmaTest {
@Spy
private BackgroundTaskSchedulerUma mUmaSpy;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
BackgroundTaskSchedulerUma.setInstanceForTesting(mUmaSpy);
doNothing().when(mUmaSpy).assertNativeIsLoaded();
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testToUmaEnumValueFromTaskId() {
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_TEST,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(TaskIds.TEST));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OMAHA,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(TaskIds.OMAHA_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_GCM,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.GCM_BACKGROUND_TASK_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_NOTIFICATIONS,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.NOTIFICATION_SERVICE_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_WEBVIEW_MINIDUMP,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.WEBVIEW_MINIDUMP_UPLOADING_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_CHROME_MINIDUMP,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.CHROME_MINIDUMP_UPLOADING_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_PAGES,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_PREFETCH,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_DOWNLOAD_SERVICE,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.DOWNLOAD_SERVICE_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_DOWNLOAD_CLEANUP,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.DOWNLOAD_CLEANUP_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_WEBVIEW_VARIATIONS,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.WEBVIEW_VARIATIONS_SEED_FETCH_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_CONTENT_NOTIFICATION,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.OFFLINE_PAGES_PREFETCH_NOTIFICATION_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_WEBAPK_UPDATE,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(TaskIds.WEBAPK_UPDATE_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_DOWNLOAD_RESUMPTION,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.DOWNLOAD_RESUMPTION_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_FEED_REFRESH,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(TaskIds.FEED_REFRESH_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_COMPONENT_UPDATE,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.COMPONENT_UPDATE_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_EXPLORE_SITES_REFRESH,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.EXPLORE_SITES_REFRESH_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_COUNT, 17);
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testCacheEvent() {
String eventName = "event";
int eventValue = 77;
mUmaSpy.cacheEvent(eventName, eventValue);
Set<String> cachedUmaEntries = BackgroundTaskSchedulerUma.getCachedUmaEntries(
ContextUtils.getAppSharedPreferences());
assertTrue(cachedUmaEntries.contains("event:77:1"));
assertEquals(1, cachedUmaEntries.size());
mUmaSpy.cacheEvent(eventName, eventValue);
mUmaSpy.cacheEvent(eventName, eventValue);
cachedUmaEntries = BackgroundTaskSchedulerUma.getCachedUmaEntries(
ContextUtils.getAppSharedPreferences());
assertTrue(cachedUmaEntries.contains("event:77:3"));
assertEquals(1, cachedUmaEntries.size());
int eventValue2 = 50;
mUmaSpy.cacheEvent(eventName, eventValue2);
cachedUmaEntries = BackgroundTaskSchedulerUma.getCachedUmaEntries(
ContextUtils.getAppSharedPreferences());
assertTrue(cachedUmaEntries.contains("event:77:3"));
assertTrue(cachedUmaEntries.contains("event:50:1"));
assertEquals(2, cachedUmaEntries.size());
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testFlushStats() {
doNothing().when(mUmaSpy).recordEnumeratedHistogram(anyString(), anyInt(), anyInt());
BackgroundTaskSchedulerUma.getInstance().flushStats();
verify(mUmaSpy, times(0)).recordEnumeratedHistogram(anyString(), anyInt(), anyInt());
String eventName = "event";
int eventValue = 77;
int eventValue2 = 50;
mUmaSpy.cacheEvent(eventName, eventValue);
mUmaSpy.cacheEvent(eventName, eventValue);
mUmaSpy.cacheEvent(eventName, eventValue);
mUmaSpy.cacheEvent(eventName, eventValue2);
BackgroundTaskSchedulerUma.getInstance().flushStats();
verify(mUmaSpy, times(3))
.recordEnumeratedHistogram(eq(eventName), eq(eventValue),
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_COUNT));
verify(mUmaSpy, times(1))
.recordEnumeratedHistogram(eq(eventName), eq(eventValue2),
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_COUNT));
Set<String> cachedUmaEntries = BackgroundTaskSchedulerUma.getCachedUmaEntries(
ContextUtils.getAppSharedPreferences());
assertTrue(cachedUmaEntries.isEmpty());
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testReportTaskScheduledSuccess() {
doNothing().when(mUmaSpy).cacheEvent(anyString(), anyInt());
BackgroundTaskSchedulerUma.getInstance().reportTaskScheduled(TaskIds.TEST, true);
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.TaskScheduled.Success"),
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_TEST));
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testReportTaskScheduledFailure() {
doNothing().when(mUmaSpy).cacheEvent(anyString(), anyInt());
BackgroundTaskSchedulerUma.getInstance().reportTaskScheduled(
TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID, false);
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.TaskScheduled.Failure"),
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_PAGES));
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testReportTaskCanceled() {
doNothing().when(mUmaSpy).cacheEvent(anyString(), anyInt());
BackgroundTaskSchedulerUma.getInstance().reportTaskCanceled(
TaskIds.OFFLINE_PAGES_PREFETCH_JOB_ID);
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.TaskCanceled"),
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_PREFETCH));
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testReportTaskStarted() {
doNothing().when(mUmaSpy).cacheEvent(anyString(), anyInt());
BackgroundTaskSchedulerUma.getInstance().reportTaskStarted(TaskIds.OMAHA_JOB_ID);
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.TaskStarted"),
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OMAHA));
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testReportTaskStopped() {
doNothing().when(mUmaSpy).cacheEvent(anyString(), anyInt());
BackgroundTaskSchedulerUma.getInstance().reportTaskStopped(
TaskIds.GCM_BACKGROUND_TASK_JOB_ID);
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.TaskStopped"),
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_GCM));
}
@Test
@Feature({"BackgroundTaskScheduler"})
public void testReportTaskStartedNative() {
doNothing().when(mUmaSpy).cacheEvent(anyString(), anyInt());
BackgroundTaskSchedulerExternalUma.reportTaskStartedNative(TaskIds.DOWNLOAD_SERVICE_JOB_ID);
verify(mUmaSpy, times(1))
.cacheEvent(eq("Android.BackgroundTaskScheduler.TaskLoadedNative"),
eq(BackgroundTaskSchedulerUma.BACKGROUND_TASK_DOWNLOAD_SERVICE));
}
}