deckhand/deckhand/tests/functional/gabbits/schema-validation/schema-validation-with-vali...

239 lines
8.5 KiB
YAML

# Test success path Validations API in conjunction with Validation Policy.
#
# 1. Purge existing data to ensure test isolation
# 2. Create a Validation Policy.
# 3. Verifies that the revision is success.
# 4. Creates a Validation Policy with two validations, one which requires an
# an external validation result from Promenade.
# 5. Register success result for promenade-schema-validation.
# 6. Validate that the revision is success.
# 7. Create a Validation Policy with two validations, same as before.
# 8. Intentionally do not register promenade-schema-validation.
# 9. Validate that promenade-schema-validation defaults to failure for
# get and list views.
# 10. Create a Validation Policy with one validation
# (deckhand-schema-validation) only.
# 11. Register extra promenade-schema-validation (not included in VP) as
# failure.
# 12. Validate that promenade-schema-validation is ignored for
# get and list views.
# 13. Validate that detail view for promenade-schema-validation indicates it
# is ignored, with detailed message.
defaults:
request_headers:
content-type: application/x-yaml
response_headers:
content-type: application/x-yaml
verbose: true
tests:
- name: purge
desc: Begin testing from known state.
DELETE: /api/v1.0/revisions
status: 204
response_headers: null
- name: create_validation_policy
desc: Create an example validation policy.
PUT: /api/v1.0/buckets/mop/documents
status: 200
data: |-
---
schema: deckhand/ValidationPolicy/v1
metadata:
schema: metadata/Control/v1
name: site-deploy-ready
layeringDefinition:
abstract: true
data:
validations:
- name: deckhand-schema-validation
...
- name: verify_revision_is_success
desc: |
Validate that the Validation Policy itself passed
deckhand-schema-validation.
GET: /api/v1.0/revisions/$HISTORY['create_validation_policy'].$RESPONSE['$.[0].status.revision']/validations/deckhand-schema-validation
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[0].id: 0
$.[0].results[0].status: success
- name: create_vp_two_validations
desc: Add a validation policy with two validations.
PUT: /api/v1.0/buckets/mop/documents
status: 200
data: |-
---
schema: deckhand/ValidationPolicy/v1
metadata:
schema: metadata/Control/v1
name: site-deploy-ready
layeringDefinition:
abstract: true
data:
validations:
- name: deckhand-schema-validation
- name: promenade-schema-validation
...
- name: register_promenade_validation_as_success
desc: Externally register the result for promenade-schema-validation.
POST: /api/v1.0/revisions/$HISTORY['create_vp_two_validations'].$RESPONSE['$.[0].status.revision']/validations/promenade-schema-validation
status: 201
data: |-
---
status: success
errors: []
validator:
name: promenade
version: 1.1.2
...
- name: verify_revision_with_two_validations_list_view_is_success
desc: Verify that both validations are marked as success.
GET: /api/v1.0/revisions/$HISTORY['create_vp_two_validations'].$RESPONSE['$.[0].status.revision']/validations
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 2
# Sort the results by name alphabetically for reliable assertions.
$.[0].results[/name][0].name: deckhand-schema-validation
$.[0].results[/name][0].status: success
$.[0].results[/name][1].name: promenade-schema-validation
$.[0].results[/name][1].status: success
- name: create_vp_two_validations_missing
desc: Add a validation policy with two validations.
PUT: /api/v1.0/buckets/mop/documents
status: 200
data: |-
---
schema: deckhand/ValidationPolicy/v1
metadata:
schema: metadata/Control/v1
name: site-deploy-ready
layeringDefinition:
abstract: true
data:
validations:
- name: deckhand-schema-validation
- name: promenade-schema-validation
...
# Do not register promenade-schema-validation.
- name: verify_promenade_schema_validation_is_failure
desc: |
Verify that promenade-schema-validation status is failure because
it should default to failure as it was never externally registered.
GET: /api/v1.0/revisions/$HISTORY['create_vp_two_validations_missing'].$RESPONSE['$.[0].status.revision']/validations/promenade-schema-validation
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[0].id: 0
$.[0].results[0].status: failure
- name: verify_revision_with_missing_validation_list_view_is_failure
desc: Verify promenade-schema-validation is failure.
GET: /api/v1.0/revisions/$HISTORY['create_vp_two_validations_missing'].$RESPONSE['$.[0].status.revision']/validations
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 2
# Sort the results by name alphabetically for reliable assertions.
$.[0].results[/name][0].name: deckhand-schema-validation
$.[0].results[/name][0].status: success
$.[0].results[/name][1].name: promenade-schema-validation
$.[0].results[/name][1].status: failure
- name: create_vp_one_validation_extra
desc: |
Add a validation policy with only one validation but later on register
an extra validation.
PUT: /api/v1.0/buckets/mop/documents
status: 200
data: |-
---
schema: deckhand/ValidationPolicy/v1
metadata:
schema: metadata/Control/v1
name: site-deploy-ready
layeringDefinition:
abstract: true
data:
validations:
- name: deckhand-schema-validation
...
- name: register_extra_promenade_validation_as_failure
desc: |
Externally register the result for extra promenade-schema-validation as
failure.
POST: /api/v1.0/revisions/$HISTORY['create_vp_one_validation_extra'].$RESPONSE['$.[0].status.revision']/validations/promenade-schema-validation
status: 201
data: |-
---
status: failure
errors:
- documents:
- schema: promenade/Node/v1
name: node-document-name
- schema: promenade/Masters/v1
name: kubernetes-masters
message: Node has master role, but not included in cluster masters list.
validator:
name: promenade
version: 1.1.2
...
- name: verify_promenade_schema_validation_is_ignored
desc: |
Verify that promenade-schema-validation is ignored.
GET: /api/v1.0/revisions/$HISTORY['create_vp_one_validation_extra'].$RESPONSE['$.[0].status.revision']/validations/promenade-schema-validation
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[0].id: 0
$.[0].results[0].status: ignored [failure]
- name: verify_revision_with_extra_validation_list_view_is_ignored
desc: |
Verify that the list view shows that promenade-schema-validation is
ignored.
GET: /api/v1.0/revisions/$HISTORY['create_vp_one_validation_extra'].$RESPONSE['$.[0].status.revision']/validations
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 2
# Sort the results by name alphabetically for reliable assertions.
$.[0].results[/name][0].name: deckhand-schema-validation
$.[0].results[/name][0].status: success
$.[0].results[/name][1].name: promenade-schema-validation
$.[0].results[/name][1].status: ignored [failure]
- name: verify_revision_with_extra_validation_detail_view_is_ignored
desc: |
Verify that details view for promenade-schema-validation indicates it
has been ignored, with a detailed message.
GET: /api/v1.0/revisions/$HISTORY['create_vp_one_validation_extra'].$RESPONSE['$.[0].status.revision']/validations/promenade-schema-validation/entries/0
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].name: promenade-schema-validation
$.[0].status: ignored [failure]
$.[0].createdAt: null
$.[0].expiresAfter: null
$.[0].errors.`len`: 2
$.[0].errors[/message][1].message: >-
The result for this validation was externally registered but has been
ignored because it is not found in the validations for
ValidationPolicy [deckhand/ValidationPolicy/v1, None]
site-deploy-ready: deckhand-schema-validation.