xref: /aosp_15_r20/cts/tests/tests/uidmigration/system-app-test.sh (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
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