| /* |
| * Copyright (C) 2012 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.tradefed.util; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.Map; |
| |
| /** |
| * A testing fixture that creates a fake unzipped tests folder based on a list of content. |
| * |
| * The folder structure is configured based on a list of file names or folder names, as provided |
| * to the constructor. {@link FakeTestsZipFolder#cleanUp()} should be called after the folder is |
| * no longer needed. |
| * |
| */ |
| public class FakeTestsZipFolder { |
| |
| public enum ItemType { |
| FILE, DIRECTORY, |
| } |
| |
| private Map<String, ItemType> mItems; |
| private File mBase; |
| private File mData; |
| |
| /** |
| * Create a fake unzipped tests folder backed by empty files |
| * |
| * @param items list of items to include in the fake unzipped folder. key of |
| * the map shall be the relative path of the item, value of the |
| * entry shall indicate if the entry should be backed by an empty |
| * file or a folder |
| */ |
| public FakeTestsZipFolder(Map<String, ItemType> items) { |
| mItems = items; |
| } |
| |
| /** |
| * Create fake unzipped tests folder as indicated by the manifest of items |
| * |
| * @return false if failed to create any item |
| * @throws IOException |
| */ |
| public boolean createItems() throws IOException { |
| mBase = File.createTempFile("tf_", "_test_zip"); |
| mBase.delete(); |
| mData = new File(mBase, "DATA"); |
| if (!mData.mkdirs()) { |
| return false; |
| } |
| boolean failed = false; |
| for (String fileName : mItems.keySet()) { |
| File file = new File(mData, fileName); |
| ItemType type = mItems.get(fileName); |
| if (ItemType.DIRECTORY.equals(type)) { |
| if (!file.mkdirs()) { |
| failed = true; |
| break; |
| } |
| } else { |
| File p = file.getParentFile(); |
| if (!p.exists()) { |
| if (!p.mkdirs()) { |
| failed = true; |
| break; |
| } |
| } |
| if (!file.createNewFile()) { |
| failed = true; |
| break; |
| } |
| } |
| } |
| if (failed) { |
| // attempt to clean up |
| cleanUp(); |
| } |
| return !failed; |
| } |
| |
| /** |
| * Delete the entire fake unzipped test folder |
| */ |
| public void cleanUp() { |
| FileUtil.recursiveDelete(mBase); |
| } |
| |
| protected File getDataFolder() { |
| return mData; |
| } |
| |
| /** |
| * Returns the base of the fake unzipped folder This would be a replacement |
| * of root folder where a real tests zip is expanded |
| * |
| * @return |
| */ |
| public File getBasePath() { |
| return mBase; |
| } |
| } |