diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml new file mode 100644 index 00000000..cd982874 --- /dev/null +++ b/.github/workflows/e2e.yaml @@ -0,0 +1,29 @@ +name: Run tests + +on: [ push, pull_request ] + +permissions: + contents: read + +jobs: + e2e: + runs-on: ubuntu-latest + steps: + - name: Install Go + uses: actions/setup-go@v4 + with: + go-version: 1.22.6 + - name: Checkout code + uses: actions/checkout@v3 + - name: Build + run: make PREFIX=artifacts cmds + - name: install helm and kubectl + run: | + sudo snap install helm --classic + sudo snap install kubectl --classic + - name: Setup e2e + run: make setup-e2e + - name: run e2e test + run: make test-e2e + - name: teardown e2e test + run: make teardown-e2e \ No newline at end of file diff --git a/Makefile b/Makefile index d3ae9ff5..472bcd6b 100644 --- a/Makefile +++ b/Makefile @@ -113,6 +113,15 @@ generate-deepcopy: vendor output:object:dir=$(CURDIR)/api/$(VENDOR)/resource/$${api}; \ done +setup-e2e: + test/e2e/setup-e2e.sh + +test-e2e: + test/e2e/e2e.sh + +teardown-e2e: + test/e2e/teardown-e2e.sh + # Generate an image for containerized builds # Note: This image is local only .PHONY: .build-image diff --git a/test/e2e/e2e.sh b/test/e2e/e2e.sh new file mode 100755 index 00000000..e0a15660 --- /dev/null +++ b/test/e2e/e2e.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +# Copyright 2024 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Very Simple Script for testing the demo + +kubectl create -f demo/gpu-test1.yaml +kubectl create -f demo/gpu-test2.yaml +kubectl create -f demo/gpu-test3.yaml +kubectl create -f demo/gpu-test4.yaml +kubectl create -f demo/gpu-test5.yaml + +kubectl wait --for=condition=Ready -n gpu-test1 pod/pod0 --timeout=120s +kubectl wait --for=condition=Ready -n gpu-test1 pod/pod1 --timeout=120s +gpu_test_1=$(kubectl get pods -n gpu-test1 | grep -c 'Running') +if [ $gpu_test_1 != 2 ]; then + echo "gpu_test_1 $gpu_test_1 failed to match against 2 expected pods" + exit 1 +fi + + +kubectl wait --for=condition=Ready -n gpu-test2 pod/pod0 --timeout=120s +gpu_test_2=$(kubectl get pods -n gpu-test2 | grep -c 'Running') +if [ $gpu_test_2 != 1 ]; then + echo "gpu_test_2 $gpu_test_2 failed to match against 1 expected pod" + exit 1 +fi + +kubectl wait --for=condition=Ready -n gpu-test3 pod/pod0 --timeout=120s +gpu_test_3=$(kubectl get pods -n gpu-test3 | grep -c 'Running') +if [ $gpu_test_3 != 1 ]; then + echo "gpu_test_3 $gpu_test_3 failed to match against 1 expected pod" + exit 1 +fi + +kubectl wait --for=condition=Ready -n gpu-test4 pod/pod0 --timeout=120s +kubectl wait --for=condition=Ready -n gpu-test4 pod/pod1 --timeout=120s +gpu_test_4=$(kubectl get pods -n gpu-test4 | grep -c 'Running') +if [ $gpu_test_4 != 2 ]; then + echo "gpu_test_4 $gpu_test_4 failed to match against 1 expected pods" + exit 1 +fi + +kubectl wait --for=condition=Ready -n gpu-test5 pod/pod0 --timeout=120s +gpu_test_5=$(kubectl get pods -n gpu-test5 | grep -c 'Running') +if [ $gpu_test_5 != 1 ]; then + echo "gpu_test_5 $gpu_test_5 failed to match against 1 expected pod" + exit 1 +fi + +echo "test ran successfully" diff --git a/test/e2e/setup-e2e.sh b/test/e2e/setup-e2e.sh new file mode 100755 index 00000000..51ce35d1 --- /dev/null +++ b/test/e2e/setup-e2e.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# Copyright 2024 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# stop at first failure to save time +set -e + +bash demo/build-driver.sh +bash demo/create-cluster.sh +helm upgrade -i \ + --create-namespace \ + --namespace dra-example-driver \ + dra-example-driver \ + deployments/helm/dra-example-driver diff --git a/test/e2e/teardown-e2e.sh b/test/e2e/teardown-e2e.sh new file mode 100755 index 00000000..26a62b38 --- /dev/null +++ b/test/e2e/teardown-e2e.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +# Copyright 2023 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This scripts invokes `kind build image` so that the resulting +# image has a containerd with CDI support. +# +# Usage: kind-build-image.sh + +set -e + +bash demo/delete-cluster.sh