1 /* 2 * Copyright (C) 2018 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.devicepolicy; 18 19 import static com.android.server.devicepolicy.TransferOwnershipMetadataManager 20 .ADMIN_TYPE_DEVICE_OWNER; 21 import static com.android.server.devicepolicy.TransferOwnershipMetadataManager 22 .OWNER_TRANSFER_METADATA_XML; 23 import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.TAG_ADMIN_TYPE; 24 import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.TAG_SOURCE_COMPONENT; 25 import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.TAG_TARGET_COMPONENT; 26 import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.TAG_USER_ID; 27 28 import static com.google.common.truth.Truth.assertThat; 29 30 import android.os.Environment; 31 import android.util.Log; 32 33 import androidx.test.runner.AndroidJUnit4; 34 35 import com.android.server.devicepolicy.TransferOwnershipMetadataManager.Injector; 36 import com.android.server.devicepolicy.TransferOwnershipMetadataManager.Metadata; 37 38 import org.junit.After; 39 import org.junit.Before; 40 import org.junit.Ignore; 41 import org.junit.Test; 42 import org.junit.runner.RunWith; 43 44 import java.io.File; 45 import java.io.IOException; 46 import java.nio.charset.Charset; 47 import java.nio.file.Files; 48 import java.nio.file.Path; 49 import java.nio.file.Paths; 50 51 /** 52 * Unit tests for {@link TransferOwnershipMetadataManager}. 53 * 54 * <p>Run this test with: 55 * 56 * <pre><code> 57 atest FrameworksServicesTests:com.android.server.devicepolicy.TransferOwnershipMetadataManagerTest 58 * </code></pre> 59 */ 60 @RunWith(AndroidJUnit4.class) 61 public final class TransferOwnershipMetadataManagerTest { 62 private final static String TAG = TransferOwnershipMetadataManagerTest.class.getName(); 63 private final static String SOURCE_COMPONENT = 64 "com.dummy.admin.package/com.dummy.admin.package.SourceClassName"; 65 private final static String TARGET_COMPONENT = 66 "com.dummy.target.package/com.dummy.target.package.TargetClassName"; 67 private final static int USER_ID = 123; 68 private final static Metadata TEST_PARAMS = new Metadata(SOURCE_COMPONENT, 69 TARGET_COMPONENT, USER_ID, ADMIN_TYPE_DEVICE_OWNER); 70 71 private MockInjector mMockInjector; 72 73 @Before setUp()74 public void setUp() { 75 mMockInjector = new MockInjector(); 76 getOwnerTransferParams().deleteMetadataFile(); 77 } 78 79 @Test testSave()80 public void testSave() { 81 TransferOwnershipMetadataManager paramsManager = getOwnerTransferParams(); 82 assertThat(paramsManager.saveMetadataFile(TEST_PARAMS)).isTrue(); 83 assertThat(paramsManager.metadataFileExists()).isTrue(); 84 } 85 86 @Test 87 @Ignore testFileContentValid()88 public void testFileContentValid() { 89 TransferOwnershipMetadataManager paramsManager = getOwnerTransferParams(); 90 assertThat(paramsManager.saveMetadataFile(TEST_PARAMS)).isTrue(); 91 Path path = Paths.get(new File(mMockInjector.getOwnerTransferMetadataDir(), 92 OWNER_TRANSFER_METADATA_XML).getAbsolutePath()); 93 try { 94 String contents = new String(Files.readAllBytes(path), Charset.forName("UTF-8")); 95 assertThat(contents).isEqualTo( 96 "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n" 97 + "<" + TAG_USER_ID + ">" + USER_ID + "</" + TAG_USER_ID + ">\n" 98 + "<" + TAG_SOURCE_COMPONENT + ">" + SOURCE_COMPONENT + "</" 99 + TAG_SOURCE_COMPONENT + ">\n" 100 + "<" + TAG_TARGET_COMPONENT + ">" + TARGET_COMPONENT + "</" 101 + TAG_TARGET_COMPONENT + ">\n" 102 + "<" + TAG_ADMIN_TYPE + ">" + ADMIN_TYPE_DEVICE_OWNER + "</" 103 + TAG_ADMIN_TYPE + ">\n"); 104 } catch (IOException e) { 105 e.printStackTrace(); 106 } 107 } 108 109 @Test testLoad()110 public void testLoad() { 111 TransferOwnershipMetadataManager paramsManager = getOwnerTransferParams(); 112 final File transferOwnershipMetadataFile = 113 new File(mMockInjector.getOwnerTransferMetadataDir(), OWNER_TRANSFER_METADATA_XML); 114 Log.d(TAG, "testLoad: file path is " + transferOwnershipMetadataFile.getAbsolutePath()); 115 Log.d(TAG, "testLoad: file exists? " + transferOwnershipMetadataFile.exists()); 116 Log.d(TAG, "testLoad: file mkdir?" + transferOwnershipMetadataFile.mkdir()); 117 try { 118 File canonicalFile = transferOwnershipMetadataFile.getCanonicalFile(); 119 File parentFile = canonicalFile.getParentFile(); 120 Log.d(TAG, "testLoad: file getCanonicalFile?" + canonicalFile); 121 Log.d(TAG, "testLoad: getCanonicalFile.getParentFile " + parentFile); 122 Log.d(TAG, "testLoad: parent mkdirs? " + parentFile.mkdirs()); 123 Log.d(TAG, "testLoad: parent exists? " + parentFile.exists()); 124 Log.d(TAG, "testLoad: canonical file.mkdir()? " + canonicalFile.mkdir()); 125 } catch (IOException e) { 126 Log.d(TAG, "testLoad: failed to get canonical file"); 127 } 128 paramsManager.saveMetadataFile(TEST_PARAMS); 129 assertThat(paramsManager.loadMetadataFile()).isEqualTo(TEST_PARAMS); 130 } 131 132 @Test testDelete()133 public void testDelete() { 134 TransferOwnershipMetadataManager paramsManager = getOwnerTransferParams(); 135 paramsManager.saveMetadataFile(TEST_PARAMS); 136 paramsManager.deleteMetadataFile(); 137 assertThat(paramsManager.metadataFileExists()).isFalse(); 138 } 139 140 @After tearDown()141 public void tearDown() { 142 getOwnerTransferParams().deleteMetadataFile(); 143 } 144 getOwnerTransferParams()145 private TransferOwnershipMetadataManager getOwnerTransferParams() { 146 return new TransferOwnershipMetadataManager(mMockInjector); 147 } 148 149 static class MockInjector extends Injector { 150 @Override getOwnerTransferMetadataDir()151 public File getOwnerTransferMetadataDir() { 152 return Environment.getExternalStorageDirectory(); 153 } 154 } 155 156 } 157