Test: add real-world functional schema validation
Change-Id: I1d49ff459da3e64ee3e32247e66a56e5160b9882
This commit is contained in:
parent
ac8d70391d
commit
e54c3871c9
|
@ -0,0 +1,219 @@
|
||||||
|
---
|
||||||
|
schema: deckhand/DataSchema/v1
|
||||||
|
metadata:
|
||||||
|
schema: metadata/Control/v1
|
||||||
|
name: promenade/KubernetesNetwork/v1
|
||||||
|
labels:
|
||||||
|
application: promenade
|
||||||
|
data:
|
||||||
|
$schema: http://json-schema.org/schema#
|
||||||
|
definitions:
|
||||||
|
cidr:
|
||||||
|
type: string
|
||||||
|
pattern: '^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\/([0-9]|[1-2][0-9]|3[0-2])$'
|
||||||
|
domain_name:
|
||||||
|
type: string
|
||||||
|
pattern: '^([a-z][a-z0-9-]+\.)+[a-z]+\.?$'
|
||||||
|
hostname:
|
||||||
|
type: string
|
||||||
|
pattern: '^([a-z][a-z0-9-]+)(\.+[a-z]+\.)?$'
|
||||||
|
hostname_or_ip_address:
|
||||||
|
type: string
|
||||||
|
pattern: '^(([a-z][a-z0-9-]+)(\.+[a-z]+\.)?|(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])))$'
|
||||||
|
ip_address:
|
||||||
|
type: string
|
||||||
|
pattern: '^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))$'
|
||||||
|
url:
|
||||||
|
type: string
|
||||||
|
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
dns:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
bootstrap_validation_checks:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/domain_name'
|
||||||
|
cluster_domain:
|
||||||
|
$ref: '#/definitions/domain_name'
|
||||||
|
service_ip:
|
||||||
|
$ref: '#/definitions/ip_address'
|
||||||
|
upstream_servers:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/ip_address'
|
||||||
|
required:
|
||||||
|
- cluster_domain
|
||||||
|
- service_ip
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
etcd:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
service_ip:
|
||||||
|
$ref: '#/definitions/ip_address'
|
||||||
|
required:
|
||||||
|
- service_ip
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
kubernetes:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
pod_cidr:
|
||||||
|
$ref: '#/definitions/cidr'
|
||||||
|
service_ip:
|
||||||
|
$ref: '#/definitions/ip_address'
|
||||||
|
service_cidr:
|
||||||
|
$ref: '#/definitions/cidr'
|
||||||
|
required:
|
||||||
|
- pod_cidr
|
||||||
|
- service_cidr
|
||||||
|
- service_ip
|
||||||
|
additionalProperties: false
|
||||||
|
hosts_entries:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
ip:
|
||||||
|
$ref: '#/definitions/ip_address'
|
||||||
|
names:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/hostname'
|
||||||
|
|
||||||
|
proxy:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
additional_no_proxy:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/hostname_or_ip_address'
|
||||||
|
url:
|
||||||
|
$ref: '#/definitions/url'
|
||||||
|
required:
|
||||||
|
- url
|
||||||
|
additionalFields: false
|
||||||
|
|
||||||
|
required:
|
||||||
|
- dns
|
||||||
|
- kubernetes
|
||||||
|
additionalProperties: false
|
||||||
|
---
|
||||||
|
schema: 'deckhand/DataSchema/v1'
|
||||||
|
metadata:
|
||||||
|
schema: metadata/Control/v1
|
||||||
|
name: drydock/NetworkLink/v1
|
||||||
|
labels:
|
||||||
|
application: drydock
|
||||||
|
data:
|
||||||
|
$schema: 'http://json-schema.org/schema#'
|
||||||
|
id: 'http://att.com/att-comdev/drydock/networkLink.yaml'
|
||||||
|
type: 'object'
|
||||||
|
properties:
|
||||||
|
bonding:
|
||||||
|
type: 'object'
|
||||||
|
properties:
|
||||||
|
mode:
|
||||||
|
type: 'string'
|
||||||
|
hash:
|
||||||
|
type: 'string'
|
||||||
|
peer_rate:
|
||||||
|
type: 'string'
|
||||||
|
mon_rate:
|
||||||
|
type: 'number'
|
||||||
|
up_delay:
|
||||||
|
type: 'number'
|
||||||
|
down_delay:
|
||||||
|
type: 'number'
|
||||||
|
additionalProperties: false
|
||||||
|
mtu:
|
||||||
|
type: 'number'
|
||||||
|
linkspeed:
|
||||||
|
type: 'string'
|
||||||
|
trunking:
|
||||||
|
type: 'object'
|
||||||
|
properties:
|
||||||
|
mode:
|
||||||
|
type: 'string'
|
||||||
|
default_network:
|
||||||
|
type: 'string'
|
||||||
|
additionalProperties: false
|
||||||
|
allowed_networks:
|
||||||
|
type: 'array'
|
||||||
|
items:
|
||||||
|
type: 'string'
|
||||||
|
labels:
|
||||||
|
type: 'object'
|
||||||
|
additionalProperties: true
|
||||||
|
additionalProperties: false
|
||||||
|
---
|
||||||
|
schema: promenade/KubernetesNetwork/v1
|
||||||
|
metadata:
|
||||||
|
schema: metadata/Document/v1
|
||||||
|
name: kubernetes-network
|
||||||
|
storagePolicy: cleartext
|
||||||
|
layeringDefinition:
|
||||||
|
abstract: false
|
||||||
|
layer: site
|
||||||
|
data:
|
||||||
|
dns:
|
||||||
|
cluster_domain: cluster.local
|
||||||
|
service_ip: 10.96.0.10
|
||||||
|
bootstrap_validation_checks:
|
||||||
|
- calico-etcd.kube-system.svc.cluster.local
|
||||||
|
- google.com
|
||||||
|
- kubernetes-etcd.kube-system.svc.cluster.local
|
||||||
|
- kubernetes.default.svc.cluster.local
|
||||||
|
upstream_servers:
|
||||||
|
- 8.8.8.8
|
||||||
|
- 8.8.4.4
|
||||||
|
|
||||||
|
kubernetes:
|
||||||
|
pod_cidr: 10.97.0.0/16
|
||||||
|
service_cidr: 10.96.0.0/16
|
||||||
|
service_ip: 10.96.0.1
|
||||||
|
|
||||||
|
etcd:
|
||||||
|
service_ip: 10.96.0.2
|
||||||
|
|
||||||
|
hosts_entries:
|
||||||
|
- ip: 192.168.77.1
|
||||||
|
names:
|
||||||
|
- registry
|
||||||
|
---
|
||||||
|
schema: drydock/NetworkLink/v1
|
||||||
|
metadata:
|
||||||
|
schema: metadata/Document/v1
|
||||||
|
name: gp
|
||||||
|
storagePolicy: cleartext
|
||||||
|
labels:
|
||||||
|
application: drydock
|
||||||
|
layeringDefinition:
|
||||||
|
abstract: false
|
||||||
|
layer: site
|
||||||
|
data:
|
||||||
|
bonding:
|
||||||
|
mode: 802.3ad
|
||||||
|
hash: layer3+4
|
||||||
|
peer_rate: slow
|
||||||
|
mtu: 9000
|
||||||
|
linkspeed: auto
|
||||||
|
trunking:
|
||||||
|
mode: 802.1q
|
||||||
|
default_network: mgmt
|
||||||
|
allowed_networks:
|
||||||
|
- public
|
||||||
|
- mgmt
|
||||||
|
---
|
||||||
|
schema: deckhand/LayeringPolicy/v1
|
||||||
|
metadata:
|
||||||
|
schema: metadata/Control/v1
|
||||||
|
name: layering-policy
|
||||||
|
data:
|
||||||
|
layerOrder:
|
||||||
|
- global
|
||||||
|
- region
|
||||||
|
- site
|
||||||
|
...
|
|
@ -0,0 +1,38 @@
|
||||||
|
# Test success path for sample UCP documents
|
||||||
|
#
|
||||||
|
# 1. Purges existing data to ensure test isolation
|
||||||
|
# 2. Creates sample UCP documents and schemas
|
||||||
|
# 3. Checks that the documents pass schema validation
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
request_headers:
|
||||||
|
content-type: application/x-yaml
|
||||||
|
response_headers:
|
||||||
|
content-type: application/x-yaml
|
||||||
|
|
||||||
|
tests:
|
||||||
|
- name: purge
|
||||||
|
desc: Begin testing from known state.
|
||||||
|
DELETE: /api/v1.0/revisions
|
||||||
|
status: 204
|
||||||
|
response_headers: null
|
||||||
|
|
||||||
|
- name: initialize
|
||||||
|
desc: Add example schema
|
||||||
|
PUT: /api/v1.0/buckets/mop/documents
|
||||||
|
status: 200
|
||||||
|
data: <@resources/ucp-sample-documents.yaml
|
||||||
|
|
||||||
|
- name: verify_schema_is_valid
|
||||||
|
desc: Check schema validation of the added schema
|
||||||
|
GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/validations/deckhand-schema-validation
|
||||||
|
status: 200
|
||||||
|
response_multidoc_jsonpaths:
|
||||||
|
$.`len`: 1
|
||||||
|
$.[0].count: 5
|
||||||
|
$.[0].results[*].status:
|
||||||
|
- success
|
||||||
|
- success
|
||||||
|
- success
|
||||||
|
- success
|
||||||
|
- success
|
Loading…
Reference in New Issue