RIC:1060: Change in PTL
[ric-plt/a1.git] / integration_tests / test_a1.tavern.yaml
index 8409056..f9189b4 100644 (file)
 # 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 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/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/ric/policies/test_policy
+      url: http://localhost:10000/A1-P/v2/policytypes/6660666
       method: PUT
       json:
-        {}
-      headers:
-        content-type: application/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
-      body:
-        ACK_FROM: DELAYED_TEST
-        status: SUCCESS
 
+  - 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: []
 
-test_name: test admission control
+  - 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
 
-stages:
-  - name: test the admission control policy
+  - name: test the admission control policy status get not there yet
     request:
-      url: http://localhost:10000/ric/policies/admission_control_policy
+      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: 10
+        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
-      body:
-        ACK_FROM: ADMISSION_CONTROL
-        status: SUCCESS
+      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: bad_requests
+test_name: test the delay receiver
 
 stages:
-  - name: does not exist
+
+  - 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/ric/policies/darkness
+      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
 
-  - name: bad body for admission control policy
+---
+
+test_name: test query
+
+stages:
+  - name: type not there yet
     request:
-      url: http://localhost:10000/ric/policies/admission_control_policy
+      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:
-        not: "expected"
+        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: 400
+      status_code: 202
 
-  - name: not a json
+  - name: instance 2
     request:
-      url: http://localhost:10000/ric/policies/admission_control_policy
+      url: http://localhost:10000/A1-P/v2/policytypes/1006001/policies/qt2
       method: PUT
-      data: "asdf"
+      json:
+        foo: "bar2"
+      headers:
+        content-type: application/json
     response:
-      status_code: 415
+      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
 
-  - name: bad body for test policy
+stages:
+
+  - name: put the type
     request:
-      url: http://localhost:10000/ric/policies/test_policy
+      url: http://localhost:10000/A1-P/v2/policytypes/20002
       method: PUT
       json:
-        not: "welcome"
+        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