@Test public void validateAgainstSchema() throws Exception { ModelASTPipelineDef root = Converter.urlToPipelineDef(getClass().getResource("/" + configName + ".groovy")); assertNotNull(root); JSONObject origJson = root.toJSON(); assertNotNull(origJson); ProcessingReport report = Converter.validateJSONAgainstSchema(origJson); assertTrue(getErrorReport(origJson, configName, report), report.isSuccess()); }
@SuppressWarnings("unused") @RequirePOST public HttpResponse doToJson(StaplerRequest req) { Jenkins.getInstance().checkPermission(Jenkins.READ); JSONObject result = new JSONObject(); String groovyAsString = req.getParameter("jenkinsfile"); if (!StringUtils.isEmpty(groovyAsString)) { try { ModelASTPipelineDef pipelineDef = Converter.scriptToPipelineDef(groovyAsString); if (pipelineDef != null) { result.accumulate("result", "success"); result.accumulate("json", pipelineDef.toJSON()); } else { reportFailure(result, "Jenkinsfile content '" + groovyAsString + "' did not contain the 'pipeline' step"); } } catch (Exception e) { reportFailure(result, e); } } else { reportFailure(result, "No content found for 'jenkinsfile' parameter"); } return HttpResponses.okJSON(result); }
@Test public void groovyToASTToJSONToAST() throws Exception { ModelASTPipelineDef origRoot = Converter.urlToPipelineDef(getClass().getResource("/" + configName + ".groovy")); assertNotNull(origRoot); JSONObject origJson = origRoot.toJSON(); assertNotNull(origJson); JSONParser jp = new JSONParser(Converter.jsonTreeFromJSONObject(origJson)); ModelASTPipelineDef newRoot = jp.parse(); assertEquals(getJSONErrorReport(jp, configName), 0, jp.getErrorCollector().getErrorCount()); assertNotNull("Pipeline null for " + configName, newRoot); assertEquals(origRoot, newRoot); }
@Test public void scriptBlockIsAString() throws Exception { ModelASTPipelineDef root = parse(getClass().getResource("/simpleScript.groovy")); assertNotNull(root); JSONObject origJson = root.toJSON(); assertNotNull(origJson); JSONArray stages = origJson.getJSONObject("pipeline").getJSONArray("stages"); assertNotNull(stages); JSONArray branches = stages.getJSONObject(0).getJSONArray("branches"); assertNotNull(branches); JSONArray steps = branches.getJSONObject(0).getJSONArray("steps"); assertNotNull(steps); JSONObject scriptStep = steps.getJSONObject(0); assertNotNull(scriptStep); assertEquals("script", scriptStep.getString("name")); JSONArray args = scriptStep.getJSONArray("arguments"); assertNotNull(args); JSONObject arg = args.getJSONObject(0); assertNotNull(arg); JSONObject val = arg.getJSONObject("value"); assertNotNull(val); assertTrue(val.getBoolean("isLiteral")); assertEquals("echo \"In a script step\"", val.getString("value")); }
@Test public void jsonToASTToJSON() throws Exception { JSONObject origJson = JSONObject.fromObject(fileContentsFromResources("json/" + configName + ".json")); assertNotNull("Couldn't parse JSON for " + configName, origJson); JSONParser jp = new JSONParser(Converter.jsonTreeFromJSONObject(origJson)); ModelASTPipelineDef pipelineDef = jp.parse(); assertEquals(getJSONErrorReport(jp, configName), 0, jp.getErrorCollector().getErrorCount()); assertNotNull("Pipeline null for " + configName, pipelineDef); assertEquals(origJson, pipelineDef.toJSON()); }
@Issue({"JENKINS-41118","JENKINS-43016"}) @Test public void labelWithOptionsBecomesNode() throws Exception { ModelASTPipelineDef origRoot = Converter.urlToPipelineDef(getClass().getResource("/inRelativeCustomWorkspace.groovy")); assertNotNull(origRoot); JSONObject origJson = origRoot.toJSON(); assertNotNull(origJson); JSONParser jp = new JSONParser(Converter.jsonTreeFromJSONObject(origJson)); ModelASTPipelineDef newRoot = jp.parse(); assertEquals(getJSONErrorReport(jp, "inRelativeCustomWorkspace"), 0, jp.getErrorCollector().getErrorCount()); assertNotNull("Pipeline null for inRelativeCustomWorkspace", newRoot); JSONObject nodeJson = JSONObject.fromObject(fileContentsFromResources("json/inRelativeCustomWorkspace.json")); JSONParser nodeParser = new JSONParser(Converter.jsonTreeFromJSONObject(nodeJson)); ModelASTPipelineDef nodeRoot = nodeParser.parse(); assertEquals(getJSONErrorReport(nodeParser, "inRelativeCustomWorkspace"), 0, nodeParser.getErrorCollector().getErrorCount()); assertNotNull("Pipeline null for inRelativeCustomWorkspace", nodeRoot); assertEquals(nodeRoot, newRoot); }
@Test public void librariesDirective() throws Exception { ModelASTPipelineDef origRoot = Converter.urlToPipelineDef(getClass().getResource("/librariesDirective.groovy")); assertNotNull(origRoot); JSONObject origJson = origRoot.toJSON(); assertNotNull(origJson); JSONParser jp = new JSONParser(Converter.jsonTreeFromJSONObject(origJson)); ModelASTPipelineDef newRoot = jp.parse(); assertEquals(getJSONErrorReport(jp, "librariesDirective"), 0, jp.getErrorCollector().getErrorCount()); assertNotNull("Pipeline null for librariesDirective", newRoot); JSONObject nodeJson = JSONObject.fromObject(fileContentsFromResources("json/librariesDirective.json")); JSONParser nodeParser = new JSONParser(Converter.jsonTreeFromJSONObject(nodeJson)); ModelASTPipelineDef nodeRoot = nodeParser.parse(); assertEquals(getJSONErrorReport(nodeParser, "librariesDirective"), 0, nodeParser.getErrorCollector().getErrorCount()); assertNotNull("Pipeline null for librariesDirective", nodeRoot); assertEquals(nodeRoot, newRoot); } }
@Issue("JENKINS-43016") @Test public void labelWithEmptyStringBecomesAny() throws Exception { ModelASTPipelineDef origRoot = Converter.urlToPipelineDef(getClass().getResource("/agentLabelEmptyString.groovy")); assertNotNull(origRoot); JSONObject origJson = origRoot.toJSON(); assertNotNull(origJson); JSONParser jp = new JSONParser(Converter.jsonTreeFromJSONObject(origJson)); ModelASTPipelineDef newRoot = jp.parse(); assertEquals(getJSONErrorReport(jp, "agentLabelEmptyString"), 0, jp.getErrorCollector().getErrorCount()); assertNotNull("Pipeline null for agentLabelEmptyString", newRoot); JSONObject anyJson = JSONObject.fromObject(fileContentsFromResources("json/agentAny.json")); JSONParser anyParser = new JSONParser(Converter.jsonTreeFromJSONObject(anyJson)); ModelASTPipelineDef anyRoot = anyParser.parse(); assertEquals(getJSONErrorReport(anyParser, "agentAny"), 0, anyParser.getErrorCollector().getErrorCount()); assertNotNull("Pipeline null for agentAny", anyRoot); assertEquals(anyRoot, newRoot); }