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
This commit is contained in:
Rambo Wang
2020-02-20 16:42:01 -08:00
parent 5522099ef0
commit c13ba9d27f
3 changed files with 34 additions and 12 deletions

View File

@@ -154,8 +154,7 @@
<SwitchPreference <SwitchPreference
android:key="enable_verbose_vendor_logging" android:key="enable_verbose_vendor_logging"
android:title="@string/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 <SwitchPreference
android:key="automatic_system_server_heap_dumps" android:key="automatic_system_server_heap_dumps"

View File

@@ -133,7 +133,8 @@ public class EnableVerboseVendorLoggingPreferenceController
} }
/** Return a {@IDumpstateDevice} instance or null if service is not available. */ /** Return a {@IDumpstateDevice} instance or null if service is not available. */
private @Nullable IDumpstateDevice getDumpstateDeviceService() { @VisibleForTesting
@Nullable IDumpstateDevice getDumpstateDeviceService() {
IDumpstateDevice service = null; IDumpstateDevice service = null;
try { try {
service = android.hardware.dumpstate.V1_1.IDumpstateDevice service = android.hardware.dumpstate.V1_1.IDumpstateDevice

View File

@@ -18,10 +18,13 @@ package com.android.settings.development;
import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue; 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.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.hardware.dumpstate.V1_1.IDumpstateDevice;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference; import androidx.preference.SwitchPreference;
@@ -34,24 +37,32 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import java.lang.reflect.Field;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public final class EnableVerboseVendorLoggingPreferenceControllerTest { public final class EnableVerboseVendorLoggingPreferenceControllerTest {
@Mock @Mock
private SwitchPreference mPreference; private SwitchPreference mPreference;
@Mock @Mock
private PreferenceScreen mPreferenceScreen; private PreferenceScreen mPreferenceScreen;
@Mock
IDumpstateDevice mIDumpstateDevice;
private Context mContext; private Context mContext;
private EnableVerboseVendorLoggingPreferenceController mController; private EnableVerboseVendorLoggingPreferenceController mController;
@Before @Before
public void setUp() { public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; 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 // mock with Dumpstate HAL v1.1
org.junit.Assume.assumeTrue(mController.isIDumpstateDeviceV1_1ServiceAvailable()); Field f = EnableVerboseVendorLoggingPreferenceController.class
.getDeclaredField("mDumpstateHalVersion");
f.setAccessible(true);
f.setInt(mController, 1 /* DUMPSTATE_HAL_VERSION_1_1 */);
when(mPreferenceScreen.findPreference(mController.getPreferenceKey())) when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
.thenReturn(mPreference); .thenReturn(mPreference);
@@ -59,7 +70,9 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
} }
@Test @Test
public void onPreferenceChange_settingEnable_enableVendorLoggingShouldBeOn() { public void onPreferenceChange_settingEnable_enableVendorLoggingShouldBeOn() throws Exception {
doReturn(true).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.onPreferenceChange(mPreference, true /* new value */); mController.onPreferenceChange(mPreference, true /* new value */);
final boolean enabled = mController.getVerboseLoggingEnabled(); final boolean enabled = mController.getVerboseLoggingEnabled();
@@ -67,7 +80,10 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
} }
@Test @Test
public void onPreferenceChange_settingDisable_enableVendorLoggingShouldBeOff() { public void onPreferenceChange_settingDisable_enableVendorLoggingShouldBeOff()
throws Exception {
doReturn(false).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.onPreferenceChange(mPreference, false /* new value */); mController.onPreferenceChange(mPreference, false /* new value */);
final boolean enabled = mController.getVerboseLoggingEnabled(); final boolean enabled = mController.getVerboseLoggingEnabled();
@@ -75,7 +91,9 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
} }
@Test @Test
public void updateState_settingDisabled_preferenceShouldNotBeChecked() { public void updateState_settingDisabled_preferenceShouldNotBeChecked() throws Exception {
doReturn(false).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.setVerboseLoggingEnabled(false); mController.setVerboseLoggingEnabled(false);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -83,7 +101,9 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
} }
@Test @Test
public void updateState_settingEnabled_preferenceShouldBeChecked() { public void updateState_settingEnabled_preferenceShouldBeChecked() throws Exception {
doReturn(true).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.setVerboseLoggingEnabled(true); mController.setVerboseLoggingEnabled(true);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -91,7 +111,9 @@ public final class EnableVerboseVendorLoggingPreferenceControllerTest {
} }
@Test @Test
public void onDeveloperOptionDisabled_shouldDisablePreference() { public void onDeveloperOptionDisabled_shouldDisablePreference() throws Exception {
doReturn(false).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.onDeveloperOptionsSwitchDisabled(); mController.onDeveloperOptionsSwitchDisabled();
final boolean enabled = mController.getVerboseLoggingEnabled(); final boolean enabled = mController.getVerboseLoggingEnabled();