1fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov/* 2fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * Copyright (C) 2016 The Android Open Source Project 3fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * 4fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * Licensed under the Apache License, Version 2.0 (the "License"); 5fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * you may not use this file except in compliance with the License. 6fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * You may obtain a copy of the License at 7fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * 8fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * http://www.apache.org/licenses/LICENSE-2.0 9fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * 10fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * Unless required by applicable law or agreed to in writing, software 11fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * distributed under the License is distributed on an "AS IS" BASIS, 12fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * See the License for the specific language governing permissions and 14fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * limitations under the License 15fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov */ 16fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 17fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovpackage com.android.server.pm; 18fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 19fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport android.content.pm.PackageParser; 20fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport android.support.test.runner.AndroidJUnit4; 21fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport android.util.Log; 22fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 23fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport junit.framework.Assert; 24fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 25fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport org.junit.Before; 26fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport org.junit.Test; 27fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport org.junit.runner.RunWith; 28fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 29fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport java.io.File; 30fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport java.util.HashSet; 31fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovimport java.util.Set; 32fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 33fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov/** 34fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov * Tests for {@link ParallelPackageParser} 35fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov */ 36fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov@RunWith(AndroidJUnit4.class) 37fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolovpublic class ParallelPackageParserTest { 38fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov private static final String TAG = ParallelPackageParserTest.class.getSimpleName(); 39fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 40fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov private ParallelPackageParser mParser; 41fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 42fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov @Before 43fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov public void setUp() { 44fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov mParser = new TestParallelPackageParser(); 45fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov } 46fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 47fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov @Test(timeout = 1000) 48fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov public void test() { 49fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov Set<File> submittedFiles = new HashSet<>(); 50fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov int fileCount = 15; 51fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov for (int i = 0; i < fileCount; i++) { 52fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov File file = new File("f" + i); 53fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov mParser.submit(file, 0); 54fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov submittedFiles.add(file); 55fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov Log.d(TAG, "submitting " + file); 56fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov } 57fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov for (int i = 0; i < fileCount; i++) { 58fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov ParallelPackageParser.ParseResult result = mParser.take(); 59fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov Assert.assertNotNull(result); 60fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov File parsedFile = result.scanFile; 61fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov Log.d(TAG, "took " + parsedFile); 62fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov Assert.assertNotNull(parsedFile); 63fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov boolean removeSuccessful = submittedFiles.remove(parsedFile); 64fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov Assert.assertTrue("Unexpected file " + parsedFile + ". Expected submitted files: " 65fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov + submittedFiles, removeSuccessful); 66fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov } 67fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov } 68fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 69fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov class TestParallelPackageParser extends ParallelPackageParser { 70fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 71fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov TestParallelPackageParser() { 72cd154e95353e7af11314d2339500d6c7f85e181aDianne Hackborn super(null, false, null, null, null); 73fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov } 74fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov 75fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov @Override 76fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov protected PackageParser.Package parsePackage(PackageParser packageParser, File scanFile, 77fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov int parseFlags) throws PackageParser.PackageParserException { 78fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov // Do not actually parse the package for testing 79fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov return null; 80fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov } 81fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov } 82fd6f4fb264d56726cd0e2fed731ad60bbe4aa06fFyodor Kupolov} 83