Chris Dent b6b35c15fe Add gabbi tests to cover the SamplesController
The samples controller has only two methods, get_all and get_one. This
new yaml file makes simple queries against a suite of three samples
provided by the SampleDataFixture to validate expected behavior.

Four xfails were required to account for limitations in the framework
that supports the SampleController. Bugs have been linked from the
yaml file.

Change-Id: Ifa90d43cb43bf79c850b4d604d1ddb67a5e06d56
2015-03-02 16:48:40 +00:00

160 lines
4.6 KiB
YAML

#
# Explore and test the samples controller, using samples supplied by
# the SampleDataFixture.
#
fixtures:
- ConfigFixture
- SampleDataFixture
tests:
# Confirm all the samples are there and expected requests behave.
# TODO(chdent): There's a danger here that the ordering of multiple
# samples will not be consistent.
- name: lists samples
url: /v2/samples
response_headers:
content-type: /application/json/
response_json_paths:
$[0].meter: livestock
$[0].metadata.breed: cow
$[1].metadata.breed: pig
$[2].metadata.breed: sheep
- name: get just one
url: /v2/samples/$RESPONSE['$[0].id']
response_json_paths:
$.meter: livestock
$.metadata.breed: cow
- name: list samples with limit
url: /v2/samples?limit=1
response_json_paths:
$[0].meter: livestock
$[0].metadata.breed: cow
$[-1].metadata.breed: cow
- name: list zero samples with zero limit
url: /v2/samples?limit=0
response_strings:
- '[]'
- name: list samples with query
url: /v2/samples?q.field=resource_metadata.breed&q.value=cow&q.op=eq
response_json_paths:
$[0].meter: livestock
$[0].metadata.breed: cow
$[-1].metadata.breed: cow
- name: query by user
url: /v2/samples?q.field=user&q.value=$RESPONSE['$[0].user_id']&q.op=eq
response_json_paths:
$[0].user_id: $RESPONSE['$[0].user_id']
- name: query by user_id
url: /v2/samples?q.field=user_id&q.value=$RESPONSE['$[0].user_id']&q.op=eq
response_json_paths:
$[0].user_id: $RESPONSE['$[0].user_id']
- name: query by project
url: /v2/samples?q.field=project&q.value=$RESPONSE['$[0].project_id']&q.op=eq
response_json_paths:
$[0].project_id: $RESPONSE['$[0].project_id']
- name: query by project_id
url: /v2/samples?q.field=project_id&q.value=$RESPONSE['$[0].project_id']&q.op=eq
response_json_paths:
$[0].project_id: $RESPONSE['$[0].project_id']
# Explore failure modes for listing samples
- name: list samples with bad field
url: /v2/samples?q.field=harpoon&q.value=cow&q.op=eq
status: 400
response_strings:
- metaquery
- unrecognized field in query
- name: list samples with metaquery field
url: /v2/samples?q.field=metaquery&q.value=cow&q.op=eq
desc: https://bugs.launchpad.net/ceilometer/+bug/1426466
xfail: true
status: 400
- name: bad limit value
url: /v2/samples?limit=happiness
status: 400
response_strings:
- Invalid input for field/attribute limit
- name: negative limit value 400
url: /v2/samples?limit=-99
status: 400
- name: negative limit value error message
url: /v2/samples?limit=-99
desc: https://bugs.launchpad.net/ceilometer/+bug/1426483
xfail: true
status: 400
response_headers:
content-type: /application/json/
response_json_paths:
$.error_message.faultstring: Limit must be positive
- name: bad accept
desc: try an unexpected content type
url: /v2/samples
request_headers:
accept: text/plain
status: 406
- name: complex good accept
desc: client sends complex accept do we adapt
url: /v2/samples
request_headers:
accept: text/plain, application/json; q=0.8
- name: complex bad accept
desc: client sends complex accept do we adapt
url: /v2/samples
request_headers:
accept: text/plain, application/binary; q=0.8
status: 406
- name: bad method
desc: https://bugs.launchpad.net/ceilometer/+bug/1426476
xfail: true
url: /v2/samples
method: POST
status: 405
# Work with just one sample.
- name: list one of the samples
url: /v2/samples?limit=1
- name: retrieve one sample
url: /v2/samples/$RESPONSE['$[0].id']
response_headers:
content-type: /application/json/
response_json_paths:
$.meter: livestock
- name: retrieve sample with useless query
url: /v2/samples/$RESPONSE['$.id']?limit=5
status: 400
response_strings:
- "Unknown argument:"
- name: attempt missing sample
url: /v2/samples/davesnothere
desc: https://bugs.launchpad.net/ceilometer/+bug/1426483
xfail: true
status: 404
response_headers:
content-type: /application/json/
response_json_paths:
$.error_message.faultstring: Sample davesnothere Not Found