/* * Copyright (C) 2012 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.framework.tests; import com.android.tradefed.config.Option; import com.android.tradefed.config.Option.Importance; import com.android.tradefed.device.DeviceNotAvailableException; import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.testtype.DeviceTestCase; import com.android.tradefed.util.FileUtil; import java.io.File; public class PackageManagerOTATests extends DeviceTestCase { @Option(name = "test-app-path", description = "path to the app repository containing test apks", importance = Importance.IF_UNSET) private File mTestAppRepositoryPath = null; private PackageManagerOTATestUtils mUtils = null; // String constants use for the tests. private static final String PACKAGE_XPATH = "/packages/package[@name=\"" + "com.android.frameworks.coretests.version_test\"]"; private static final String UPDATE_PACKAGE_XPATH = "/packages/updated-package[@name=\"" + "com.android.frameworks.coretests.version_test\"]"; private static final String VERSION_XPATH = "/packages/package[@name=\"" + "com.android.frameworks.coretests.version_test\"]/@version"; private static final String FLAG_XPATH = "/packages/package[@name=\"" + "com.android.frameworks.coretests.version_test\"]/@flags"; private static final String CODE_PATH_XPATH = "/packages/package[@name=\"" + "com.android.frameworks.coretests.version_test\"]/@codePath"; private static final String VERSION_1_APK = "FrameworkCoreTests_version_1.apk"; private static final String VERSION_2_APK = "FrameworkCoreTests_version_2.apk"; private static final String VERSION_3_APK = "FrameworkCoreTests_version_3.apk"; private static final String SYSTEM_APK = "version_test.apk"; private static final String SYSTEM_DIFF_APK = "version_test_diff.apk"; private static final String SYSTEM_APP_PATH = "/system/app/version_test.apk"; private static final String DATA_APP_DIRECTORY = "/data/app/"; private static final String DIFF_SYSTEM_APP_PATH = "/system/app/version_test_diff.apk"; private static final String PACKAGE_NAME = "com.android.frameworks.coretests.version_test"; private static final String VIBRATE_PERMISSION = "android.permission.VIBRATE"; private static final String CACHE_PERMISSION = "android.permission.ACCESS_CACHE_FILESYSTEM"; // Temporary file used when examine the packages xml file from the device. private File mPackageXml = null; @Override protected void setUp() throws Exception { super.setUp(); mUtils = new PackageManagerOTATestUtils(getDevice()); // Clean up any potential old files from previous tests. mUtils.removeSystemApp(SYSTEM_DIFF_APK, false); mUtils.removeAndWipe(SYSTEM_APK); getDevice().waitForDeviceAvailable(); mPackageXml = mUtils.pullPackagesXML(); assertNotNull("Failed to pull packages xml file from device", mPackageXml); assertFalse("Package should not be installed before test", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertFalse("Updated-package should not be present before test", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); } @Override protected void tearDown() throws Exception { // Clean up. if (mPackageXml != null) { FileUtil.deleteFile(mPackageXml); } } /** * Get the absolute file system location of test app with given filename * * @param fileName the file name of the test app apk * @return {@link String} of absolute file path */ public File getTestAppFilePath(String fileName) { File file = FileUtil.getFileForPath(mTestAppRepositoryPath, fileName); CLog.d("Test path : %s", file.getAbsolutePath()); return file; } /** * Helper method used to determine if the flag has been set or not. * * @param xmlFile * @param flagXPathString * @param expectedValue * @return */ private boolean expectFlag(File xmlFile, String flagXPathString, int expectedValue) { int flagValue = mUtils.getIntForXPath(xmlFile, flagXPathString); return ((flagValue&expectedValue) == expectedValue); } /** * Test case when system app added is newer than update. * <p/> * Assumes adb is running as root in device under test. * * @throws DeviceNotAvailableException */ public void testSystemAppAddedNewerThanUpdate() throws DeviceNotAvailableException { mUtils.installFile(getTestAppFilePath(VERSION_1_APK), true); mPackageXml = mUtils.pullPackagesXML(); assertNotNull("Failed to pull packages xml file from device", mPackageXml); assertTrue("Initial package should be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("Package version should be 1", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "1")); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should not have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 0)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertFalse("ACCESS_CACHE_FILESYSTEM permission should NOT be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); mUtils.pushSystemApp(getTestAppFilePath(VERSION_2_APK), SYSTEM_APP_PATH); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After system app push, package should still be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("After system app push, system app should be visible", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); } /** * Test case when system app added is older than update. * <p/> * Assumes adb is running as root in device under test. * * @throws DeviceNotAvailableException */ public void testSystemAppAddedOlderThanUpdate() throws DeviceNotAvailableException { mUtils.installFile(getTestAppFilePath(VERSION_2_APK), true); mPackageXml = mUtils.pullPackagesXML(); assertNotNull("Failed to pull packages xml file from device", mPackageXml); assertTrue("Initial package should be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertFalse("package should not have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertFalse("ACCESS_CACHE_FILESYSTEM permission should NOT be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); mUtils.pushSystemApp(getTestAppFilePath(VERSION_1_APK), SYSTEM_APP_PATH); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After system app push, package should still be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("After system app push, system app should be visible", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertTrue("Updated-package should be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); } /** * Test when system app gets removed. * <p/> * Assumes adb is running as root in device under test. * * @throws DeviceNotAvailableException */ public void testSystemAppRemoved() throws DeviceNotAvailableException { mUtils.pushSystemApp(getTestAppFilePath(VERSION_1_APK), SYSTEM_APP_PATH); mPackageXml = mUtils.pullPackagesXML(); assertTrue("Initial package should be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); mUtils.removeSystemApp(SYSTEM_APK, true); mPackageXml = mUtils.pullPackagesXML(); assertFalse("Package should not be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); } /** * Test when update has a newer version. * <p/> * Assumes adb is running as root in device under test. * * @throws DeviceNotAvailableException */ public void testSystemAppUpdatedNewerVersion() throws DeviceNotAvailableException { mUtils.pushSystemApp(getTestAppFilePath(VERSION_2_APK), SYSTEM_APP_PATH); mPackageXml = mUtils.pullPackagesXML(); assertTrue("The package should be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); mUtils.installFile(getTestAppFilePath(VERSION_3_APK), true); mPackageXml = mUtils.pullPackagesXML(); assertFalse("After system app upgrade, the path should be the upgraded app on /data", mUtils.expectEquals(mPackageXml, CODE_PATH_XPATH, SYSTEM_APP_PATH)); assertTrue("Package version should be 3", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "3")); assertTrue("Updated-package should be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); getDevice().reboot(); mPackageXml = mUtils.pullPackagesXML(); assertFalse("After system app upgrade, the path should be the upgraded app on /data", mUtils.expectEquals(mPackageXml, CODE_PATH_XPATH, SYSTEM_APP_PATH)); assertTrue("Package version should be 3", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "3")); assertTrue("Updated-package should be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); getDevice().reboot(); mPackageXml = mUtils.pullPackagesXML(); assertFalse("After system app upgrade, the path should be the upgraded app on /data", mUtils.expectEquals(mPackageXml, CODE_PATH_XPATH, SYSTEM_APP_PATH)); assertTrue("Package version should be 3", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "3")); assertTrue("Updated-package should be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); } /** * Test when update has an older version. * <p/> * Assumes adb is running as root in device under test. * * @throws DeviceNotAvailableException */ public void testSystemAppUpdatedOlderVersion() throws DeviceNotAvailableException { mUtils.pushSystemApp(getTestAppFilePath(VERSION_2_APK), SYSTEM_APP_PATH); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After system app push, the package should be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); // The "-d" command forces a downgrade. mUtils.installFile(getTestAppFilePath(VERSION_1_APK), true, "-d"); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After system app upgrade, the path should be the upgraded app on /data", mUtils.expectStartsWith(mPackageXml, CODE_PATH_XPATH, DATA_APP_DIRECTORY + PACKAGE_NAME)); assertTrue("Package version should be 1", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "1")); assertTrue("Updated-package should be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); getDevice().reboot(); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After reboot, the path should be the be installed", mUtils.expectEquals(mPackageXml, CODE_PATH_XPATH, SYSTEM_APP_PATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should NOT be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); getDevice().reboot(); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After reboot, the path should be the be installed", mUtils.expectEquals(mPackageXml, CODE_PATH_XPATH, SYSTEM_APP_PATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should NOT be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); } /** * Test when update has the same version. * <p/> * Assumes adb is running as root in device under test. * * @throws DeviceNotAvailableException */ public void testSystemAppUpdatedSameVersion() throws DeviceNotAvailableException { mUtils.pushSystemApp(getTestAppFilePath(VERSION_2_APK), SYSTEM_APP_PATH); mPackageXml = mUtils.pullPackagesXML(); assertTrue("The package should be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); mUtils.installFile(getTestAppFilePath(VERSION_2_APK), true); mPackageXml = mUtils.pullPackagesXML(); assertFalse("After system app upgrade, the path should be the upgraded app on /data", mUtils.expectEquals(mPackageXml, CODE_PATH_XPATH, SYSTEM_APP_PATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertTrue("Updated-package should be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); getDevice().reboot(); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After reboot, the path should be the be installed", mUtils.expectEquals(mPackageXml, CODE_PATH_XPATH, SYSTEM_APP_PATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should NOT be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); getDevice().reboot(); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After reboot, the path should be the be installed", mUtils.expectEquals(mPackageXml, CODE_PATH_XPATH, SYSTEM_APP_PATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should NOT be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); } /** * Test when update has a different filename. * <p/> * Assumes adb is running as root in device under test. * * @throws DeviceNotAvailableException */ public void testUpdatedSystemAppChangeFileName() throws DeviceNotAvailableException { mUtils.pushSystemApp(getTestAppFilePath(VERSION_1_APK), SYSTEM_APP_PATH); mPackageXml = mUtils.pullPackagesXML(); assertNotNull("Failed to pull packages xml file from device", mPackageXml); assertTrue("After system app push, the package should be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("Package version should be 1", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "1")); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); mUtils.installFile(getTestAppFilePath(VERSION_2_APK), true); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After system app upgrade, the path should be the upgraded app on /data", mUtils.expectStartsWith(mPackageXml, CODE_PATH_XPATH, DATA_APP_DIRECTORY + PACKAGE_NAME)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertTrue("Updated-package should be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); mUtils.removeSystemApp(SYSTEM_APK, false); mUtils.pushSystemApp(getTestAppFilePath(VERSION_2_APK), DIFF_SYSTEM_APP_PATH); mPackageXml = mUtils.pullPackagesXML(); assertTrue("After reboot, the system path should be correct", mUtils.expectEquals(mPackageXml, CODE_PATH_XPATH, DIFF_SYSTEM_APP_PATH)); assertTrue("Package version should be 2", mUtils.expectEquals(mPackageXml, VERSION_XPATH, "2")); assertFalse("Updated-package should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); } /** * Test when update has system app removed. * <p/> * Assumes adb is running as root in device under test. * * @throws DeviceNotAvailableException */ public void testUpdatedSystemAppRemoved() throws DeviceNotAvailableException { mUtils.pushSystemApp(getTestAppFilePath(VERSION_1_APK), SYSTEM_APP_PATH); mUtils.installFile(getTestAppFilePath(VERSION_2_APK), true); mPackageXml = mUtils.pullPackagesXML(); assertTrue("Package should be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertTrue("Updated-package should be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertTrue("Package should have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertTrue("ACCESS_CACHE_FILESYSTEM permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); mUtils.removeSystemApp(SYSTEM_APK, true); mPackageXml = mUtils.pullPackagesXML(); assertTrue("Package should still be installed", mUtils.expectExists(mPackageXml, PACKAGE_XPATH)); assertFalse("Updated-package entry should not be present", mUtils.expectExists(mPackageXml, UPDATE_PACKAGE_XPATH)); assertFalse("Package should not have FLAG_SYSTEM", expectFlag(mPackageXml, FLAG_XPATH, 1)); assertTrue("VIBRATE permission should be granted", mUtils.packageHasPermission(PACKAGE_NAME, VIBRATE_PERMISSION)); assertFalse("ACCESS_CACHE_FILESYSTEM permission should NOT be granted", mUtils.packageHasPermission(PACKAGE_NAME, CACHE_PERMISSION)); } }