Skip to content

Verify user experience #50

Verify user experience

Verify user experience #50

name: Verify user experience
# Only runs after releasecharts.yaml or releaseassets.yaml has completed or during workflow dispatch
# Tests released charts on released image
on:
workflow_run:
workflows: ['Release charts', 'Release binaries and Docker image']
types:
- completed
workflow_dispatch:
jobs:
http:
name: HTTP performance test
runs-on: ubuntu-latest
steps:
- name: Start kind cluster
uses: helm/kind-action@v1.5.0
with:
wait: 300s
- name: Create httpbin application
run: |
kubectl create deployment httpbin --image=kennethreitz/httpbin
kubectl expose deployment httpbin --type=ClusterIP --port=80
kubectl wait --for=condition=available --timeout=60s deploy/httpbin
- name: Install controller
run: |
helm install --repo https://iter8-tools.github.io/iter8 iter8 controller --version 1.1 --set logLevel=trace
kubectl rollout status --watch --timeout=60s statefulset/iter8
- name: Start performance test
run: |
helm upgrade --install \
--repo https://iter8-tools.github.io/iter8 --version 1.1 httpbin-test iter8 \
--set "tasks={http}" \
--set http.url="http://httpbin.default/get" \
--set logLevel=trace
kubectl wait --for=condition=complete --timeout=180s job/httpbin-test-1-job
- name: Get Kubernetes status
run: |
kubectl get all
- name: View test logs and delete test
run: |
kubectl logs -l iter8.tools/test=httpbin-test
helm delete httpbin-test
- name: Expose metrics service
run: |
kubectl port-forward service/iter8 8080:8080 &
- name: Check GET /httpDashboard
run: |
curl "http://localhost:8080/httpDashboard?namespace=default&test=httpbin-test" -f
http-payload:
name: HTTP performance test with payload
runs-on: ubuntu-latest
steps:
- name: Start kind cluster
uses: helm/kind-action@v1.5.0
with:
wait: 300s
- name: Create httpbin application
run: |
kubectl create deployment httpbin --image=kennethreitz/httpbin
kubectl expose deployment httpbin --type=ClusterIP --port=80
kubectl wait --for=condition=available --timeout=60s deploy/httpbin
- name: Install controller
run: |
helm install --repo https://iter8-tools.github.io/iter8 iter8 controller --version 1.1 --set logLevel=trace
kubectl rollout status --watch --timeout=60s statefulset/iter8
- name: Start performance test
run: |
helm upgrade --install \
--repo https://iter8-tools.github.io/iter8 --version 1.1 httpbin-test iter8 \
--set "tasks={http}" \
--set http.url="http://httpbin.default/post" \
--set http.payloadStr=hello \
--set logLevel=trace
kubectl wait --for=condition=complete --timeout=180s job/httpbin-test-1-job
- name: Get Kubernetes status
run: |
kubectl get all
- name: View test logs and delete test
run: |
kubectl logs -l iter8.tools/test=httpbin-test
helm delete httpbin-test
- name: Expose metrics service
run: |
kubectl port-forward service/iter8 8080:8080 &
- name: Check GET /httpDashboard
run: |
curl "http://localhost:8080/httpDashboard?namespace=default&test=httpbin-test" -f
http-multiple:
name: HTTP performance test with multiple endpoints
runs-on: ubuntu-latest
steps:
- name: Start kind cluster
uses: helm/kind-action@v1.5.0
with:
wait: 300s
- name: Create httpbin application
run: |
kubectl create deployment httpbin --image=kennethreitz/httpbin
kubectl expose deployment httpbin --type=ClusterIP --port=80
kubectl wait --for=condition=available --timeout=60s deploy/httpbin
- name: Install controller
run: |
helm install --repo https://iter8-tools.github.io/iter8 iter8 controller --version 1.1 --set logLevel=trace
kubectl rollout status --watch --timeout=60s statefulset/iter8
- name: Start performance test
run: |
helm upgrade --install \
--repo https://iter8-tools.github.io/iter8 --version 1.1 httpbin-test iter8 \
--set "tasks={http}" \
--set http.endpoints.get.url=http://httpbin.default/get \
--set http.endpoints.getAnything.url=http://httpbin.default/anything \
--set http.endpoints.post.url=http://httpbin.default/post \
--set http.endpoints.post.payloadStr=hello \
--set logLevel=trace
kubectl wait --for=condition=complete --timeout=180s job/httpbin-test-1-job
- name: Get Kubernetes status
run: |
kubectl get all
- name: View test logs and delete test
run: |
kubectl logs -l iter8.tools/test=httpbin-test
helm delete httpbin-test
- name: Expose metrics service
run: |
kubectl port-forward service/iter8 8080:8080 &
- name: Check GET /httpDashboard
run: |
curl "http://localhost:8080/httpDashboard?namespace=default&test=httpbin-test" -f
grpc:
name: gRPC performance test
runs-on: ubuntu-latest
steps:
- name: Start kind cluster
uses: helm/kind-action@v1.5.0
with:
wait: 300s
- name: Create routeguide application
run: |
kubectl create deployment routeguide --image=golang --port=50051 \
-- bash -c "git clone -b v1.52.0 --depth 1 https://github.com/grpc/grpc-go; cd grpc-go/examples/route_guide; sed -i "''" "'"s/localhost//"'" server/server.go; go run server/server.go"
kubectl expose deployment routeguide --port=50051
kubectl wait --for=condition=available --timeout=60s deployment/routeguide
- name: Test gRPC service with grpcurl
run: |
curl -sO https://gist.githubusercontent.com/kalantar/510737f0fd58c0432a08e5b6e45ec97f/raw/524d6660284bf653ce0f29f3a25ed0e913c3df80/grpcurl-routeguide.yaml
kubectl apply -f grpcurl-routeguide.yaml
sleep 180
kubectl logs deploy/sleep
- name: Install controller
run: |
helm install --repo https://iter8-tools.github.io/iter8 iter8 controller --version 1.1 --set logLevel=trace
kubectl rollout status --watch --timeout=60s statefulset/iter8
- name: Start performance test
run: |
helm upgrade --install \
--repo https://iter8-tools.github.io/iter8 --version 1.1 routeguide-test iter8 \
--set "tasks={ready,grpc}" \
--set ready.deploy=routeguide \
--set ready.service=routeguide \
--set ready.timeout=60s \
--set grpc.host=routeguide.default:50051 \
--set grpc.protoURL=https://raw.githubusercontent.com/grpc/grpc-go/v1.52.0/examples/route_guide/routeguide/route_guide.proto \
--set grpc.call=routeguide.RouteGuide.GetFeature \
--set grpc.dataURL=https://raw.githubusercontent.com/iter8-tools/docs/v0.13.13/samples/grpc-payload/unary.json \
--set logLevel=trace
kubectl wait --for=condition=complete --timeout=180s job/routeguide-test-1-job
- name: Get Kubernetes status
run: |
kubectl get all
- name: View test logs and delete test
run: |
kubectl logs -l iter8.tools/test=routeguide-test
helm delete routeguide-test
- name: Expose metrics service
run: |
kubectl port-forward service/iter8 8080:8080 &
- name: Check GET /grpcDashboard
run: |
curl "http://localhost:8080/grpcDashboard?namespace=default&test=routeguide-test" -f
grpc-multiple:
name: gRPC performance test with multiple endpoints
runs-on: ubuntu-latest
steps:
- name: Start kind cluster
uses: helm/kind-action@v1.5.0
with:
wait: 300s
- name: Create routeguide application
run: |
kubectl create deployment routeguide --image=golang --port=50051 \
-- bash -c "git clone -b v1.52.0 --depth 1 https://github.com/grpc/grpc-go; cd grpc-go/examples/route_guide; sed -i "''" "'"s/localhost//"'" server/server.go; go run server/server.go"
kubectl expose deployment routeguide --port=50051
kubectl wait --for=condition=available --timeout=60s deployment/routeguide
- name: Test gRPC service with grpcurl
run: |
curl -sO https://gist.githubusercontent.com/kalantar/510737f0fd58c0432a08e5b6e45ec97f/raw/524d6660284bf653ce0f29f3a25ed0e913c3df80/grpcurl-routeguide.yaml
kubectl apply -f grpcurl-routeguide.yaml
sleep 180
kubectl logs deploy/sleep
- name: Install controller
run: |
helm install --repo https://iter8-tools.github.io/iter8 iter8 controller --version 1.1 --set logLevel=trace
kubectl rollout status --watch --timeout=60s statefulset/iter8
- name: Start performance test
run: |
helm upgrade --install \
--repo https://iter8-tools.github.io/iter8 --version 1.1 routeguide-test iter8 \
--set "tasks={ready,grpc}" \
--set ready.deploy=routeguide \
--set ready.service=routeguide \
--set ready.timeout=60s \
--set grpc.host=routeguide.default:50051 \
--set grpc.protoURL=https://raw.githubusercontent.com/grpc/grpc-go/v1.52.0/examples/route_guide/routeguide/route_guide.proto \
--set grpc.endpoints.getFeature.call=routeguide.RouteGuide.GetFeature \
--set grpc.endpoints.getFeature.dataURL=https://raw.githubusercontent.com/iter8-tools/docs/v0.13.13/samples/grpc-payload/unary.json \
--set grpc.endpoints.listFeatures.call=routeguide.RouteGuide.ListFeatures \
--set grpc.endpoints.listFeatures.dataURL=https://raw.githubusercontent.com/iter8-tools/docs/v0.13.13/samples/grpc-payload/server.json \
--set logLevel=trace
kubectl wait --for=condition=complete --timeout=180s job/routeguide-test-1-job
- name: Get Kubernetes status
run: |
kubectl get all
- name: View test logs and delete test
run: |
kubectl logs -l iter8.tools/test=routeguide-test
helm delete routeguide-test
- name: Expose metrics service
run: |
kubectl port-forward service/iter8 8080:8080 &
- name: Check GET /grpcDashboard
run: |
curl "http://localhost:8080/grpcDashboard?namespace=default&test=routeguide-test" -f
grpc2:
name: gRPC performance test 2
runs-on: ubuntu-latest
steps:
- name: Start kind cluster
uses: helm/kind-action@v1.5.0
with:
wait: 300s
- name: Create hello application
run: |
kubectl create deploy hello --image=docker.io/grpc/java-example-hostname:latest --port=50051
kubectl expose deploy hello --port=50051
kubectl wait --for=condition=available --timeout=60s deploy/hello
- name: Install controller
run: |
helm install --repo https://iter8-tools.github.io/iter8 iter8 controller --version 1.1 --set logLevel=trace
kubectl rollout status --watch --timeout=60s statefulset/iter8
- name: Start performance test
run: |
helm upgrade --install \
--repo https://iter8-tools.github.io/iter8 --version 1.1 hello-test iter8 \
--set "tasks={grpc}" \
--set grpc.host="hello.default:50051" \
--set grpc.call="helloworld.Greeter.SayHello" \
--set grpc.protoURL="https://raw.githubusercontent.com/grpc/grpc-go/master/examples/helloworld/helloworld/helloworld.proto" \
--set logLevel=trace
kubectl wait --for=condition=complete --timeout=180s job/hello-test-1-job
- name: Get Kubernetes status
run: |
kubectl get all
- name: View test logs and delete test
run: |
kubectl logs -l iter8.tools/test=hello-test
helm delete hello-test
- name: Expose metrics service
run: |
kubectl port-forward service/iter8 8080:8080 &
- name: Check GET /grpcDashboard
run: |
curl "http://localhost:8080/grpcDashboard?namespace=default&test=hello-test" -f
readiness:
name: Readiness test
runs-on: ubuntu-latest
steps:
- name: Start kind cluster
uses: helm/kind-action@v1.5.0
with:
wait: 300s
# Install controller before httpbin so that the rollout of controller does not give time for httpbin to start
# allowing ready task to be tested
- name: Install controller
run: |
helm install --repo https://iter8-tools.github.io/iter8 iter8 controller --version 1.1 --set logLevel=trace
kubectl rollout status --watch --timeout=60s statefulset/iter8
- name: Create httpbin application
run: |
kubectl create deploy httpbin --image=kennethreitz/httpbin --port=80
kubectl expose deploy httpbin --port=80
# No kubectl wait so ready task can check
- name: k launch with readiness checks
run: |
helm upgrade --install \
--repo https://iter8-tools.github.io/iter8 --version 1.1 httpbin-test iter8 \
--set "tasks={ready,http}" \
--set ready.deploy="httpbin" \
--set ready.service="httpbin" \
--set ready.timeout=60s \
--set http.url=http://httpbin.default/get \
--set logLevel=trace
kubectl wait --for=condition=complete --timeout=180s job/httpbin-test-1-job
- name: Get Kubernetes status
run: |
kubectl get all
- name: View test logs and delete test
run: |
kubectl logs -l iter8.tools/test=httpbin-test
helm delete httpbin-test
- name: Expose metrics service
run: |
kubectl port-forward service/iter8 8080:8080 &
- name: Check GET /httpDashboard
run: |
curl "http://localhost:8080/httpDashboard?namespace=default&test=httpbin-test" -f
readiness-with-namespace:
name: Readiness test with namespace
runs-on: ubuntu-latest
steps:
- name: Start kind cluster
uses: helm/kind-action@v1.5.0
with:
wait: 300s
# Install controller before httpbin so that the rollout of controller does not give time for httpbin to start
# allowing ready task to be tested
- name: Install controller
run: |
helm install --repo https://iter8-tools.github.io/iter8 iter8 controller --version 1.1 --set logLevel=trace
kubectl rollout status --watch --timeout=60s statefulset/iter8
- name: Create httpbin application
run: |
kubectl create deploy httpbin --image=kennethreitz/httpbin --port=80
kubectl expose deploy httpbin --port=80
# No kubectl wait so ready task can check
- name: Create experiments namespace
run: |
kubectl create namespace experiments
- name: k launch with readiness checks and namespace
run: |
helm upgrade --install -n experiments \
--repo https://iter8-tools.github.io/iter8 --version 1.1 httpbin-test iter8 \
--set "tasks={ready,http}" \
--set ready.deploy="httpbin" \
--set ready.service="httpbin" \
--set ready.timeout=60s \
--set ready.namespace=default \
--set http.url=http://httpbin.default/get \
--set logLevel=trace
kubectl wait --for=condition=complete --timeout=180s -n experiments job/httpbin-test-1-job
- name: Get Kubernetes status
run: |
kubectl get all --all-namespaces
- name: View test logs and delete test
run: |
kubectl -n experiments logs -l iter8.tools/test=httpbin-test
helm delete httpbin-test -n experiments
- name: Expose metrics service
run: |
kubectl port-forward service/iter8 8080:8080 &
- name: Check GET /httpDashboard
run: |
curl "http://localhost:8080/httpDashboard?namespace=experiments&test=httpbin-test" -f