| # 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 admission control |
| |
| stages: |
| - 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/a1-p/policytypes |
| method: GET |
| response: |
| status_code: 200 |
| body: [] |
| |
| - 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 |
| body: [6660666] |
| |
| - name: instance list 200 but empty |
| request: |
| url: http://localhost:10000/a1-p/policytypes/6660666/policies |
| method: GET |
| response: |
| status_code: 200 |
| body: [] |
| |
| - 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 |
| body: |
| class: 12 |
| enforce: true |
| window_length: 20 |
| blocking_rate: 20 |
| trigger_threshold: 10 |
| |
| |
| - name: test the admission control policy status get |
| delay_before: 3 # 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: |
| instance_status: "IN EFFECT" |
| has_been_deleted: False |
| |
| - name: instance list 200 and contains the instance |
| request: |
| url: http://localhost:10000/a1-p/policytypes/6660666/policies |
| method: GET |
| response: |
| status_code: 200 |
| body: |
| - 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: 8 # 3 + 11 > 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 |
| body: |
| instance_status: "NOT IN EFFECT" |
| has_been_deleted: True |
| |
| - name: instance list 200 but no instance |
| request: |
| url: http://localhost:10000/a1-p/policytypes/6660666/policies |
| method: GET |
| response: |
| status_code: 200 |
| body: [] |
| |
| - 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 |
| body: [] |
| |
| |
| --- |
| |
| test_name: test the delay receiver |
| |
| stages: |
| |
| - 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 |
| body: [] |
| |
| - 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/a1-p/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/policytypes/20001 |
| method: GET |
| response: |
| status_code: 200 |
| body: |
| 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 |
| body: |
| - 20001 |
| |
| - name: instance list 200 but empty |
| request: |
| url: http://localhost:10000/a1-p/policytypes/20001/policies |
| method: GET |
| response: |
| status_code: 200 |
| body: [] |
| |
| - 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: |
| instance_status: "NOT IN EFFECT" |
| has_been_deleted: False |
| |
| - name: test the delay policy get |
| request: |
| url: http://localhost:10000/a1-p/policytypes/20001/policies/delaytest |
| method: GET |
| response: |
| status_code: 200 |
| body: |
| test: foo |
| |
| - name: instance list 200 and there |
| request: |
| url: http://localhost:10000/a1-p/policytypes/20001/policies |
| method: GET |
| response: |
| status_code: 200 |
| body: |
| - 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 |
| body: |
| instance_status: "IN EFFECT" |
| has_been_deleted: False |
| |
| # 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 |
| body: |
| instance_status: "IN EFFECT" |
| has_been_deleted: True |
| |
| - 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 |
| body: |
| instance_status: "NOT IN EFFECT" |
| has_been_deleted: True |
| |
| - 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: test query |
| |
| stages: |
| - name: type not there yet |
| request: |
| 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 |
| body: [] |
| |
| - 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 |
| body: [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 |
| body: |
| instance_status: "IN EFFECT" |
| has_been_deleted: False |
| |
| - 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 |
| body: |
| instance_status: "IN EFFECT" |
| has_been_deleted: False |
| |
| --- |
| |
| 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 |
| body: [] |
| |
| # 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: bad instance get bad type |
| request: |
| 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 |
| 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/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 |