I have this test that uses jenkins-test-harness
:
class JenkinsUtilsTest extends spock.lang.Specification {
@spock.lang.Shared
@org.junit.ClassRule
JenkinsRule harness = new JenkinsRule()
void setupSpec() {
hudson.model.Slave node = harness.createSlave('an-agent', null, null)
node.numExecutors = 2
harness.waitOnline(node)
}
void 'check parallel works'() {
given:
def job = harness.createProject(WorkflowJob)
job.definition = new org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition('''
parallel([
sleeper: {
node('an-agent') {
echo '--- going to sleep'
sleep time: 15, unit: 'SECONDS'
echo '--- done sleeping'
}
},
waiter: {
echo '--- pause in favor of sleeper'
sleep time: 5, unit: 'SECONDS'
node('an-agent') {
echo '--- done waiting'
}
}
])
''', true)
when:
WorkflowRun run = harness.buildAndAssertSuccess(job)
then:
harness.assertLogContains('show me the logs', run)
}
When I run it, the logs say:
[Pipeline] Start of Pipeline
[Pipeline] parallel
[Pipeline] { (Branch: sleeper)
[Pipeline] { (Branch: waiter)
[Pipeline] node
[Pipeline] echo
--- pause in favor of sleeper
[Pipeline] sleep
Sleeping for 5 sec
Running on an-agent in /tmp/j h3074825386784972163/agent-work-dirs/an-agent/workspace/test0
[Pipeline] {
[Pipeline] echo
--- going to sleep
[Pipeline] sleep
Sleeping for 15 sec
[Pipeline] node
[Pipeline] echo
--- done sleeping
[Pipeline] }
Running on an-agent in /tmp/j h3074825386784972163/agent-work-dirs/an-agent/workspace/test0
[Pipeline] // node
[Pipeline] {
[Pipeline] }
[Pipeline] echo
--- done waiting
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // parallel
[Pipeline] End of Pipeline
, so clearly there is only one Executor on the agent. I can confirm this asserting node.computer.executors.size() == 2
in the setup - it is actually 1
, just like the hudson.model.Slave#getNumExecutors()
docs state:
This may be different from
getExecutors().size()
because it takes time to adjust the number of executors.
But how do I actually ensure that the number of executors has adjusted? Or better yet, force the adjustion - as I tried Thread.sleep(60000)
and it did nothing.