Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c13ba9d2 authored by Rambo Wang's avatar Rambo Wang
Browse files

Polish developer option enable verbose vendor logging

Robotests cases in EnableVerboseVendorLoggingPreferenceControllerTest
show all pass but actually they are all bypassed due to the fact that
the test class can not grant sepolicy permission as what Settings
app does.

This version introduces mock DumpstateDevice HAL to really
perform the Robotests cases.

This CL also clear up code format issues.

Bug: 149886908
Test: make && make RunSettingsRoboTests
Change-Id: I64025ebea60e18d17338604519a6cae98ca7928b
parent 5522099e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -154,8 +154,7 @@
        <SwitchPreference
            android:key="enable_verbose_vendor_logging"
            android:title="@string/enable_verbose_vendor_logging"
            android:summary="@string/enable_verbose_vendor_logging_summary"
            />
            android:summary="@string/enable_verbose_vendor_logging_summary" />

        <SwitchPreference
            android:key="automatic_system_server_heap_dumps"
+2 −1
Original line number Diff line number Diff line
@@ -133,7 +133,8 @@ public class EnableVerboseVendorLoggingPreferenceController
    }

    /** Return a {@IDumpstateDevice} instance or null if service is not available. */
    private @Nullable IDumpstateDevice getDumpstateDeviceService() {
    @VisibleForTesting
    @Nullable IDumpstateDevice getDumpstateDeviceService() {
        IDumpstateDevice service = null;
        try {
            service = android.hardware.dumpstate.V1_1.IDumpstateDevice
+31 −9
Original line number Diff line number Diff line
@@ -18,10 +18,13 @@ package com.android.settings.development;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.hardware.dumpstate.V1_1.IDumpstateDevice;

import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
@@ -34,24 +37,32 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

import java.lang.reflect.Field;

@RunWith(RobolectricTestRunner.class)
public final class EnableVerboseVendorLoggingPreferenceControllerTest {
    @Mock
    private SwitchPreference mPreference;
    @Mock
    private PreferenceScreen mPreferenceScreen;
    @Mock
    IDumpstateDevice mIDumpstateDevice;

    private Context mContext;
    private EnableVerboseVendorLoggingPreferenceController mController;

    @Before
    public void setUp() {
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mController = new EnableVerboseVendorLoggingPreferenceController(mContext);
        mController = spy(new EnableVerboseVendorLoggingPreferenceController(mContext));
        doReturn(mIDumpstateDevice).when(mController).getDumpstateDeviceService();

        // bypass if IDumpstateDevice service not avalaible at all
        org.junit.Assume.assumeTrue(mController.isIDumpstateDeviceV1_1ServiceAvailable());
        // mock with Dumpstate HAL v1.1
        Field f = EnableVerboseVendorLoggingPreferenceController.class
                .getDeclaredField("mDumpstateHalVersion");
        f.setAccessible(true);
        f.setInt(mController, 1 /* DUMPSTATE_HAL_VERSION_1_1 */);

        when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
                .thenReturn(mPreference);
@@ -59,7 +70,9 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
    }

    @Test
    public void onPreferenceChange_settingEnable_enableVendorLoggingShouldBeOn() {
    public void onPreferenceChange_settingEnable_enableVendorLoggingShouldBeOn() throws Exception {
        doReturn(true).when(mIDumpstateDevice).getVerboseLoggingEnabled();

        mController.onPreferenceChange(mPreference, true /* new value */);

        final boolean enabled = mController.getVerboseLoggingEnabled();
@@ -67,7 +80,10 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
    }

    @Test
    public void onPreferenceChange_settingDisable_enableVendorLoggingShouldBeOff() {
    public void onPreferenceChange_settingDisable_enableVendorLoggingShouldBeOff()
            throws Exception {
        doReturn(false).when(mIDumpstateDevice).getVerboseLoggingEnabled();

        mController.onPreferenceChange(mPreference,  false /* new value */);

        final boolean enabled = mController.getVerboseLoggingEnabled();
@@ -75,7 +91,9 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
    }

    @Test
    public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
    public void updateState_settingDisabled_preferenceShouldNotBeChecked() throws Exception {
        doReturn(false).when(mIDumpstateDevice).getVerboseLoggingEnabled();

        mController.setVerboseLoggingEnabled(false);
        mController.updateState(mPreference);

@@ -83,7 +101,9 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
    }

    @Test
    public void updateState_settingEnabled_preferenceShouldBeChecked() {
    public void updateState_settingEnabled_preferenceShouldBeChecked() throws Exception {
        doReturn(true).when(mIDumpstateDevice).getVerboseLoggingEnabled();

        mController.setVerboseLoggingEnabled(true);
        mController.updateState(mPreference);

@@ -91,7 +111,9 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
    }

    @Test
    public void onDeveloperOptionDisabled_shouldDisablePreference() {
    public void onDeveloperOptionDisabled_shouldDisablePreference() throws Exception {
        doReturn(false).when(mIDumpstateDevice).getVerboseLoggingEnabled();

        mController.onDeveloperOptionsSwitchDisabled();

        final boolean enabled = mController.getVerboseLoggingEnabled();