public class VTS {
public static final String ALL_MODULES = "All modules";
private static final String RUN_VTS = "./vts-tradefed run vts ";
private static final String ADD_MODULE = " -m ";
private static final String RESULTS_LOG_PATH = "../results";
private static final String LOG_LOGS_PATH = "../logs";
private static final String COMPRESS_POSTFIX_NAME = ".zip";
private static final String FINISH_TAG = "I/ResultReporter: Invocation finished in ";
private static final int VTS_RESULT_INDEX = 34;
private String VTS_MODULES[] = { ALL_MODULES, "VtsTreblePlatformVersionTest", "VtsVndkDependencyTest" };
private String args;
private String vtsReport;
public VTS(String args) {
this.args = args;
}
public String runVTS() {
System.out.println("VTS run() args:" + args);
File resultFile = new File(RESULTS_LOG_PATH);
File logFile = new File(LOG_LOGS_PATH);
if (resultFile.exists()) {
resultFile.delete();
}
if (logFile.exists()) {
logFile.delete();
}
int vtsModulesSize = VTS_MODULES.length;
boolean isBuildIn = false;
for (int index = 0; index < vtsModulesSize; index++) {
if (args.equals(VTS_MODULES[index])) {
isBuildIn = true;
break;
}
}
if (isBuildIn) {
String cmd;
if (args.equals(ALL_MODULES)) {
cmd = RUN_VTS;
} else {
cmd = RUN_VTS + ADD_MODULE + args;
}
System.out.println("cmd:" + cmd);
if (exec(cmd)) {
zip(args + COMPRESS_POSTFIX_NAME, resultFile, logFile);
return vtsReport;
} else {
return null;
}
} else {
System.out.println("can't find the vts module:" + args);
return null;
}
}
public boolean exec(String cmd) {
try {
Process child = Runtime.getRuntime().exec(cmd);
printMessage(child.getInputStream());
// printMessage(child.getErrorStream());
child.waitFor();
child.destroy();
return true;
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return false;
}
// not used
public Process runCMDForResult(String cmd) {
Process child = null;
try {
child = Runtime.getRuntime().exec(new String[] { "sh", "-c", cmd });
printMessage(child.getInputStream());
printMessage(child.getErrorStream());
} catch (IOException e) {
e.printStackTrace();
}
return child;
}
public void printMessage(final InputStream input) {
new Thread(new Runnable() {
public void run() {
InputStreamReader reader = new InputStreamReader(input);
BufferedReader bf = new BufferedReader(reader);
String line = null;
try {
while ((line = bf.readLine()) != null) {
System.out.println(line);
if (line.contains(FINISH_TAG)) {
vtsReport = line.substring(VTS_RESULT_INDEX);
break;
}
}
System.out.println("printMessage end.");
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
public boolean zip(String zipFileName, File... files) {
ZipOutputStream out = null;
try {
File zipFile = new File(zipFileName);
if (zipFile.exists()) {
zipFile.delete();
}
out = new ZipOutputStream(new FileOutputStream(zipFileName));
for (int i = 0; i < files.length; i++) {
if (null != files[i]) {
zip(out, files[i], files[i].getName());
}
}
out.close();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}