From e19a71e67c797a253f1a31c7304500db8e63bcbc Mon Sep 17 00:00:00 2001 From: Tom Chauveau Date: Fri, 9 Apr 2021 14:49:39 +0200 Subject: [PATCH] tests(stdlib): add kubernetes in testing suite tests(stdlib/kubernetes): add kubernetes basic Apply test Signed-off-by: Tom Chauveau --- tests/stdlib/kubernetes/helm/helm.cue | 40 ++++++++++++++ tests/stdlib/kubernetes/helper.cue | 76 ++++++++++++++++++++++++++ tests/stdlib/kubernetes/kubernetes.cue | 52 ++++++++++++++++++ tests/test-stdlib.sh | 2 + 4 files changed, 170 insertions(+) create mode 100644 tests/stdlib/kubernetes/helm/helm.cue create mode 100644 tests/stdlib/kubernetes/helper.cue create mode 100644 tests/stdlib/kubernetes/kubernetes.cue diff --git a/tests/stdlib/kubernetes/helm/helm.cue b/tests/stdlib/kubernetes/helm/helm.cue new file mode 100644 index 00000000..dd4fbb2c --- /dev/null +++ b/tests/stdlib/kubernetes/helm/helm.cue @@ -0,0 +1,40 @@ +package helm + +import ( + "dagger.io/kubernetes/helm" + "dagger.io/dagger" + "dagger.io/file" +) + +// We assume that a kinD cluster is running locally +// To deploy a local KinD cluster, follow this link : https://kind.sigs.k8s.io/docs/user/quick-start/ +kubeconfig: dagger.#Artifact + +// Retrive kubeconfig +config: file.#Read & { + filename: "config" + from: kubeconfig +} + +// Dagger test k8s namespace +namespace: "dagger-test" + +chartName: "test-helm" + +// Example of a `helm install` using a local chart +// Fill using: +// --input-dir helmChart.chart=./testdata/mychart +TestHelmSimpleChart: { + helm.#Chart & { + name: chartName + "namespace": namespace + kubeconfig: config.contents + chart: dagger.#Artifact + } + + verify: #VerifyHelm & { + "chartName": chartName + } +} + +result: helmApply: TestHelmSimpleChart.verify diff --git a/tests/stdlib/kubernetes/helper.cue b/tests/stdlib/kubernetes/helper.cue new file mode 100644 index 00000000..62b56ce0 --- /dev/null +++ b/tests/stdlib/kubernetes/helper.cue @@ -0,0 +1,76 @@ +package kubernetes + +import ( + "dagger.io/dagger/op" + "dagger.io/kubernetes" +) + +#VerifyApply: { + podname: string + + // Verify that pod exist + #GetPods: + """ + kubectl get pods --namespace "$KUBE_NAMESPACE" \( podname ) + """ + + // Clear that pod for future test + #DeletePods: + """ + kubectl delete pods --namespace "$KUBE_NAMESPACE" \( podname ) + """ + + #up: [ + op.#Load & { + from: kubernetes.#Kubectl + }, + + op.#WriteFile & { + dest: "/kubeconfig" + content: Config.contents + mode: 0o600 + }, + + op.#WriteFile & { + dest: "/getPods.sh" + content: #GetPods + }, + + op.#Exec & { + always: true + args: [ + "/bin/bash", + "--noprofile", + "--norc", + "-eo", + "pipefail", + "/getPods.sh", + ] + env: { + KUBECONFIG: "/kubeconfig" + KUBE_NAMESPACE: namespace + } + }, + + op.#WriteFile & { + dest: "/deletePods.sh" + content: #DeletePods + }, + + op.#Exec & { + always: true + args: [ + "/bin/bash", + "--noprofile", + "--norc", + "-eo", + "pipefail", + "/deletePods.sh", + ] + env: { + KUBECONFIG: "/kubeconfig" + KUBE_NAMESPACE: namespace + } + }, + ] +} diff --git a/tests/stdlib/kubernetes/kubernetes.cue b/tests/stdlib/kubernetes/kubernetes.cue new file mode 100644 index 00000000..baed58a6 --- /dev/null +++ b/tests/stdlib/kubernetes/kubernetes.cue @@ -0,0 +1,52 @@ +package kubernetes + +import ( + "encoding/yaml" + "dagger.io/dagger" + "dagger.io/file" + "dagger.io/kubernetes" +) + +// We assume that a kinD cluster is running locally +// To deploy a local KinD cluster, follow this link : https://kind.sigs.k8s.io/docs/user/quick-start/ +kubeconfig: dagger.#Artifact + +// Retrive kubeconfig +config: file.#Read & { + filename: "config" + from: kubeconfig +} + +// Pod uid +// Can be better if it's a random id in real test +uid: string + +kubeSrc: { + apiVersion: "v1" + kind: "Pod" + metadata: name: "kube-test-\(uid)" + spec: { + restartPolicy: "Never" + containers: [{ + name: "test" + image: "hello-world" + }] + } +} + +// Dagger test k8s namespace +namespace: "dagger-test" + +TestKubeApply: { + kubernetes.#Apply & { + kubeconfig: config.contents + "namespace": namespace + sourceInline: yaml.Marshal(kubeSrc) + } + + verify: #VerifyApply & { + podname: "kube-test-\(uid)" + } +} + +result: kubeApply: TestKubeApply.verify diff --git a/tests/test-stdlib.sh b/tests/test-stdlib.sh index dec4623a..bfb5d031 100644 --- a/tests/test-stdlib.sh +++ b/tests/test-stdlib.sh @@ -17,4 +17,6 @@ test::stdlib(){ "$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/file test::secret "$d"/stdlib/netlify/inputs.yaml "stdlib: netlify" \ "$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/netlify + test::one "stdlib:: kubernetes" \ + "$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/kubernetes --input-dir TestKubeconfig="/home/$USER/.kube" --input-string uid="dagger-id" }