From c1a31ec63e9094a8e7c10cddf5fd47f02059e183 Mon Sep 17 00:00:00 2001 From: targetoee Date: Fri, 19 Apr 2024 11:45:34 +0800 Subject: [PATCH] [YUNIKORN-2522] Move e2e test doc from k8shim to website (#420) Closes: #420 Signed-off-by: Yu-Lin Chen --- docs/developer_guide/e2e_test.md | 97 ++++++++++++++++++++++++++++++++ sidebars.js | 1 + 2 files changed, 98 insertions(+) create mode 100644 docs/developer_guide/e2e_test.md diff --git a/docs/developer_guide/e2e_test.md b/docs/developer_guide/e2e_test.md new file mode 100644 index 00000000000..99d5c6fdd64 --- /dev/null +++ b/docs/developer_guide/e2e_test.md @@ -0,0 +1,97 @@ +--- +id: e2e_test +title: End-to-End Testing +--- + + + +End-to-end (e2e) tests for YuniKorn-K8shim provide a mechanism to test end-to-end behavior of the system, and is the last signal to ensure end user operations match developer specifications. + +The primary objectives of the e2e tests are to ensure a consistent and reliable behavior of the yunikorn code base, and to catch hard-to-test bugs before users do, when unit and integration tests are insufficient. + +The e2e tests are built atop of [Ginkgo](https://onsi.github.io/ginkgo/) and [Gomega](https://github.com/onsi/gomega). There are a host of features that this Behavior-Driven Development (BDD) testing framework provides, and it is recommended that the developer read the documentation prior to diving into the tests. + +Below is the structure of e2e tests, all contained within the [yunikorn-k8shim](https://github.com/apache/yunikorn-k8shim). +* `test/e2e/` contains tests for YuniKorn Features like Scheduling, Predicates etc +* `test/e2e/framework/configManager` manages & maintains the test and cluster configuration +* `test/e2e/framework/helpers` contains utility modules for k8s client, (de)serializers, rest api client and other common libraries. +* `test/e2e/testdata` contains all the test related data like configmaps, pod specs etc + +## Pre-requisites +This project requires Go to be installed. On OS X with Homebrew you can just run `brew install go`. +OR follow this doc for deploying go https://golang.org/doc/install + +## Understanding the Command Line Arguments +* `yk-namespace` - namespace under which YuniKorn is deployed. [Required] +* `kube-config` - path to kube config file, needed for k8s client [Required] +* `yk-host` - hostname of the YuniKorn REST Server, defaults to localhost. +* `yk-port` - port number of the YuniKorn REST Server, defaults to 9080. +* `yk-scheme` - scheme of the YuniKorn REST Server, defaults to http. +* `timeout` - timeout for all tests, defaults to 24 hours + +## Launching Tests + +### Trigger through CLI +* Begin by installing a new cluster dedicated to testing, such as one named 'yktest' +```shell +./scripts/run-e2e-tests.sh -a install -n yktest -v kindest/node:v1.28.0 +``` + +* Launching CI tests is as simple as below. +```shell +# We need to add a 'kind' prefix to the argument of the run-e2e-tests.sh -n command. +kubectl config use-context kind-yktest +ginkgo -r -v ci -timeout=2h -- -yk-namespace "yunikorn" -kube-config "$HOME/.kube/config" +``` + +* Launching all the tests can be done as. +```shell +ginkgo -r -v -timeout=2h -- -yk-namespace "yunikorn" -kube-config "$HOME/.kube/config" +``` + +* Launching all the tests in specified e2e folder. +e.g. test/e2e/user_group_limit/ +```shell +cd test/e2e/ +ginkgo -r user_group_limit -v -- -yk-namespace "yunikorn" -kube-config "$HOME/.kube/config" +``` + +* Launching specified test file. +```shell +cd test/e2e/ +ginkgo run -r -v --focus-file "admission_controller_test.go" -- -yk-namespace "yunikorn" -kube-config "$HOME/.kube/config" +``` + +* Launching specified test. +e.g. Run test with ginkgo.it() spec name "Verify_maxapplications_with_a_specific_group_limit" +```shell +cd test/e2e/ +ginkgo run -r -v --focus "Verify_maxapplications_with_a_specific_group_limit" -- -yk-namespace "yunikorn" -kube-config "$HOME/.kube/config" +``` + +* Launching all the tests except specified test file. +```shell +cd test/e2e/ +ginkgo run -r -v --skip-file "admission_controller_test.go" -- -yk-namespace "yunikorn" -kube-config "$HOME/.kube/config" +``` + +* Delete the cluster after we finish testing (this step is optional). +```shell +./scripts/run-e2e-tests.sh -a cleanup -n yktest +``` \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index 6de952f713e..018de07bd04 100644 --- a/sidebars.js +++ b/sidebars.js @@ -76,6 +76,7 @@ module.exports = { 'developer_guide/deployment', 'developer_guide/openshift_development', 'developer_guide/scheduler_object_states', + 'developer_guide/e2e_test', { type: 'category', label: 'Designs',