zip and runtime

 

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;
    }


}

 

posted @ 2017-07-18 17:28  牧 天  阅读(256)  评论(0)    收藏  举报