How to run unit tests - oomichi/try-kubernetes GitHub Wiki
kubernetes/kubernetes 配下の unit tests のローカル実行方法を記載する。
CI環境では pull-kubernetes-bazel-test ジョブが unit tests を流す。
Call: /workspace/./test-infra/jenkins/../scenarios/kubernetes_bazel.py '--test=//... -//build/... -//vendor/...' --manual-test=//hack:verify-all --test-args=--config=unit --test-args=--build_tag_filters=-e2e,-integration --test-args=--test_tag_filters=-e2e,-integration --test-args=--flaky_test_attempts=3
https://github.com/kubernetes/community/blob/master/contributors/devel/testing.md#run-all-unit-tests に記載があった。
準備
$ wget https://dl.google.com/go/go1.11.1.linux-amd64.tar.gz
$ sudo tar -C /usr/local/ -xzf go1.11.1.linux-amd64.tar.gz
$ export PATH=$PATH:/usr/local/go/bin
$ echo "export PATH=$PATH:/usr/local/go/bin" >> $HOME/.bashrc
$ mkdir ${HOME}/go
$ echo "export GOPATH=${HOME}/go" >> ${HOME}/.bashrc
$ sudo apt-get update
$ sudo apt-get install make gcc
全 Unit Tests 実行
$ cd kubernetes
$ make test
指定実行
カバレッジ出力付き
$ make test KUBE_COVER=y WHAT=./pkg/kubectl
...
+++ [0114 22:44:47] Saving coverage output in '/tmp/k8s_coverage/4a55e0dab36e58da54f277b74e7f2598a8df8500/20190114-224447'
skipped k8s.io/kubernetes/vendor/k8s.io/code-generator/cmd/generator
skipped k8s.io/kubernetes/vendor/k8s.io/client-go/1.4/rest
ok k8s.io/kubernetes/pkg/kubectl 5.173s coverage: 37.1% of statements
staging 配下に対して実行しようとするとエラーになる
$ make test KUBE_COVER=y WHAT=./staging/src/k8s.io/apiserver/pkg/endpoints/handlers/negotiation/
...
can't load package: package k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/negotiation: code in directory /home/ubuntu/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/negotiation expects import "k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
...
下記のように必要なライブラリをインストールした後、go test で実行できた。
$ cd ~/go/src/k8s.io/apiserver/pkg/endpoints/handlers/negotiation
$ sudo apt-get install mercurial
$ go get bitbucket.org/ww/goautoneg
$ go get k8s.io/apimachinery
$ go get k8s.io/klog
$ go get github.com/google/gofuzz
$ go test
PASS
ok k8s.io/apiserver/pkg/endpoints/handlers/negotiation 0.006s
$
網羅度測定も可能
$ go test -cover
PASS
coverage: 63.3% of statements
ok k8s.io/apiserver/pkg/endpoints/handlers/negotiation 0.005s
各行の網羅度を html で出力も可能
$ go test -covermode=count -coverprofile=c.out
$ go tool cover -html=c.out -o coverage.html