Skip to content

Commit

Permalink
Add unit tests for Minion Manager RPC Server
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergiu Miclea authored and Dany9966 committed Nov 20, 2023
1 parent bfad098 commit b36fdc3
Show file tree
Hide file tree
Showing 7 changed files with 1,169 additions and 3 deletions.
6 changes: 3 additions & 3 deletions coriolis/minion_manager/rpc/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -715,7 +715,7 @@ def _select_machine(minion_pool, exclude=None):
" the DB for pool '%s' for use with action '%s'. Clearing "
"any DB entries added so far (%s). Error was: %s",
minion_pool.id, action_id,
[m.id for m in new_machine_db_entries_added],
new_machine_db_entries_added,
utils.get_exception_details())
try:
LOG.debug(
Expand All @@ -739,13 +739,13 @@ def _select_machine(minion_pool, exclude=None):
utils.get_exception_details())
for new_machine in new_machine_db_entries_added:
try:
db_api.delete_minion_machine(ctxt, new_machine.id)
db_api.delete_minion_machine(ctxt, new_machine)
except Exception:
LOG.warn(
"Error occurred while removing minion machine entry "
"'%s' from the DB. This may leave the pool in an "
"inconsistent state. Error trace was: %s" % (
new_machine.id, utils.get_exception_details()))
new_machine, utils.get_exception_details()))
continue
raise

Expand Down
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
# perform health checks for powered on machines
# skip health checks for non-powered on machines
# skip health checks for non-healthcheckable (ex. IN_USE)
- config:
minion_pool:
id: minion_pool1
minimum_minions: 4
minion_retention_strategy: delete
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion2
allocation_status: ERROR
power_status: POWERED_ERROR
- id: minion3
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion4
allocation_status: IN_USE
power_status: POWERED_ON
expect:
result:
flow_tasks:
- pool-minion_pool1-machine-minion1-healthcheck
- pool-minion_pool1-machine-minion3-healthcheck
# "include" are the db calls that must be present
# "exclude" are the db calls that must not be present
db_calls:
include:
- set_minion_machine_allocation_status:
id: minion1
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion3
allocation_status: HEALTHCHECKING
exclude:
- set_minion_machine_allocation_status:
id: minion2
allocation_status: HEALTHCHECKING

# power off machines that are not needed and are expired
- config:
minion_pool:
id: minion_pool1
# minimum_minions 1 means we have too many minions
minimum_minions: 1
minion_max_idle_time: 0
minion_retention_strategy: poweroff
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion2
allocation_status: AVAILABLE
power_status: POWERED_ON
# not expired
last_used_at: [2099, 1, 1, 0, 0, 0]
- id: minion3
allocation_status: AVAILABLE
power_status: POWERED_OFF
- id: minion4
allocation_status: ERROR_DEPLOYING
power_status: POWERED_ON
- id: minion5
allocation_status: ERROR
power_status: POWERED_ERROR
expect:
result:
flow_tasks:
- pool-minion_pool1-machine-minion1-power-off
- pool-minion_pool1-machine-minion2-healthcheck # not expired
- pool-minion_pool1-machine-minion4-healthcheck
db_calls:
include:
- set_minion_machine_allocation_status:
id: minion1
allocation_status: POWERING_OFF
- set_minion_machine_allocation_status:
id: minion2
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion4
allocation_status: HEALTHCHECKING
exclude:
- set_minion_machine_allocation_status:
id: minion3
allocation_status: POWERING_OFF
- set_minion_machine_allocation_status:
id: minion5
allocation_status: HEALTHCHECKING

# delete machines that are not needed
- config:
minion_pool:
id: minion_pool1
# minimum_minions 1 means we have too many minions
minimum_minions: 1
minion_max_idle_time: 0
minion_retention_strategy: delete
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERING_OFF
- id: minion2
allocation_status: ERROR
power_status: POWERED_ERROR
- id: minion3
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion4
allocation_status: ERROR_DEPLOYING
power_status: POWERED_ON
expect:
result:
flow_tasks:
- pool-minion_pool1-machine-minion1-deallocation
- pool-minion_pool1-machine-minion3-healthcheck
- pool-minion_pool1-machine-minion4-healthcheck
db_calls:
include:
- set_minion_machine_allocation_status:
id: minion1
allocation_status: DEALLOCATING
- set_minion_machine_allocation_status:
id: minion3
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion4
allocation_status: HEALTHCHECKING
exclude:
- set_minion_machine_allocation_status:
id: minion2
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion2
allocation_status: DEALLOCATING

# invalid retention strategy
- config:
minion_pool:
id: minion_pool1
# minimum_minions 1 means we have too many minions
minimum_minions: 1
minion_max_idle_time: 0
minion_retention_strategy: invalid
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERING_OFF
- id: minion2
allocation_status: ERROR
power_status: POWERED_ERROR
- id: minion3
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion4
allocation_status: ERROR_DEPLOYING
power_status: POWERED_ON
expect:
exception: InvalidMinionPoolState

# no machines to healthcheck
- config:
minion_pool:
id: minion_pool1
# minimum_minions 1 means we have too many minions
minimum_minions: 1
minion_max_idle_time: 0
minion_retention_strategy: poweroff
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERED_ON
# is expired, no healthcheck
last_used_at: [2000, 1, 1, 0, 0, 0]
- id: minion2
allocation_status: AVAILABLE
# not powered on, no healthcheck
power_status: POWERED_OFF
- id: minion3
allocation_status: ERROR
power_status: POWERED_ERROR
expect:
result:
flow_tasks:
- pool-minion_pool1-machine-minion1-power-off
db_calls:
include:
- set_minion_machine_allocation_status:
id: minion1
allocation_status: POWERING_OFF
exclude:
- set_minion_machine_allocation_status:
id: minion2
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion3
allocation_status: HEALTHCHECKING
Loading

0 comments on commit b36fdc3

Please sign in to comment.