# Demonstrate part of bug 1778591, where when creating an allocation for
# a new consumer will create the consumer and its generation, but if it
# fails the subsequent request requires generation 0, not null, which is
# not what we expect. This is made more problematic in the we cannot query
# the generation when the consumer has no allocations.


fixtures:
    - APIFixture

defaults:
    request_headers:
        x-auth-token: admin
        # consumer generations were added in 1.28
        openstack-api-version: placement 1.28
        content-type: application/json
        accept: application/json

tests:
# create a simple resource provider with limited inventory

- name: create provider
  POST: /resource_providers
  data:
      name: simple
      uuid: $ENVIRON['RP_UUID']

- name: set inventory
  PUT: /resource_providers/$ENVIRON['RP_UUID']/inventories
  data:
      resource_provider_generation: 0
      inventories:
          VCPU:
              total: 4

- name: fail allocations new consumer, bad capacity
  PUT: /allocations/88888888-8888-8888-8888-888888888888
  data:
      allocations:
          "$ENVIRON['RP_UUID']":
              resources:
                  VCPU: 9999
      project_id: $ENVIRON['PROJECT_ID']
      user_id: $ENVIRON['USER_ID']
      consumer_generation: null
  status: 409
  response_strings:
      - The requested amount would exceed the capacity

- name: try to get consumer generation
  desc: when there are no allocations we can't see the generation of a consumer
  GET: /allocations/88888888-8888-8888-8888-888888888888
  response_json_paths:
      # check entire response
      $:
          allocations: {}

# The failure to allocate above should have deleted the auto-created consumer,
# so when we retry the allocation here, we should be able to use the
# appropriate null generation to indicate this is a new consumer
- name: retry allocations new consumer, still null gen
  PUT: /allocations/88888888-8888-8888-8888-888888888888
  data:
      allocations:
          "$ENVIRON['RP_UUID']":
              resources:
                  VCPU: 1
      project_id: $ENVIRON['PROJECT_ID']
      user_id: $ENVIRON['USER_ID']
      consumer_generation: null
  status: 204
