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

  • Launching CI tests is as simple as below.
$ kubectl config use-context <<cluster-under-test-context>>
$ 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"