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