Search in sources :

Example 1 with TeePrintStream

use of com.centurylink.mdw.common.utilities.file.TeePrintStream in project mdw-designer by CenturyLinkCloud.

the class AutoTestAntTask method runTests.

public void runTests() throws Exception {
    if (!baseDir.exists() || !baseDir.isDirectory())
        throw new IOException("Directory does not exist: " + baseDir);
    ThreadPool threadPool = new ThreadPool(threadCount);
    HashMap<String, ProcessVO> processCache = new HashMap<>();
    boolean hasGherkin = false;
    boolean hasNonGherkin = false;
    if (workflowDir != null) {
        DirectoryScanner scanner = getDirectoryScanner(workflowDir);
        scanner.scan();
        String jsonString;
        if (testResultsSummaryFile.exists() && testResultsSummaryFile.getName().endsWith(".json")) {
            jsonString = new String(Files.readAllBytes(testResultsSummaryFile.toPath()));
            if (jsonString != null && !jsonString.isEmpty())
                testCaseList = new TestCaseList(workflowDir, new JSONObject(jsonString));
        }
        if (testCaseList == null) {
            testCaseList = new TestCaseList(workflowDir);
            testCaseList.setPackageTests(new ArrayList<PackageTests>());
        }
        String workflowPath = workflowDir.toString().replace('\\', '/');
        String[] caseFilePaths = scanner.getIncludedFiles();
        for (String caseFilePath : caseFilePaths) {
            String casePath = caseFilePath.replace('\\', '/');
            int lastSlash = casePath.lastIndexOf('/');
            String pkgName = casePath.substring(0, lastSlash).replace('/', '.');
            File caseFile = new File(workflowPath + "/" + casePath);
            PackageTests pkgTests = testCaseList.getPackageTests(pkgName);
            if (pkgTests == null) {
                PackageDir pkgDir = new PackageDir(workflowDir, caseFile.getParentFile(), null);
                pkgDir.parse();
                pkgTests = new PackageTests(pkgDir);
                pkgTests.setTestCases(new ArrayList<com.centurylink.mdw.test.TestCase>());
                testCaseList.getPackageTests().add(pkgTests);
            }
            pkgTests.getTestCases().add(new com.centurylink.mdw.test.TestCase(pkgName, new AssetInfo(caseFile)));
            TestCase tc = new TestCase(pkgName, caseFile);
            if (tc.isGherkin())
                hasGherkin = true;
            else
                hasNonGherkin = true;
            testCases.add(tc);
        }
    } else if (jdbcUrl != null) {
        // db asset tests
        if (dbAssetTests == null)
            throw new BuildException("Attribute dbAssetTests required for non-VCS asset tests");
        String[] assets = dbAssetTests.split("\\s?,\\s?");
        for (String asset : assets) {
            int lastSlash = asset.lastIndexOf('/');
            String pkg = asset.substring(0, lastSlash);
            String assetName = asset.substring(lastSlash + 1);
            String language = RuleSetVO.getLanguage(assetName.substring(assetName.lastIndexOf('.')));
            RuleSetVO ruleSet = designerDataAccess.getRuleSet(assetName, language, 0);
            ruleSet.setPackageName(pkg);
            TestCase tc = new TestCase(pkg, ruleSet);
            testCases.add(tc);
        }
    } else {
        throw new BuildException("Missing attribute: workflowDir");
    }
    if (hasGherkin && hasNonGherkin)
        throw new BuildException("Gherkin/non-Gherkin tests require separate task/target executions.");
    // gradle
    boolean useStdErr = System.getProperty("org.gradle.appname") != null;
    // does
    // not
    // show
    // output
    // otherwise
    LogMessageMonitor monitor = hasGherkin ? null : new LogMessageMonitor(designerDataAccess, oldNamespaces);
    if (monitor != null)
        monitor.start(true);
    for (TestCase testCase : testCases) {
        String masterRequestId = user + "-" + new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date());
        File resultDir = new File(testResultsDir + "/" + testCase.getPrefix());
        testCase.prepare();
        TestCaseRun run;
        if (testCase.isGherkin()) {
            // User defined masterRequestId
            if (testCase.getMasterRequestId() != null) {
                if (testCase.getMasterRequestId().indexOf("${masterRequestId}") != -1) {
                    masterRequestId = testCase.getMasterRequestId().replace("${masterRequestId}", masterRequestId);
                } else
                    masterRequestId = testCase.getMasterRequestId();
            }
            testCase.setMasterRequestId(masterRequestId);
            run = new GherkinTestCaseRun(testCase, 0, masterRequestId, new DesignerDataAccess(designerDataAccess), monitor, processCache, oldNamespaces, resultDir, stubbing, stubPort);
        } else if (testCase.isGroovy())
            run = new GroovyTestCaseRun(testCase, 0, masterRequestId, new DesignerDataAccess(designerDataAccess), monitor, processCache, loadTests, true, oldNamespaces, null);
        else
            run = new TestCaseRun(testCase, 0, masterRequestId, new DesignerDataAccess(designerDataAccess), monitor, processCache, loadTests, true, oldNamespaces);
        File executeLog = new File(resultDir.getPath() + "/" + testCase.getCaseName() + ".log");
        if (!executeLog.getParentFile().exists() && !executeLog.getParentFile().mkdirs())
            throw new IOException("Unable to create test run directory: " + executeLog.getParentFile());
        PrintStream log = verbose ? new TeePrintStream(useStdErr ? System.err : System.out, executeLog) : new PrintStream(executeLog);
        run.prepareTest(false, resultDir, true, singleServer, stubbing, log);
        if (verbose)
            log("Test case prepared: " + testCase.getCaseName(), useStdErr ? Project.MSG_ERR : Project.MSG_INFO);
        masterRequestRunMap.put(run.getMasterRequestId(), run);
        threadPool.execute(run);
        updateResults(false);
        try {
            Thread.sleep(intervalSecs * 1000);
        } catch (InterruptedException e) {
        }
    }
    log("All cases prepared. Waiting for completion ...", Project.MSG_INFO);
    threadPool.shutdown();
    while (!threadPool.isTerminated()) {
        updateResults(false);
        try {
            Thread.sleep(2500);
        } catch (InterruptedException e) {
        }
    }
    if (monitor != null)
        monitor.shutdown();
    updateResults(true);
    log("All cases completed.", Project.MSG_ERR);
}
Also used : HashMap(java.util.HashMap) AssetInfo(com.centurylink.mdw.test.AssetInfo) RuleSetVO(com.centurylink.mdw.model.value.attribute.RuleSetVO) PackageTests(com.centurylink.mdw.test.PackageTests) PackageDir(com.centurylink.mdw.dataaccess.file.PackageDir) DirectoryScanner(org.apache.tools.ant.DirectoryScanner) DesignerDataAccess(com.centurylink.mdw.designer.DesignerDataAccess) TestCaseList(com.centurylink.mdw.test.TestCaseList) PrintStream(java.io.PrintStream) TeePrintStream(com.centurylink.mdw.common.utilities.file.TeePrintStream) TeePrintStream(com.centurylink.mdw.common.utilities.file.TeePrintStream) IOException(java.io.IOException) Date(java.util.Date) JSONObject(org.json.JSONObject) ProcessVO(com.centurylink.mdw.model.value.process.ProcessVO) BuildException(org.apache.tools.ant.BuildException) File(java.io.File) SimpleDateFormat(java.text.SimpleDateFormat)

Aggregations

TeePrintStream (com.centurylink.mdw.common.utilities.file.TeePrintStream)1 PackageDir (com.centurylink.mdw.dataaccess.file.PackageDir)1 DesignerDataAccess (com.centurylink.mdw.designer.DesignerDataAccess)1 RuleSetVO (com.centurylink.mdw.model.value.attribute.RuleSetVO)1 ProcessVO (com.centurylink.mdw.model.value.process.ProcessVO)1 AssetInfo (com.centurylink.mdw.test.AssetInfo)1 PackageTests (com.centurylink.mdw.test.PackageTests)1 TestCaseList (com.centurylink.mdw.test.TestCaseList)1 File (java.io.File)1 IOException (java.io.IOException)1 PrintStream (java.io.PrintStream)1 SimpleDateFormat (java.text.SimpleDateFormat)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 BuildException (org.apache.tools.ant.BuildException)1 DirectoryScanner (org.apache.tools.ant.DirectoryScanner)1 JSONObject (org.json.JSONObject)1