/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.devicepolicy; import static com.android.server.devicepolicy.TransferOwnershipMetadataManager .ADMIN_TYPE_DEVICE_OWNER; import static com.android.server.devicepolicy.TransferOwnershipMetadataManager .OWNER_TRANSFER_METADATA_XML; import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.TAG_ADMIN_TYPE; import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.TAG_SOURCE_COMPONENT; import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.TAG_TARGET_COMPONENT; import static com.android.server.devicepolicy.TransferOwnershipMetadataManager.TAG_USER_ID; import static com.google.common.truth.Truth.assertThat; import android.os.Environment; import android.util.Log; import androidx.test.runner.AndroidJUnit4; import com.android.server.devicepolicy.TransferOwnershipMetadataManager.Injector; import com.android.server.devicepolicy.TransferOwnershipMetadataManager.Metadata; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; /** * Unit tests for {@link TransferOwnershipMetadataManager}. * *

Run this test with: * *


 atest FrameworksServicesTests:com.android.server.devicepolicy.TransferOwnershipMetadataManagerTest
 * 
*/ @RunWith(AndroidJUnit4.class) public final class TransferOwnershipMetadataManagerTest { private final static String TAG = TransferOwnershipMetadataManagerTest.class.getName(); private final static String SOURCE_COMPONENT = "com.dummy.admin.package/com.dummy.admin.package.SourceClassName"; private final static String TARGET_COMPONENT = "com.dummy.target.package/com.dummy.target.package.TargetClassName"; private final static int USER_ID = 123; private final static Metadata TEST_PARAMS = new Metadata(SOURCE_COMPONENT, TARGET_COMPONENT, USER_ID, ADMIN_TYPE_DEVICE_OWNER); private MockInjector mMockInjector; @Before public void setUp() { mMockInjector = new MockInjector(); getOwnerTransferParams().deleteMetadataFile(); } @Test public void testSave() { TransferOwnershipMetadataManager paramsManager = getOwnerTransferParams(); assertThat(paramsManager.saveMetadataFile(TEST_PARAMS)).isTrue(); assertThat(paramsManager.metadataFileExists()).isTrue(); } @Test @Ignore public void testFileContentValid() { TransferOwnershipMetadataManager paramsManager = getOwnerTransferParams(); assertThat(paramsManager.saveMetadataFile(TEST_PARAMS)).isTrue(); Path path = Paths.get(new File(mMockInjector.getOwnerTransferMetadataDir(), OWNER_TRANSFER_METADATA_XML).getAbsolutePath()); try { String contents = new String(Files.readAllBytes(path), Charset.forName("UTF-8")); assertThat(contents).isEqualTo( "\n" + "<" + TAG_USER_ID + ">" + USER_ID + "\n" + "<" + TAG_SOURCE_COMPONENT + ">" + SOURCE_COMPONENT + "\n" + "<" + TAG_TARGET_COMPONENT + ">" + TARGET_COMPONENT + "\n" + "<" + TAG_ADMIN_TYPE + ">" + ADMIN_TYPE_DEVICE_OWNER + "\n"); } catch (IOException e) { e.printStackTrace(); } } @Test public void testLoad() { TransferOwnershipMetadataManager paramsManager = getOwnerTransferParams(); final File transferOwnershipMetadataFile = new File(mMockInjector.getOwnerTransferMetadataDir(), OWNER_TRANSFER_METADATA_XML); Log.d(TAG, "testLoad: file path is " + transferOwnershipMetadataFile.getAbsolutePath()); Log.d(TAG, "testLoad: file exists? " + transferOwnershipMetadataFile.exists()); Log.d(TAG, "testLoad: file mkdir?" + transferOwnershipMetadataFile.mkdir()); try { File canonicalFile = transferOwnershipMetadataFile.getCanonicalFile(); File parentFile = canonicalFile.getParentFile(); Log.d(TAG, "testLoad: file getCanonicalFile?" + canonicalFile); Log.d(TAG, "testLoad: getCanonicalFile.getParentFile " + parentFile); Log.d(TAG, "testLoad: parent mkdirs? " + parentFile.mkdirs()); Log.d(TAG, "testLoad: parent exists? " + parentFile.exists()); Log.d(TAG, "testLoad: canonical file.mkdir()? " + canonicalFile.mkdir()); } catch (IOException e) { Log.d(TAG, "testLoad: failed to get canonical file"); } paramsManager.saveMetadataFile(TEST_PARAMS); assertThat(paramsManager.loadMetadataFile()).isEqualTo(TEST_PARAMS); } @Test public void testDelete() { TransferOwnershipMetadataManager paramsManager = getOwnerTransferParams(); paramsManager.saveMetadataFile(TEST_PARAMS); paramsManager.deleteMetadataFile(); assertThat(paramsManager.metadataFileExists()).isFalse(); } @After public void tearDown() { getOwnerTransferParams().deleteMetadataFile(); } private TransferOwnershipMetadataManager getOwnerTransferParams() { return new TransferOwnershipMetadataManager(mMockInjector); } static class MockInjector extends Injector { @Override public File getOwnerTransferMetadataDir() { return Environment.getExternalStorageDirectory(); } } }