blob: 1df40a7da87ed58a0442b488be2fe435b94046f3 [file] [log] [blame]
/*
* Copyright (C) 2008 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.cts;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import junit.framework.TestCase;
/**
* Set up the test environment and offer the utility APIs.
*/
public abstract class CtsTestBase extends TestCase {
public static final String APK_SUFFIX = ".apk";
public static final String DESCRITION_SUFFIX = ".xml";
protected static final String ROOT = "tmp";
protected static final String CONFIG_PATH = ROOT + File.separator + "host_config.xml";
private static final String CASE_REPOSITORY = "case_rep_demo";
private static final String RESULT_REPOSITORY = "result_rep_demo";
private static final String PLAN_REPOSITORY = "plan_rep_demo";
/** {@inheritDoc} */
@Override
public void setUp() {
// create root direcoty for the test
new File(ROOT).mkdirs();
initConfig();
Log.initLog(ROOT);
}
/** {@inheritDoc} */
@Override
public void tearDown() {
Log.closeLog();
clearDirectory(ROOT);
}
/**
* Initialize the configuration for tests.
*/
private void initConfig() {
StringBuilder buf = new StringBuilder();
buf.append("<HostConfiguration>");
buf.append("\t<Repository root=\"" + ROOT + "\" >");
buf.append("\t\t<TestPlan path=\"" + PLAN_REPOSITORY + "\" />");
buf.append("\t\t<TestCase path=\"" + CASE_REPOSITORY + "\" />");
buf.append("\t\t<TestResult path=\"" + RESULT_REPOSITORY + "\" />");
buf.append("\t</Repository>");
buf.append("</HostConfiguration>");
try {
new File(ROOT + File.separator + PLAN_REPOSITORY).mkdirs();
new File(ROOT + File.separator + CASE_REPOSITORY).mkdirs();
new File(ROOT + File.separator + RESULT_REPOSITORY).mkdirs();
createFile(buf.toString(), CONFIG_PATH);
} catch (IOException e1) {
fail("Can't create config file");
}
try {
TestHost.loadConfig(CONFIG_PATH);
} catch (Exception e) {
e.printStackTrace();
fail("Can't initiate config");
}
}
/**
* Create test package with the package name and the xml message as the content.
*
* @param xmlMsg The message as the content of the package.
* @param packageName The package name.
*/
protected void createTestPackage(String xmlMsg, String packageName) throws IOException {
String caseRoot = HostConfig.getInstance().getCaseRepository()
.getRoot();
String apkPath = caseRoot + File.separator + packageName + APK_SUFFIX;
String xmlPath = caseRoot + File.separator + packageName
+ DESCRITION_SUFFIX;
createFile(null, apkPath);
createFile(xmlMsg, xmlPath);
}
/**
* Delete the test package.
*/
protected void deleteTestPackage(String path) {
String apkPath = path + File.separator + APK_SUFFIX;
String desPath = path + File.separator + DESCRITION_SUFFIX;
deleteFile(apkPath);
deleteFile(desPath);
}
/**
* Create the specified file with the specified content.
*
* @param content The content written into the file.
* @param filePath The file to be created.
*/
protected void createFile(String content, String filePath)
throws IOException {
BufferedWriter out = new BufferedWriter(new FileWriter(filePath));
if (content != null) {
out.write(content);
}
out.close();
}
/**
* Delete the specified file.
*
* @param path The file to be deleted.
*/
protected void deleteFile(String path) {
File f = new File(path);
if (f.exists() && f.canWrite()) {
f.delete();
}
}
/**
* Clear the directory by deleting the files and directories under it.
*
* @param path The directory to be cleared.
*/
private void clearDirectory(String path) {
File root = new File(path);
for (File f : root.listFiles()) {
if (f.isFile()) {
f.delete();
} else {
deleteDirectory(f);
}
}
root.delete();
}
/**
* Deleted the directory, including the files and sub-directories under it.
*
* @param path The directory to be deleted.
*/
private void deleteDirectory(File path) {
if (path.exists()) {
File[] files = path.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
deleteDirectory(files[i]);
} else {
files[i].delete();
}
}
path.delete();
}
}
}