mirror of https://github.com/jenkinsci/jenkins.git
				
				
				
			More test fixups related to JTH change (#9767)
This commit is contained in:
		
							parent
							
								
									79d1f7af9d
								
							
						
					
					
						commit
						f5ccd65e4e
					
				| 
						 | 
				
			
			@ -25,7 +25,7 @@
 | 
			
		|||
package hudson.slaves;
 | 
			
		||||
 | 
			
		||||
import static org.hamcrest.MatcherAssert.assertThat;
 | 
			
		||||
import static org.hamcrest.Matchers.endsWith;
 | 
			
		||||
import static org.hamcrest.Matchers.hasKey;
 | 
			
		||||
import static org.hamcrest.Matchers.is;
 | 
			
		||||
 | 
			
		||||
import hudson.ExtensionList;
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +104,7 @@ public class JNLPLauncherRealTest {
 | 
			
		|||
            p.setAssignedNode(agent);
 | 
			
		||||
            FreeStyleBuild b = r.buildAndAssertSuccess(p);
 | 
			
		||||
            if (webSocket) {
 | 
			
		||||
                assertThat(agent.toComputer().getSystemProperties().get("java.class.path").toString(), endsWith("agent.jar"));
 | 
			
		||||
                assertThat(agent.toComputer().getSystemProperties(), hasKey("os.name"));
 | 
			
		||||
            }
 | 
			
		||||
            System.err.println(JenkinsRule.getLog(b));
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,9 +38,9 @@ import org.apache.commons.io.IOUtils;
 | 
			
		|||
import org.hamcrest.Description;
 | 
			
		||||
import org.hamcrest.Matcher;
 | 
			
		||||
import org.hamcrest.TypeSafeMatcher;
 | 
			
		||||
import org.junit.Ignore;
 | 
			
		||||
import org.junit.Rule;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.junit.rules.TemporaryFolder;
 | 
			
		||||
import org.jvnet.hudson.test.InboundAgentRule;
 | 
			
		||||
import org.jvnet.hudson.test.JenkinsRule;
 | 
			
		||||
import org.jvnet.hudson.test.RealJenkinsRule;
 | 
			
		||||
| 
						 | 
				
			
			@ -54,6 +54,9 @@ public class Security3430Test {
 | 
			
		|||
    @Rule
 | 
			
		||||
    public InboundAgentRule agents = new InboundAgentRule();
 | 
			
		||||
 | 
			
		||||
    @Rule
 | 
			
		||||
    public TemporaryFolder tmp = new TemporaryFolder();
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void runWithOldestSupportedAgentJar() throws Throwable {
 | 
			
		||||
        runWithRemoting(RemotingVersionInfo.getMinimumSupportedVersion().toString(), "/old-remoting/remoting-minimum-supported.jar", true);
 | 
			
		||||
| 
						 | 
				
			
			@ -64,22 +67,16 @@ public class Security3430Test {
 | 
			
		|||
        runWithRemoting("3256.v88a_f6e922152", "/old-remoting/remoting-before-SECURITY-3430-fix.jar", true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Ignore("TODO Expected: is an empty collection; but: <[Allowing URL: file:/…/test/target/webroot…/WEB-INF/lib/stapler-1903.v994a_db_314d58.jar, Determined to be core jar: file:/…/test/target/webroot…/WEB-INF/lib/stapler-1903.v994a_db_314d58.jar]>")
 | 
			
		||||
    @Test
 | 
			
		||||
    public void runWithCurrentAgentJar() throws Throwable {
 | 
			
		||||
        runWithRemoting(null, null, false);
 | 
			
		||||
        runWithRemoting(Launcher.VERSION, null, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void runWithRemoting(String expectedRemotingVersion, String remotingResourcePath, boolean requestingJarFromAgent) throws Throwable {
 | 
			
		||||
        if (expectedRemotingVersion != null) {
 | 
			
		||||
            // TODO brittle; rather call InboundAgentRule.start(AgentArguments, Options) with a known agentJar
 | 
			
		||||
            FileUtils.copyURLToFile(Security3430Test.class.getResource(remotingResourcePath), new File(System.getProperty("java.io.tmpdir"), "agent.jar"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        jj.startJenkins();
 | 
			
		||||
        final String agentName = "agent1";
 | 
			
		||||
        try {
 | 
			
		||||
            agents.createAgent(jj, InboundAgentRule.Options.newBuilder().name(agentName).build());
 | 
			
		||||
            createAgent(agentName, remotingResourcePath);
 | 
			
		||||
            jj.runRemotely(Security3430Test::_run, agentName, expectedRemotingVersion, requestingJarFromAgent, true);
 | 
			
		||||
        } finally {
 | 
			
		||||
            agents.stop(jj, agentName);
 | 
			
		||||
| 
						 | 
				
			
			@ -87,13 +84,31 @@ public class Security3430Test {
 | 
			
		|||
        jj.runRemotely(Security3430Test::disableJarURLValidatorImpl);
 | 
			
		||||
        final String agentName2 = "agent2";
 | 
			
		||||
        try {
 | 
			
		||||
            agents.createAgent(jj, InboundAgentRule.Options.newBuilder().name(agentName2).build());
 | 
			
		||||
            createAgent(agentName2, remotingResourcePath);
 | 
			
		||||
            jj.runRemotely(Security3430Test::_run, agentName2, expectedRemotingVersion, requestingJarFromAgent, false);
 | 
			
		||||
        } finally {
 | 
			
		||||
            agents.stop(jj, agentName2);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void createAgent(String name, String remotingResourcePath) throws Throwable {
 | 
			
		||||
        if (remotingResourcePath != null) {
 | 
			
		||||
            var jar = tmp.newFile(name + ".jar");
 | 
			
		||||
            FileUtils.copyURLToFile(Security3430Test.class.getResource(remotingResourcePath), jar);
 | 
			
		||||
            // TODO awkward, especially as InboundAgentRule.getAgentArguments is private;
 | 
			
		||||
            // would be helpful to have an option for a specific agent JAR:
 | 
			
		||||
            var opts = InboundAgentRule.Options.newBuilder().name(name).skipStart().build();
 | 
			
		||||
            agents.createAgent(jj, opts);
 | 
			
		||||
            agents.start(new InboundAgentRule.AgentArguments(jj.getUrl() + "computer/" + name + "/slave-agent.jnlp", jar, jj.runRemotely(Security3430Test::getJnlpMac, name), 1, List.of()), opts);
 | 
			
		||||
        } else {
 | 
			
		||||
            agents.createAgent(jj, InboundAgentRule.Options.newBuilder().name(name).build());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static String getJnlpMac(JenkinsRule r, String name) throws Throwable {
 | 
			
		||||
        return ((SlaveComputer) r.jenkins.getComputer(name)).getJnlpMac();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // This is quite artificial, but demonstrating that without JarURLValidatorImpl we do not allow any calls from the agent:
 | 
			
		||||
    private static void disableJarURLValidatorImpl(JenkinsRule j) {
 | 
			
		||||
        assertTrue(ExtensionList.lookup(ChannelConfigurator.class).remove(ExtensionList.lookupSingleton(JarURLValidatorImpl.class)));
 | 
			
		||||
| 
						 | 
				
			
			@ -114,6 +129,7 @@ public class Security3430Test {
 | 
			
		|||
        final Computer computer = j.jenkins.getComputer(agentName);
 | 
			
		||||
        assertThat(computer, instanceOf(SlaveComputer.class));
 | 
			
		||||
        SlaveComputer agent = (SlaveComputer) computer;
 | 
			
		||||
        j.waitOnline(agent.getNode());
 | 
			
		||||
        final Channel channel = agent.getChannel();
 | 
			
		||||
        if (expectedRemotingVersion != null) {
 | 
			
		||||
            final String result = channel.call(new AgentVersionCallable());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue