415 lines
18 KiB
Plaintext
415 lines
18 KiB
Plaintext
config_file:
|
|
- param.yaml
|
|
- items/parallel/param.yaml
|
|
main:
|
|
name: Testium validation suite
|
|
steps:
|
|
- group:
|
|
name: Test preparation
|
|
steps:
|
|
- let:
|
|
condition: <| "$(os)" == "Linux" |>
|
|
name: Set test variables for Linux
|
|
values:
|
|
- terminal_prompt: $(linux_prompt)
|
|
- psep: /
|
|
- let:
|
|
condition: <| "$(os)" == "Windows" |>
|
|
name: Set test variables for Windows
|
|
values:
|
|
- terminal_prompt: $(windows_prompt)
|
|
- psep: \
|
|
- group:
|
|
name: Group of tests
|
|
steps:
|
|
- let:
|
|
name: parallel test constants
|
|
values:
|
|
test: parallel
|
|
test_path: items/$(test)
|
|
- group:
|
|
name: parallel test
|
|
steps:
|
|
- sequence:
|
|
steps:
|
|
- parallel:
|
|
branches:
|
|
- name: Branch A
|
|
steps:
|
|
- let:
|
|
name: Set A done
|
|
values:
|
|
- branch_a_done: true
|
|
- name: Branch B
|
|
steps:
|
|
- let:
|
|
name: Set B done
|
|
values:
|
|
- branch_b_done: true
|
|
key: $(test)_PASS
|
|
name: Both branches pass
|
|
sync: all
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Both branches ran
|
|
values:
|
|
- <| $(branch_a_done) == True |>
|
|
- <| $(branch_b_done) == True |>
|
|
- parallel:
|
|
branches:
|
|
- name: Pass branch
|
|
steps:
|
|
- let:
|
|
name: Set pass flag
|
|
values:
|
|
- pass_branch_ran: true
|
|
- name: Fail branch
|
|
steps:
|
|
- py_func:
|
|
expected_result: fail
|
|
file: $(test_path)$(psep)parallel.py
|
|
func_name: sleep_func
|
|
name: Raise exception
|
|
param:
|
|
- 0
|
|
key: $(test)_PASS
|
|
name: One branch fails
|
|
no_fail: true
|
|
sync: all
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Pass branch still ran
|
|
values:
|
|
- <| $(pass_branch_ran) == True |>
|
|
- let:
|
|
name: Reset slow flag
|
|
values:
|
|
- slow_done: false
|
|
- parallel:
|
|
branches:
|
|
- name: Fast branch
|
|
steps:
|
|
- let:
|
|
name: Fast done
|
|
values:
|
|
- fast_done: true
|
|
- name: Slow branch
|
|
steps:
|
|
- py_func:
|
|
file: $(test_path)$(psep)parallel.py
|
|
func_name: sleep_func
|
|
name: Sleep 2s
|
|
param:
|
|
- 2
|
|
- let:
|
|
name: Slow done
|
|
values:
|
|
- slow_done: true
|
|
key: $(test)_PASS
|
|
name: sync any - first wins
|
|
sync: any
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Fast branch ran, slow branch was stopped
|
|
values:
|
|
- <| $(fast_done) == True |>
|
|
- <| $(slow_done) == False |>
|
|
- let:
|
|
name: Reset sync flag
|
|
values:
|
|
- sync_flag: ''
|
|
- waiter_ran: false
|
|
- parallel:
|
|
branches:
|
|
- name: Setter branch
|
|
steps:
|
|
- py_func:
|
|
file: $(test_path)$(psep)parallel.py
|
|
func_name: sleep_func
|
|
name: Sleep 0.3s then set flag
|
|
param:
|
|
- 0.3
|
|
- let:
|
|
name: Set sync flag
|
|
values:
|
|
- sync_flag: ready
|
|
- name: Waiter branch
|
|
steps:
|
|
- let:
|
|
name: Got flag
|
|
values:
|
|
- waiter_ran: true
|
|
wait_for:
|
|
condition: <| "$(sync_flag)" == "ready" |>
|
|
timeout: 10
|
|
key: $(test)_PASS
|
|
name: wait_for synchronization
|
|
sync: all
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Waiter branch ran after flag was set
|
|
values:
|
|
- <| $(waiter_ran) == True |>
|
|
- parallel:
|
|
branches:
|
|
- name: Sleep A
|
|
steps:
|
|
- sleep:
|
|
name: Sleep 1s A
|
|
timeout: 1
|
|
- name: Sleep B
|
|
steps:
|
|
- sleep:
|
|
name: Sleep 1s B
|
|
timeout: 1
|
|
key: $(test)_PASS
|
|
name: Timing test
|
|
sync: all
|
|
- let:
|
|
name: Capture parallel duration
|
|
values:
|
|
- parallel_duration: $(ts_duration_Timing test)
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Duration < 1.8s (would be 2s if sequential)
|
|
values:
|
|
- <| float("$(parallel_duration)") < 1.8 |>
|
|
- let:
|
|
name: Reset N flags
|
|
values:
|
|
- n_a: false
|
|
- n_b: false
|
|
- n_c: false
|
|
- n_d: false
|
|
- parallel:
|
|
branches:
|
|
- name: NA
|
|
steps:
|
|
- let:
|
|
name: set n_a
|
|
values:
|
|
- n_a: true
|
|
- name: NB
|
|
steps:
|
|
- let:
|
|
name: set n_b
|
|
values:
|
|
- n_b: true
|
|
- name: NC
|
|
steps:
|
|
- let:
|
|
name: set n_c
|
|
values:
|
|
- n_c: true
|
|
- name: ND
|
|
steps:
|
|
- let:
|
|
name: set n_d
|
|
values:
|
|
- n_d: true
|
|
key: $(test)_PASS
|
|
name: Four branches
|
|
sync: all
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Four branches all set their flag
|
|
values:
|
|
- <| $(n_a) == True |>
|
|
- <| $(n_b) == True |>
|
|
- <| $(n_c) == True |>
|
|
- <| $(n_d) == True |>
|
|
- let:
|
|
name: Reset nested flags
|
|
values:
|
|
- outer_x: false
|
|
- inner_x_1: false
|
|
- inner_x_2: false
|
|
- parallel:
|
|
branches:
|
|
- name: Outer X
|
|
steps:
|
|
- let:
|
|
name: set outer_x
|
|
values:
|
|
- outer_x: true
|
|
- parallel:
|
|
branches:
|
|
- name: Inner X1
|
|
steps:
|
|
- let:
|
|
name: set inner_x_1
|
|
values:
|
|
- inner_x_1: true
|
|
- name: Inner X2
|
|
steps:
|
|
- let:
|
|
name: set inner_x_2
|
|
values:
|
|
- inner_x_2: true
|
|
name: Inner parallel
|
|
sync: all
|
|
- name: Outer Y
|
|
steps:
|
|
- sleep:
|
|
name: brief sleep
|
|
timeout: 0
|
|
key: $(test)_PASS
|
|
name: Outer parallel
|
|
sync: all
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Nested parallel set all flags
|
|
values:
|
|
- <| $(outer_x) == True |>
|
|
- <| $(inner_x_1) == True |>
|
|
- <| $(inner_x_2) == True |>
|
|
- let:
|
|
name: Reset waiter timeout flag
|
|
values:
|
|
- waiter_timeout_ran: false
|
|
- parallel:
|
|
branches:
|
|
- name: Quick branch
|
|
steps:
|
|
- sleep:
|
|
name: brief sleep
|
|
timeout: 0
|
|
- name: Doomed waiter
|
|
steps:
|
|
- let:
|
|
name: should not run
|
|
values:
|
|
- waiter_timeout_ran: true
|
|
wait_for:
|
|
condition: <| "never" == "ready" |>
|
|
timeout: 1
|
|
key: $(test)_PASS
|
|
name: wait_for timeout
|
|
no_fail: true
|
|
sync: all
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Doomed waiter never ran its steps
|
|
values:
|
|
- <| $(waiter_timeout_ran) == False |>
|
|
- parallel:
|
|
branches:
|
|
- name: ok branch
|
|
steps:
|
|
- let:
|
|
name: noop
|
|
values:
|
|
- noop_var: 1
|
|
- name: broken branch
|
|
steps:
|
|
- py_func:
|
|
expected_result: fail
|
|
file: $(test_path)$(psep)parallel.py
|
|
func_name: sleep_func
|
|
name: Forced fail
|
|
param:
|
|
- 0
|
|
key: $(test)_FAIL
|
|
name: One branch really fails
|
|
sync: all
|
|
- let:
|
|
name: Reset branch condition flag
|
|
values:
|
|
- cond_branch_ran: false
|
|
- other_branch_ran: false
|
|
- parallel:
|
|
branches:
|
|
- condition: <| "always" == "false" |>
|
|
name: Skipped branch
|
|
steps:
|
|
- let:
|
|
name: should not run
|
|
values:
|
|
- cond_branch_ran: true
|
|
- name: Other branch
|
|
steps:
|
|
- let:
|
|
name: ran
|
|
values:
|
|
- other_branch_ran: true
|
|
key: $(test)_PASS
|
|
name: Condition-skipped branch
|
|
sync: all
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Skipped condition branch did not run
|
|
values:
|
|
- <| $(cond_branch_ran) == False |>
|
|
- <| $(other_branch_ran) == True |>
|
|
- let:
|
|
name: Reset loop counters
|
|
values:
|
|
- loop_count_a: 0
|
|
- loop_count_b: 0
|
|
- loop:
|
|
iterator: 3
|
|
name: Loop wrapping parallel
|
|
steps:
|
|
- parallel:
|
|
branches:
|
|
- name: LA
|
|
steps:
|
|
- let:
|
|
name: bump A
|
|
values:
|
|
- loop_count_a: <| int("$(loop_count_a)")
|
|
+ 1 |>
|
|
- name: LB
|
|
steps:
|
|
- let:
|
|
name: bump B
|
|
values:
|
|
- loop_count_b: <| int("$(loop_count_b)")
|
|
+ 1 |>
|
|
name: Per-iteration parallel
|
|
sync: all
|
|
- check:
|
|
key: $(test)_PASS
|
|
name: Both branches ran 3 times
|
|
values:
|
|
- <| int("$(loop_count_a)") == 3 |>
|
|
- <| int("$(loop_count_b)") == 3 |>
|
|
filename: /home/renish/workspace/testium/code/test/validation/items/parallel/test.tum
|
|
- sequence:
|
|
steps:
|
|
- report:
|
|
export:
|
|
- text:
|
|
key: $(test)_PASS
|
|
path: $(validation_report_path)$(psep)$(test)_PASS.txt
|
|
- html:
|
|
key: $(test)_PASS
|
|
path: $(validation_report_path)$(psep)$(test)_PASS.html
|
|
- junit:
|
|
key: $(test)_PASS
|
|
path: $(validation_report_path)$(psep)$(test)_PASS.junit
|
|
name: Expected PASS $(test) test
|
|
- report:
|
|
export:
|
|
- text:
|
|
key: $(test)_FAIL
|
|
path: $(validation_report_path)$(psep)$(test)_FAIL.txt
|
|
- html:
|
|
key: $(test)_FAIL
|
|
path: $(validation_report_path)$(psep)$(test)_FAIL.html
|
|
- junit:
|
|
key: $(test)_FAIL
|
|
path: $(validation_report_path)$(psep)$(test)_FAIL.junit
|
|
name: Expected FAIL $(test) test
|
|
filename: /home/renish/workspace/testium/code/test/validation/items/report.tum
|
|
report:
|
|
enabled: true
|
|
export:
|
|
junit:
|
|
file_name: $(validation_report_file).junit
|
|
path: $(validation_report_path)
|
|
sqlite:
|
|
file_name: $(validation_report_file).sqlite
|
|
path: $(validation_report_path)
|
|
log_stored: true
|