Skip to content

Commit ffac8c5

Browse files
committed
Moving idle state to worker ready message
Defaulting state to new
1 parent 6654b6e commit ffac8c5

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

features/parallel_custom_assign.feature

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1-
Feature: Running scenarios in parallel
1+
Feature: Running scenarios in parallel with custom assignment
22

33
Scenario: Bad parallel assignment helper uses 1 worker
44
Given a file named "features/step_definitions/cucumber_steps.js" with:
55
"""
66
const {Then, setParallelCanAssign} = require('@cucumber/cucumber')
7-
const assert = require('assert')
7+
const {expect} = require('chai')
88
let value = 0;
99
setParallelCanAssign(() => false)
10-
Then(/^value is (\d+)$/, function(v) { assert(++value === v) })
10+
Then(/^value is (\d+)$/, function(v, cb) {
11+
expect(++value).to.eq(v)
12+
setTimeout(cb, 150)
13+
})
1114
"""
1215
And a file named "features/a.feature" with:
1316
"""
14-
Feature: no processing
17+
Feature: only one worker works
1518
Scenario: someone must do work
1619
Then value is 1
1720
@@ -25,14 +28,17 @@ Feature: Running scenarios in parallel
2528
Given a file named "features/step_definitions/cucumber_steps.js" with:
2629
"""
2730
const {Then, setParallelCanAssign} = require('@cucumber/cucumber')
28-
const assert = require('assert')
31+
const {expect} = require('chai')
2932
let value = 0;
3033
setParallelCanAssign(() => true)
31-
Then(/^value is (\d+)$/, function(v) { assert(++value === v) })
34+
Then(/^value is (\d+)$/, function(v, cb) {
35+
expect(++value).to.eq(v)
36+
setTimeout(cb, 150)
37+
})
3238
"""
3339
And a file named "features/a.feature" with:
3440
"""
35-
Feature: no processing
41+
Feature: separate worker for each scenario
3642
Scenario: a
3743
Then value is 1
3844
@@ -55,7 +61,7 @@ Feature: Running scenarios in parallel
5561
"""
5662
And a file named "features/a.feature" with:
5763
"""
58-
Feature: slow
64+
Feature: adheres to setParallelCanAssign handler
5965
Scenario: a
6066
Given scenario 1
6167

src/runtime/parallel/coordinator.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const enum WorkerState {
3737
'idle',
3838
'closed',
3939
'running',
40+
'new',
4041
}
4142

4243
interface IWorker {
@@ -99,6 +100,7 @@ export default class Coordinator {
99100
if (doesHaveValue(message.supportCodeIds)) {
100101
this.saveDefinitionIdMapping(message.supportCodeIds)
101102
} else if (message.ready) {
103+
worker.state = WorkerState.idle
102104
this.awakenWorkers()
103105
} else if (doesHaveValue(message.jsonEnvelope)) {
104106
const envelope = messages.Envelope.fromObject(
@@ -109,7 +111,6 @@ export default class Coordinator {
109111
this.remapDefinitionIds(envelope.testCase)
110112
}
111113
if (doesHaveValue(envelope.testCaseFinished)) {
112-
worker.state = WorkerState.idle
113114
this.inProgressPickles = _.omit(this.inProgressPickles, worker.id)
114115
this.parseTestCaseResult(envelope.testCaseFinished)
115116
}
@@ -177,7 +178,7 @@ export default class Coordinator {
177178
}),
178179
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
179180
})
180-
const worker = { state: WorkerState.idle, process: workerProcess, id }
181+
const worker = { state: WorkerState.new, process: workerProcess, id }
181182
this.workers[id] = worker
182183
worker.process.on('message', (message: ICoordinatorReport) => {
183184
this.parseWorkerMessage(worker, message)

0 commit comments

Comments
 (0)