placement/placement/tests/functional/gabbits/allocation-candidates-membe...

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