fixtures: - APIFixture defaults: request_headers: x-auth-token: admin accept: application/json tests: - name: inventories for missing provider GET: /resource_providers/7260669a-e3d4-4867-aaa7-683e2ab6958c/inventories status: 404 response_strings: - No resource provider with uuid 7260669a-e3d4-4867-aaa7-683e2ab6958c found response_json_paths: $.errors[0].title: Not Found - name: delete all inventory for missing resource provider DELETE: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: openstack-api-version: placement 1.5 status: 404 - name: post new resource provider POST: /resource_providers request_headers: content-type: application/json data: name: $ENVIRON['RP_NAME'] uuid: $ENVIRON['RP_UUID'] status: 201 response_headers: location: //resource_providers/[a-f0-9-]+/ - name: get empty inventories GET: /resource_providers/$ENVIRON['RP_UUID']/inventories response_json_paths: $.resource_provider_generation: 0 $.inventories: {} - name: post a conflicting capacity inventory POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 256 reserved: 512 status: 400 response_strings: - Unable to create inventory for resource provider response_json_paths: $.errors[0].title: Bad Request - name: post an inventory with no total specified POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB status: 400 response_strings: - JSON does not validate - "'total' is a required property" - name: post a negative inventory POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: -1 status: 400 response_strings: - JSON does not validate - -1 is less than the minimum of 1 - name: post an inventory with invalid total POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 0 reserved: 512 min_unit: 1 max_unit: 1024 step_size: 10 allocation_ratio: 1.0 status: 400 response_strings: - "JSON does not validate: 0 is less than the minimum of 1" - "Failed validating 'minimum' in schema['properties']['total']" - name: post an inventory invalid min_unit POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 2048 reserved: 512 min_unit: 0 max_unit: 1024 step_size: 10 allocation_ratio: 1.0 status: 400 response_strings: - "JSON does not validate: 0 is less than the minimum of 1" - "Failed validating 'minimum' in schema['properties']['min_unit']" - name: post an inventory invalid max_unit POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 2048 reserved: 512 min_unit: 10 max_unit: 0 step_size: 10 allocation_ratio: 1.0 status: 400 response_strings: - "JSON does not validate: 0 is less than the minimum of 1" - "Failed validating 'minimum' in schema['properties']['max_unit']" - name: post an inventory invalid step_size POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 2048 reserved: 512 min_unit: 10 max_unit: 1024 step_size: 0 allocation_ratio: 1.0 status: 400 response_strings: - "JSON does not validate: 0 is less than the minimum of 1" - "Failed validating 'minimum' in schema['properties']['step_size']" - name: post an inventory POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 2048 reserved: 512 min_unit: 10 max_unit: 1024 step_size: 10 allocation_ratio: 1.0 status: 201 response_headers: location: $SCHEME://$NETLOC/resource_providers/$ENVIRON['RP_UUID']/inventories/DISK_GB response_json_paths: $.resource_provider_generation: 1 $.total: 2048 $.reserved: 512 - name: get that inventory GET: $LOCATION status: 200 request_headers: # set microversion to 1.15 to get timestamp headers openstack-api-version: placement 1.15 response_headers: cache-control: no-cache # Does last-modified look like a legit timestamp? last-modified: /^\w+, \d+ \w+ \d{4} [\d:]+ GMT$/ response_json_paths: $.resource_provider_generation: 1 $.total: 2048 $.reserved: 512 $.min_unit: 10 $.max_unit: 1024 $.step_size: 10 $.allocation_ratio: 1.0 - name: get inventory v1.14 no cache headers GET: $LAST_URL status: 200 request_headers: openstack-api-version: placement 1.14 response_forbidden_headers: - cache-control - last-modified - name: modify the inventory PUT: $LAST_URL request_headers: content-type: application/json data: resource_provider_generation: 1 total: 2048 reserved: 1024 min_unit: 10 max_unit: 1024 step_size: 10 allocation_ratio: 1.0 status: 200 response_headers: content-type: /application/json/ response_json_paths: $.reserved: 1024 - name: confirm inventory change GET: $LAST_URL response_json_paths: $.resource_provider_generation: 2 $.total: 2048 $.reserved: 1024 - name: modify inventory invalid generation PUT: $LAST_URL request_headers: content-type: application/json openstack-api-version: placement 1.23 data: resource_provider_generation: 5 total: 2048 status: 409 response_strings: - resource provider generation conflict response_json_paths: $.errors[0].title: Conflict $.errors[0].code: placement.concurrent_update - name: modify inventory no such resource class in inventory PUT: /resource_providers/$ENVIRON['RP_UUID']/inventories/MEMORY_MB request_headers: content-type: application/json data: resource_provider_generation: 2 total: 2048 status: 400 response_strings: - No inventory record with resource class response_json_paths: $.errors[0].title: Bad Request - name: modify inventory invalid data desc: This should 400 because reserved is greater than total PUT: $LAST_URL request_headers: content-type: application/json data: resource_provider_generation: 2 total: 2048 reserved: 4096 min_unit: 10 max_unit: 1024 step_size: 10 allocation_ratio: 1.0 status: 400 response_strings: - Unable to update inventory for resource provider $ENVIRON['RP_UUID'] response_json_paths: $.errors[0].title: Bad Request - name: put inventory bad form desc: This should 400 because reserved is greater than total PUT: $LAST_URL request_headers: content-type: application/json data: house: red car: blue status: 400 response_strings: - JSON does not validate response_json_paths: $.errors[0].title: Bad Request - name: post inventory malformed json POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: '{"foo": }' status: 400 response_strings: - Malformed JSON response_json_paths: $.errors[0].title: Bad Request - name: post inventory bad syntax schema POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: bad_class total: 2048 status: 400 response_json_paths: $.errors[0].title: Bad Request - name: post inventory bad resource class POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: NO_CLASS_14 total: 2048 status: 400 response_strings: - No such resource class NO_CLASS_14 response_json_paths: $.errors[0].title: Bad Request - name: post inventory duplicated resource class desc: DISK_GB was already created above POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 2048 status: 409 response_strings: - Update conflict response_json_paths: $.errors[0].title: Conflict - name: get list of inventories GET: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: # set microversion to 1.15 to get timestamp headers openstack-api-version: placement 1.15 response_headers: cache-control: no-cache # Does last-modified look like a legit timestamp? last-modified: /^\w+, \d+ \w+ \d{4} [\d:]+ GMT$/ response_json_paths: $.resource_provider_generation: 2 $.inventories.DISK_GB.total: 2048 $.inventories.DISK_GB.reserved: 1024 - name: delete the inventory DELETE: /resource_providers/$ENVIRON['RP_UUID']/inventories/DISK_GB status: 204 - name: get now empty inventories GET: /resource_providers/$ENVIRON['RP_UUID']/inventories response_json_paths: $.resource_provider_generation: 3 $.inventories: {} - name: post new disk inventory POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 1024 status: 201 - name: post new ipv4 address inventory POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: IPV4_ADDRESS total: 255 reserved: 2 status: 201 - name: list both those inventories GET: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json response_json_paths: $.resource_provider_generation: 5 $.inventories.DISK_GB.total: 1024 $.inventories.IPV4_ADDRESS.total: 255 - name: post ipv4 address inventory again POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: IPV4_ADDRESS total: 255 reserved: 2 status: 409 response_json_paths: $.errors[0].title: Conflict - name: delete inventory DELETE: /resource_providers/$ENVIRON['RP_UUID']/inventories/IPV4_ADDRESS status: 204 response_forbidden_headers: - content-type - name: delete inventory again DELETE: /resource_providers/$ENVIRON['RP_UUID']/inventories/IPV4_ADDRESS status: 404 response_strings: - No inventory of class IPV4_ADDRESS found for delete response_json_paths: $.errors[0].title: Not Found - name: get missing inventory class GET: /resource_providers/$ENVIRON['RP_UUID']/inventories/IPV4_ADDRESS status: 404 response_strings: - No inventory of class IPV4_ADDRESS for $ENVIRON['RP_UUID'] response_json_paths: $.errors[0].title: Not Found - name: get invalid inventory class GET: /resource_providers/$ENVIRON['RP_UUID']/inventories/HOUSE status: 404 response_strings: - No inventory of class HOUSE for $ENVIRON['RP_UUID'] response_json_paths: $.errors[0].title: Not Found - name: get missing resource provider inventory GET: /resource_providers/2e1dda56-8b18-4fb9-8c5c-3125891b7143/inventories/VCPU status: 404 - name: create another resource provider POST: /resource_providers request_headers: content-type: application/json data: name: disk-network status: 201 - name: put all inventory PUT: $LOCATION/inventories request_headers: content-type: application/json # set microversion to 1.15 to get timestamp headers openstack-api-version: placement 1.15 data: resource_provider_generation: 0 inventories: IPV4_ADDRESS: total: 253 DISK_GB: total: 1024 status: 200 response_headers: cache-control: no-cache # Does last-modified look like a legit timestamp? last-modified: /^\w+, \d+ \w+ \d{4} [\d:]+ GMT$/ response_json_paths: $.resource_provider_generation: 1 $.inventories.IPV4_ADDRESS.total: 253 $.inventories.IPV4_ADDRESS.reserved: 0 $.inventories.DISK_GB.total: 1024 $.inventories.DISK_GB.allocation_ratio: 1.0 - name: check both inventory classes GET: $LAST_URL response_json_paths: $.resource_provider_generation: 1 $.inventories.DISK_GB.total: 1024 $.inventories.IPV4_ADDRESS.total: 253 - name: check one inventory class GET: $LAST_URL/DISK_GB response_json_paths: $.total: 1024 - name: put all inventory bad generation PUT: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json openstack-api-version: placement 1.23 data: resource_provider_generation: 99 inventories: IPV4_ADDRESS: total: 253 status: 409 response_strings: - resource provider generation conflict response_json_paths: $.errors[0].title: Conflict $.errors[0].code: placement.concurrent_update - name: put all inventory unknown resource class PUT: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_provider_generation: 6 inventories: HOUSE: total: 253 status: 400 response_strings: - Unknown resource class in inventory response_json_paths: $.errors[0].title: Bad Request - name: post an inventory with total exceed max limit POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 2147483648 reserved: 512 min_unit: 10 max_unit: 1024 step_size: 10 allocation_ratio: 1.0 status: 400 response_strings: - "Failed validating 'maximum'" response_json_paths: $.errors[0].title: Bad Request - name: post an inventory with reserved exceed max limit POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 1024 reserved: 2147483648 min_unit: 10 max_unit: 1024 step_size: 10 allocation_ratio: 1.0 status: 400 response_strings: - "Failed validating 'maximum'" response_json_paths: $.errors[0].title: Bad Request - name: post an inventory with min_unit exceed max limit POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 1024 reserved: 512 min_unit: 2147483648 max_unit: 1024 step_size: 10 allocation_ratio: 1.0 status: 400 response_strings: - "Failed validating 'maximum'" response_json_paths: $.errors[0].title: Bad Request - name: post an inventory with max_unit exceed max limit POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 1024 reserved: 512 min_unit: 10 max_unit: 2147483648 step_size: 10 allocation_ratio: 1.0 status: 400 response_strings: - "Failed validating 'maximum'" response_json_paths: $.errors[0].title: Bad Request - name: post an inventory with step_size exceed max limit POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 1024 reserved: 512 min_unit: 10 max_unit: 1024 step_size: 2147483648 allocation_ratio: 1.0 status: 400 response_strings: - "Failed validating 'maximum'" response_json_paths: $.errors[0].title: Bad Request - name: post an inventory with allocation_ratio exceed max limit POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 1024 reserved: 512 min_unit: 10 max_unit: 1024 step_size: 10 allocation_ratio: 3.40282e+39 status: 400 response_strings: - "Failed validating 'maximum'" response_json_paths: $.errors[0].title: Bad Request - name: modify the inventory with total exceed max limit PUT: $LAST_URL request_headers: content-type: application/json data: resource_provider_generation: 1 inventories: DISK_GB: total: 2147483648 reserved: 512 status: 400 response_strings: - "Failed validating 'maximum'" response_json_paths: $.errors[0].title: Bad Request - name: modify the inventory with allocation_ratio exceed max limit PUT: $LAST_URL request_headers: content-type: application/json data: resource_provider_generation: 1 inventories: DISK_GB: total: 1024 reserved: 512 allocation_ratio: 3.40282e+39 status: 400 response_strings: - "Failed validating 'maximum'" response_json_paths: $.errors[0].title: Bad Request # NOTE(cdent): The generation is 6 now, based on the activity at # the start of this file. - name: put all inventory bad capacity PUT: $LAST_URL request_headers: content-type: application/json data: resource_provider_generation: 6 inventories: IPV4_ADDRESS: total: 253 reserved: 512 status: 400 response_strings: - Unable to update inventory - greater than or equal to total response_json_paths: $.errors[0].title: Bad Request - name: put all inventory zero capacity old microversion PUT: $LAST_URL request_headers: content-type: application/json data: resource_provider_generation: 6 inventories: IPV4_ADDRESS: total: 253 reserved: 253 status: 400 response_strings: - Unable to update inventory - greater than or equal to total response_json_paths: $.errors[0].title: Bad Request - name: put inventory with reserved equal to total PUT: $LAST_URL request_headers: content-type: application/json openstack-api-version: placement 1.26 data: resource_provider_generation: 6 inventories: IPV4_ADDRESS: total: 253 reserved: 253 status: 200 - name: put all inventory bad capacity in new microversion PUT: $LAST_URL request_headers: content-type: application/json openstack-api-version: placement 1.26 data: resource_provider_generation: 7 inventories: IPV4_ADDRESS: total: 253 reserved: 512 status: 400 response_strings: - Unable to update inventory - greater than total response_json_paths: $.errors[0].title: Bad Request - name: put one inventory zero capacity old microversion PUT: /resource_providers/$ENVIRON['RP_UUID']/inventories/IPV4_ADDRESS request_headers: content-type: application/json data: resource_provider_generation: 7 total: 253 reserved: 253 status: 400 response_strings: - Unable to update inventory - greater than or equal to total response_json_paths: $.errors[0].title: Bad Request - name: put one inventory with reserved equal to total new microversion PUT: $LAST_URL request_headers: content-type: application/json openstack-api-version: placement 1.26 data: resource_provider_generation: 7 total: 512 reserved: 512 status: 200 - name: delete all inventory bad generation PUT: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_provider_generation: 99 inventories: IPV4_ADDRESS: total: 253 status: 409 response_strings: - resource provider generation conflict - name: delete all inventory DELETE: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: openstack-api-version: placement 1.5 status: 204 - name: delete empty inventories DELETE: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: openstack-api-version: placement 1.5 status: 204 - name: get inventories after deletions GET: /resource_providers/$ENVIRON['RP_UUID']/inventories response_json_paths: $.resource_provider_generation: 10 $.inventories: {} - name: post an inventory again POST: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json data: resource_class: DISK_GB total: 2048 reserved: 512 min_unit: 10 max_unit: 1024 step_size: 10 allocation_ratio: 1.0 status: 201 response_headers: location: $SCHEME://$NETLOC/resource_providers/$ENVIRON['RP_UUID']/inventories/DISK_GB response_json_paths: $.resource_provider_generation: 11 $.total: 2048 $.reserved: 512 - name: delete all inventory with put PUT: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: content-type: application/json openstack-api-version: placement 1.4 data: resource_provider_generation: 11 inventories: {} response_json_paths: $.resource_provider_generation: 12 $.inventories: {} status: 200 - name: get generation after deletion GET: /resource_providers/$ENVIRON['RP_UUID']/inventories response_json_paths: $.resource_provider_generation: 12 $.inventories: {} - name: delete inventories earlier version DELETE: /resource_providers/$ENVIRON['RP_UUID']/inventories request_headers: openstack-api-version: placement 1.4 status: 405