1/* 2 * Copyright (C) 2015 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 17package com.android.server.pm; 18 19import android.os.Bundle; 20import android.os.FileUtils; 21import android.os.Parcelable; 22import android.test.AndroidTestCase; 23import android.util.AtomicFile; 24 25import java.io.File; 26import java.io.IOException; 27import java.util.Arrays; 28 29public class UserManagerServiceTest extends AndroidTestCase { 30 private static String[] STRING_ARRAY = new String[] {"<tag", "<![CDATA["}; 31 private File restrictionsFile; 32 33 @Override 34 protected void setUp() throws Exception { 35 super.setUp(); 36 restrictionsFile = new File(mContext.getCacheDir(), "restrictions.xml"); 37 restrictionsFile.delete(); 38 } 39 40 @Override 41 protected void tearDown() throws Exception { 42 restrictionsFile.delete(); 43 super.tearDown(); 44 } 45 46 public void testWriteReadApplicationRestrictions() throws IOException { 47 AtomicFile atomicFile = new AtomicFile(restrictionsFile); 48 Bundle bundle = createBundle(); 49 UserManagerService.writeApplicationRestrictionsLocked(bundle, atomicFile); 50 assertTrue(atomicFile.getBaseFile().exists()); 51 String s = FileUtils.readTextFile(restrictionsFile, 10000, ""); 52 System.out.println("restrictionsFile: " + s); 53 bundle = UserManagerService.readApplicationRestrictionsLocked(atomicFile); 54 System.out.println("readApplicationRestrictionsLocked bundle: " + bundle); 55 assertBundle(bundle); 56 } 57 58 private Bundle createBundle() { 59 Bundle result = new Bundle(); 60 // Tests for 6 allowed types: Integer, Boolean, String, String[], Bundle and Parcelable[] 61 result.putBoolean("boolean_0", false); 62 result.putBoolean("boolean_1", true); 63 result.putInt("integer", 100); 64 result.putString("empty", ""); 65 result.putString("string", "text"); 66 result.putStringArray("string[]", STRING_ARRAY); 67 68 Bundle bundle = new Bundle(); 69 bundle.putString("bundle_string", "bundle_string"); 70 bundle.putInt("bundle_int", 1); 71 result.putBundle("bundle", bundle); 72 73 Bundle[] bundleArray = new Bundle[2]; 74 bundleArray[0] = new Bundle(); 75 bundleArray[0].putString("bundle_array_string", "bundle_array_string"); 76 bundleArray[0].putBundle("bundle_array_bundle", bundle); 77 bundleArray[1] = new Bundle(); 78 bundleArray[1].putString("bundle_array_string2", "bundle_array_string2"); 79 result.putParcelableArray("bundle_array", bundleArray); 80 return result; 81 } 82 83 private void assertBundle(Bundle bundle) { 84 assertFalse(bundle.getBoolean("boolean_0")); 85 assertTrue(bundle.getBoolean("boolean_1")); 86 assertEquals(100, bundle.getInt("integer")); 87 assertEquals("", bundle.getString("empty")); 88 assertEquals("text", bundle.getString("string")); 89 assertEquals(Arrays.asList(STRING_ARRAY), Arrays.asList(bundle.getStringArray("string[]"))); 90 Parcelable[] bundle_array = bundle.getParcelableArray("bundle_array"); 91 assertEquals(2, bundle_array.length); 92 Bundle bundle1 = (Bundle) bundle_array[0]; 93 assertEquals("bundle_array_string", bundle1.getString("bundle_array_string")); 94 assertNotNull(bundle1.getBundle("bundle_array_bundle")); 95 Bundle bundle2 = (Bundle) bundle_array[1]; 96 assertEquals("bundle_array_string2", bundle2.getString("bundle_array_string2")); 97 Bundle childBundle = bundle.getBundle("bundle"); 98 assertEquals("bundle_string", childBundle.getString("bundle_string")); 99 assertEquals(1, childBundle.getInt("bundle_int")); 100 } 101 102} 103