Run tests in Cirrus CI again
This commit is contained in:
parent
3fd615477d
commit
4aeb05813d
5 changed files with 70 additions and 20 deletions
70
.cirrus.yml
70
.cirrus.yml
|
@ -1,13 +1,61 @@
|
|||
task:
|
||||
name: Build with AOSP
|
||||
only_if: $CIRRUS_PR_LABELS =~ ".*aosp-build.*"
|
||||
timeout_in: 70m
|
||||
container:
|
||||
image: ubuntu:23.04
|
||||
container:
|
||||
image: ghcr.io/cirruslabs/android-sdk:34
|
||||
kvm: true
|
||||
cpu: 8
|
||||
memory: 32G
|
||||
build_script:
|
||||
- ./.github/scripts/build_aosp.sh aosp_arm64 ap1a userdebug android-14.0.0_r29
|
||||
memory: 16G
|
||||
|
||||
instrumentation_tests_task:
|
||||
name: "Cirrus CI Instrumentation Tests"
|
||||
start_avd_background_script:
|
||||
sdkmanager --install "system-images;android-34;default;x86_64" "emulator";
|
||||
echo no | avdmanager create avd -n seedvault -k "system-images;android-34;default;x86_64";
|
||||
$ANDROID_HOME/emulator/emulator
|
||||
-avd seedvault
|
||||
-no-audio
|
||||
-no-boot-anim
|
||||
-gpu swiftshader_indirect
|
||||
-no-snapshot
|
||||
-no-window
|
||||
-writable-system;
|
||||
provision_avd_background_script:
|
||||
wget https://github.com/seedvault-app/seedvault-test-data/releases/download/3/backup.tar.gz;
|
||||
|
||||
adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;';
|
||||
adb root;
|
||||
sleep 5;
|
||||
adb remount;
|
||||
adb reboot;
|
||||
adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;';
|
||||
adb root;
|
||||
sleep 5;
|
||||
adb remount;
|
||||
sleep 5;
|
||||
assemble_script:
|
||||
./gradlew :app:assembleRelease :app:assembleAndroidTest
|
||||
install_app_script:
|
||||
timeout 180s bash -c 'while [[ -z $(adb shell mount | grep "/system " | grep "(rw,") ]]; do sleep 1; done;';
|
||||
adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;';
|
||||
|
||||
adb shell mkdir -p /sdcard/seedvault_baseline;
|
||||
adb push backup.tar.gz /sdcard/seedvault_baseline/backup.tar.gz;
|
||||
adb shell tar xzf /sdcard/seedvault_baseline/backup.tar.gz --directory=/sdcard/seedvault_baseline;
|
||||
|
||||
adb shell mkdir -p /system/priv-app/Seedvault;
|
||||
adb push app/build/outputs/apk/release/app-release.apk /system/priv-app/Seedvault/Seedvault.apk;
|
||||
adb push permissions_com.stevesoltys.seedvault.xml /system/etc/permissions/privapp-permissions-seedvault.xml;
|
||||
adb push allowlist_com.stevesoltys.seedvault.xml /system/etc/sysconfig/allowlist-seedvault.xml;
|
||||
adb shell bmgr enable true;
|
||||
adb reboot;
|
||||
adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;';
|
||||
adb shell bmgr transport com.stevesoltys.seedvault.transport.ConfigurableBackupTransport;
|
||||
adb reboot;
|
||||
adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;';
|
||||
run_large_tests_script: ./gradlew -Pinstrumented_test_size=large :app:connectedAndroidTest
|
||||
run_medium_tests_script: ./gradlew -Pinstrumented_test_size=medium :app:connectedAndroidTest
|
||||
always:
|
||||
seedvault_artifacts:
|
||||
path: Seedvault.apk
|
||||
pull_screenshots_script:
|
||||
adb pull /sdcard/seedvault_test_results
|
||||
screenshots_artifacts:
|
||||
path: "seedvault_test_results/**/*.mp4"
|
||||
logcat_artifacts:
|
||||
path: "seedvault_test_results/**/*.log"
|
||||
|
|
|
@ -49,14 +49,14 @@ internal interface LargeTestBase : KoinComponent {
|
|||
|
||||
companion object {
|
||||
private const val TEST_STORAGE_FOLDER = "seedvault_test"
|
||||
private const val TEST_VIDEO_FOLDER = "seedvault_test_results"
|
||||
private const val TEST_RESULT_FOLDER = "seedvault_test_results"
|
||||
}
|
||||
|
||||
val externalStorageDir: String get() = Environment.getExternalStorageDirectory().absolutePath
|
||||
|
||||
val testStoragePath get() = "$externalStorageDir/$TEST_STORAGE_FOLDER"
|
||||
|
||||
val testVideoPath get() = "$externalStorageDir/$TEST_VIDEO_FOLDER"
|
||||
val testResultPath get() = "$externalStorageDir/$TEST_RESULT_FOLDER"
|
||||
|
||||
val targetContext: Context
|
||||
get() = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
|
@ -123,7 +123,7 @@ internal interface LargeTestBase : KoinComponent {
|
|||
keepRecordingScreen: AtomicBoolean,
|
||||
testName: String,
|
||||
) {
|
||||
val folder = testVideoPath
|
||||
val folder = testResultPath
|
||||
runCommand("mkdir -p $folder")
|
||||
|
||||
val fileName = testResultFilename(testName)
|
||||
|
@ -149,7 +149,7 @@ internal interface LargeTestBase : KoinComponent {
|
|||
|
||||
// write logcat to file
|
||||
val fileName = testResultFilename(testName)
|
||||
runCommand("logcat -d -f $testVideoPath/$fileName.log")
|
||||
runCommand("logcat -d -f $testResultPath/$fileName.log")
|
||||
}
|
||||
|
||||
fun uninstallPackages(packages: Collection<PackageInfo>) {
|
||||
|
@ -162,7 +162,7 @@ internal interface LargeTestBase : KoinComponent {
|
|||
|
||||
fun clearTestBackups() {
|
||||
File(testStoragePath).deleteRecursively()
|
||||
File(testVideoPath).deleteRecursively()
|
||||
File(testResultPath).deleteRecursively()
|
||||
}
|
||||
|
||||
fun changeBackupLocation(
|
||||
|
@ -225,6 +225,7 @@ internal interface LargeTestBase : KoinComponent {
|
|||
|
||||
fun confirmCode() {
|
||||
RecoveryCodeScreen {
|
||||
startNewBackupButton.click()
|
||||
confirmCodeButton.click()
|
||||
|
||||
verifyCodeButton.scrollTo().click()
|
||||
|
|
|
@ -45,9 +45,8 @@ internal abstract class SeedvaultLargeTest :
|
|||
clearTestBackups()
|
||||
|
||||
runCommand("bmgr enable true")
|
||||
sleep(60_000)
|
||||
runCommand("bmgr transport com.stevesoltys.seedvault.transport.ConfigurableBackupTransport")
|
||||
sleep(60_000)
|
||||
sleep(5000)
|
||||
|
||||
startRecordingTest(keepRecordingScreen, name.methodName)
|
||||
restoreBaselineBackup()
|
||||
|
|
|
@ -24,7 +24,7 @@ object BackupScreen : UiDeviceScreen<BackupScreen>() {
|
|||
|
||||
val internalStorageButton = findObject { textContains(Build.MODEL) }
|
||||
|
||||
val useAnywayButton = findObject { text("USE ANYWAY") }
|
||||
val useAnywayButton = findObject { text("Use anyway") }
|
||||
|
||||
val initializingText: BySelector = By.textContains("Initializing backup location")
|
||||
}
|
||||
|
|
|
@ -9,6 +9,8 @@ import com.stevesoltys.seedvault.e2e.screen.UiDeviceScreen
|
|||
|
||||
object RecoveryCodeScreen : UiDeviceScreen<RecoveryCodeScreen>() {
|
||||
|
||||
val startNewBackupButton = findObject { text("Start new") }
|
||||
|
||||
val confirmCodeButton = findObject { text("Confirm code") }
|
||||
|
||||
val verifyCodeButton = findObject { text("Verify") }
|
||||
|
|
Loading…
Reference in a new issue