blob: 9cdcf1abc923d03d88c17157971008d2a2390833 [file] [log] [blame]
package com.android.cts.devicepolicy;
import static com.android.cts.devicepolicy.metrics.DevicePolicyEventLogVerifier.assertMetricsLogged;
import com.android.cts.devicepolicy.metrics.DevicePolicyEventWrapper;
import com.android.tradefed.device.DeviceNotAvailableException;
import android.stats.devicepolicy.EventId;
public abstract class DeviceAndProfileOwnerHostSideTransferTest extends BaseDevicePolicyTest {
protected static final String TRANSFER_OWNER_OUTGOING_PKG =
"com.android.cts.transferowneroutgoing";
protected static final String TRANSFER_OWNER_OUTGOING_APK = "CtsTransferOwnerOutgoingApp.apk";
protected static final String TRANSFER_OWNER_OUTGOING_TEST_RECEIVER =
TRANSFER_OWNER_OUTGOING_PKG
+ "/com.android.cts.transferowner"
+ ".DeviceAndProfileOwnerTransferOutgoingTest$BasicAdminReceiver";
protected static final String TRANSFER_OWNER_INCOMING_PKG =
"com.android.cts.transferownerincoming";
protected static final String TRANSFER_OWNER_INCOMING_APK = "CtsTransferOwnerIncomingApp.apk";
protected static final String INVALID_TARGET_APK = "CtsIntentReceiverApp.apk";
protected static final String TRANSFER_PROFILE_OWNER_OUTGOING_TEST =
"com.android.cts.transferowner.TransferProfileOwnerOutgoingTest";
protected static final String TRANSFER_PROFILE_OWNER_INCOMING_TEST =
"com.android.cts.transferowner.TransferProfileOwnerIncomingTest";
protected int mUserId;
protected String mOutgoingTestClassName;
protected String mIncomingTestClassName;
public void testTransferOwnership() throws Exception {
if (!mHasFeature) {
return;
}
final boolean hasManagedProfile = (mUserId != mPrimaryUserId);
final String expectedManagementType = hasManagedProfile ? "profile-owner" : "device-owner";
assertMetricsLogged(getDevice(), () -> {
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG, mOutgoingTestClassName,
"testTransferOwnership", mUserId);
}, new DevicePolicyEventWrapper.Builder(EventId.TRANSFER_OWNERSHIP_VALUE)
.setAdminPackageName(TRANSFER_OWNER_OUTGOING_PKG)
.setStrings(TRANSFER_OWNER_INCOMING_PKG, expectedManagementType)
.build());
}
public void testTransferSameAdmin() throws Exception {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testTransferSameAdmin", mUserId);
}
public void testTransferInvalidTarget() throws Exception {
if (!mHasFeature) {
return;
}
installAppAsUser(INVALID_TARGET_APK, mUserId);
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testTransferInvalidTarget", mUserId);
}
public void testTransferPolicies() throws Exception {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testTransferWithPoliciesOutgoing", mUserId);
runDeviceTestsAsUser(TRANSFER_OWNER_INCOMING_PKG,
mIncomingTestClassName,
"testTransferPoliciesAreRetainedAfterTransfer", mUserId);
}
public void testTransferOwnershipChangedBroadcast() throws Exception {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testTransferOwnershipChangedBroadcast", mUserId);
}
public void testTransferCompleteCallback() throws Exception {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testTransferOwnership", mUserId);
waitForBroadcastIdle();
runDeviceTestsAsUser(TRANSFER_OWNER_INCOMING_PKG,
mIncomingTestClassName,
"testTransferCompleteCallbackIsCalled", mUserId);
}
protected void setupTestParameters(int userId, String outgoingTestClassName,
String incomingTestClassName) {
mUserId = userId;
mOutgoingTestClassName = outgoingTestClassName;
mIncomingTestClassName = incomingTestClassName;
}
public void testTransferOwnershipNoMetadata() throws Exception {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testTransferOwnershipNoMetadata", mUserId);
}
public void testIsTransferBundlePersisted() throws DeviceNotAvailableException {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testTransferOwnershipBundleSaved", mUserId);
runDeviceTestsAsUser(TRANSFER_OWNER_INCOMING_PKG,
mIncomingTestClassName,
"testTransferOwnershipBundleLoaded", mUserId);
}
public void testGetTransferOwnershipBundleOnlyCalledFromAdmin()
throws DeviceNotAvailableException {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testGetTransferOwnershipBundleOnlyCalledFromAdmin", mUserId);
}
public void testBundleEmptyAfterTransferWithNullBundle() throws DeviceNotAvailableException {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testTransferOwnershipNullBundle", mUserId);
runDeviceTestsAsUser(TRANSFER_OWNER_INCOMING_PKG,
mIncomingTestClassName,
"testTransferOwnershipEmptyBundleLoaded", mUserId);
}
public void testIsBundleNullNoTransfer() throws DeviceNotAvailableException {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testIsBundleNullNoTransfer", mUserId);
}
protected int setupManagedProfileOnDeviceOwner(String apkName, String adminReceiverClassName)
throws Exception {
// Temporary disable the DISALLOW_ADD_MANAGED_PROFILE, so that we can create profile
// using adb command.
clearDisallowAddManagedProfileRestriction();
try {
return setupManagedProfile(apkName, adminReceiverClassName);
} finally {
// Adding back DISALLOW_ADD_MANAGED_PROFILE.
addDisallowAddManagedProfileRestriction();
}
}
protected int setupManagedProfile(String apkName, String adminReceiverClassName)
throws Exception {
final int userId = createManagedProfile(mPrimaryUserId);
installAppAsUser(apkName, userId);
if (!setProfileOwner(adminReceiverClassName, userId, false)) {
removeAdmin(TRANSFER_OWNER_OUTGOING_TEST_RECEIVER, userId);
getDevice().uninstallPackage(TRANSFER_OWNER_OUTGOING_PKG);
fail("Failed to set device owner");
return -1;
}
startUserAndWait(userId);
return userId;
}
/**
* Clear {@link android.os.UserManager#DISALLOW_ADD_MANAGED_PROFILE}.
*/
private void clearDisallowAddManagedProfileRestriction() throws Exception {
runDeviceTestsAsUser(
TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testClearDisallowAddManagedProfileRestriction",
mPrimaryUserId);
}
/**
* Add {@link android.os.UserManager#DISALLOW_ADD_MANAGED_PROFILE}.
*/
private void addDisallowAddManagedProfileRestriction() throws Exception {
runDeviceTestsAsUser(
TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testAddDisallowAddManagedProfileRestriction",
mPrimaryUserId);
}
public void testTargetDeviceAdminServiceBound() throws Exception {
if (!mHasFeature) {
return;
}
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
mOutgoingTestClassName,
"testTransferOwnership", mUserId);
runDeviceTestsAsUser(TRANSFER_OWNER_INCOMING_PKG,
mIncomingTestClassName,
"testAdminServiceIsBound", mUserId);
}
protected void setSameAffiliationId(int profileUserId, String testClassName)
throws Exception {
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
testClassName,
"testSetAffiliationId1", mPrimaryUserId);
runDeviceTestsAsUser(TRANSFER_OWNER_OUTGOING_PKG,
testClassName,
"testSetAffiliationId1", profileUserId);
}
protected void assertAffiliationIdsAreIntact(int profileUserId,
String testClassName) throws Exception {
runDeviceTestsAsUser(TRANSFER_OWNER_INCOMING_PKG,
testClassName,
"testIsAffiliationId1", mPrimaryUserId);
runDeviceTestsAsUser(TRANSFER_OWNER_INCOMING_PKG,
testClassName,
"testIsAffiliationId1", profileUserId);
}
/* TODO: Add tests for:
* 1. passwordOwner
*
* */
}