The logtools linter broke a while ago when moving to more recent Go and/or more
recent dependencies such that it stopped reporting certain issues. This was
only noticed much later when a broken log call was found in the code base which
should have been flagged as wrong by the linter.
It is possible to run upstream Go unit tests in a downstream project. This is
now done for logtools if (and only if) no explicit test targets are
selected. Because hack/tools is not part of the workspace, this only works
after changing directories. gotestsum gets invoked once for the root and this
additional directory with different result files and set of test targets.
We could add more upstream tests. etcd tests were mentioned as something where
that would be useful. However, right now upstream etcd tests have some
dependencies on being run inside the original source tree, so that would have
to be fixed first. For now only single etcd client package gets tests as
a proof-of-concept of the new support for testing vendored upstream packages.
For those, -mod=readonly is needed to avoid:
$ go test go.etcd.io/etcd/client/pkg/v3/fileutil
? go.etcd.io/etcd/client/pkg/v3/fileutil [no test files]
There was an env variable PARALLEL and a -p command line flag,
but the value then wasn't passed on to "go test".
The new default is to not set any explicit parallelism, which
matches the prior (accidental?) behavior of ignoring PARALLEL.
set -x/+x wraps setting relevant configuration variables to debug how and where
they get sets. The final gotestsum invocation gets logged in addition to being
run.
"--format standard-quiet" shows log output on stderr (= klog logging) if it
occurs outside of a test (= test has leaked something). That is inconsistent
with "go test" without -v and a problem for pull-kubernetes-unit because many
tests do not clean up properly.
"pkgname-and-test-fails" hides the extra output and seems similar enough:
pkgname-and-test-fails print a line for each package and failed test output
$ gotestsum --format pkgname-and-test-fails ./test/internal/logging --count=1
✓ test/internal/logging (5.007s)
DONE 1 tests in 5.384s
* accept GINKGO_FLAGS for test-e2e-node.sh
* Update Makefile to document LABEL_FILTER
* --label-filter part of ginkgoflags
* Update Makefile
* if label-filter then avoid skip and focus defaults
* LABEL_FILTER can be empty
* Update build/root/Makefile
Co-authored-by: Patrick Ohly <patrick.ohly@intel.com>
* skip defaults only if label-filter not set
Co-authored-by: Patrick Ohly <patrick.ohly@intel.com>
* focus and label_fiter can live together
Co-authored-by: Patrick Ohly <patrick.ohly@intel.com>
* skip and label_filter can live together
Co-authored-by: Patrick Ohly <patrick.ohly@intel.com>
---------
Co-authored-by: Patrick Ohly <patrick.ohly@intel.com>
Pruning of tests to the top-level test was added for jobs like
pull-kubernetes-unit which run many tests. For other, more focused jobs like
scheduler-perf benchmarking it would be nice to keep the more detailed
information, in particular because it includes the duration per test case.
This is a follow-up for commit beb51e1 ("make verify: run checks in
all module hack directories"). Checking only modules known to go ends
up ignoring modules which aren't dependencies, such as
./staging/src/k8s.io/code-generator/examples/hack; but the checks
should be run there too. So this finds modules by looking for go.mod
files.
Use PWD in run-checks to record failing verification scripts instead
of a hidden dependency on an externally-set variable.
Signed-off-by: Stephen Kitt <skitt@redhat.com>
Filtering the output with grep leads to hard to read log output, e.g. from
pull-kubernetes-unit:
+++ [0613 15:32:48] Running tests without code coverage and with -race
{"Time":"2024-06-13T15:33:47.845457374Z","Action":"output","Package":"k8s.io/kubernetes/cluster/gce/cos","Test":"TestCreateMasterAuditPolicy","Output":" /tmp/configure-helper-test47992121/kube-env: line 1: `}'\n"}
{"Time":"2024-06-13T15:33:49.053732803Z","Action":"output","Package":"k8s.io/kubernetes/cluster/gce/cos","Output":"ok \tk8s.io/kubernetes/cluster/gce/cos\t2.906s\n"}
We can do better than that. When feeding the output of the "go test" command(s)
into gotestsum *while it runs*, we can use --format=standard-quiet (= normal go
test output) or --format=standard-verbose (= `go test -v`) when FULL_LOG is
requested to get nicer output.
This works when testing everything at once. This was said to be not possible
when doing coverage profiling. But recent Go no longer has that limitation, so
the xargs trick gets removed. All that we need to do for coverage profiling is
to add some additional parameters and the conversion to HTML.
Remove useless admission plugin.
* It has been deprecated for years.
* All in-tree cloud providers were removed, so the admission plugin does not have
any way to get PV labels.
* There is a replacement in https://github.com/kubernetes-sigs/cloud-pv-admission-labeler
Single-stepping interactively through a test can be useful to understand what's
happening and to investigate the state at each step.
Similar support was added early to hack/ginkgo-e2e.sh, so the same env variable
is used again.
`make` is able to build project binaries, but fails with
error `hack/lib/golang.sh: line 455: go: command not found`
trying to place them if go binary is not in the PATH.
This happens because kube::golang::place_bins uses different
environment than kube::golang::build_binaries.
Setting up an one environment for both `kube::golang::place_bins`
and `kube::golang::build_binaries` should solve this issue and allow
default make target to fully work without go binary in the PATH.