| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- const config = require('config')
- const sinon = require('sinon')
- const { expect } = require('chai')
- const cleanup = require('../storage/support/cleanup')
- const Rollout = require('../../../../api/app/rollout')
- describe('rollout', function () {
- beforeEach(cleanup.everything)
- beforeEach('Set up stubs', function () {
- sinon.stub(config, 'has').callThrough()
- sinon.stub(config, 'get').callThrough()
- })
- afterEach(sinon.restore)
- it('should return a valid history buffer level', function () {
- setMockConfig('historyBufferLevel', '2')
- setMockConfig('forcePersistBuffer', 'false')
- const rollout = new Rollout(config)
- const { historyBufferLevel, forcePersistBuffer } =
- rollout.getHistoryBufferLevelOptions('test-project-id')
- expect(historyBufferLevel).to.equal(2)
- expect(forcePersistBuffer).to.be.false
- })
- it('should return a valid history buffer level and force persist buffer options', function () {
- setMockConfig('historyBufferLevel', '1')
- setMockConfig('forcePersistBuffer', 'true')
- const rollout = new Rollout(config)
- const { historyBufferLevel, forcePersistBuffer } =
- rollout.getHistoryBufferLevelOptions('test-project-id')
- expect(historyBufferLevel).to.equal(1)
- expect(forcePersistBuffer).to.be.true
- })
- describe('with a higher next history buffer level rollout', function () {
- beforeEach(function () {
- setMockConfig('historyBufferLevel', '2')
- setMockConfig('forcePersistBuffer', 'false')
- setMockConfig('nextHistoryBufferLevel', '3')
- })
- it('should return the expected history buffer level when the rollout percentage is zero', function () {
- setMockConfig('nextHistoryBufferLevelRolloutPercentage', '0')
- const rollout = new Rollout(config)
- for (let i = 0; i < 1000; i++) {
- const { historyBufferLevel, forcePersistBuffer } =
- rollout.getHistoryBufferLevelOptions(`test-project-id-${i}`)
- expect(historyBufferLevel).to.equal(2)
- expect(forcePersistBuffer).to.be.false
- }
- })
- it('should return the expected distribution of levels when the rollout percentage is 10%', function () {
- setMockConfig('nextHistoryBufferLevelRolloutPercentage', '10')
- const rollout = new Rollout(config)
- let currentLevel = 0
- let nextLevel = 0
- for (let i = 0; i < 1000; i++) {
- const { historyBufferLevel } = rollout.getHistoryBufferLevelOptions(
- `test-project-id-${i}`
- )
- switch (historyBufferLevel) {
- case 2:
- currentLevel++
- break
- case 3:
- nextLevel++
- break
- default:
- expect.fail(
- `Unexpected history buffer level: ${historyBufferLevel}`
- )
- }
- }
- const twoPercentage = (currentLevel / 1000) * 100
- const threePercentage = (nextLevel / 1000) * 100
- expect(twoPercentage).to.be.closeTo(90, 5) // 90% for level 2
- expect(threePercentage).to.be.closeTo(10, 5) // 10% for level 3
- })
- })
- describe('with a next history buffer level lower than the current level', function () {
- beforeEach(function () {
- setMockConfig('historyBufferLevel', '3')
- setMockConfig('forcePersistBuffer', 'false')
- setMockConfig('nextHistoryBufferLevel', '2')
- })
- it('should always return the current level when the rollout percentage is zero', function () {
- setMockConfig('nextHistoryBufferLevelRolloutPercentage', '0')
- const rollout = new Rollout(config)
- for (let i = 0; i < 1000; i++) {
- const { historyBufferLevel, forcePersistBuffer } =
- rollout.getHistoryBufferLevelOptions(`test-project-id-${i}`)
- expect(historyBufferLevel).to.equal(3)
- expect(forcePersistBuffer).to.be.false
- }
- })
- it('should always return the current level regardless of the rollout percentage', function () {
- setMockConfig('nextHistoryBufferLevelRolloutPercentage', '10')
- const rollout = new Rollout(config)
- for (let i = 0; i < 1000; i++) {
- const { historyBufferLevel } = rollout.getHistoryBufferLevelOptions(
- `test-project-id-${i}`
- )
- expect(historyBufferLevel).to.equal(3)
- }
- })
- })
- })
- function setMockConfig(path, value) {
- config.has.withArgs(path).returns(true)
- config.get.withArgs(path).returns(value)
- }
|