blob: d6f91c7d30f71d453e373b4dbd51510543911553 [file] [log] [blame]
// Copyright 2019 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.module_installer.logger;
import static org.junit.Assert.assertEquals;
import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordHistogramJni;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.JniMocker;
/**
* Test suite for the SplitInstallStatusLogger class.
*/
@RunWith(BaseRobolectricTestRunner.class)
public class SplitInstallStatusLoggerTest {
@Mock
private RecordHistogram.Natives mRecordHistogramMock;
@Rule
public JniMocker mocker = new JniMocker();
private SplitInstallStatusLogger mStatusLogger;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mocker.mock(RecordHistogramJni.TEST_HOOKS, mRecordHistogramMock);
mStatusLogger = new SplitInstallStatusLogger();
}
@Test
public void whenLogRequestStart_verifyHistogramCode() {
// Arrange.
String moduleName = "whenLogRequestStart_verifyHistogramCode";
int expectedCode = 1;
// Act.
mStatusLogger.logRequestStart(moduleName);
// Assert.
assertEquals(expectedCode, getHistogramStatus(moduleName));
}
@Test
public void whenLogRequestDeferredStart_verifyHistogramCode() {
// Arrange.
String moduleName = "whenLogRequestDeferredStart_verifyHistogramCode";
int expectedCode = 11;
// Act.
mStatusLogger.logRequestDeferredStart(moduleName);
// Assert.
assertEquals(expectedCode, getHistogramStatus(moduleName));
}
@Test
public void whenLogStatusChange_verifyHistogramCode() {
// Arrange.
String moduleName = "whenLogStatusChange_verifyHistogramCode";
int unknownCode = 999;
// Act & Assert.
assertEquals(0, logStatusChange(moduleName, unknownCode));
assertEquals(2, logStatusChange(moduleName, SplitInstallSessionStatus.PENDING));
assertEquals(3, logStatusChange(moduleName, SplitInstallSessionStatus.DOWNLOADING));
assertEquals(4, logStatusChange(moduleName, SplitInstallSessionStatus.DOWNLOADED));
assertEquals(5, logStatusChange(moduleName, SplitInstallSessionStatus.INSTALLING));
assertEquals(6, logStatusChange(moduleName, SplitInstallSessionStatus.INSTALLED));
assertEquals(7, logStatusChange(moduleName, SplitInstallSessionStatus.FAILED));
assertEquals(8, logStatusChange(moduleName, SplitInstallSessionStatus.CANCELING));
assertEquals(9, logStatusChange(moduleName, SplitInstallSessionStatus.CANCELED));
assertEquals(10,
logStatusChange(moduleName, SplitInstallSessionStatus.REQUIRES_USER_CONFIRMATION));
}
private int logStatusChange(String moduleName, int status) {
mStatusLogger.logStatusChange(moduleName, status);
return getHistogramStatus(moduleName);
}
private int getHistogramStatus(String moduleName) {
String expName = "Android.FeatureModules.InstallingStatus." + moduleName;
Integer expBoundary = 12;
return LoggerTestUtil.getHistogramStatus(mRecordHistogramMock, expName, expBoundary);
}
}