254 lines
9.7 KiB
YAML
254 lines
9.7 KiB
YAML
# Tests of allocation candidates API
|
|
|
|
fixtures:
|
|
- NonSharedStorageFixture
|
|
|
|
defaults:
|
|
request_headers:
|
|
x-auth-token: admin
|
|
content-type: application/json
|
|
accept: application/json
|
|
openstack-api-version: placement 1.24
|
|
|
|
tests:
|
|
|
|
- name: get bad member_of microversion
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=in:$ENVIRON['AGGA_UUID'],$ENVIRON['AGGB_UUID']
|
|
request_headers:
|
|
openstack-api-version: placement 1.18
|
|
status: 400
|
|
response_strings:
|
|
- Invalid query string parameters
|
|
- "'member_of' was unexpected"
|
|
|
|
- name: get allocation candidates invalid member_of value
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=INVALID_UUID
|
|
status: 400
|
|
response_strings:
|
|
- Expected 'member_of' parameter to contain valid UUID(s).
|
|
|
|
- name: get allocation candidates no 'in:' for multiple member_of
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=$ENVIRON['AGGA_UUID'],$ENVIRON['AGGB_UUID']
|
|
status: 400
|
|
response_strings:
|
|
- Multiple values for 'member_of' must be prefixed with the 'in:' or '!in:' keyword using the valid microversion.
|
|
|
|
- name: get allocation candidates multiple member_of with 'in:' but invalid values
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=in:$ENVIRON['AGGA_UUID'],INVALID_UUID
|
|
status: 400
|
|
response_strings:
|
|
- Expected 'member_of' parameter to contain valid UUID(s).
|
|
|
|
- name: get allocation candidates multiple member_of with 'in:' but no aggregates
|
|
GET: /allocation_candidates?&member_of=in:&resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100
|
|
status: 400
|
|
response_strings:
|
|
- Expected 'member_of' parameter to contain valid UUID(s).
|
|
|
|
- name: get allocation candidates with no match for member_of
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=$ENVIRON['AGGA_UUID']
|
|
status: 200
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 0
|
|
|
|
- name: get compute node 1 state
|
|
GET: /resource_providers/$ENVIRON['CN1_UUID']
|
|
|
|
- name: associate the first compute node with aggA
|
|
PUT: /resource_providers/$ENVIRON['CN1_UUID']/aggregates
|
|
data:
|
|
aggregates:
|
|
- $ENVIRON['AGGA_UUID']
|
|
resource_provider_generation: $HISTORY['get compute node 1 state'].$RESPONSE['$.generation']
|
|
status: 200
|
|
|
|
- name: verify that the member_of call now returns 1 allocation_candidate
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=in:$ENVIRON['AGGA_UUID'],$ENVIRON['AGGB_UUID']
|
|
status: 200
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 1
|
|
|
|
- name: get compute node 2 state
|
|
GET: /resource_providers/$ENVIRON['CN2_UUID']
|
|
|
|
- name: associate the second compute node with aggB
|
|
PUT: /resource_providers/$ENVIRON['CN2_UUID']/aggregates
|
|
data:
|
|
aggregates:
|
|
- $ENVIRON['AGGB_UUID']
|
|
resource_provider_generation: $HISTORY['get compute node 2 state'].$RESPONSE['$.generation']
|
|
status: 200
|
|
|
|
- name: verify that the member_of call now returns both RPs
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=in:$ENVIRON['AGGA_UUID'],$ENVIRON['AGGB_UUID']
|
|
status: 200
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 2
|
|
|
|
- name: verify that aggC still returns no RPs
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=$ENVIRON['AGGC_UUID']
|
|
status: 200
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 0
|
|
|
|
- name: get current compute node 1 state
|
|
GET: /resource_providers/$ENVIRON['CN1_UUID']
|
|
|
|
- name: now associate the first compute node with both aggA and aggC
|
|
PUT: /resource_providers/$ENVIRON['CN1_UUID']/aggregates
|
|
data:
|
|
aggregates:
|
|
- $ENVIRON['AGGA_UUID']
|
|
- $ENVIRON['AGGC_UUID']
|
|
resource_provider_generation: $HISTORY['get current compute node 1 state'].$RESPONSE['$.generation']
|
|
|
|
- name: verify that the member_of call for aggs A and B still returns 2 allocation_candidates
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=in:$ENVIRON['AGGA_UUID'],$ENVIRON['AGGB_UUID']
|
|
status: 200
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 2
|
|
status: 200
|
|
|
|
- name: verify microversion fail for multiple member_of params
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=$ENVIRON['AGGA_UUID']&member_of=$ENVIRON['AGGB_UUID']
|
|
request_headers:
|
|
openstack-api-version: placement 1.23
|
|
status: 400
|
|
response_strings:
|
|
- 'Multiple member_of parameters are not supported'
|
|
response_json_paths:
|
|
$.errors[0].title: Bad Request
|
|
|
|
- name: verify that no RP is associated with BOTH aggA and aggB
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=$ENVIRON['AGGA_UUID']&member_of=$ENVIRON['AGGB_UUID']
|
|
status: 200
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 0
|
|
|
|
- name: associate the second compute node with aggA and aggB
|
|
PUT: /resource_providers/$ENVIRON['CN2_UUID']/aggregates
|
|
data:
|
|
aggregates:
|
|
- $ENVIRON['AGGA_UUID']
|
|
- $ENVIRON['AGGB_UUID']
|
|
resource_provider_generation: $HISTORY['associate the second compute node with aggB'].$RESPONSE['$.resource_provider_generation']
|
|
status: 200
|
|
|
|
- name: verify that second RP is associated with BOTH aggA and aggB
|
|
GET: /allocation_candidates?resources=VCPU:1,MEMORY_MB:1024,DISK_GB:100&member_of=$ENVIRON['AGGA_UUID']&member_of=$ENVIRON['AGGB_UUID']
|
|
status: 200
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 1
|
|
|
|
# Tests for negative aggregate membership from microversion 1.32
|
|
# Now the aggregation map is as below
|
|
# {
|
|
# CN1: [AGGA, AGGC],
|
|
# CN2: [AGGA, AGGB],
|
|
# CN3: []
|
|
# }
|
|
- name: negative agg error on old microversion with ! prefix
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=!$ENVIRON['AGGA_UUID']
|
|
status: 400
|
|
request_headers:
|
|
openstack-api-version: placement 1.31
|
|
response_strings:
|
|
- "Forbidden member_of parameters are not supported in the specified microversion"
|
|
|
|
- name: negative agg error on old microversion with !in prefix
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=!in:$ENVIRON['AGGA_UUID']
|
|
status: 400
|
|
request_headers:
|
|
openstack-api-version: placement 1.31
|
|
response_strings:
|
|
- "Forbidden member_of parameters are not supported in the specified microversion"
|
|
|
|
- name: negative agg error on orphaned queryparam
|
|
GET: /allocation_candidates?member_of=!$ENVIRON['AGGA_UUID']
|
|
status: 400
|
|
request_headers:
|
|
openstack-api-version: placement 1.32
|
|
response_strings:
|
|
- "All member_of parameters must be associated with resources"
|
|
|
|
- name: negative agg error on invalid agg
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=!(^o^)
|
|
status: 400
|
|
request_headers:
|
|
openstack-api-version: placement 1.32
|
|
response_strings:
|
|
- "Invalid query string parameters: Expected 'member_of' parameter to contain valid UUID(s)."
|
|
|
|
- name: negative agg error on invalid usage of in prefix
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=in:$ENVIRON['AGGA_UUID'],!$ENVIRON['AGGB_UUID']
|
|
status: 400
|
|
request_headers:
|
|
openstack-api-version: placement 1.32
|
|
response_strings:
|
|
- "Invalid query string parameters: Expected 'member_of' parameter to contain valid UUID(s)."
|
|
|
|
- name: negative agg
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=!$ENVIRON['AGGC_UUID']
|
|
status: 200
|
|
request_headers:
|
|
openstack-api-version: placement 1.32
|
|
response_json_paths:
|
|
# CN1 is excluded
|
|
$.allocation_requests.`len`: 2
|
|
$.provider_summaries.`len`: 2
|
|
$.allocation_requests..allocations["$ENVIRON['CN2_UUID']"].resources.VCPU: 1
|
|
$.allocation_requests..allocations["$ENVIRON['CN3_UUID']"].resources.VCPU: 1
|
|
|
|
- name: negative agg multiple
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=!in:$ENVIRON['AGGB_UUID'],$ENVIRON['AGGC_UUID']
|
|
status: 200
|
|
request_headers:
|
|
openstack-api-version: placement 1.32
|
|
response_json_paths:
|
|
# Both CN1 and CN2 are excluded
|
|
$.allocation_requests.`len`: 1
|
|
$.provider_summaries.`len`: 1
|
|
$.allocation_requests..allocations["$ENVIRON['CN3_UUID']"].resources.VCPU: 1
|
|
|
|
- name: negative agg with positive agg
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=!$ENVIRON['AGGB_UUID']&member_of=$ENVIRON['AGGC_UUID']
|
|
status: 200
|
|
request_headers:
|
|
openstack-api-version: placement 1.32
|
|
response_json_paths:
|
|
# Only CN1 is returned
|
|
$.allocation_requests.`len`: 1
|
|
$.provider_summaries.`len`: 1
|
|
$.allocation_requests..allocations["$ENVIRON['CN1_UUID']"].resources.VCPU: 1
|
|
|
|
- name: negative agg multiple with positive agg
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=!in:$ENVIRON['AGGB_UUID'],$ENVIRON['AGGC_UUID']&member_of=$ENVIRON['AGGA_UUID']
|
|
status: 200
|
|
request_headers:
|
|
openstack-api-version: placement 1.32
|
|
response_json_paths:
|
|
# no rp is returned
|
|
$.allocation_requests.`len`: 0
|
|
$.provider_summaries.`len`: 0
|
|
|
|
# This request is equivalent to the one in "negative agg with positive agg"
|
|
- name: negative agg with the same agg on positive get rp
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=!$ENVIRON['AGGB_UUID']&member_of=in:$ENVIRON['AGGB_UUID'],$ENVIRON['AGGC_UUID']
|
|
status: 200
|
|
request_headers:
|
|
openstack-api-version: placement 1.32
|
|
response_json_paths:
|
|
$.allocation_requests.`len`: 1
|
|
$.provider_summaries.`len`: 1
|
|
$.allocation_requests..allocations["$ENVIRON['CN1_UUID']"].resources.VCPU: 1
|
|
|
|
- name: negative agg with the same agg on positive no rp
|
|
GET: /allocation_candidates?resources=VCPU:1&member_of=!$ENVIRON['AGGB_UUID']&member_of=$ENVIRON['AGGB_UUID']
|
|
status: 200
|
|
request_headers:
|
|
openstack-api-version: placement 1.32
|
|
response_json_paths:
|
|
# no rp is returned
|
|
$.allocation_requests.`len`: 0
|
|
$.provider_summaries.`len`: 0
|