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.server.pm; 18 19 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED; 20 import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK; 21 22 import static org.hamcrest.CoreMatchers.is; 23 import static org.junit.Assert.assertThat; 24 25 import android.content.pm.PackageUserState; 26 import android.os.PersistableBundle; 27 import android.support.test.filters.SmallTest; 28 import android.support.test.runner.AndroidJUnit4; 29 import android.util.ArraySet; 30 31 import org.junit.Test; 32 import org.junit.runner.RunWith; 33 34 @RunWith(AndroidJUnit4.class) 35 @SmallTest 36 public class PackageUserStateTest { 37 38 @Test 39 public void testPackageUserState01() { 40 final PackageUserState testUserState = new PackageUserState(); 41 PackageUserState oldUserState; 42 43 oldUserState = new PackageUserState(); 44 assertThat(testUserState.equals(null), is(false)); 45 assertThat(testUserState.equals(testUserState), is(true)); 46 assertThat(testUserState.equals(oldUserState), is(true)); 47 48 oldUserState = new PackageUserState(); 49 oldUserState.appLinkGeneration = 6; 50 assertThat(testUserState.equals(oldUserState), is(false)); 51 52 oldUserState = new PackageUserState(); 53 oldUserState.ceDataInode = 4000L; 54 assertThat(testUserState.equals(oldUserState), is(false)); 55 56 oldUserState = new PackageUserState(); 57 oldUserState.domainVerificationStatus = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK; 58 assertThat(testUserState.equals(oldUserState), is(false)); 59 60 oldUserState = new PackageUserState(); 61 oldUserState.enabled = COMPONENT_ENABLED_STATE_ENABLED; 62 assertThat(testUserState.equals(oldUserState), is(false)); 63 64 oldUserState = new PackageUserState(); 65 oldUserState.hidden = true; 66 assertThat(testUserState.equals(oldUserState), is(false)); 67 68 oldUserState = new PackageUserState(); 69 oldUserState.installed = false; 70 assertThat(testUserState.equals(oldUserState), is(false)); 71 72 oldUserState = new PackageUserState(); 73 oldUserState.notLaunched = true; 74 assertThat(testUserState.equals(oldUserState), is(false)); 75 76 oldUserState = new PackageUserState(); 77 oldUserState.stopped = true; 78 assertThat(testUserState.equals(oldUserState), is(false)); 79 80 oldUserState = new PackageUserState(); 81 oldUserState.suspended = true; 82 assertThat(testUserState.equals(oldUserState), is(false)); 83 } 84 85 @Test 86 public void testPackageUserState02() { 87 final PackageUserState testUserState01 = new PackageUserState(); 88 PackageUserState oldUserState; 89 90 oldUserState = new PackageUserState(); 91 oldUserState.lastDisableAppCaller = "unit_test"; 92 assertThat(testUserState01.equals(oldUserState), is(false)); 93 94 final PackageUserState testUserState02 = new PackageUserState(); 95 testUserState02.lastDisableAppCaller = "unit_test"; 96 assertThat(testUserState02.equals(oldUserState), is(true)); 97 98 final PackageUserState testUserState03 = new PackageUserState(); 99 testUserState03.lastDisableAppCaller = "unit_test_00"; 100 assertThat(testUserState03.equals(oldUserState), is(false)); 101 } 102 103 @Test 104 public void testPackageUserState03() { 105 final PackageUserState oldUserState = new PackageUserState(); 106 107 // only new user state has array defined; different 108 final PackageUserState testUserState01 = new PackageUserState(); 109 testUserState01.disabledComponents = new ArraySet<>(); 110 assertThat(testUserState01.equals(oldUserState), is(false)); 111 112 // only old user state has array defined; different 113 final PackageUserState testUserState02 = new PackageUserState(); 114 oldUserState.disabledComponents = new ArraySet<>(); 115 assertThat(testUserState02.equals(oldUserState), is(false)); 116 117 // both states have array defined; not different 118 final PackageUserState testUserState03 = new PackageUserState(); 119 testUserState03.disabledComponents = new ArraySet<>(); 120 assertThat(testUserState03.equals(oldUserState), is(true)); 121 // fewer elements in old user state; different 122 testUserState03.disabledComponents.add("com.android.unit_test01"); 123 testUserState03.disabledComponents.add("com.android.unit_test02"); 124 testUserState03.disabledComponents.add("com.android.unit_test03"); 125 oldUserState.disabledComponents.add("com.android.unit_test03"); 126 oldUserState.disabledComponents.add("com.android.unit_test02"); 127 assertThat(testUserState03.equals(oldUserState), is(false)); 128 // same elements in old user state; not different 129 oldUserState.disabledComponents.add("com.android.unit_test01"); 130 assertThat(testUserState03.equals(oldUserState), is(true)); 131 // more elements in old user state; different 132 oldUserState.disabledComponents.add("com.android.unit_test04"); 133 assertThat(testUserState03.equals(oldUserState), is(false)); 134 // different elements in old user state; different 135 testUserState03.disabledComponents.add("com.android.unit_test_04"); 136 assertThat(testUserState03.equals(oldUserState), is(false)); 137 } 138 139 @Test 140 public void testPackageUserState04() { 141 final PackageUserState oldUserState = new PackageUserState(); 142 143 // only new user state has array defined; different 144 final PackageUserState testUserState01 = new PackageUserState(); 145 testUserState01.enabledComponents = new ArraySet<>(); 146 assertThat(testUserState01.equals(oldUserState), is(false)); 147 148 // only old user state has array defined; different 149 final PackageUserState testUserState02 = new PackageUserState(); 150 oldUserState.enabledComponents = new ArraySet<>(); 151 assertThat(testUserState02.equals(oldUserState), is(false)); 152 153 // both states have array defined; not different 154 final PackageUserState testUserState03 = new PackageUserState(); 155 testUserState03.enabledComponents = new ArraySet<>(); 156 assertThat(testUserState03.equals(oldUserState), is(true)); 157 // fewer elements in old user state; different 158 testUserState03.enabledComponents.add("com.android.unit_test01"); 159 testUserState03.enabledComponents.add("com.android.unit_test02"); 160 testUserState03.enabledComponents.add("com.android.unit_test03"); 161 oldUserState.enabledComponents.add("com.android.unit_test03"); 162 oldUserState.enabledComponents.add("com.android.unit_test02"); 163 assertThat(testUserState03.equals(oldUserState), is(false)); 164 // same elements in old user state; not different 165 oldUserState.enabledComponents.add("com.android.unit_test01"); 166 assertThat(testUserState03.equals(oldUserState), is(true)); 167 // more elements in old user state; different 168 oldUserState.enabledComponents.add("com.android.unit_test04"); 169 assertThat(testUserState03.equals(oldUserState), is(false)); 170 // different elements in old user state; different 171 testUserState03.enabledComponents.add("com.android.unit_test_04"); 172 assertThat(testUserState03.equals(oldUserState), is(false)); 173 } 174 175 @Test 176 public void testPackageUserState05() { 177 PersistableBundle appExtras1 = new PersistableBundle(); 178 PersistableBundle appExtras2 = new PersistableBundle(); 179 appExtras1.putInt("appExtraId", 1); 180 appExtras2.putInt("appExtraId", 2); 181 PersistableBundle launcherExtras1 = new PersistableBundle(); 182 PersistableBundle launcherExtras2 = new PersistableBundle(); 183 launcherExtras1.putString("name", "launcherExtras1"); 184 launcherExtras2.putString("name", "launcherExtras2"); 185 final String suspendingPackage1 = "package1"; 186 final String suspendingPackage2 = "package2"; 187 final String dialogMessage1 = "dialogMessage1"; 188 final String dialogMessage2 = "dialogMessage2"; 189 190 final PackageUserState testUserState1 = new PackageUserState(); 191 testUserState1.suspended = true; 192 testUserState1.suspendedAppExtras = appExtras1; 193 testUserState1.suspendedLauncherExtras = launcherExtras1; 194 testUserState1.suspendingPackage = suspendingPackage1; 195 testUserState1.dialogMessage = dialogMessage1; 196 197 PackageUserState testUserState2 = new PackageUserState(testUserState1); 198 assertThat(testUserState1.equals(testUserState2), is(true)); 199 testUserState2.suspendingPackage = suspendingPackage2; 200 assertThat(testUserState1.equals(testUserState2), is(false)); 201 202 testUserState2 = new PackageUserState(testUserState1); 203 testUserState2.suspendedAppExtras = appExtras2; 204 assertThat(testUserState1.equals(testUserState2), is(false)); 205 206 testUserState2 = new PackageUserState(testUserState1); 207 testUserState2.suspendedLauncherExtras = launcherExtras2; 208 assertThat(testUserState1.equals(testUserState2), is(false)); 209 210 testUserState2 = new PackageUserState(testUserState1); 211 testUserState2.dialogMessage = dialogMessage2; 212 assertThat(testUserState1.equals(testUserState2), is(false)); 213 214 testUserState2 = new PackageUserState(testUserState1); 215 testUserState2.suspended = testUserState1.suspended = false; 216 // Everything is different but irrelevant if suspended is false 217 testUserState2.suspendingPackage = suspendingPackage2; 218 testUserState2.dialogMessage = dialogMessage2; 219 testUserState2.suspendedAppExtras = appExtras2; 220 testUserState2.suspendedLauncherExtras = launcherExtras2; 221 assertThat(testUserState1.equals(testUserState2), is(true)); 222 } 223 224 } 225