Skip to content

Commit

Permalink
Add basic e2e test for kubectl plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
chiayi committed Aug 5, 2024
1 parent dea87ff commit 985ab02
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 1 deletion.
56 changes: 56 additions & 0 deletions .github/workflows/e2e-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,59 @@ jobs:
retention-days: 10
path: |
${{ env.KUBERAY_TEST_OUTPUT_DIR }}/**/*.log
ray-kubectl-plugin:
runs-on: ubuntu-20.04
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
submodules: recursive

- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: v1.22

- name: Set up gotestfmt
uses: gotesttools/gotestfmt-action@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Setup and start KinD cluster
uses: ./.github/workflows/actions/kind

- name: Build CLI and Add to PATH
run: |
cd ./kubectl-plugin
go mod download
go build -o kubectl-ray -a ./cmd/kubectl-ray.go
cp ./kubectl-ray /usr/local/bin
- name: Deploy Kuberay operator
id: deploy
run: |
echo Deploying Kuberay operator
cd ray-operator
IMG="${REGISTRY_ADDRESS}"/kuberay
make docker-build -e IMG="${IMG}" -e ENGINE=podman
make docker-push -e IMG="${IMG}" -e ENGINE=podman
make deploy -e IMG="${IMG}"
kubectl wait --timeout=90s --for=condition=Available=true deployment -n ray-system kuberay-operator
- name: Run e2e tests
run: |
export KUBERAY_TEST_TIMEOUT_SHORT=1m
export KUBERAY_TEST_TIMEOUT_MEDIUM=5m
export KUBERAY_TEST_TIMEOUT_LONG=10m
export KUBERAY_TEST_OUTPUT_DIR=${{ env.TEMP_DIR }}
echo "KUBERAY_TEST_OUTPUT_DIR=${KUBERAY_TEST_OUTPUT_DIR}" >> $GITHUB_ENV
set -euo pipefail
cd kubectl-plugin
go test -timeout 30m -v ./test/e2e -json 2>&1 | tee ${KUBERAY_TEST_OUTPUT_DIR}/gotest.log | gotestfmt
2 changes: 1 addition & 1 deletion kubectl-plugin/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ require (
github.com/spf13/cobra v1.8.1
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.8.4
k8s.io/api v0.30.2
k8s.io/apimachinery v0.30.2
k8s.io/cli-runtime v0.30.2
k8s.io/client-go v0.30.2
Expand Down Expand Up @@ -80,7 +81,6 @@ require (
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/api v0.30.2 // indirect
k8s.io/component-base v0.30.2 // indirect
k8s.io/klog/v2 v2.120.1 // indirect
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
Expand Down
38 changes: 38 additions & 0 deletions kubectl-plugin/test/e2e/kubectl_ray_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package e2e

import (
"os/exec"
"testing"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)

func TestKubectlRayGet(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Kubectl Ray Get")
}

var _ = Describe("Calling ray plugin `get` command", func() {
It("should succeed without error", func() {
cmd := exec.Command("kubectl", "ray", "cluster", "get")
output, err := cmd.CombinedOutput()

Expect(err).NotTo(HaveOccurred(), "%s: %s", err, output)
})

It("should not succeed", func() {
cmd := exec.Command("kubectl", "ray", "cluster", "get", "fakeclustername", "anotherfakeclustername")
output, err := cmd.CombinedOutput()

Expect(err).To(HaveOccurred())
Expect(output).ToNot(ContainElements("fakeclustername"))
})

It("will have a `namespace` and should succeed without error", func() {
cmd := exec.Command("kubectl", "ray", "cluster", "get", "--namespace", "default")
output, err := cmd.CombinedOutput()

Expect(err).NotTo(HaveOccurred(), "%s: %s", err, output)
})
})

0 comments on commit 985ab02

Please sign in to comment.