From d35dfcb24fb2272076f863780fdc3de93d0ec04b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20Gond=C5=BEa?= Date: Thu, 6 Apr 2017 14:30:50 +0200 Subject: [PATCH] [FIXED JENKINS-37616] Make sure Cloud.PROVISION is properly initialized --- core/src/main/java/hudson/model/Computer.java | 6 ++++++ .../src/test/java/hudson/slaves/CloudTest.java | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) rename {core => test}/src/test/java/hudson/slaves/CloudTest.java (60%) diff --git a/core/src/main/java/hudson/model/Computer.java b/core/src/main/java/hudson/model/Computer.java index 3b87e42f23..17b4989089 100644 --- a/core/src/main/java/hudson/model/Computer.java +++ b/core/src/main/java/hudson/model/Computer.java @@ -28,6 +28,7 @@ package hudson.model; import hudson.EnvVars; import hudson.Extension; import hudson.Launcher.ProcStarter; +import hudson.slaves.Cloud; import jenkins.util.SystemProperties; import hudson.Util; import hudson.cli.declarative.CLIMethod; @@ -1720,5 +1721,10 @@ public /*transient*/ abstract class Computer extends Actionable implements Acces public static final Permission CONNECT = new Permission(PERMISSIONS,"Connect", Messages._Computer_ConnectPermission_Description(), DISCONNECT, PermissionScope.COMPUTER); public static final Permission BUILD = new Permission(PERMISSIONS, "Build", Messages._Computer_BuildPermission_Description(), Permission.WRITE, PermissionScope.COMPUTER); + // This permission was historically scoped to this class albeit declared in Cloud. While deserializing, Jenkins loads + // the scope class to make sure the permission is initialized and registered. since Cloud class is used rather seldom, + // it might appear the permission does not exist. Referencing the permission from here to make sure it gets loaded. + private static final @Deprecated Permission CLOUD_PROVISION = Cloud.PROVISION; + private static final Logger LOGGER = Logger.getLogger(Computer.class.getName()); } diff --git a/core/src/test/java/hudson/slaves/CloudTest.java b/test/src/test/java/hudson/slaves/CloudTest.java similarity index 60% rename from core/src/test/java/hudson/slaves/CloudTest.java rename to test/src/test/java/hudson/slaves/CloudTest.java index bed5bad5f7..8b7c93bf6d 100644 --- a/core/src/test/java/hudson/slaves/CloudTest.java +++ b/test/src/test/java/hudson/slaves/CloudTest.java @@ -7,11 +7,17 @@ import hudson.security.Permission; import hudson.security.SidACL; import jenkins.model.Jenkins; import org.acegisecurity.acls.sid.Sid; +import org.junit.Rule; import org.junit.Test; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.WithoutJenkins; public class CloudTest { - @Test + @Rule public JenkinsRule j = new JenkinsRule(); + + @Test @WithoutJenkins @Issue("JENKINS-37616") public void provisionPermissionShouldBeIndependentFromAdminister() throws Exception { SidACL acl = new SidACL() { @Override protected Boolean hasPermission(Sid p, Permission permission) { @@ -23,4 +29,11 @@ public class CloudTest { assertFalse(acl.hasPermission(Jenkins.ANONYMOUS, Jenkins.ADMINISTER)); assertEquals(Cloud.PROVISION, Computer.PERMISSIONS.find("Provision")); } + + @Test @Issue("JENKINS-37616") + public void ensureProvisionPermissionIsLoadable() throws Exception { + // Name introduced by JENKINS-37616 + Permission p = Permission.fromId("hudson.model.Computer.Provision"); + assertEquals("Provision", p.name); + } }