-
  name: 'no messages'
  expect: 'should go to minimum'
  result: 3
  role: 'def'
  config: |
    '*': {min: 3}
    def: {}
  state:
    messages: 0
-
  name: 'huge number of messages'
  expect: 'should go to maximum'
  result: 40
  role: 'def'
  config: |
    '*': {max: 40}
    def: {}
  state:
    messages: 10000
-
  name: 'many messages with role-specific processing/deadline'
  expect: 'should go to maximum'
  result: 5
  config: |
    '*': {min: 0}
    my: {p:60, deadline: 240}
  role: 'my'
  state:
    messages: 1000

# history based
-
  name: 'history of high load, then one low load'
  expect: 'should not scale down'
  result: null
  config: |
    '*': {min: 0, max: 4}
    my: {p:60, deadline: 240}
  role: 'my'
  current: 4
  state:
    messages: 10
  history: [ 4, 4, 0 ]
-
  name: 'history of high load, then many low load'
  expect: 'should scale down'
  result: 1
  config: |
    '*': {min: 0, max: 4}
    my: {p:60, deadline: 240}
  role: 'my'
  current: 4
  state:
    messages: 10
  history: [ 0, 0, 0 ]
-
  name: 'history of varying loads, then one low'
  expect: 'should not scale down'
  result: null
  config: |
    '*': {min: 0, max: 4}
    my: {p:60, deadline: 240}
  role: 'my'
  current: 4
  state:
    messages: 10
  history: [ 4, 1, 4, 2 ]
-
  name: 'history of medium loads, then one medium'
  expect: 'should scale down a bit'
  result: 2
  config: |
    '*': {min: 0, max: 4}
    my: {p:60, deadline: 240}
  role: 'my'
  current: 3
  state:
    messages: 40
  history: [ 1, 2, 1 ]
-
  name: 'history of decreasing loads, then nothing'
  expect: 'should scale down a bit'
  config: |
    '*': {min: 0, max: 4}
    my: {p:60, deadline: 240}
  role: 'my'
  current: 12
  state:
    messages: 0
  history: [ 10, 9, 8 ]
  result: 10
-
  name: 'impossible config'
  expect: 'should scale up to max'
  result: 4
  config: |
    '*': {min: 0, max: 4}
    my: { processing: 60, deadline: 61}
  role: 'my'
  current: 0
  state:
    messages: 40
  history: [ 1, 2, 1 ]
-
  name: 'unrealistic config'
  expect: 'should scale up to max'
  result: 4
  config: |
    '*': {min: 0, max: 4}
    my: { processing: 25, stddev: 12, deadline: 50}
  role: 'my'
  current: 0
  state:
    messages: 40
  history: [ 1, 2, 1 ]
-
  name: 'medium load, concurrency = 1'
  expect: 'should start some workers'
  result: 11
  role: 'def'
  config: |
    '*': {max: 40}
    def: { concurrency: 1 }
  state:
    messages: 40
-
  name: 'medium load, concurrency = 3'
  expect: 'should start ca 1/3 workers of concurrency=1'
  result: 4
  role: 'def'
  config: |
    '*': {max: 40}
    def: { concurrency: 3 }
  state:
    messages: 40
-
  name: 'low load, concurrency = 1'
  expect: 'should start few workers'
  result: 1
  role: 'def'
  config: |
    '*': {max: 40, deadline: 90}
    def: { concurrency: 1 }
  state:
    messages: 5
-
  name: 'low load, concurrency = 3'
  expect: 'should start same workers as concurrency=1'
  result: 1
  role: 'def'
  config: |
    '*': {max: 40, deadline: 90}
    def: { concurrency: 3 }
  state:
    messages: 5

