Skip to content

Commit

Permalink
Merge pull request #163 from DEFRA/BAU-dynamic-runner-count-update
Browse files Browse the repository at this point in the history
BAU: dynamic runner count update
  • Loading branch information
hughfdjackson authored Jan 28, 2025
2 parents 290a634 + e1a1009 commit 69b228c
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 12 deletions.
1 change: 1 addition & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ module.exports = {
'plugin:jest/style'
],
files: ['**/*.test.{cjs,js}', '**/__mocks__/**'],
excludedFiles: ['**/user-journey-tests/**/*.{cjs,js}'],
plugins: ['jest'],
rules: {
// Allow Jest to assert on mocked unbound methods
Expand Down
2 changes: 1 addition & 1 deletion jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export default {
resetModules: true,
clearMocks: true,
silent: false,
testMatch: ['**/src/**/*.test.js'],
testMatch: ['**/src/**/*.test.js', '**/user-journey-tests/config/*.test.js'],
reporters: ['default', ['github-actions', { silent: false }], 'summary'],
setupFilesAfterEnv: ['<rootDir>/.jest/setup.js'],
collectCoverageFrom: ['src/**/*.js'],
Expand Down
27 changes: 16 additions & 11 deletions user-journey-tests/config/browserstackMetrics.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const defaultMaximum = 6
const preferredMinimum = 6

export const getBrowserStackRunners = async () => {
const username = process.env.BROWSERSTACK_USER
Expand All @@ -24,18 +24,23 @@ export const getBrowserStackRunners = async () => {
parallel_sessions_running: threadsRunning
} = data
const availableThreads = threadsAllowed - threadsRunning
const threadsToUse = Math.floor(availableThreads / 2)

if (threadsToUse < defaultMaximum && threadsToUse < availableThreads) {
return threadsToUse
}
return recommendRunnerCount({ availableThreads })
} catch (error) {
return preferredMinimum // default to a speculative value
}
}

if (defaultMaximum > availableThreads) {
return availableThreads
}
export const recommendRunnerCount = ({ availableThreads }) => {
const threadsToUse = Math.floor(availableThreads / 2)

return defaultMaximum
} catch (error) {
return defaultMaximum // default to a speculative value
if (availableThreads < preferredMinimum) {
return availableThreads
}

if (threadsToUse < preferredMinimum) {
return preferredMinimum
}

return threadsToUse
}
17 changes: 17 additions & 0 deletions user-journey-tests/config/browserstackMetrics.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { recommendRunnerCount } from './browserstackMetrics'

describe('recommendRunnerCount', () => {
it('should take half availableThreads runners if that figure is greater than the minimum preferred', () => {
expect(recommendRunnerCount({ availableThreads: 16 })).toBe(8)
expect(recommendRunnerCount({ availableThreads: 15 })).toBe(7)
})

it('should take the minimum preferred if half availableThreads runners is too small, but available runners is more than minimum preferred', () => {
expect(recommendRunnerCount({ availableThreads: 10 })).toBe(6)
expect(recommendRunnerCount({ availableThreads: 8 })).toBe(6)
})

it('should take all that remains if the availableThreads is below minimum preferred', () => {
expect(recommendRunnerCount({ availableThreads: 4 })).toBe(4)
})
})

0 comments on commit 69b228c

Please sign in to comment.