diff --git a/.eslintrc.cjs b/.eslintrc.cjs index d2919c96..4ed4990e 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -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 diff --git a/jest.config.js b/jest.config.js index 62a927bc..a43cdf9a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -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: ['/.jest/setup.js'], collectCoverageFrom: ['src/**/*.js'], diff --git a/user-journey-tests/config/browserstackMetrics.js b/user-journey-tests/config/browserstackMetrics.js index c8a70b62..760acda2 100644 --- a/user-journey-tests/config/browserstackMetrics.js +++ b/user-journey-tests/config/browserstackMetrics.js @@ -1,4 +1,4 @@ -const defaultMaximum = 6 +const preferredMinimum = 6 export const getBrowserStackRunners = async () => { const username = process.env.BROWSERSTACK_USER @@ -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 } diff --git a/user-journey-tests/config/browserstackMetrics.test.js b/user-journey-tests/config/browserstackMetrics.test.js new file mode 100644 index 00000000..4defe003 --- /dev/null +++ b/user-journey-tests/config/browserstackMetrics.test.js @@ -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) + }) +})