@Test
public void sandboxInvokerUsed() throws Exception {
jenkins.jenkins.setSecurityRealm(jenkins.createDummySecurityRealm());
jenkins.jenkins.setAuthorizationStrategy(new MockAuthorizationStrategy().
grant(Jenkins.RUN_SCRIPTS, Jenkins.READ, Item.READ).everywhere().to("runScriptsUser").
grant(Jenkins.READ, Item.READ).everywhere().to("otherUser"));
WorkflowJob job = jenkins.jenkins.createProject(WorkflowJob.class, "p");
job.setDefinition(new CpsFlowDefinition("[a: 1, b: 2].collectEntries { k, v ->\n" +
" Jenkins.getInstance()\n" +
" [(v): k]\n" +
"}\n", true));
WorkflowRun r = jenkins.assertBuildStatus(Result.FAILURE, job.scheduleBuild2(0).get());
jenkins.assertLogContains("org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod jenkins.model.Jenkins getInstance", r);
jenkins.assertLogContains("Scripts not permitted to use staticMethod jenkins.model.Jenkins getInstance. " + Messages.SandboxContinuable_ScriptApprovalLink(), r);
JenkinsRule.WebClient wc = jenkins.createWebClient();
wc.login("runScriptsUser");
HtmlPage rsp = wc.getPage(r, "console");
assertEquals(1, DomNodeUtil.selectNodes(rsp, "//A[@href='" + jenkins.contextPath + "/scriptApproval']").size());
TextPage raw = (TextPage)wc.goTo(r.getUrl()+"consoleText","text/plain");
assertThat(raw.getContent(), containsString(" getInstance. " + Messages.SandboxContinuable_ScriptApprovalLink()));
wc.login("otherUser");
HtmlPage rsp2 = wc.getPage(r, "console");
assertEquals(0, DomNodeUtil.selectNodes(rsp2, "//A[@href='" + jenkins.contextPath + "/scriptApproval']").size());
TextPage raw2 = (TextPage)wc.goTo(r.getUrl()+"consoleText","text/plain");
assertThat(raw2.getContent(), containsString(" getInstance. " + Messages.SandboxContinuable_ScriptApprovalLink()));
}