15dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen/* 25dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Copyright (C) 2010 The Android Open Source Project 35dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * 45dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Licensed under the Apache License, Version 2.0 (the "License"); 55dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * you may not use this file except in compliance with the License. 65dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * You may obtain a copy of the License at 75dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * 85dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * http://www.apache.org/licenses/LICENSE-2.0 95dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * 105dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Unless required by applicable law or agreed to in writing, software 115dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * distributed under the License is distributed on an "AS IS" BASIS, 125dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * See the License for the specific language governing permissions and 145dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * limitations under the License. 155dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 165dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 175dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenpackage android.os.storage; 185dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 195dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport android.content.Context; 205dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport android.os.Environment; 215dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport android.test.InstrumentationTestCase; 225dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport android.test.suitebuilder.annotation.LargeTest; 235dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport android.util.Log; 245dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 255dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport com.android.frameworks.coretests.R; 265dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 275dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport java.io.DataInputStream; 285dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport java.io.IOException; 295dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport java.io.File; 305dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport java.io.FileInputStream; 315dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 325dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenimport junit.framework.AssertionFailedError; 335dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 345dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyenpublic class StorageManagerIntegrationTest extends StorageManagerBaseTest { 355dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 365dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen private static String LOG_TAG = "StorageManagerBaseTest.StorageManagerIntegrationTest"; 375dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen protected File mFile = null; 385dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 395dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 405dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * {@inheritDoc} 415dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 425dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @Override 435dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void setUp() throws Exception { 445dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen super.setUp(); 455dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mContext = getInstrumentation().getContext(); 465dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile = null; 475dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 485dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 495dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 505dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * {@inheritDoc} 515dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 525dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @Override 535dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen protected void tearDown() throws Exception { 545dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen if (mFile != null) { 555dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile.delete(); 565dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile = null; 575dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 585dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen super.tearDown(); 595dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 605dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 615dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 625dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Tests mounting a single OBB file and verifies its contents. 635dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 645dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @LargeTest 655dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void testMountSingleObb() { 665dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile = createObbFile(OBB_FILE_1, R.raw.obb_file1); 675dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath = mFile.getAbsolutePath(); 685dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath); 695dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen verifyObb1Contents(filePath); 705dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(filePath, DONT_FORCE); 715dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 725dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 735dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 745dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Tests mounting several OBB files and verifies its contents. 755dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 765dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @LargeTest 775dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void testMountMultipleObb() { 785dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen File file1 = null; 795dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen File file2 = null; 805dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen File file3 = null; 815dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen try { 825dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file1 = createObbFile(OBB_FILE_1, R.raw.obb_file1); 835dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath1 = file1.getAbsolutePath(); 845dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath1); 855dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen verifyObb1Contents(filePath1); 865dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 875dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file2 = createObbFile(OBB_FILE_2, R.raw.obb_file2); 885dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath2 = file2.getAbsolutePath(); 895dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath2); 905dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen verifyObb2Contents(filePath2); 915dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 925dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file3 = createObbFile(OBB_FILE_3, R.raw.obb_file3); 935dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath3 = file3.getAbsolutePath(); 945dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath3); 955dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen verifyObb3Contents(filePath3); 965dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 975dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(filePath1, DONT_FORCE); 985dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(filePath2, DONT_FORCE); 995dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(filePath3, DONT_FORCE); 1005dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } finally { 1015dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen if (file1 != null) { 1025dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file1.delete(); 1035dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1045dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen if (file2 != null) { 1055dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file2.delete(); 1065dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1075dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen if (file3 != null) { 1085dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file3.delete(); 1095dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1105dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1115dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1125dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1135dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 1145dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Tests mounting a single encrypted OBB file and verifies its contents. 1155dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 1165dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @LargeTest 1175dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void testMountSingleEncryptedObb() { 1185dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile = createObbFile(OBB_FILE_3_ENCRYPTED, R.raw.obb_enc_file100_orig3); 1195dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath = mFile.getAbsolutePath(); 1205dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath, OBB_FILE_3_PASSWORD, OnObbStateChangeListener.MOUNTED); 1215dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen verifyObb3Contents(filePath); 1225dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(filePath, DONT_FORCE); 1235dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1245dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1255dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 1265dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Tests mounting a single encrypted OBB file using an invalid password. 1275dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 1285dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @LargeTest 1295dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void testMountSingleEncryptedObbInvalidPassword() { 1305dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile = createObbFile("bad password@$%#@^*(!&)", R.raw.obb_enc_file100_orig3); 1315dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath = mFile.getAbsolutePath(); 1325dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath, OBB_FILE_3_PASSWORD, OnObbStateChangeListener.ERROR_COULD_NOT_MOUNT); 1335dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(filePath, DONT_FORCE); 1345dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1355dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1365dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 1375dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Tests simultaneously mounting 2 encrypted OBBs with different keys and verifies contents. 1385dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 1395dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @LargeTest 1405dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void testMountTwoEncryptedObb() { 1415dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen File file3 = null; 1425dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen File file1 = null; 1435dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen try { 1445dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file3 = createObbFile(OBB_FILE_3_ENCRYPTED, R.raw.obb_enc_file100_orig3); 1455dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath3 = file3.getAbsolutePath(); 1465dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath3, OBB_FILE_3_PASSWORD, OnObbStateChangeListener.MOUNTED); 1475dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen verifyObb3Contents(filePath3); 1485dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1495dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file1 = createObbFile(OBB_FILE_1_ENCRYPTED, R.raw.obb_enc_file100_orig1); 1505dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath1 = file1.getAbsolutePath(); 1515dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath1, OBB_FILE_1_PASSWORD, OnObbStateChangeListener.MOUNTED); 1525dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen verifyObb1Contents(filePath1); 1535dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1545dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(filePath3, DONT_FORCE); 1555dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(filePath1, DONT_FORCE); 1565dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } finally { 1575dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen if (file3 != null) { 1585dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file3.delete(); 1595dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1605dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen if (file1 != null) { 1615dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen file1.delete(); 1625dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1635dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1645dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1655dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1665dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 1675dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Tests that we can not force unmount when a file is currently open on the OBB. 1685dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 1695dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @LargeTest 1705dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void testUnmount_DontForce() { 1715dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile = createObbFile(OBB_FILE_1, R.raw.obb_file1); 1725dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String obbFilePath = mFile.getAbsolutePath(); 1735dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1745dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen MountingObbThread mountingThread = new MountingObbThread(obbFilePath, 1755dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen OBB_FILE_1_CONTENTS_1); 1765dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1775dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen try { 1785dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountingThread.start(); 1795dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1805dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen long waitTime = 0; 1815dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen while (!mountingThread.isFileOpenOnObb()) { 1825dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen synchronized (mountingThread) { 1835dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen Log.i(LOG_TAG, "Waiting for file to be opened on OBB..."); 1845dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountingThread.wait(WAIT_TIME_INCR); 1855dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen waitTime += WAIT_TIME_INCR; 1865dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen if (waitTime > MAX_WAIT_TIME) { 1875dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen fail("Timed out waiting for file file to be opened on OBB!"); 1885dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1895dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1905dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 1915dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1925dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(obbFilePath, DONT_FORCE); 1935dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1945dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen // verify still mounted 1955dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen assertTrue("mounted path should not be null!", obbFilePath != null); 1965dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen assertTrue("mounted path should still be mounted!", mSm.isObbMounted(obbFilePath)); 1975dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 1985dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen // close the opened file 1995dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountingThread.doStop(); 2005dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 2015dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen // try unmounting again (should succeed this time) 2025dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(obbFilePath, DONT_FORCE); 2035dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen assertFalse("mounted path should no longer be mounted!", 2045dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mSm.isObbMounted(obbFilePath)); 2055dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } catch (InterruptedException e) { 2065dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen fail("Timed out waiting for file on OBB to be opened..."); 2075dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 2085dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 2095dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 2105dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 2115dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Tests mounting a single OBB that isn't signed. 2125dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 2135dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @LargeTest 2145dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void testMountUnsignedObb() { 2155dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile = createObbFile(OBB_FILE_2_UNSIGNED, R.raw.obb_file2_nosign); 2165dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath = mFile.getAbsolutePath(); 2175dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath, OBB_FILE_2_UNSIGNED, OnObbStateChangeListener.ERROR_INTERNAL); 2185dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 2195dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 2205dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 2215dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Tests mounting a single OBB that is signed with a different package. 2225dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 2235dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @LargeTest 2245dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void testMountBadPackageNameObb() { 2255dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile = createObbFile(OBB_FILE_3_BAD_PACKAGENAME, R.raw.obb_file3_bad_packagename); 2265dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath = mFile.getAbsolutePath(); 2275dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath, OBB_FILE_3_BAD_PACKAGENAME, 2285dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen OnObbStateChangeListener.ERROR_PERMISSION_DENIED); 2295dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 2305dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen 2315dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen /** 2325dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen * Tests remounting a single OBB that has already been mounted. 2335dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen */ 2345dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen @LargeTest 2355dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen public void testRemountObb() { 2365dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mFile = createObbFile(OBB_FILE_1, R.raw.obb_file1); 2375dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen String filePath = mFile.getAbsolutePath(); 2385dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath); 2395dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen verifyObb1Contents(filePath); 2405dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen mountObb(filePath, null, OnObbStateChangeListener.ERROR_ALREADY_MOUNTED); 2415dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen verifyObb1Contents(filePath); 2425dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen unmountObb(filePath, DONT_FORCE); 2435dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen } 2445dda76a72e8bb4630fb5fd38a42e7bceb5b9c954Neal Nguyen}