1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.Mockito.doReturn; 22 import static org.mockito.Mockito.spy; 23 import static org.mockito.Mockito.when; 24 25 import android.app.admin.DevicePolicyManager; 26 import android.app.admin.FactoryResetProtectionPolicy; 27 import android.content.Context; 28 import android.service.persistentdata.PersistentDataBlockManager; 29 import android.view.LayoutInflater; 30 import android.widget.TextView; 31 32 import androidx.fragment.app.FragmentActivity; 33 34 import com.android.settings.utils.ActivityControllerWrapper; 35 36 import org.junit.Before; 37 import org.junit.Test; 38 import org.junit.runner.RunWith; 39 import org.mockito.Mock; 40 import org.mockito.MockitoAnnotations; 41 import org.robolectric.Robolectric; 42 import org.robolectric.RobolectricTestRunner; 43 44 import java.util.ArrayList; 45 46 @RunWith(RobolectricTestRunner.class) 47 public class MainClearConfirmTest { 48 49 private FragmentActivity mActivity; 50 51 @Mock 52 private FragmentActivity mMockActivity; 53 54 @Mock 55 private DevicePolicyManager mDevicePolicyManager; 56 57 @Mock 58 private PersistentDataBlockManager mPersistentDataBlockManager; 59 60 private MainClearConfirm mMainClearConfirm; 61 62 @Before setUp()63 public void setUp() { 64 MockitoAnnotations.initMocks(this); 65 mActivity = spy((FragmentActivity) ActivityControllerWrapper.setup( 66 Robolectric.buildActivity(FragmentActivity.class)).get()); 67 mMainClearConfirm = spy(new MainClearConfirm()); 68 } 69 70 @Test setSubtitle_eraseEsim()71 public void setSubtitle_eraseEsim() { 72 MainClearConfirm mainClearConfirm = new MainClearConfirm(); 73 mainClearConfirm.mEraseEsims = true; 74 mainClearConfirm.mContentView = 75 LayoutInflater.from(mActivity).inflate(R.layout.main_clear_confirm, null); 76 77 mainClearConfirm.setSubtitle(); 78 79 assertThat(((TextView) mainClearConfirm.mContentView 80 .findViewById(R.id.sud_layout_description)).getText()) 81 .isEqualTo(mActivity.getString(R.string.main_clear_final_desc_esim)); 82 } 83 84 @Test setSubtitle_notEraseEsim()85 public void setSubtitle_notEraseEsim() { 86 MainClearConfirm mainClearConfirm = new MainClearConfirm(); 87 mainClearConfirm.mEraseEsims = false; 88 mainClearConfirm.mContentView = 89 LayoutInflater.from(mActivity).inflate(R.layout.main_clear_confirm, null); 90 91 mainClearConfirm.setSubtitle(); 92 93 assertThat(((TextView) mainClearConfirm.mContentView 94 .findViewById(R.id.sud_layout_description)).getText()) 95 .isEqualTo(mActivity.getString(R.string.main_clear_final_desc)); 96 } 97 98 @Test shouldWipePersistentDataBlock_noPersistentDataBlockManager_shouldReturnFalse()99 public void shouldWipePersistentDataBlock_noPersistentDataBlockManager_shouldReturnFalse() { 100 assertThat(mMainClearConfirm.shouldWipePersistentDataBlock(null)).isFalse(); 101 } 102 103 @Test shouldWipePersistentDataBlock_deviceIsStillBeingProvisioned_shouldReturnFalse()104 public void shouldWipePersistentDataBlock_deviceIsStillBeingProvisioned_shouldReturnFalse() { 105 doReturn(true).when(mMainClearConfirm).isDeviceStillBeingProvisioned(); 106 107 assertThat(mMainClearConfirm.shouldWipePersistentDataBlock( 108 mPersistentDataBlockManager)).isFalse(); 109 } 110 111 @Test shouldWipePersistentDataBlock_oemUnlockAllowed_shouldReturnFalse()112 public void shouldWipePersistentDataBlock_oemUnlockAllowed_shouldReturnFalse() { 113 doReturn(false).when(mMainClearConfirm).isDeviceStillBeingProvisioned(); 114 doReturn(true).when(mMainClearConfirm).isOemUnlockedAllowed(); 115 116 assertThat(mMainClearConfirm.shouldWipePersistentDataBlock( 117 mPersistentDataBlockManager)).isFalse(); 118 } 119 120 @Test shouldWipePersistentDataBlock_frpPolicyNotSupported_shouldReturnFalse()121 public void shouldWipePersistentDataBlock_frpPolicyNotSupported_shouldReturnFalse() { 122 when(mMainClearConfirm.getActivity()).thenReturn(mMockActivity); 123 124 doReturn(false).when(mMainClearConfirm).isDeviceStillBeingProvisioned(); 125 doReturn(false).when(mMainClearConfirm).isOemUnlockedAllowed(); 126 when(mMockActivity.getSystemService(Context.DEVICE_POLICY_SERVICE)) 127 .thenReturn(mDevicePolicyManager); 128 when(mDevicePolicyManager.isFactoryResetProtectionPolicySupported()).thenReturn(false); 129 130 assertThat(mMainClearConfirm.shouldWipePersistentDataBlock( 131 mPersistentDataBlockManager)).isFalse(); 132 } 133 134 @Test shouldWipePersistentDataBlock_hasFactoryResetProtectionPolicy_shouldReturnFalse()135 public void shouldWipePersistentDataBlock_hasFactoryResetProtectionPolicy_shouldReturnFalse() { 136 when(mMainClearConfirm.getActivity()).thenReturn(mMockActivity); 137 138 doReturn(false).when(mMainClearConfirm).isDeviceStillBeingProvisioned(); 139 doReturn(false).when(mMainClearConfirm).isOemUnlockedAllowed(); 140 ArrayList<String> accounts = new ArrayList<>(); 141 accounts.add("test"); 142 FactoryResetProtectionPolicy frp = new FactoryResetProtectionPolicy.Builder() 143 .setFactoryResetProtectionAccounts(accounts) 144 .setFactoryResetProtectionEnabled(true) 145 .build(); 146 when(mMockActivity.getSystemService(Context.DEVICE_POLICY_SERVICE)) 147 .thenReturn(mDevicePolicyManager); 148 when(mDevicePolicyManager.isFactoryResetProtectionPolicySupported()).thenReturn(true); 149 when(mDevicePolicyManager.getFactoryResetProtectionPolicy(null)).thenReturn(frp); 150 when(mDevicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile()).thenReturn(true); 151 152 assertThat(mMainClearConfirm.shouldWipePersistentDataBlock( 153 mPersistentDataBlockManager)).isFalse(); 154 } 155 156 @Test shouldWipePersistentDataBlock_isNotOrganizationOwnedDevice_shouldReturnTrue()157 public void shouldWipePersistentDataBlock_isNotOrganizationOwnedDevice_shouldReturnTrue() { 158 when(mMainClearConfirm.getActivity()).thenReturn(mMockActivity); 159 160 doReturn(false).when(mMainClearConfirm).isDeviceStillBeingProvisioned(); 161 doReturn(false).when(mMainClearConfirm).isOemUnlockedAllowed(); 162 163 when(mMockActivity.getSystemService(Context.DEVICE_POLICY_SERVICE)) 164 .thenReturn(mDevicePolicyManager); 165 when(mDevicePolicyManager.isFactoryResetProtectionPolicySupported()).thenReturn(true); 166 when(mDevicePolicyManager.getFactoryResetProtectionPolicy(null)).thenReturn(null); 167 when(mDevicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile()).thenReturn(false); 168 169 assertThat(mMainClearConfirm.shouldWipePersistentDataBlock( 170 mPersistentDataBlockManager)).isTrue(); 171 } 172 } 173