tree: 9419790110c414c707475fde328da7c24325a115 [path history] [tgz]
  1. admission_controller/
  2. basic_scheduling/
  3. bin_packing/
  4. framework/
  5. gang_scheduling/
  6. node_resources/
  7. persistent_volume/
  8. predicates/
  9. preemption/
  10. priority_scheduling/
  11. queue_quota_mgmt/
  12. recovery_and_restart/
  13. resource_fairness/
  14. simple_preemptor/
  15. spark_jobs_scheduling/
  16. state_aware_app_scheduling/
  17. testdata/
  18. user_group_limit/
  19. README.md
  20. wrappers.go
test/e2e/README.md

End to End Testing in YuniKorn-K8shim

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 and 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 the project.

  • 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’
$ ./scripts/run-e2e-tests.sh -a install -n yktest -v kindest/node:v1.28.0
  • Launching CI tests is as simple as below.
# 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.
$ 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/
$ cd test/e2e/
$ ginkgo -r user_group_limit -v -- -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”
$ cd test/e2e/
$ ginkgo run -r -v --focus "Verify_maxapplications_with_a_specific_group_limit" \
-- -yk-namespace "yunikorn" \
-kube-config "$HOME/.kube/config"
  • Delete the cluster after we finish testing (this step is optional).
$ ./scripts/run-e2e-tests.sh -a cleanup -n yktest