1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.cts.managedprofile; 18 19 import android.app.admin.DevicePolicyManager; 20 import android.content.ComponentName; 21 import android.os.PersistableBundle; 22 import android.test.MoreAsserts; 23 24 import java.util.HashSet; 25 import java.util.List; 26 import java.util.Set; 27 28 import static com.android.cts.managedprofile.TrustAgentInfoTest.AssertConfigMode.*; 29 30 public class TrustAgentInfoTest extends BaseManagedProfileTest { 31 private static final String BUNDLE_KEY = "testing"; 32 private static final String BUNDLE_PARENT_VALUE = "parent"; 33 private static final String BUNDLE_CHILD_VALUE = "child"; 34 private static final PersistableBundle CHILD_CONFIG = new PersistableBundle(); 35 private static final PersistableBundle PARENT_CONFIG = new PersistableBundle(); 36 private static final ComponentName TRUST_AGENT_COMPONENT = 37 new ComponentName("com.trustagent", "com.trustagent.xxx"); 38 39 static { CHILD_CONFIG.putString(BUNDLE_KEY, BUNDLE_CHILD_VALUE)40 CHILD_CONFIG.putString(BUNDLE_KEY, BUNDLE_CHILD_VALUE); PARENT_CONFIG.putString(BUNDLE_KEY, BUNDLE_PARENT_VALUE)41 PARENT_CONFIG.putString(BUNDLE_KEY, BUNDLE_PARENT_VALUE); 42 } 43 44 enum AssertConfigMode { 45 ASSERT_PARENT_CONFIG, ASSERT_CHILD_CONFIG, ASSERT_BOTH 46 } 47 48 @Override tearDown()49 protected void tearDown() throws Exception { 50 clearTrustAgentConfiguration(true /* isParent */); 51 clearTrustAgentConfiguration(false /* isParent */); 52 enableTrustAgents(true /* isParent */); 53 enableTrustAgents(false /* isParent */); 54 super.tearDown(); 55 } 56 testSetAndGetTrustAgentConfiguration_child()57 public void testSetAndGetTrustAgentConfiguration_child() { 58 setAndGetTrustAgentConfigurationInternal(false /* isParent */); 59 } 60 testSetAndGetTrustAgentConfiguration_parent()61 public void testSetAndGetTrustAgentConfiguration_parent() { 62 setAndGetTrustAgentConfigurationInternal(true /* isParent */); 63 } 64 testSetTrustAgentConfiguration_bothHaveTrustAgentConfigAndUnified()65 public void testSetTrustAgentConfiguration_bothHaveTrustAgentConfigAndUnified() { 66 // Set both trust agents. 67 setTrustAgentConfiguration(false /* isParent */); 68 setTrustAgentConfiguration(true /* isParent */); 69 70 // Case when trust agents is not disabled 71 List<PersistableBundle> parentConfig = 72 mParentDevicePolicyManager.getTrustAgentConfiguration( 73 null, TRUST_AGENT_COMPONENT); 74 List<PersistableBundle> childConfig = mDevicePolicyManager.getTrustAgentConfiguration( 75 null, TRUST_AGENT_COMPONENT); 76 assertNull(parentConfig); 77 assertNull(childConfig); 78 79 // Case when trust agents is disabled 80 disableTrustAgents(false /* isParent */); 81 disableTrustAgents(true /* isParent */); 82 83 parentConfig = mParentDevicePolicyManager.getTrustAgentConfiguration( 84 null, TRUST_AGENT_COMPONENT); 85 childConfig = mDevicePolicyManager.getTrustAgentConfiguration( 86 null, TRUST_AGENT_COMPONENT); 87 assertPersistableBundleListEquals(ASSERT_BOTH, parentConfig); 88 assertPersistableBundleListEquals(ASSERT_BOTH, childConfig); 89 } 90 testSetTrustAgentConfiguration_bothHaveTrustAgentConfigAndNonUnified()91 public void testSetTrustAgentConfiguration_bothHaveTrustAgentConfigAndNonUnified() { 92 // Precondition: separate challenge for the managed profile should have been enabled. 93 94 // Set both trust agents. 95 setTrustAgentConfiguration(false /* isParent */); 96 setTrustAgentConfiguration(true /* isParent */); 97 disableTrustAgents(false /* isParent */); 98 disableTrustAgents(true /* isParent */); 99 100 List<PersistableBundle> parentConfig = 101 mParentDevicePolicyManager.getTrustAgentConfiguration( 102 null, TRUST_AGENT_COMPONENT); 103 List<PersistableBundle> childConfig = 104 mDevicePolicyManager.getTrustAgentConfiguration( 105 null, TRUST_AGENT_COMPONENT); 106 // Separate credential in managed profile, should only get its own config. 107 assertPersistableBundleListEquals(ASSERT_PARENT_CONFIG, parentConfig); 108 assertPersistableBundleListEquals(ASSERT_CHILD_CONFIG, childConfig); 109 } 110 setAndGetTrustAgentConfigurationInternal(boolean isParent)111 private void setAndGetTrustAgentConfigurationInternal(boolean isParent) { 112 // Set the config 113 setTrustAgentConfiguration(isParent); 114 // Case when trust agents is not disabled 115 List<PersistableBundle> configs = getDevicePolicyManager(isParent) 116 .getTrustAgentConfiguration(null, TRUST_AGENT_COMPONENT); 117 assertNull(configs); 118 // Case when trust agents is disabled 119 disableTrustAgents(isParent); 120 configs = getDevicePolicyManager(isParent) 121 .getTrustAgentConfiguration(null, TRUST_AGENT_COMPONENT); 122 assertPersistableBundleListEquals(isParent ? 123 ASSERT_PARENT_CONFIG : ASSERT_CHILD_CONFIG, configs); 124 } 125 disableTrustAgents(boolean isParent)126 private void disableTrustAgents(boolean isParent) { 127 getDevicePolicyManager(isParent).setKeyguardDisabledFeatures(ADMIN_RECEIVER_COMPONENT, 128 DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS); 129 } 130 enableTrustAgents(boolean isParent)131 private void enableTrustAgents(boolean isParent) { 132 getDevicePolicyManager(isParent).setKeyguardDisabledFeatures(ADMIN_RECEIVER_COMPONENT, 133 DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_NONE); 134 } 135 clearTrustAgentConfiguration(boolean isParent)136 private void clearTrustAgentConfiguration(boolean isParent) { 137 getDevicePolicyManager(isParent).setTrustAgentConfiguration(ADMIN_RECEIVER_COMPONENT, 138 TRUST_AGENT_COMPONENT, null); 139 assertNull(getDevicePolicyManager(isParent).getTrustAgentConfiguration( 140 ADMIN_RECEIVER_COMPONENT, TRUST_AGENT_COMPONENT)); 141 } 142 setTrustAgentConfiguration(boolean isParent)143 private PersistableBundle setTrustAgentConfiguration(boolean isParent) { 144 PersistableBundle expected = isParent ? PARENT_CONFIG : CHILD_CONFIG; 145 getDevicePolicyManager(isParent).setTrustAgentConfiguration(ADMIN_RECEIVER_COMPONENT, 146 TRUST_AGENT_COMPONENT, expected); 147 List<PersistableBundle> configs = 148 getDevicePolicyManager(isParent).getTrustAgentConfiguration( 149 ADMIN_RECEIVER_COMPONENT, TRUST_AGENT_COMPONENT); 150 assertPersistableBundleListEquals(isParent ? 151 ASSERT_PARENT_CONFIG : 152 ASSERT_CHILD_CONFIG, configs); 153 return expected; 154 } 155 assertPersistableBundleListEquals( AssertConfigMode mode, List<PersistableBundle> actual)156 private static void assertPersistableBundleListEquals( 157 AssertConfigMode mode, List<PersistableBundle> actual) { 158 Set<String> expectedValues = new HashSet<>(); 159 switch (mode) { 160 case ASSERT_CHILD_CONFIG: 161 expectedValues.add(BUNDLE_CHILD_VALUE); 162 break; 163 case ASSERT_PARENT_CONFIG: 164 expectedValues.add(BUNDLE_PARENT_VALUE); 165 break; 166 case ASSERT_BOTH: 167 expectedValues.add(BUNDLE_PARENT_VALUE); 168 expectedValues.add(BUNDLE_CHILD_VALUE); 169 break; 170 } 171 assertNotNull(actual); 172 Set<String> actualValues = new HashSet<>(); 173 for (PersistableBundle bundle : actual) { 174 actualValues.add(bundle.getString(BUNDLE_KEY)); 175 } 176 MoreAsserts.assertEquals(expectedValues, actualValues); 177 } 178 179 } 180