blob: 91899742f5755a8711498e8343cabb4789904a5a [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.SplitInstallErrorCode;
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 SplitInstallFailureLogger class.
*/
@RunWith(BaseRobolectricTestRunner.class)
public class SplitInstallFailureLoggerTest {
@Mock
private RecordHistogram.Natives mRecordHistogramMock;
@Rule
public JniMocker mocker = new JniMocker();
private SplitInstallFailureLogger mFailureLogger;
private int mErrorCodeMapping[][] = {
{4, SplitInstallErrorCode.ACCESS_DENIED},
{5, SplitInstallErrorCode.ACTIVE_SESSIONS_LIMIT_EXCEEDED},
{6, SplitInstallErrorCode.API_NOT_AVAILABLE},
{7, SplitInstallErrorCode.INCOMPATIBLE_WITH_EXISTING_SESSION},
{8, SplitInstallErrorCode.INSUFFICIENT_STORAGE},
{9, SplitInstallErrorCode.INVALID_REQUEST},
{10, SplitInstallErrorCode.MODULE_UNAVAILABLE},
{11, SplitInstallErrorCode.NETWORK_ERROR},
{12, SplitInstallErrorCode.NO_ERROR},
{13, SplitInstallErrorCode.SERVICE_DIED},
{14, SplitInstallErrorCode.SESSION_NOT_FOUND},
{15, SplitInstallErrorCode.SPLITCOMPAT_COPY_ERROR},
{16, SplitInstallErrorCode.SPLITCOMPAT_EMULATION_ERROR},
{17, SplitInstallErrorCode.SPLITCOMPAT_VERIFICATION_ERROR},
{18, SplitInstallErrorCode.INTERNAL_ERROR},
};
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mocker.mock(RecordHistogramJni.TEST_HOOKS, mRecordHistogramMock);
mFailureLogger = new SplitInstallFailureLogger();
}
@Test
public void whenLogSuccess_verifyHistogramCode() {
// Arrange.
String moduleName = "whenLogSuccess_verifyHistogramCode";
int expectedCode = 0;
// Act.
mFailureLogger.logStatusSuccess(moduleName);
// Assert.
assertEquals(expectedCode, getHistogramStatus(moduleName));
}
@Test
public void whenLogCancelation_verifyHistogramCode() {
// Arrange.
String moduleName = "whenLogCancelation_verifyHistogramCode";
int expectedCode = 3;
// Act.
mFailureLogger.logStatusCanceled(moduleName);
// Assert.
assertEquals(expectedCode, getHistogramStatus(moduleName));
}
@Test
public void whenLogNoSplitCompat_verifyHistogramCode() {
// Arrange.
String moduleName = "whenLogNoSplitCompat_verifyHistogramCode";
int expectedCode = 21;
// Act.
mFailureLogger.logStatusNoSplitCompat(moduleName);
// Assert.
assertEquals(expectedCode, getHistogramStatus(moduleName));
}
@Test
public void whenLogStatusFailure_verifyHistogramCode() {
// Arrange.
String moduleName = "whenLogStatusFailure_verifyHistogramCode";
int unknownCode = 999;
int expectedUnknownCode = 19;
// Act & Assert.
for (int[] tuple : mErrorCodeMapping) {
int expectedOutputCode = tuple[0];
int inputCode = tuple[1];
mFailureLogger.logStatusFailure(moduleName, inputCode);
assertEquals(expectedOutputCode, getHistogramStatus(moduleName));
}
mFailureLogger.logStatusFailure(moduleName, unknownCode);
assertEquals(expectedUnknownCode, getHistogramStatus(moduleName));
}
@Test
public void whenLogRequestFailure_verifyHistogramCode() {
// Arrange.
String moduleName = "whenLogRequestFailure_verifyHistogramCode";
int unknownCode = 999;
int expectedUnknownCode = 20;
// Act & Assert.
for (int[] tuple : mErrorCodeMapping) {
int expectedOutputCode = tuple[0];
int inputCode = tuple[1];
mFailureLogger.logRequestFailure(moduleName, inputCode);
assertEquals(expectedOutputCode, getHistogramStatus(moduleName));
}
mFailureLogger.logRequestFailure(moduleName, unknownCode);
assertEquals(expectedUnknownCode, getHistogramStatus(moduleName));
}
private int getHistogramStatus(String moduleName) {
String expName = "Android.FeatureModules.InstallStatus." + moduleName;
Integer expBoundary = 22;
return LoggerTestUtil.getHistogramStatus(mRecordHistogramMock, expName, expBoundary);
}
}