k3s/hack/test-go.sh

161 lines
3.6 KiB
Bash
Raw Normal View History

2014-06-06 23:40:48 +00:00
#!/bin/bash
# Copyright 2014 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -e
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
source "${KUBE_ROOT}/hack/config-go.sh"
2014-06-06 23:40:48 +00:00
Move go detection and environment setup into its own function This way hack/config-go.sh can be used in environments where Go is not available, such as running release/build-release.sh for Vagrant. (The intention is to make config-go.sh a general library of helper functions and import it from most other shell scripts.) Fixes Issue #1057. Tested: - Built it and made sure it works. $ hack/build-go.sh $ output/go/bin/kubelet -version Kubernetes version 0.1+, build 0766e7a411c7-dirty - Ran unit tests. $ hack/test-go.sh ok github.com/GoogleCloudPlatform/kubernetes/examples 1.105s coverage: 0.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/api 6.188s coverage: 86.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors 1.015s coverage: 81.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver 1.806s coverage: 85.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/client 1.211s coverage: 67.2% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache 1.115s coverage: 95.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/gce 1.052s coverage: 7.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/vagrant 1.045s coverage: 76.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/constraint 1.038s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/controller 1.559s coverage: 78.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/conversion 3.440s coverage: 72.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/election 1.034s coverage: 71.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/health 1.043s coverage: 94.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/healthz 1.034s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/httplog 1.027s coverage: 82.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/kubecfg 6.081s coverage: 58.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet 1.400s coverage: 72.2% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/config 1.139s coverage: 90.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/labels 1.041s coverage: 98.7% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/master 1.033s coverage: 33.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/proxy 1.095s coverage: 86.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/proxy/config 1.038s coverage: 39.2% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/binding 1.046s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/controller 1.039s coverage: 43.6% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/endpoint 1.029s coverage: 25.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/etcd 1.110s coverage: 79.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/minion 1.048s coverage: 72.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/pod 1.052s coverage: 62.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/service 1.054s coverage: 80.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/scheduler 1.030s coverage: 90.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/service 1.363s coverage: 83.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/tools 1.136s coverage: 81.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/util 1.049s coverage: 83.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/util/config 1.036s coverage: 92.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/util/wait 1.029s coverage: 86.7% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/volume 1.032s coverage: 83.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/watch 1.040s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/scheduler 1.026s coverage: 90.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/scheduler/factory 1.075s coverage: 85.4% of statements ? github.com/GoogleCloudPlatform/kubernetes/test/integration [no test files] - Ran release/build-release.sh without go or godep in my $PATH. $ PATH=... $ which go $ which godep $ release/build-release.sh MYTEST Building release tree ~/devel/kubernetes ~/devel/kubernetes ~/devel/kubernetes Packaging release $ cat output/release/master-release/src/saltbase/pillar/common.sls instance_prefix: MYTEST-minion go_opt: -ldflags "-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitCommit '0766e7a411c7-dirty'" $ find output/release/master-release/ | wc -l 598 Signed-off-by: Filipe Brandenburger <filbranden@google.com>
2014-08-27 23:56:08 +00:00
# Go to the top of the tree.
cd "${KUBE_ROOT}"
Move go detection and environment setup into its own function This way hack/config-go.sh can be used in environments where Go is not available, such as running release/build-release.sh for Vagrant. (The intention is to make config-go.sh a general library of helper functions and import it from most other shell scripts.) Fixes Issue #1057. Tested: - Built it and made sure it works. $ hack/build-go.sh $ output/go/bin/kubelet -version Kubernetes version 0.1+, build 0766e7a411c7-dirty - Ran unit tests. $ hack/test-go.sh ok github.com/GoogleCloudPlatform/kubernetes/examples 1.105s coverage: 0.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/api 6.188s coverage: 86.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors 1.015s coverage: 81.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver 1.806s coverage: 85.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/client 1.211s coverage: 67.2% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache 1.115s coverage: 95.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/gce 1.052s coverage: 7.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/vagrant 1.045s coverage: 76.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/constraint 1.038s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/controller 1.559s coverage: 78.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/conversion 3.440s coverage: 72.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/election 1.034s coverage: 71.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/health 1.043s coverage: 94.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/healthz 1.034s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/httplog 1.027s coverage: 82.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/kubecfg 6.081s coverage: 58.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet 1.400s coverage: 72.2% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/config 1.139s coverage: 90.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/labels 1.041s coverage: 98.7% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/master 1.033s coverage: 33.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/proxy 1.095s coverage: 86.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/proxy/config 1.038s coverage: 39.2% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/binding 1.046s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/controller 1.039s coverage: 43.6% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/endpoint 1.029s coverage: 25.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/etcd 1.110s coverage: 79.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/minion 1.048s coverage: 72.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/pod 1.052s coverage: 62.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/service 1.054s coverage: 80.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/scheduler 1.030s coverage: 90.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/service 1.363s coverage: 83.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/tools 1.136s coverage: 81.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/util 1.049s coverage: 83.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/util/config 1.036s coverage: 92.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/util/wait 1.029s coverage: 86.7% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/volume 1.032s coverage: 83.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/watch 1.040s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/scheduler 1.026s coverage: 90.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/scheduler/factory 1.075s coverage: 85.4% of statements ? github.com/GoogleCloudPlatform/kubernetes/test/integration [no test files] - Ran release/build-release.sh without go or godep in my $PATH. $ PATH=... $ which go $ which godep $ release/build-release.sh MYTEST Building release tree ~/devel/kubernetes ~/devel/kubernetes ~/devel/kubernetes Packaging release $ cat output/release/master-release/src/saltbase/pillar/common.sls instance_prefix: MYTEST-minion go_opt: -ldflags "-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitCommit '0766e7a411c7-dirty'" $ find output/release/master-release/ | wc -l 598 Signed-off-by: Filipe Brandenburger <filbranden@google.com>
2014-08-27 23:56:08 +00:00
# Check for `go` binary and set ${GOPATH}.
kube::setup_go_environment
2014-06-06 23:40:48 +00:00
find_test_dirs() {
cd src/${KUBE_GO_PACKAGE}
find . -not \( \
\( \
-wholename './output' \
-o -wholename './_output' \
-o -wholename './release' \
-o -wholename './target' \
-o -wholename '*/third_party/*' \
2014-08-19 23:45:36 +00:00
-o -wholename '*/Godeps/*' \
\) -prune \
\) -name '*_test.go' -print0 | xargs -0n1 dirname | sed 's|^\./||' | sort -u
}
find_test_pkgs() {
find_test_dirs | xargs -n1 printf "${KUBE_GO_PACKAGE}/%s\n"
2014-06-06 23:40:48 +00:00
}
2014-09-09 21:04:39 +00:00
# -covermode=atomic becomes default with -race in Go >=1.3
KUBE_COVER=${KUBE_COVER:--cover -covermode=atomic}
KUBE_TIMEOUT=${KUBE_TIMEOUT:--timeout 60s}
KUBE_RACE=${KUBE_RACE:--race}
2014-06-06 23:40:48 +00:00
cd "${KUBE_TARGET}"
2014-06-09 14:16:43 +00:00
usage() {
cat << EOF
usage: $0 [OPTIONS] [TARGETS]
OPTIONS:
-i <number> : number of times to run each test, must be >= 1
EOF
}
isnum() {
[[ "$1" =~ ^[0-9]+$ ]]
}
iterations=1
while getopts "hi:" opt ; do
case $opt in
h)
usage
exit 0
;;
i)
iterations="$OPTARG"
if ! isnum "${iterations}" || [[ "${iterations}" -le 0 ]]; then
echo "$0": argument to -i must be numeric and greater than 0 >&2
usage >&2
exit 1
fi
;;
?)
usage >&2
exit 1
;;
:)
echo "Option -$OPTARG <value>" >&2
usage >&2
exit 1
;;
esac
done
shift $((OPTIND - 1))
# Use eval to preserve embedded quoted strings.
eval "goflags=(${GOFLAGS:-})"
# Filter out arguments that start with "-" and move them to goflags.
testcases=()
for arg; do
if [[ "${arg}" == -* ]]; then
goflags+=("${arg}")
else
testcases+=("${arg}")
fi
done
set -- ${testcases[@]+"${testcases[@]}"}
if [[ "${iterations}" -gt 1 ]]; then
if [[ $# -eq 0 ]]; then
set -- $(find_test_dirs)
fi
echo "Running ${iterations} times"
fails=0
for arg; do
trap 'exit 1' SIGINT
echo
pkg=${KUBE_GO_PACKAGE}/${arg}
echo "${pkg}"
# keep going, even if there are failures
pass=0
count=0
for i in $(seq 1 ${iterations}); do
if go test "${goflags[@]:+${goflags[@]}}" \
${KUBE_RACE} ${KUBE_TIMEOUT} "${pkg}"; then
pass=$((pass + 1))
else
fails=$((fails + 1))
fi
count=$((count + 1))
done 2>&1
echo "${pass}" / "${count}" passed
done
if [[ ${fails} -gt 0 ]]; then
exit 1
else
exit 0
fi
fi
if [[ -n "$1" ]]; then
covdir="/tmp/k8s_coverage/$(date "+%s")"
echo saving coverage output in "${covdir}"
for arg; do
trap 'exit 1' SIGINT
mkdir -p "${covdir}/${arg}"
pkg=${KUBE_GO_PACKAGE}/${arg}
go test "${goflags[@]:+${goflags[@]}}" \
${KUBE_RACE} \
${KUBE_TIMEOUT} \
${KUBE_COVER} -coverprofile="${covdir}/${arg}/coverage.out" \
"${pkg}"
done
2014-06-09 14:16:43 +00:00
exit 0
fi
find_test_pkgs | xargs go test "${goflags[@]:+${goflags[@]}}" \
${KUBE_RACE} \
${KUBE_TIMEOUT} \
${KUBE_COVER}