From 042374198e536356e2df0d1ec187b09b34c367d6 Mon Sep 17 00:00:00 2001 From: "Lott, Christopher (cl778h)" Date: Thu, 30 Apr 2020 11:54:59 -0400 Subject: [PATCH] Upgrade integration tests to Tavern v1.0.0 Change all response checks from 'body' to 'json' and add matchers for response body entries. Signed-off-by: Lott, Christopher (cl778h) Change-Id: I0f8eabbd2d01d645ca1c6dae4d20db5bb233370a --- docs/release-notes.rst | 1 + integration_tests/portforward.sh | 6 +++- integration_tests/test_a1.tavern.yaml | 61 +++++++++++++++++++++-------------- tox-integration.ini | 9 +++--- 4 files changed, 46 insertions(+), 31 deletions(-) diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 791e912..3aa78b2 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -25,6 +25,7 @@ and this project adheres to `Semantic Versioning `__. * Add documentation of start/init parameters to _RmrLoop class * Add new environment variable USE_FAKE_SDL (`RIC-351 `_) * Respond with error if policy type ID differs from ID in object on create +* Upgrade integration tests to use Tavern version 1.0.0 [2.1.7] - 2020-04-28 diff --git a/integration_tests/portforward.sh b/integration_tests/portforward.sh index 10d19b7..17f56b7 100755 --- a/integration_tests/portforward.sh +++ b/integration_tests/portforward.sh @@ -1,4 +1,8 @@ #!/bin/bash # fail on error set -eux -kubectl port-forward $(kubectl get pods --namespace default -l "app.kubernetes.io/name=a1mediator,app.kubernetes.io/instance=a1" -o jsonpath="{.items[0].metadata.name}") 10000:10000 2>&1 > forward.log & +pod=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=a1mediator,app.kubernetes.io/instance=a1" -o jsonpath="{.items[0].metadata.name}") +# this listener must run to forward the port, it's not just a config change +# it logs a line periodically that don't add much value, capture in a file. +rm forward.log +kubectl port-forward "$pod" 10000:10000 > forward.log 2>&1 & diff --git a/integration_tests/test_a1.tavern.yaml b/integration_tests/test_a1.tavern.yaml index e33b3da..4657fcc 100644 --- a/integration_tests/test_a1.tavern.yaml +++ b/integration_tests/test_a1.tavern.yaml @@ -28,7 +28,7 @@ stages: method: GET response: status_code: 200 - body: [] + json: [] - name: instance list 404 request: @@ -92,7 +92,7 @@ stages: method: GET response: status_code: 200 - body: [6660666] + json: [6660666] - name: instance list 200 but empty request: @@ -100,7 +100,7 @@ stages: method: GET response: status_code: 200 - body: [] + json: [] - name: test the admission control policy get not there yet request: @@ -165,7 +165,7 @@ stages: method: GET response: status_code: 200 - body: + json: class: 12 enforce: true window_length: 20 @@ -179,9 +179,10 @@ stages: method: GET response: status_code: 200 - body: + json: instance_status: "IN EFFECT" has_been_deleted: False + created_at: !anyfloat - name: instance list 200 and contains the instance request: @@ -189,7 +190,7 @@ stages: method: GET response: status_code: 200 - body: + json: - admission_control_policy # DELETE the instance and make sure subsequent GETs return properly @@ -203,15 +204,17 @@ stages: - 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 + 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 - body: + json: instance_status: "NOT IN EFFECT" has_been_deleted: True + deleted_at: !anyfloat + created_at: !anyfloat - name: instance list 200 but no instance request: @@ -219,7 +222,7 @@ stages: method: GET response: status_code: 200 - body: [] + json: [] - name: cant get instance status request: @@ -262,7 +265,7 @@ stages: method: GET response: status_code: 200 - body: [] + json: [] --- @@ -284,7 +287,7 @@ stages: method: GET response: status_code: 200 - body: [] + json: [] - name: instance list 404 request: @@ -319,7 +322,7 @@ stages: method: GET response: status_code: 200 - body: + json: name: test policy description: just for testing policy_type_id: 20001 @@ -339,7 +342,7 @@ stages: method: GET response: status_code: 200 - body: + json: - 20001 - name: instance list 200 but empty @@ -348,7 +351,7 @@ stages: method: GET response: status_code: 200 - body: [] + json: [] - name: test the delay policy instance get not there yet request: @@ -390,9 +393,10 @@ stages: method: GET response: status_code: 200 - body: + json: instance_status: "NOT IN EFFECT" has_been_deleted: False + created_at: !anyfloat - name: test the delay policy get request: @@ -400,7 +404,7 @@ stages: method: GET response: status_code: 200 - body: + json: test: foo - name: instance list 200 and there @@ -409,7 +413,7 @@ stages: method: GET response: status_code: 200 - body: + json: - delaytest - name: test the delay status get @@ -420,9 +424,10 @@ stages: method: GET response: status_code: 200 - body: + 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 @@ -438,9 +443,11 @@ stages: method: GET response: status_code: 200 - body: + 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 @@ -449,9 +456,11 @@ stages: method: GET response: status_code: 200 - body: + 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 @@ -506,7 +515,7 @@ stages: method: GET response: status_code: 200 - body: [] + json: [] - name: instance 1 request: @@ -536,7 +545,7 @@ stages: method: GET response: status_code: 200 - body: [qt1, qt2] + 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 @@ -549,9 +558,10 @@ stages: method: GET response: status_code: 200 - body: + json: instance_status: "IN EFFECT" has_been_deleted: False + created_at: !anyfloat - name: test the query status get 2 max_retries: 100 @@ -561,9 +571,10 @@ stages: method: GET response: status_code: 200 - body: + json: instance_status: "IN EFFECT" has_been_deleted: False + created_at: !anyfloat --- @@ -606,7 +617,7 @@ stages: method: GET response: status_code: 200 - body: [] + json: [] # this one cant currently be deleted, see the comment in a1/data.py diff --git a/tox-integration.ini b/tox-integration.ini index c19899c..271d823 100644 --- a/tox-integration.ini +++ b/tox-integration.ini @@ -28,7 +28,7 @@ whitelist_externals= getlogs.sh passenv = * deps = - tavern == 0.34.0 # version 1.0 uses different schema; body -> json + tavern == 1.0.0 # pin the version changedir=integration_tests commands_pre= echo "WARNING: make sure you are running with latest docker builds!" @@ -51,18 +51,17 @@ commands_pre= helm install --devel a1 a1mediator helm install --devel dbaas dbaas-service kubectl get pods --namespace=default - echo "wait for pods to start" + echo "delay so pods can start" sleep 30 kubectl get pods --namespace=default echo "forward ports" ./portforward.sh - echo "wait for port forward" + echo "delay so port forward can start" sleep 5 commands= echo "running tavern via pytest" pytest --version - # --tavern-beta-new-traceback for 0.34.0; fails in 1.0.0 - pytest --tavern-beta-new-traceback test_a1.tavern.yaml + pytest test_a1.tavern.yaml echo "running apache bench (ab) on healthcheck endpoint" # use -v 4 to make ab chatty ab -n 100 -c 10 -v 0 http://localhost:10000/a1-p/healthcheck -- 2.16.6