Files
app_Settings/tests/robotests/src/com/android/settings/development/Enable16kPagesPreferenceControllerTest.java
Pawan Wagh a697fba513 Show persistent notification for page-agnostic mode
When device enters page-agnostic mode using 16KB developer
options, show notification to user using boot receiver and service.
On clicked on notification, show detailed instructions on how to
get back to production mode. Removing OEM carrier unlock allowed
condition.

Bug: 295035851
Bug: 338139755
Bug: 302600682
Test: m Settings && adb install -r $ANDROID_PRODUCT_OUT/system_ext/priv-app/Settings/Settings.apk
Change-Id: Ib7a57af4c6151d2a8da1ec94130532d10b1679aa
2024-05-06 22:16:27 +00:00

125 lines
4.5 KiB
Java

/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.development;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.spy;
import android.content.Context;
import android.os.FileUtils;
import android.os.SystemProperties;
import androidx.test.core.app.ApplicationProvider;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@RunWith(RobolectricTestRunner.class)
public class Enable16kPagesPreferenceControllerTest {
@Mock private DevelopmentSettingsDashboardFragment mFragment;
private Context mContext;
private Enable16kPagesPreferenceController mController;
@Before
public void setup() throws Exception {
MockitoAnnotations.initMocks(this);
mContext = spy(ApplicationProvider.getApplicationContext());
mController = spy(new Enable16kPagesPreferenceController(mContext, mFragment));
doNothing().when(mController).applyPayload(any(), anyLong(), anyLong(), anyList());
}
@Test
public void onSystemPropertyDisabled_shouldDisablePreference() {
SystemProperties.set(Enable16kUtils.DEV_OPTION_PROPERTY, "false");
assertThat(mController.isAvailable()).isEqualTo(false);
}
@Test
public void onSystemPropertyEnabled_shouldEnablePreference() {
SystemProperties.set(Enable16kUtils.DEV_OPTION_PROPERTY, "true");
assertThat(mController.isAvailable()).isEqualTo(true);
}
// TODO(b/303280163) : add tests to based on page size and whether preference is turned on/off
@Test
public void validateUpdateParsing_validFile() throws IOException {
// TODO(b/295573133) : Add tests to verify applyPayload arguments
String filename = "valid_ota.zip";
File updateFile = copyFromAssetToDataDir(filename);
mController.applyUpdateFile(updateFile);
}
@Test
public void validateUpdateParsing_emptyPayloadFile() {
String filename = "empty_payload_ota.zip";
File updateFile = copyFromAssetToDataDir(filename);
assertThrows(IOException.class, () -> mController.applyUpdateFile(updateFile));
}
@Test
public void validateUpdateParsing_noPayloadFile() {
String filename = "no_payload_ota.zip";
File updateFile = copyFromAssetToDataDir(filename);
assertThrows(FileNotFoundException.class, () -> mController.applyUpdateFile(updateFile));
}
@Test
public void validateUpdateParsing_noPropertiesFile() {
String filename = "no_properties_ota.zip";
File updateFile = copyFromAssetToDataDir(filename);
assertThrows(FileNotFoundException.class, () -> mController.applyUpdateFile(updateFile));
}
private File copyFromAssetToDataDir(String filename) {
try {
InputStream in = mContext.getAssets().open(filename);
File destination =
File.createTempFile(
"test_update", ".zip", new File(mContext.getDataDir().getPath()));
FileUtils.setPermissions(
/* path= */ destination,
/* mode= */ FileUtils.S_IRWXU | FileUtils.S_IRGRP | FileUtils.S_IROTH,
/* uid= */ -1,
/* gid= */ -1);
OutputStream out = new FileOutputStream(destination);
FileUtils.copy(in, out);
return destination;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}