189 lines
9.9 KiB
YAML
189 lines
9.9 KiB
YAML
# Tests of allocation candidates API
|
|
|
|
fixtures:
|
|
- NUMAAggregateFixture
|
|
|
|
defaults:
|
|
request_headers:
|
|
x-auth-token: admin
|
|
accept: application/json
|
|
openstack-api-version: placement 1.32
|
|
|
|
tests:
|
|
|
|
- name: get allocation candidates without aggregate
|
|
GET: /allocation_candidates?resources=VCPU:1
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 4
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_2_UUID']"].resources.VCPU: 1
|
|
|
|
- name: get allocation candidates with aggregate A
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=$ENVIRON['AGGA_UUID']
|
|
response_json_paths:
|
|
# Aggregate A is on the root rps (both cn1 and cn2) so it spans on the
|
|
# whole tree. We have full allocations here.
|
|
$.allocation_requests.`len`: 4
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_2_UUID']"].resources.VCPU: 1
|
|
|
|
- name: get allocation candidates with aggregate A granular
|
|
GET: /allocation_candidates?resources1=VCPU:1&member_of1=$ENVIRON['AGGA_UUID']
|
|
response_json_paths:
|
|
# Aggregate A is on the root rps (both cn1 and cn2) so it spans on the
|
|
# whole tree, but only for the unsuffixed request group.
|
|
$.allocation_requests.`len`: 0
|
|
|
|
- name: get allocation candidates with aggregate B
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=$ENVIRON['AGGB_UUID']
|
|
response_json_paths:
|
|
# Aggregate B is on the root of cn2 so it spans on the
|
|
# whole tree including rps of NUMA2_1 and NUMA2_2.
|
|
$.allocation_requests.`len`: 2
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_2_UUID']"].resources.VCPU: 1
|
|
|
|
- name: get allocation candidates with aggregate C
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=$ENVIRON['AGGC_UUID']
|
|
response_json_paths:
|
|
# Aggregate C is *NOT* on the root, so we should get only NUMA1_1
|
|
# here that is only the rp in aggregate C.
|
|
$.allocation_requests.`len`: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_1_UUID']"].resources.VCPU: 1
|
|
|
|
- name: get allocation candidates with aggregate C granular
|
|
GET: /allocation_candidates?resources1=VCPU:1&member_of1=$ENVIRON['AGGC_UUID']
|
|
response_json_paths:
|
|
# Aggregate C is only on NUMA1_1.
|
|
$.allocation_requests.`len`: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_1_UUID']"].resources.VCPU: 1
|
|
|
|
- name: get allocation candidates with shared storage
|
|
GET: /allocation_candidates?resources=VCPU:1,DISK_GB:1000
|
|
response_json_paths:
|
|
# Since `members_of` query parameter is not specified, sharing rp 1 is
|
|
# being shared with the *whole* trees of CN1 and CN2. Sharing rp 2 is
|
|
# being shared with the *whole* tree of CN1.
|
|
# As a result, there should be 6 allocation candidates:
|
|
# [
|
|
# (numa1-1, ss1), (numa1-2, ss1), (numa2-1, ss1), (numa2-2, ss1),
|
|
# (numa1-1, ss2),
|
|
# ]
|
|
$.allocation_requests.`len`: 6
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_1_UUID']"].resources.VCPU: [1, 1]
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_2_UUID']"].resources.VCPU: [1, 1]
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['SS1_UUID']"].resources.DISK_GB: [1000, 1000, 1000, 1000]
|
|
$.allocation_requests..allocations["$ENVIRON['SS2_UUID']"].resources.DISK_GB: [1000, 1000]
|
|
|
|
- name: get allocation candidates with shared storage with aggregate A
|
|
GET: /allocation_candidates?resources=VCPU:1,DISK_GB:1000&member_of=$ENVIRON['AGGA_UUID']
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 4
|
|
# Since aggregate A is specified, which is on the root CN1, sharing
|
|
# rp 1 can be allocation candidates with the *whole* trees in CN1.
|
|
# Sharing rp 2 can't in the allocation candidates since it is not
|
|
# under aggregate A but under aggregate C.
|
|
# As a result, there should be 4 allocation candidates:
|
|
# [
|
|
# (numa1-1, ss1), (numa1-2, ss1), (numa2-1, ss1), (numa2-2, ss1)
|
|
# ]
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['SS1_UUID']"].resources.DISK_GB: [1000, 1000, 1000, 1000]
|
|
|
|
- name: get allocation candidates with shared storage with aggregate B
|
|
GET: /allocation_candidates?resources=VCPU:1,DISK_GB:1000&member_of=$ENVIRON['AGGB_UUID']
|
|
response_json_paths:
|
|
# We don't have shared disk in aggregate B.
|
|
$.allocation_requests.`len`: 0
|
|
|
|
- name: get allocation candidates with shared storage with aggregate C
|
|
GET: /allocation_candidates?resources=VCPU:1,DISK_GB:1000&member_of=$ENVIRON['AGGC_UUID']
|
|
response_json_paths:
|
|
# Since aggregate C is specified, which is on *non-root*, NUMA1_1,
|
|
# sharing provider 2 is not shared with the whole tree. It is shared
|
|
# with rps only with aggregate C for their own (opposite to not on root).
|
|
# As a result, there should be 1 allocation candidate:
|
|
# [
|
|
# (numa1-1, ss2),
|
|
# ]
|
|
$.allocation_requests.`len`: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['SS2_UUID']"].resources.DISK_GB: 1000
|
|
|
|
# Tests for negative aggregate membership from microversion 1.32.
|
|
# The negative aggregate feature had not yet been implemented when bug1792503
|
|
# was reported, but we include the tests here to make sure that it is
|
|
# consistent with the positive aggregate strategy with nested providers above.
|
|
- name: get allocation candidates with shared storage without aggregate A
|
|
GET: /allocation_candidates?resources=VCPU:1,DISK_GB:1000&member_of=!$ENVIRON['AGGA_UUID']
|
|
response_json_paths:
|
|
# Aggregate A is on the root rps (both cn1 and cn2) so it spans on the
|
|
# whole tree. We have no allocation requests here.
|
|
$.allocation_requests.`len`: 0
|
|
|
|
- name: get allocation candidates with shared storage without aggregate B
|
|
GET: /allocation_candidates?resources=VCPU:1,DISK_GB:1000&member_of=!$ENVIRON['AGGB_UUID']
|
|
response_json_paths:
|
|
# Aggregate B is on the root of cn2 and it spans on the whole tree
|
|
# including rps of NUMA2_1 and NUMA2_2 so we exclude them.
|
|
# As a result, there should be 4 allocation candidates:
|
|
# [
|
|
# (numa1-1, ss1), (numa1-2, ss1),
|
|
# (numa1-1, ss2), (numa1-2, ss2),
|
|
# ]
|
|
$.allocation_requests.`len`: 4
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_1_UUID']"].resources.VCPU: [1, 1]
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_2_UUID']"].resources.VCPU: [1, 1]
|
|
$.allocation_requests..allocations["$ENVIRON['SS1_UUID']"].resources.DISK_GB: [1000, 1000]
|
|
$.allocation_requests..allocations["$ENVIRON['SS2_UUID']"].resources.DISK_GB: [1000, 1000]
|
|
|
|
- name: get allocation candidates with shared storage without aggregate C
|
|
GET: /allocation_candidates?resources=VCPU:1,DISK_GB:1000&member_of=!$ENVIRON['AGGC_UUID']
|
|
response_json_paths:
|
|
# Aggregate C is *NOT* on the root. We should exclude NUMA1_1 and SS2,
|
|
# but we should get NUMA1_2
|
|
# [
|
|
# (numa1-2, ss1), (numa2-1, ss1), (numa2-2, ss1)
|
|
# ]
|
|
$.allocation_requests.`len`: 3
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['SS1_UUID']"].resources.DISK_GB: [1000, 1000, 1000]
|
|
|
|
- name: get allocation candidates with shared storage in (aggA or aggB) and (not aggC)
|
|
GET: /allocation_candidates?resources=VCPU:1,DISK_GB:1000&member_of=in:$ENVIRON['AGGA_UUID'],$ENVIRON['AGGB_UUID']&member_of=!$ENVIRON['AGGC_UUID']
|
|
response_json_paths:
|
|
# Aggregate C is *NOT* on the root. We should exclude NUMA1_1 and SS2,
|
|
# but we should get NUMA1_2
|
|
# [
|
|
# (numa1-2, ss1), (numa2-1, ss1), (numa2-2, ss1)
|
|
# ]
|
|
$.allocation_requests.`len`: 3
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_1_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA2_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['SS1_UUID']"].resources.DISK_GB: [1000, 1000, 1000]
|
|
|
|
- name: get allocation candidates with shared storage neither in aggB nor in aggC but in aggA
|
|
GET: /allocation_candidates?resources=VCPU:1,DISK_GB:1000&member_of=$ENVIRON['AGGA_UUID']&member_of=!in:$ENVIRON['AGGB_UUID'],$ENVIRON['AGGC_UUID']
|
|
response_json_paths:
|
|
# Aggregate B is on the root. We should exclude all the rps on CN2
|
|
# Aggregate C is *NOT* on the root. We should exclude NUMA1_1 and SS2,
|
|
# but we should get NUMA1_1
|
|
# [
|
|
# (numa1-1, ss1)
|
|
# ]
|
|
$.allocation_requests.`len`: 1
|
|
$.allocation_requests..allocations["$ENVIRON['NUMA1_2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['SS1_UUID']"].resources.DISK_GB: 1000
|