# test_a1.tavern.yaml
+test_name: test healthcheck
+
+stages:
+ - name: test the a1 healthcheck
+ request:
+ url: http://localhost:10000/a1-p/healthcheck
+ method: GET
+ response:
+ status_code: 200
+
---
-test_name: test delayed policy
+test_name: test admission control
stages:
- - name: test the delayed policy
+ - name: type not there yet
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666
+ method: GET
+ response:
+ status_code: 404
+
+ - name: type list empty
request:
- url: http://localhost:10000/ric/policies/test_policy
+ url: http://localhost:10000/a1-p/policytypes
+ method: GET
+ response:
+ status_code: 200
+ json: []
+
+ - name: instance list 404
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies
+ method: GET
+ response:
+ status_code: 404
+
+ - name: put the type
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666
method: PUT
json:
- {}
+ name: Admission Control
+ description: various parameters to control admission of dual connection
+ policy_type_id: 6660666
+ create_schema:
+ "$schema": http://json-schema.org/draft-07/schema#
+ type: object
+ additionalProperties: false
+ properties:
+ class:
+ type: integer
+ minimum: 1
+ maximum: 256
+ description: integer id representing class to which we are applying policy
+ enforce:
+ type: boolean
+ description: Whether to enable or disable enforcement of policy on this class
+ window_length:
+ type: integer
+ minimum: 15
+ maximum: 300
+ description: Sliding window length in seconds
+ trigger_threshold:
+ type: integer
+ minimum: 1
+ blocking_rate:
+ type: number
+ minimum: 0
+ maximum: 100
+ required:
+ - class
+ - enforce
+ - window_length
+ - trigger_threshold
+ - blocking_rate
+ response:
+ status_code: 201
+
+ - name: type there now
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666
+ method: GET
+ response:
+ status_code: 200
+
+ - name: now in type list
+ request:
+ url: http://localhost:10000/a1-p/policytypes
+ method: GET
+ response:
+ status_code: 200
+ json: [6660666]
+
+ - name: instance list 200 but empty
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies
+ method: GET
+ response:
+ status_code: 200
+ json: []
+
+ - name: test the admission control policy get not there yet
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy
+ method: GET
+ response:
+ status_code: 404
+
+ - name: test the admission control policy status get not there yet
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy/status
+ method: GET
+ response:
+ status_code: 404
+
+ - name: bad body for admission control policy
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy
+ method: PUT
+ json:
+ not: "expected"
+ headers:
+ content-type: application/json
+ response:
+ status_code: 400
+
+ - name: not a json
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy
+ method: PUT
+ data: "asdf"
+ response:
+ status_code: 415
+
+ # put it properly
+ - name: put the admission control policy instance
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy
+ method: PUT
+ json:
+ class: 12
+ enforce: true
+ window_length: 20
+ blocking_rate: 20
+ trigger_threshold: 10
headers:
content-type: application/json
+ response:
+ status_code: 202
+
+ - name: cant delete type with instances
+ delay_before: 3 # wait for the type acks to come back first
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666
+ method: DELETE
+ response:
+ status_code: 400
+
+ - name: test the admission control policy get
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy
+ method: GET
+ response:
+ status_code: 200
+ json:
+ class: 12
+ enforce: true
+ window_length: 20
+ blocking_rate: 20
+ trigger_threshold: 10
+
+ - name: test the admission control policy status get
+ delay_before: 10 # give it a few seconds for rmr
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy/status
+ method: GET
response:
status_code: 200
- body:
- ACK_FROM: DELAYED_TEST
- status: SUCCESS
+ json:
+ instance_status: "IN EFFECT"
+ has_been_deleted: False
+ created_at: !anyfloat
+
+ - name: instance list 200 and contains the instance
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies
+ method: GET
+ response:
+ status_code: 200
+ json:
+ - admission_control_policy
+
+ # DELETE the instance and make sure subsequent GETs return properly
+ - name: delete the instance
+ delay_after: 4
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy
+ method: DELETE
+ response:
+ status_code: 202
+
+ - name: status should now be not in effect but still there
+ delay_before: 3 # give it a few seconds for rmr
+ delay_after: 10 # 3 + 10 > 10; that is, wait until t2 expires
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy/status
+ method: GET
+ response:
+ status_code: 200
+ json:
+ instance_status: "NOT IN EFFECT"
+ has_been_deleted: True
+ deleted_at: !anyfloat
+ created_at: !anyfloat
+
+ - name: instance list 200 but no instance
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies
+ method: GET
+ response:
+ status_code: 200
+ json: []
+
+ - name: cant get instance status
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy/status
+ method: GET
+ response:
+ status_code: 404
+
+ - name: cant get instance
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666/policies/admission_control_policy
+ method: GET
+ response:
+ status_code: 404
+
+ - name: delete ac type
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666
+ method: DELETE
+ response:
+ status_code: 204
+
+ - name: cant delete again
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666
+ method: DELETE
+ response:
+ status_code: 404
+
+ - name: cant get
+ request:
+ url: http://localhost:10000/a1-p/policytypes/6660666
+ method: DELETE
+ response:
+ status_code: 404
+
+ - name: empty type list
+ request:
+ url: http://localhost:10000/a1-p/policytypes
+ method: GET
+ response:
+ status_code: 200
+ json: []
---
-test_name: test admission control
+test_name: test the delay receiver
stages:
- - name: test the admission control policy
+
+ - name: test the delay policy type not there yet
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001
+ method: GET
+ response:
+ status_code: 404
+
+ - name: not yet in type list
+ request:
+ url: http://localhost:10000/a1-p/policytypes
+ method: GET
+ response:
+ status_code: 200
+ json: []
+
+ - name: instance list 404
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies
+ method: GET
+ response:
+ status_code: 404
+
+ - name: put the type
request:
- url: http://localhost:10000/ric/policies/control_admission_time
+ url: http://localhost:10000/a1-p/policytypes/20001
method: PUT
json:
- dc_admission_start_time: "10:00:00"
- dc_admission_end_time: "11:00:00"
+ name: test policy
+ description: just for testing
+ policy_type_id: 20001
+ create_schema:
+ "$schema": http://json-schema.org/draft-07/schema#
+ type: object
+ properties:
+ test:
+ type: string
+ required:
+ - test
+ additionalProperties: false
+ response:
+ status_code: 201
+
+ - name: type there now
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001
+ method: GET
+ response:
+ status_code: 200
+ json:
+ name: test policy
+ description: just for testing
+ policy_type_id: 20001
+ create_schema:
+ "$schema": http://json-schema.org/draft-07/schema#
+ type: object
+ properties:
+ test:
+ type: string
+ required:
+ - test
+ additionalProperties: false
+
+ - name: now in type list
+ request:
+ url: http://localhost:10000/a1-p/policytypes
+ method: GET
+ response:
+ status_code: 200
+ json:
+ - 20001
+
+ - name: instance list 200 but empty
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies
+ method: GET
+ response:
+ status_code: 200
+ json: []
+
+ - name: test the delay policy instance get not there yet
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest
+ method: GET
+ response:
+ status_code: 404
+
+ - name: test the delay policy status get not there yet
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest/status
+ method: GET
+ response:
+ status_code: 404
+
+ - name: bad body for delaytest
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest
+ method: PUT
+ json:
+ not: "welcome"
+ response:
+ status_code: 400
+
+ - name: create delay policy instance
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest
+ method: PUT
+ json:
+ test: foo
headers:
content-type: application/json
+ response:
+ status_code: 202
+
+ - name: test the delay status get, not in effect yet
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest/status
+ method: GET
response:
status_code: 200
- body:
- ACK_FROM: ADMISSION_CONTROL
- status: SUCCESS
+ json:
+ instance_status: "NOT IN EFFECT"
+ has_been_deleted: False
+ created_at: !anyfloat
+
+ - name: test the delay policy get
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest
+ method: GET
+ response:
+ status_code: 200
+ json:
+ test: foo
+
+ - name: instance list 200 and there
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies
+ method: GET
+ response:
+ status_code: 200
+ json:
+ - delaytest
+
+ - name: test the delay status get
+ max_retries: 3
+ delay_before: 6 # give it a few seconds for rmr ; delay reciever sleeps for 5 seconds by default
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest/status
+ method: GET
+ response:
+ status_code: 200
+ json:
+ instance_status: "IN EFFECT"
+ has_been_deleted: False
+ created_at: !anyfloat
+
+ # DELETE the instance and make sure subsequent GETs return properly
+ - name: delete the instance
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest
+ method: DELETE
+ response:
+ status_code: 202
+
+ - name: test the delay status get immediately
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest/status
+ method: GET
+ response:
+ status_code: 200
+ json:
+ instance_status: "IN EFFECT"
+ has_been_deleted: True
+ deleted_at: !anyfloat
+ created_at: !anyfloat
+
+ - name: test the delay status get after delay but before timers
+ delay_before: 7
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest/status
+ method: GET
+ response:
+ status_code: 200
+ json:
+ instance_status: "NOT IN EFFECT"
+ has_been_deleted: True
+ deleted_at: !anyfloat
+ created_at: !anyfloat
+
+ - name: test the delay status get after delay and after the timers
+ delay_before: 7
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest/status
+ method: GET
+ response:
+ status_code: 404
---
-test_name: bad_requests
+test_name: test query
stages:
- - name: does not exist
+ - name: type not there yet
request:
- url: http://localhost:10000/ric/policies/darkness
+ url: http://localhost:10000/a1-p/policytypes/1006001
+ method: GET
+ response:
+ status_code: 404
+
+ - name: put the type
+ request:
+ url: http://localhost:10000/a1-p/policytypes/1006001
method: PUT
json:
- {}
+ name: query test
+ description: test
+ policy_type_id: 1006001
+ create_schema:
+ "$schema": http://json-schema.org/draft-07/schema#
+ type: object
+ additionalProperties: false
+ properties:
+ foo:
+ type: string
+ required:
+ - foo
+ response:
+ status_code: 201
+
+ - name: type there now
+ request:
+ url: http://localhost:10000/a1-p/policytypes/1006001
+ method: GET
+ response:
+ status_code: 200
+
+ - name: instance list 200 but empty
+ request:
+ url: http://localhost:10000/a1-p/policytypes/1006001/policies
+ method: GET
+ response:
+ status_code: 200
+ json: []
+
+ - name: instance 1
+ request:
+ url: http://localhost:10000/a1-p/policytypes/1006001/policies/qt1
+ method: PUT
+ json:
+ foo: "bar1"
+ headers:
+ content-type: application/json
+ response:
+ status_code: 202
+
+ - name: instance 2
+ request:
+ url: http://localhost:10000/a1-p/policytypes/1006001/policies/qt2
+ method: PUT
+ json:
+ foo: "bar2"
+ headers:
+ content-type: application/json
+ response:
+ status_code: 202
+
+ - name: instance list
+ request:
+ url: http://localhost:10000/a1-p/policytypes/1006001/policies
+ method: GET
+ response:
+ status_code: 200
+ json: [qt1, qt2]
+
+ # after the query, a1 should send, query receiver should send back, and the policy should be in effect
+ # sometimes in kubernetes, this test takes a long time to work because of an k8s issue
+ # empirically we find that the si95 rmr finally "detects" failure after about 75 seconds, retries, and then works.
+ - name: test the query status get
+ max_retries: 100
+ delay_before: 1
+ request:
+ url: http://localhost:10000/a1-p/policytypes/1006001/policies/qt1/status
+ method: GET
+ response:
+ status_code: 200
+ json:
+ instance_status: "IN EFFECT"
+ has_been_deleted: False
+ created_at: !anyfloat
+
+ - name: test the query status get 2
+ max_retries: 100
+ delay_before: 1
+ request:
+ url: http://localhost:10000/a1-p/policytypes/1006001/policies/qt2/status
+ method: GET
+ response:
+ status_code: 200
+ json:
+ instance_status: "IN EFFECT"
+ has_been_deleted: False
+ created_at: !anyfloat
+
+---
+
+test_name: test bad routing file endpoint
+
+stages:
+
+ - name: put the type
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20002
+ method: PUT
+ json:
+ name: test policy
+ description: just for testing
+ policy_type_id: 20002
+ create_schema:
+ "$schema": http://json-schema.org/draft-07/schema#
+ type: object
+ properties:
+ test:
+ type: string
+ required:
+ - test
+ additionalProperties: false
+
+ - name: create policy instance that will go to a broken routing endpoint
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20002/policies/brokentest
+ method: PUT
+ json:
+ test: foo
headers:
content-type: application/json
+ response:
+ status_code: 202
+
+ - name: should be no status
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20002/policies/brokentest/status
+ method: GET
+ response:
+ status_code: 200
+ json: []
+
+ # this one cant currently be deleted, see the comment in a1/data.py
+
+---
+
+test_name: bad_requests
+
+stages:
+
+ - name: bad type get
+ request:
+ url: http://localhost:10000/a1-p/policytypes/20666
+ method: GET
response:
status_code: 404
- - name: not a json
+ - name: bad instance get bad type
request:
- url: http://localhost:10000/ric/policies/control_admission_time
+ url: http://localhost:10000/a1-p/policytypes/20666/policies/nonono
+ method: GET
+ response:
+ status_code: 404
+
+ - name: bad int range 1
+ request:
+ url: http://localhost:10000/a1-p/policytypes/0
method: PUT
- data: "asdf"
+ json:
+ name: test policy
+ description: just for testing
+ policy_type_id: 0
+ create_schema:
+ "$schema": http://json-schema.org/draft-07/schema#
+ type: object
response:
- status_code: 415
+ status_code: 400
- - name: body not expected
+ - name: bad int range 2
request:
- url: http://localhost:10000/ric/policies/test_policy
+ url: http://localhost:10000/a1-p/policytypes/2147483648
method: PUT
json:
- not: "welcome"
+ name: test policy
+ description: just for testing
+ policy_type_id: 2147483648
+ create_schema:
+ "$schema": http://json-schema.org/draft-07/schema#
+ type: object
response:
status_code: 400