# test_a1.tavern.yaml test_name: test healthcheck stages: - name: test the a1 healthcheck request: url: http://localhost:10000/A1-P/v2/healthcheck method: GET response: status_code: 200 --- test_name: test admission control stages: - name: type not there yet request: url: http://localhost:10000/A1-P/v2/policytypes/6660666 method: GET response: status_code: 404 - name: type list empty request: url: http://localhost:10000/A1-P/v2/policytypes method: GET response: status_code: 200 json: [] - name: instance list 404 request: url: http://localhost:10000/A1-P/v2/policytypes/6660666/policies method: GET response: status_code: 404 - name: put the type request: url: http://localhost:10000/A1-P/v2/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/v2/policytypes/6660666 method: GET response: status_code: 200 - name: now in type list request: url: http://localhost:10000/A1-P/v2/policytypes method: GET response: status_code: 200 json: [6660666] - name: instance list 200 but empty request: url: http://localhost:10000/A1-P/v2/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/v2/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/v2/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/v2/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/v2/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/v2/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/v2/policytypes/6660666 method: DELETE response: status_code: 400 - name: test the admission control policy get request: url: http://localhost:10000/A1-P/v2/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/v2/policytypes/6660666/policies/admission_control_policy/status method: GET response: status_code: 200 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/v2/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/v2/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/v2/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/v2/policytypes/6660666/policies method: GET response: status_code: 200 json: [] - name: cant get instance status request: url: http://localhost:10000/A1-P/v2/policytypes/6660666/policies/admission_control_policy/status method: GET response: status_code: 404 - name: cant get instance request: url: http://localhost:10000/A1-P/v2/policytypes/6660666/policies/admission_control_policy method: GET response: status_code: 404 - name: delete ac type request: url: http://localhost:10000/A1-P/v2/policytypes/6660666 method: DELETE response: status_code: 204 - name: cant delete again request: url: http://localhost:10000/A1-P/v2/policytypes/6660666 method: DELETE response: status_code: 404 - name: cant get request: url: http://localhost:10000/A1-P/v2/policytypes/6660666 method: DELETE response: status_code: 404 - name: empty type list request: url: http://localhost:10000/A1-P/v2/policytypes method: GET response: status_code: 200 json: [] --- test_name: test the delay receiver stages: - name: test the delay policy type not there yet request: url: http://localhost:10000/A1-P/v2/policytypes/20001 method: GET response: status_code: 404 - name: not yet in type list request: url: http://localhost:10000/A1-P/v2/policytypes method: GET response: status_code: 200 json: [] - name: instance list 404 request: url: http://localhost:10000/A1-P/v2/policytypes/20001/policies method: GET response: status_code: 404 - name: put the type request: url: http://localhost:10000/A1-P/v2/policytypes/20001 method: PUT 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 response: status_code: 201 - name: type there now request: url: http://localhost:10000/A1-P/v2/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/v2/policytypes method: GET response: status_code: 200 json: - 20001 - name: instance list 200 but empty request: url: http://localhost:10000/A1-P/v2/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/v2/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/v2/policytypes/20001/policies/delaytest/status method: GET response: status_code: 404 - name: bad body for delaytest request: url: http://localhost:10000/A1-P/v2/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/v2/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/v2/policytypes/20001/policies/delaytest/status method: GET response: status_code: 200 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/v2/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/v2/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/v2/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/v2/policytypes/20001/policies/delaytest method: DELETE response: status_code: 202 - name: test the delay status get immediately request: url: http://localhost:10000/A1-P/v2/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/v2/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/v2/policytypes/20001/policies/delaytest/status method: GET response: status_code: 404 --- test_name: test query stages: - name: type not there yet request: url: http://localhost:10000/A1-P/v2/policytypes/1006001 method: GET response: status_code: 404 - name: put the type request: url: http://localhost:10000/A1-P/v2/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/v2/policytypes/1006001 method: GET response: status_code: 200 - name: instance list 200 but empty request: url: http://localhost:10000/A1-P/v2/policytypes/1006001/policies method: GET response: status_code: 200 json: [] - name: instance 1 request: url: http://localhost:10000/A1-P/v2/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/v2/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/v2/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/v2/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/v2/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/v2/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/v2/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/v2/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/v2/policytypes/20666 method: GET response: status_code: 404 - name: bad instance get bad type request: url: http://localhost:10000/A1-P/v2/policytypes/20666/policies/nonono method: GET response: status_code: 404 - name: bad int range 1 request: url: http://localhost:10000/A1-P/v2/policytypes/0 method: PUT 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: 400 - name: bad int range 2 request: url: http://localhost:10000/A1-P/v2/policytypes/2147483648 method: PUT json: 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