1*b7c941bbSAndroid Build Coastguard Worker#!/usr/bin/env bash 2*b7c941bbSAndroid Build Coastguard Worker 3*b7c941bbSAndroid Build Coastguard Worker# Before running the script: 4*b7c941bbSAndroid Build Coastguard Worker# 5*b7c941bbSAndroid Build Coastguard Worker# * lunch with eng variant. For example: 6*b7c941bbSAndroid Build Coastguard Worker# lunch flame-eng 7*b7c941bbSAndroid Build Coastguard Worker# * Build the full system image and flash your device 8*b7c941bbSAndroid Build Coastguard Worker# m; vendor/google/tools/flashall 9*b7c941bbSAndroid Build Coastguard Worker# * Remount the device to allow system rw. 10*b7c941bbSAndroid Build Coastguard Worker# adb remount; adb reboot 11*b7c941bbSAndroid Build Coastguard Worker# * Connect the device to host machine to allow atest to build properly 12*b7c941bbSAndroid Build Coastguard Worker 13*b7c941bbSAndroid Build Coastguard Worker# Note: This script assumes the device runs with NEW_INSTALL_ONLY strategy. 14*b7c941bbSAndroid Build Coastguard Worker# The script will have to be updated when switching to BEST_EFFORT strategy. 15*b7c941bbSAndroid Build Coastguard Worker 16*b7c941bbSAndroid Build Coastguard Workerset -e 17*b7c941bbSAndroid Build Coastguard Worker 18*b7c941bbSAndroid Build Coastguard WorkerTEST_APP_PATH="$ANDROID_TARGET_OUT_TESTCASES/CtsSharedUserMigrationInstallTestApp" 19*b7c941bbSAndroid Build Coastguard WorkerPKGNAME='android.uidmigration.cts.InstallTestApp' 20*b7c941bbSAndroid Build Coastguard Worker 21*b7c941bbSAndroid Build Coastguard Workercleanup() { 22*b7c941bbSAndroid Build Coastguard Worker adb shell pm uninstall $PKGNAME >/dev/null 2>&1 || true 23*b7c941bbSAndroid Build Coastguard Worker adb shell pm uninstall-system-updates $PKGNAME >/dev/null 2>&1 || true 24*b7c941bbSAndroid Build Coastguard Worker adb shell stop || true 25*b7c941bbSAndroid Build Coastguard Worker adb shell rm -rf /system/app/InstallTestApp || true 26*b7c941bbSAndroid Build Coastguard Worker adb shell start || true 27*b7c941bbSAndroid Build Coastguard Worker} 28*b7c941bbSAndroid Build Coastguard Worker 29*b7c941bbSAndroid Build Coastguard Workertrap cleanup EXIT 30*b7c941bbSAndroid Build Coastguard Worker 31*b7c941bbSAndroid Build Coastguard Workerwait_boot_complete() { 32*b7c941bbSAndroid Build Coastguard Worker while [ "$(adb shell getprop sys.boot_completed | tr -d '\r')" != "1" ]; do 33*b7c941bbSAndroid Build Coastguard Worker sleep 3 34*b7c941bbSAndroid Build Coastguard Worker done 35*b7c941bbSAndroid Build Coastguard Worker} 36*b7c941bbSAndroid Build Coastguard Worker 37*b7c941bbSAndroid Build Coastguard Workerexport -f wait_boot_complete 38*b7c941bbSAndroid Build Coastguard Worker 39*b7c941bbSAndroid Build Coastguard Workeradb_stop() { 40*b7c941bbSAndroid Build Coastguard Worker adb shell stop 41*b7c941bbSAndroid Build Coastguard Worker adb shell setprop sys.boot_completed 0 42*b7c941bbSAndroid Build Coastguard Worker} 43*b7c941bbSAndroid Build Coastguard Worker 44*b7c941bbSAndroid Build Coastguard Worker# Build our test APKs 45*b7c941bbSAndroid Build Coastguard Workeratest -b CtsSharedUserMigrationTestCases 46*b7c941bbSAndroid Build Coastguard Worker 47*b7c941bbSAndroid Build Coastguard Worker# APK references 48*b7c941bbSAndroid Build Coastguard Worker# 49*b7c941bbSAndroid Build Coastguard Worker# InstallTestApp : APK with sharedUserId 50*b7c941bbSAndroid Build Coastguard Worker# InstallTestApp3: APK without sharedUserId 51*b7c941bbSAndroid Build Coastguard Worker# InstallTestApp4: APK with sharedUserId + sharedUserMaxSdkVersion 52*b7c941bbSAndroid Build Coastguard Worker 53*b7c941bbSAndroid Build Coastguard Worker# Make sure system is writable 54*b7c941bbSAndroid Build Coastguard Workeradb root 55*b7c941bbSAndroid Build Coastguard Workeradb remount 56*b7c941bbSAndroid Build Coastguard Worker 57*b7c941bbSAndroid Build Coastguard Worker# Push the APK as a system app 58*b7c941bbSAndroid Build Coastguard Workeradb shell mkdir /system/app/InstallTestApp 59*b7c941bbSAndroid Build Coastguard Workeradb push $TEST_APP_PATH/*/*.apk /system/app/InstallTestApp/InstallTestApp.apk 60*b7c941bbSAndroid Build Coastguard Worker 61*b7c941bbSAndroid Build Coastguard Worker# Restart PMS to load the package 62*b7c941bbSAndroid Build Coastguard Workeradb_stop 63*b7c941bbSAndroid Build Coastguard Workeradb shell start 64*b7c941bbSAndroid Build Coastguard Workertimeout 60 bash -c wait_boot_complete 65*b7c941bbSAndroid Build Coastguard Worker 66*b7c941bbSAndroid Build Coastguard WorkerDUMPSYS_CMD="adb shell dumpsys package $PKGNAME | grep -o 'sharedUser=.*' | head -1" 67*b7c941bbSAndroid Build Coastguard Worker 68*b7c941bbSAndroid Build Coastguard Worker# Make sure package is installed and is part of shared UID 69*b7c941bbSAndroid Build Coastguard WorkerSHARED_USER="$($DUMPSYS_CMD)" 70*b7c941bbSAndroid Build Coastguard Workerif [ -z "$SHARED_USER" ]; then 71*b7c941bbSAndroid Build Coastguard Worker echo '! InstallTestApp is not installed properly' 72*b7c941bbSAndroid Build Coastguard Worker exit 1 73*b7c941bbSAndroid Build Coastguard Workerfi 74*b7c941bbSAndroid Build Coastguard Worker 75*b7c941bbSAndroid Build Coastguard Worker# Installing an upgrade with sharedUserMaxSdkVersion shall not change its UID 76*b7c941bbSAndroid Build Coastguard Workeradb install -r ${TEST_APP_PATH}4/*/*.apk 77*b7c941bbSAndroid Build Coastguard WorkerSHARED_USER="$($DUMPSYS_CMD)" 78*b7c941bbSAndroid Build Coastguard Workerif [ -z "$SHARED_USER" ]; then 79*b7c941bbSAndroid Build Coastguard Worker echo '! InstallTestApp should remain in shared UID after normal upgrade' 80*b7c941bbSAndroid Build Coastguard Worker exit 1 81*b7c941bbSAndroid Build Coastguard Workerfi 82*b7c941bbSAndroid Build Coastguard Worker 83*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 84*b7c941bbSAndroid Build Coastguard Workerecho '* Test 1 PASSED *' 85*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 86*b7c941bbSAndroid Build Coastguard Worker 87*b7c941bbSAndroid Build Coastguard Worker# Uninstall the upgrade 88*b7c941bbSAndroid Build Coastguard Worker# BUG? For some reason this command always return 1 89*b7c941bbSAndroid Build Coastguard Workeradb shell pm uninstall-system-updates $PKGNAME || true 90*b7c941bbSAndroid Build Coastguard Worker 91*b7c941bbSAndroid Build Coastguard Worker# Removing sharedUserId after an OTA should work 92*b7c941bbSAndroid Build Coastguard Workeradb_stop 93*b7c941bbSAndroid Build Coastguard Workeradb push ${TEST_APP_PATH}3/*/*.apk /system/app/InstallTestApp/InstallTestApp.apk 94*b7c941bbSAndroid Build Coastguard Workeradb shell start 95*b7c941bbSAndroid Build Coastguard Workertimeout 60 bash -c wait_boot_complete 96*b7c941bbSAndroid Build Coastguard Worker 97*b7c941bbSAndroid Build Coastguard Workerif ! adb shell pm list packages | grep -q $PKGNAME; then 98*b7c941bbSAndroid Build Coastguard Worker echo '! InstallTestApp should still be installed after OTA' 99*b7c941bbSAndroid Build Coastguard Worker exit 1 100*b7c941bbSAndroid Build Coastguard Workerfi 101*b7c941bbSAndroid Build Coastguard Worker 102*b7c941bbSAndroid Build Coastguard WorkerSHARED_USER="$($DUMPSYS_CMD)" 103*b7c941bbSAndroid Build Coastguard Workerif [ -n "$SHARED_USER" ]; then 104*b7c941bbSAndroid Build Coastguard Worker echo '! InstallTestApp should not be in shared UID after removing sharedUserId' 105*b7c941bbSAndroid Build Coastguard Worker exit 1 106*b7c941bbSAndroid Build Coastguard Workerfi 107*b7c941bbSAndroid Build Coastguard Worker 108*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 109*b7c941bbSAndroid Build Coastguard Workerecho '* Test 2 PASSED *' 110*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 111*b7c941bbSAndroid Build Coastguard Worker 112*b7c941bbSAndroid Build Coastguard Worker# Adding sharedUserId back after an OTA should work 113*b7c941bbSAndroid Build Coastguard Workeradb_stop 114*b7c941bbSAndroid Build Coastguard Workeradb push $TEST_APP_PATH/*/*.apk /system/app/InstallTestApp/InstallTestApp.apk 115*b7c941bbSAndroid Build Coastguard Workeradb shell start 116*b7c941bbSAndroid Build Coastguard Workertimeout 60 bash -c wait_boot_complete 117*b7c941bbSAndroid Build Coastguard Worker 118*b7c941bbSAndroid Build Coastguard WorkerSHARED_USER="$($DUMPSYS_CMD)" 119*b7c941bbSAndroid Build Coastguard Workerif [ -z "$SHARED_USER" ]; then 120*b7c941bbSAndroid Build Coastguard Worker echo 'InstallTestApp should be in shared UID after adding sharedUserId!' 121*b7c941bbSAndroid Build Coastguard Worker exit 1 122*b7c941bbSAndroid Build Coastguard Workerfi 123*b7c941bbSAndroid Build Coastguard Worker 124*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 125*b7c941bbSAndroid Build Coastguard Workerecho '* Test 3 PASSED *' 126*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 127*b7c941bbSAndroid Build Coastguard Worker 128*b7c941bbSAndroid Build Coastguard Worker# Adding sharedUserMaxSdkVersion in an OTA should not affect appId 129*b7c941bbSAndroid Build Coastguard Workeradb_stop 130*b7c941bbSAndroid Build Coastguard Workeradb push ${TEST_APP_PATH}4/*/*.apk /system/app/InstallTestApp/InstallTestApp.apk 131*b7c941bbSAndroid Build Coastguard Workeradb shell start 132*b7c941bbSAndroid Build Coastguard Workertimeout 60 bash -c wait_boot_complete 133*b7c941bbSAndroid Build Coastguard Worker 134*b7c941bbSAndroid Build Coastguard WorkerSHARED_USER="$($DUMPSYS_CMD)" 135*b7c941bbSAndroid Build Coastguard Workerif [ -z "$SHARED_USER" ]; then 136*b7c941bbSAndroid Build Coastguard Worker echo '! InstallTestApp should be in shared UID even after adding sharedUserMaxSdkVersion after OTA' 137*b7c941bbSAndroid Build Coastguard Worker exit 1 138*b7c941bbSAndroid Build Coastguard Workerfi 139*b7c941bbSAndroid Build Coastguard Worker 140*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 141*b7c941bbSAndroid Build Coastguard Workerecho '* Test 4 PASSED *' 142*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 143*b7c941bbSAndroid Build Coastguard Worker 144*b7c941bbSAndroid Build Coastguard Worker# Remove the app, restart, and reinstall APK with sharedUserMaxSdkVersion 145*b7c941bbSAndroid Build Coastguard Worker# The new app should not be in shared UID (due to NEW_INSTALL_ONLY) 146*b7c941bbSAndroid Build Coastguard Workeradb_stop 147*b7c941bbSAndroid Build Coastguard Workeradb shell rm -rf /system/app/InstallTestApp 148*b7c941bbSAndroid Build Coastguard Workeradb shell start 149*b7c941bbSAndroid Build Coastguard Workertimeout 60 bash -c wait_boot_complete 150*b7c941bbSAndroid Build Coastguard Worker 151*b7c941bbSAndroid Build Coastguard Workeradb_stop 152*b7c941bbSAndroid Build Coastguard Workeradb shell mkdir /system/app/InstallTestApp 153*b7c941bbSAndroid Build Coastguard Workeradb push ${TEST_APP_PATH}4/*/*.apk /system/app/InstallTestApp/InstallTestApp.apk 154*b7c941bbSAndroid Build Coastguard Workeradb shell start 155*b7c941bbSAndroid Build Coastguard Workertimeout 60 bash -c wait_boot_complete 156*b7c941bbSAndroid Build Coastguard Worker 157*b7c941bbSAndroid Build Coastguard Workerif ! adb shell pm list packages | grep -q $PKGNAME; then 158*b7c941bbSAndroid Build Coastguard Worker echo '! InstallTestApp should be installed' 159*b7c941bbSAndroid Build Coastguard Worker exit 1 160*b7c941bbSAndroid Build Coastguard Workerfi 161*b7c941bbSAndroid Build Coastguard Worker 162*b7c941bbSAndroid Build Coastguard WorkerSHARED_USER="$($DUMPSYS_CMD)" 163*b7c941bbSAndroid Build Coastguard Workerif [ -n "$SHARED_USER" ]; then 164*b7c941bbSAndroid Build Coastguard Worker echo '! InstallTestApp should not be in shared UID when newly installed with sharedUserMaxSdkVersion' 165*b7c941bbSAndroid Build Coastguard Worker exit 1 166*b7c941bbSAndroid Build Coastguard Workerfi 167*b7c941bbSAndroid Build Coastguard Worker 168*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 169*b7c941bbSAndroid Build Coastguard Workerecho '* Test 5 PASSED *' 170*b7c941bbSAndroid Build Coastguard Workerecho '*****************' 171