Search in sources :

Example 1 with AssetInfo

use of com.centurylink.mdw.test.AssetInfo in project mdw-designer by CenturyLinkCloud.

the class AutomatedTestSuite method writeTestResults.

public void writeTestResults(AutomatedTestCase exeTestCase) throws JSONException, IOException {
    String jsonString = null;
    File resultsFile = getProject().getFunctionTestResultsFile();
    TestCaseList testCaseList = null;
    if (resultsFile.exists())
        jsonString = new String(Files.readAllBytes(resultsFile.toPath()));
    if (jsonString != null && !jsonString.isEmpty())
        testCaseList = new TestCaseList(getProject().getAssetDir(), new JSONObject(jsonString));
    if (testCaseList == null) {
        testCaseList = new TestCaseList(getProject().getAssetDir());
        testCaseList.setPackageTests(new ArrayList<PackageTests>());
    }
    for (WorkflowPackage pkg : getProject().getTopLevelUserVisiblePackages()) {
        if (pkg.getTestCases() != null && !pkg.getTestCases().isEmpty()) {
            PackageTests pkgTests = testCaseList.getPackageTests(pkg.getName());
            for (AutomatedTestCase autoTestCase : pkg.getTestCases()) {
                com.centurylink.mdw.test.TestCase testCase = null;
                List<com.centurylink.mdw.test.TestCase> cases = new ArrayList<>();
                boolean caseMatched = true;
                if (autoTestCase.isPostman() && exeTestCase.isPostman())
                    testCase = testCaseList.getTestCaseByItemName(autoTestCase.getPath(), exeTestCase.getMethod() + "/" + exeTestCase.getItemName());
                else
                    testCase = testCaseList.getTestCase(autoTestCase.getPath());
                if (testCase == null) {
                    if (autoTestCase.getItems() != null) {
                        for (TestCaseItem item : autoTestCase.getItems()) {
                            com.centurylink.mdw.test.TestCase itemTestCase = new com.centurylink.mdw.test.TestCase(pkg.getName(), new AssetInfo(autoTestCase.getRawFile()));
                            String method = "";
                            if (item.getObject().has("request")) {
                                JSONObject request = item.getObject().getJSONObject("request");
                                if (request.has("method"))
                                    method = request.getString("method");
                            }
                            itemTestCase.setItemName(method + "/" + item.getName());
                            if (exeTestCase.getMethod() != null && exeTestCase.getMethod().equals(method) && exeTestCase.getItemName() != null && exeTestCase.getItemName().equals(item.getName()))
                                testCase = itemTestCase;
                            else
                                cases.add(itemTestCase);
                        }
                    } else
                        testCase = new com.centurylink.mdw.test.TestCase(pkg.getName(), new AssetInfo(autoTestCase.getRawFile()));
                }
                if (pkgTests == null) {
                    PackageDir pkgDir = new PackageDir(getProject().getAssetDir(), pkg.getPackageVO(), null);
                    pkgTests = new PackageTests(pkgDir);
                    pkgTests.setTestCases(new ArrayList<com.centurylink.mdw.test.TestCase>());
                }
                if (testCase != null) {
                    if (testCase.getPackage().equals(pkg.getName()) && !pkgTests.getTestCases().contains(testCase)) {
                        pkgTests.getTestCases().add(testCase);
                        if (!cases.isEmpty())
                            pkgTests.getTestCases().addAll(cases);
                    }
                    if (autoTestCase.getItems() != null && exeTestCase.getItemName() != null && !(exeTestCase.getMethod() + "/" + exeTestCase.getItemName()).equals(testCase.getItemName()))
                        caseMatched = false;
                    if (exeTestCase.getPath().equals(autoTestCase.getPath()) && caseMatched) {
                        getProject().fireTestCaseStatusChange(exeTestCase, autoTestCase.getStatus());
                        testCase.setStatus(exeTestCase.getCaseStatus());
                        testCase.setStart(exeTestCase.getStartTime());
                        testCase.setEnd(exeTestCase.getEndTime());
                        testCase.setMessage(exeTestCase.getMessage());
                    }
                }
            }
            if (!testCaseList.getPackageTests().contains(pkgTests))
                testCaseList.getPackageTests().add(pkgTests);
        }
    }
    testCaseList.setCount(testCaseList.getTestCases().size());
    PluginUtil.writeFile(resultsFile, testCaseList.getJson().toString(2).getBytes());
}
Also used : TestCaseList(com.centurylink.mdw.test.TestCaseList) ArrayList(java.util.ArrayList) TestCaseItem(com.centurylink.mdw.designer.testing.TestCaseItem) AssetInfo(com.centurylink.mdw.test.AssetInfo) PackageTests(com.centurylink.mdw.test.PackageTests) JSONObject(org.json.JSONObject) TestCase(com.centurylink.mdw.designer.testing.TestCase) PackageDir(com.centurylink.mdw.dataaccess.file.PackageDir) File(java.io.File)

Example 2 with AssetInfo

use of com.centurylink.mdw.test.AssetInfo 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

PackageDir (com.centurylink.mdw.dataaccess.file.PackageDir)2 AssetInfo (com.centurylink.mdw.test.AssetInfo)2 PackageTests (com.centurylink.mdw.test.PackageTests)2 TestCaseList (com.centurylink.mdw.test.TestCaseList)2 File (java.io.File)2 JSONObject (org.json.JSONObject)2 TeePrintStream (com.centurylink.mdw.common.utilities.file.TeePrintStream)1 DesignerDataAccess (com.centurylink.mdw.designer.DesignerDataAccess)1 TestCase (com.centurylink.mdw.designer.testing.TestCase)1 TestCaseItem (com.centurylink.mdw.designer.testing.TestCaseItem)1 RuleSetVO (com.centurylink.mdw.model.value.attribute.RuleSetVO)1 ProcessVO (com.centurylink.mdw.model.value.process.ProcessVO)1 IOException (java.io.IOException)1 PrintStream (java.io.PrintStream)1 SimpleDateFormat (java.text.SimpleDateFormat)1 ArrayList (java.util.ArrayList)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