1c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler/* 2c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * Copyright (C) 2017 The Android Open Source Project 3c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * 4c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 5c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * you may not use this file except in compliance with the License. 6c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * You may obtain a copy of the License at 7c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * 8c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * http://www.apache.org/licenses/LICENSE-2.0 9c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * 10c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * Unless required by applicable law or agreed to in writing, software 11c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 12c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * See the License for the specific language governing permissions and 14c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler * limitations under the License. 15c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler */ 16c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 17c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerpackage com.android.settingslib.development; 18c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 19c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport static com.google.common.truth.Truth.assertThat; 20c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport static org.mockito.Mockito.atLeastOnce; 21c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport static org.mockito.Mockito.doReturn; 22c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport static org.mockito.Mockito.verify; 23c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 240cc6164081d8b80d5bb9ddcc78543f9e6cccf0d8Fan Zhangimport android.arch.lifecycle.LifecycleOwner; 25c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport android.os.SystemProperties; 26c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport android.support.v7.preference.ListPreference; 27265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantlerimport android.support.v7.preference.Preference; 28c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport android.support.v7.preference.PreferenceScreen; 29c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 30c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport com.android.settingslib.SettingsLibRobolectricTestRunner; 31c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport com.android.settingslib.core.lifecycle.Lifecycle; 32c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 33c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport org.junit.Before; 34c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport org.junit.Test; 35c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport org.junit.runner.RunWith; 36c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport org.mockito.Mock; 37c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport org.mockito.MockitoAnnotations; 38c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerimport org.robolectric.RuntimeEnvironment; 39c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 40c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler@RunWith(SettingsLibRobolectricTestRunner.class) 41c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantlerpublic class LogpersistPreferenceControllerTest { 42c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 430cc6164081d8b80d5bb9ddcc78543f9e6cccf0d8Fan Zhang private LifecycleOwner mLifecycleOwner; 44ece840b115d531454d8f59533c7340ea05a4ba54Tony Mantler private Lifecycle mLifecycle; 45c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 46c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Mock 47c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler private ListPreference mListPreference; 48c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Mock 49c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler private PreferenceScreen mPreferenceScreen; 50c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 51c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler private AbstractLogpersistPreferenceController mController; 52c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 53c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Before 54c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler public void setUp() { 55c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler MockitoAnnotations.initMocks(this); 56c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set("ro.debuggable", "1"); 570cc6164081d8b80d5bb9ddcc78543f9e6cccf0d8Fan Zhang mLifecycleOwner = () -> mLifecycle; 580cc6164081d8b80d5bb9ddcc78543f9e6cccf0d8Fan Zhang mLifecycle = new Lifecycle(mLifecycleOwner); 59c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler mController = new AbstractLogpersistPreferenceController(RuntimeEnvironment.application, 60c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler mLifecycle) { 61c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Override 62265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler public void showConfirmationDialog(Preference preference) {} 63c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 64265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler @Override 65265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler public void dismissConfirmationDialog() {} 66265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler 67265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler @Override 68265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler public boolean isConfirmationDialogShowing() { 69265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler return false; 70c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler } 71c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler }; 72c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 73c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler doReturn(mListPreference).when(mPreferenceScreen) 74c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler .findPreference(mController.getPreferenceKey()); 75c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 76c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler mController.displayPreference(mPreferenceScreen); 77c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler } 78c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 79c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Test 80c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler public void testAvailable() { 81c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set("ro.debuggable", ""); 82c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler assertThat(mController.isAvailable()).isFalse(); 83c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set("ro.debuggable", "1"); 84c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler assertThat(mController.isAvailable()).isTrue(); 85c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set("ro.debuggable", "0"); 86c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler assertThat(mController.isAvailable()).isFalse(); 87c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler } 88c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 89c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Test 90c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler public void testUpdateLogpersistValues_null() { 91c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set( 92c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.ACTUAL_LOGPERSIST_PROPERTY, 93c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.SELECT_LOGPERSIST_PROPERTY_SERVICE); 94c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler mController.updateLogpersistValues(); 95c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler verify(mListPreference, atLeastOnce()).setValue("all"); 96c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler } 97c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 98c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Test 99c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler public void testUpdateLogpersistValues_all() { 100c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set( 101c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.ACTUAL_LOGPERSIST_PROPERTY, 102c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.SELECT_LOGPERSIST_PROPERTY_SERVICE); 103c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set( 104c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.ACTUAL_LOGPERSIST_PROPERTY_BUFFER, 105c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler "all"); 106c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler mController.updateLogpersistValues(); 107c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler verify(mListPreference, atLeastOnce()).setValue("all"); 108c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler } 109c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 110c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Test 111c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler public void testUpdateLogpersistValues_defaultSecurityKernel() { 112c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set( 113c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.ACTUAL_LOGPERSIST_PROPERTY, 114c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.SELECT_LOGPERSIST_PROPERTY_SERVICE); 115c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set( 116c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.ACTUAL_LOGPERSIST_PROPERTY_BUFFER, 117c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler "default,security,kernel"); 118c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler mController.updateLogpersistValues(); 119c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler verify(mListPreference, atLeastOnce()).setValue("default,security,kernel"); 120c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler } 121c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 122c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Test 123c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler public void testUpdateLogpersistValues_kernel() { 124c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set( 125c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.ACTUAL_LOGPERSIST_PROPERTY, 126c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.SELECT_LOGPERSIST_PROPERTY_SERVICE); 127c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set( 128c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.ACTUAL_LOGPERSIST_PROPERTY_BUFFER, 129c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler "kernel"); 130c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler mController.updateLogpersistValues(); 131c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler verify(mListPreference, atLeastOnce()).setValue("kernel"); 132c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler } 133c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 134c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler @Test 135c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler public void testUpdateLogpersistValues_mainSecuritykernel() { 136c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set( 137c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.ACTUAL_LOGPERSIST_PROPERTY, 138c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.SELECT_LOGPERSIST_PROPERTY_SERVICE); 139c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler SystemProperties.set( 140c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler AbstractLogpersistPreferenceController.ACTUAL_LOGPERSIST_PROPERTY_BUFFER, 141c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler "main,security,kernel"); 142c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler mController.updateLogpersistValues(); 143c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler verify(mListPreference, atLeastOnce()).setValue("all"); 144c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler } 145c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler} 146c48ba6a262714ae70b6fda05fd088daf0caabd11Tony Mantler 147