Skip to content

Commit de782a3

Browse files
authored
Merge pull request kubernetes-sigs#1053 from alvaroaleman/junit
🏃 Generate junit in CI
2 parents 201e747 + 6633846 commit de782a3

32 files changed

+189
-34
lines changed

hack/test-all.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,7 @@ source $(dirname ${BASH_SOURCE})/common.sh
2121
header_text "running go test"
2222

2323
go test -race ${MOD_OPT} ./...
24+
25+
if [[ -n ${ARTIFACTS:-} ]]; then
26+
if grep -Rin '<failure type="Failure">' ${ARTIFACTS}/*; then exit 1; fi
27+
fi

pkg/builder/builder_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ import (
3838

3939
func TestBuilder(t *testing.T) {
4040
RegisterFailHandler(Fail)
41-
RunSpecsWithDefaultAndCustomReporters(t, "application Suite", []Reporter{printer.NewlineReporter{}})
41+
suiteName := "application Suite"
42+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
4243
}
4344

4445
var testenv *envtest.Environment

pkg/cache/cache_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ import (
3131

3232
func TestSource(t *testing.T) {
3333
RegisterFailHandler(Fail)
34-
RunSpecsWithDefaultAndCustomReporters(t, "Cache Suite", []Reporter{printer.NewlineReporter{}})
34+
suiteName := "Cache Suite"
35+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3536
}
3637

3738
var testenv *envtest.Environment

pkg/client/apiutil/apiutil_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ import (
3030

3131
func TestSource(t *testing.T) {
3232
RegisterFailHandler(Fail)
33-
RunSpecsWithDefaultAndCustomReporters(t, "API Utilities Test Suite", []Reporter{printer.NewlineReporter{}})
33+
suiteName := "API Utilities Test Suite"
34+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3435
}
3536

3637
var cfg *rest.Config

pkg/client/client_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ import (
3232

3333
func TestSource(t *testing.T) {
3434
RegisterFailHandler(Fail)
35-
RunSpecsWithDefaultAndCustomReporters(t, "Controller Integration Suite", []Reporter{printer.NewlineReporter{}})
35+
suiteName := "Client Suite"
36+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3637
}
3738

3839
var testenv *envtest.Environment

pkg/client/config/config_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ import (
2929

3030
func TestConfig(t *testing.T) {
3131
RegisterFailHandler(Fail)
32-
RunSpecsWithDefaultAndCustomReporters(t, "Client Config Test Suite", []Reporter{printer.NewlineReporter{}})
32+
suiteName := "Client Config Test Suite"
33+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3334
}
3435

3536
var _ = BeforeSuite(func(done Done) {

pkg/client/fake/client_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ import (
2929

3030
func TestSource(t *testing.T) {
3131
RegisterFailHandler(Fail)
32-
RunSpecsWithDefaultAndCustomReporters(t, "Controller Integration Suite", []Reporter{printer.NewlineReporter{}})
32+
suiteName := "Fake client Suite"
33+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3334
}
3435

3536
var _ = BeforeSuite(func(done Done) {

pkg/controller/controller_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ import (
3737

3838
func TestSource(t *testing.T) {
3939
RegisterFailHandler(Fail)
40-
RunSpecsWithDefaultAndCustomReporters(t, "Controller Integration Suite", []Reporter{printer.NewlineReporter{}})
40+
suiteName := "Controller Integration Suite"
41+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
4142
}
4243

4344
var testenv *envtest.Environment

pkg/controller/controllerutil/controllerutil_suite_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ import (
2525
"k8s.io/client-go/rest"
2626
"sigs.k8s.io/controller-runtime/pkg/client"
2727
"sigs.k8s.io/controller-runtime/pkg/envtest"
28+
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
2829
)
2930

3031
func TestControllerutil(t *testing.T) {
3132
RegisterFailHandler(Fail)
32-
RunSpecs(t, "Controllerutil Suite")
33+
suiteName := "Controllerutil Suite"
34+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3335
}
3436

3537
var t *envtest.Environment

pkg/envtest/envtest_suite_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@ import (
2525
admissionv1beta1 "k8s.io/api/admissionregistration/v1beta1"
2626
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2727
"k8s.io/apimachinery/pkg/runtime"
28+
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
2829
logf "sigs.k8s.io/controller-runtime/pkg/log"
2930
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3031
)
3132

3233
func TestSource(t *testing.T) {
3334
RegisterFailHandler(Fail)
34-
RunSpecsWithDefaultAndCustomReporters(t, "EnvTest Suite", []Reporter{NewlineReporter{}})
35+
suiteName := "Envtest Suite"
36+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{NewlineReporter{}, printer.NewProwReporter(suiteName)})
3537
}
3638

3739
var env *Environment

pkg/envtest/printer/prow.go

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package printer
18+
19+
import (
20+
"fmt"
21+
"os"
22+
"path/filepath"
23+
"sync"
24+
25+
"github.com/onsi/ginkgo"
26+
"github.com/onsi/ginkgo/config"
27+
"github.com/onsi/ginkgo/reporters"
28+
"github.com/onsi/ginkgo/types"
29+
30+
"k8s.io/apimachinery/pkg/util/sets"
31+
)
32+
33+
var (
34+
allRegisteredSuites = sets.String{}
35+
allRegisteredSuitesLock = &sync.Mutex{}
36+
)
37+
38+
type prowReporter struct {
39+
junitReporter *reporters.JUnitReporter
40+
}
41+
42+
// NewProwReporter returns a prowReporter that will write out junit if running in Prow and do
43+
// nothing otherwise.
44+
// WARNING: It seems this does not always properly fail the test runs when there are failures,
45+
// see https://github.com/onsi/ginkgo/issues/706
46+
// When using this you must make sure to grep for failures in your junit xmls and fail the run
47+
// if there are any.
48+
func NewProwReporter(suiteName string) ginkgo.Reporter {
49+
allRegisteredSuitesLock.Lock()
50+
if allRegisteredSuites.Has(suiteName) {
51+
panic(fmt.Sprintf("Suite named %q registered more than once", suiteName))
52+
}
53+
allRegisteredSuites.Insert(suiteName)
54+
allRegisteredSuitesLock.Unlock()
55+
56+
if os.Getenv("CI") == "" {
57+
return &prowReporter{}
58+
}
59+
artifactsDir := os.Getenv("ARTIFACTS")
60+
if artifactsDir == "" {
61+
return &prowReporter{}
62+
}
63+
64+
path := filepath.Join(artifactsDir, fmt.Sprintf("junit_%s_%d.xml", suiteName, config.GinkgoConfig.ParallelNode))
65+
return &prowReporter{
66+
junitReporter: reporters.NewJUnitReporter(path),
67+
}
68+
}
69+
70+
func (pr *prowReporter) SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) {
71+
if pr.junitReporter != nil {
72+
pr.junitReporter.SpecSuiteWillBegin(config, summary)
73+
}
74+
}
75+
76+
// BeforeSuiteDidRun implements ginkgo.Reporter
77+
func (pr *prowReporter) BeforeSuiteDidRun(setupSummary *types.SetupSummary) {
78+
if pr.junitReporter != nil {
79+
pr.junitReporter.BeforeSuiteDidRun(setupSummary)
80+
}
81+
}
82+
83+
// AfterSuiteDidRun implements ginkgo.Reporter
84+
func (pr *prowReporter) AfterSuiteDidRun(setupSummary *types.SetupSummary) {
85+
if pr.junitReporter != nil {
86+
pr.junitReporter.AfterSuiteDidRun(setupSummary)
87+
}
88+
}
89+
90+
// SpecWillRun implements ginkgo.Reporter
91+
func (pr *prowReporter) SpecWillRun(specSummary *types.SpecSummary) {
92+
if pr.junitReporter != nil {
93+
pr.junitReporter.SpecWillRun(specSummary)
94+
}
95+
}
96+
97+
// SpecDidComplete implements ginkgo.Reporter
98+
func (pr *prowReporter) SpecDidComplete(specSummary *types.SpecSummary) {
99+
if pr.junitReporter != nil {
100+
pr.junitReporter.SpecDidComplete(specSummary)
101+
}
102+
}
103+
104+
// SpecSuiteDidEnd Prints a newline between "35 Passed | 0 Failed | 0 Pending | 0 Skipped" and "--- PASS:"
105+
func (pr *prowReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
106+
if pr.junitReporter != nil {
107+
pr.junitReporter.SpecSuiteDidEnd(summary)
108+
}
109+
}

pkg/handler/eventhandler_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ import (
3030

3131
func TestEventhandler(t *testing.T) {
3232
RegisterFailHandler(Fail)
33-
RunSpecsWithDefaultAndCustomReporters(t, "Eventhandler Suite", []Reporter{printer.NewlineReporter{}})
33+
suiteName := "Eventhandler Suite"
34+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3435
}
3536

3637
var testenv *envtest.Environment

pkg/healthz/healthz_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import (
2828

2929
func TestHealthz(t *testing.T) {
3030
RegisterFailHandler(Fail)
31-
RunSpecsWithDefaultAndCustomReporters(t, "Healthz Suite", []Reporter{printer.NewlineReporter{}})
31+
suiteName := "Healthz Suite"
32+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3233
}
3334

3435
var _ = BeforeSuite(func() {

pkg/internal/controller/controller_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ import (
3131

3232
func TestSource(t *testing.T) {
3333
RegisterFailHandler(Fail)
34-
RunSpecsWithDefaultAndCustomReporters(t, "Controller Integration Suite", []Reporter{printer.NewlineReporter{}})
34+
suiteName := "Controller internal Suite"
35+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3536
}
3637

3738
var testenv *envtest.Environment

pkg/internal/recorder/recorder_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ import (
3131

3232
func TestRecorder(t *testing.T) {
3333
RegisterFailHandler(Fail)
34-
RunSpecsWithDefaultAndCustomReporters(t, "Recorder Integration Suite", []Reporter{printer.NewlineReporter{}})
34+
suiteName := "Recorder Integration Suite"
35+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3536
}
3637

3738
var testenv *envtest.Environment
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package addr_test
22

33
import (
4+
"testing"
5+
46
. "github.com/onsi/ginkgo"
57
. "github.com/onsi/gomega"
68

7-
"testing"
9+
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
810
)
911

1012
func TestAddr(t *testing.T) {
1113
t.Parallel()
1214
RegisterFailHandler(Fail)
13-
RunSpecs(t, "Addr Suite")
15+
suiteName := "Addr Suite"
16+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
1417
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package integration_test
22

33
import (
4+
"testing"
5+
46
. "github.com/onsi/ginkgo"
57
. "github.com/onsi/gomega"
68

7-
"testing"
9+
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
810
)
911

1012
func TestIntegration(t *testing.T) {
1113
t.Parallel()
1214
RegisterFailHandler(Fail)
13-
RunSpecs(t, "Integration Framework Unit Tests")
15+
suiteName := "Integration Framework Unit Tests"
16+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
1417
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package integrationtests
22

33
import (
4+
"testing"
5+
46
. "github.com/onsi/ginkgo"
57
. "github.com/onsi/gomega"
68

7-
"testing"
9+
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
810
)
911

1012
func TestIntegration(t *testing.T) {
1113
t.Parallel()
1214
RegisterFailHandler(Fail)
13-
RunSpecs(t, "Integration Framework Integration Tests")
15+
suiteName := "Integration Framework Integration Tests"
16+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
1417
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package internal_test
22

33
import (
4+
"testing"
5+
46
. "github.com/onsi/ginkgo"
57
. "github.com/onsi/gomega"
68

7-
"testing"
9+
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
810
)
911

1012
func TestInternal(t *testing.T) {
1113
t.Parallel()
1214
RegisterFailHandler(Fail)
13-
RunSpecs(t, "Internal Suite")
15+
suiteName := "Internal Suite"
16+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
1417
}

pkg/log/log_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,6 @@ import (
2626

2727
func TestSource(t *testing.T) {
2828
RegisterFailHandler(Fail)
29-
RunSpecsWithDefaultAndCustomReporters(t, "Log Suite", []Reporter{printer.NewlineReporter{}})
29+
suiteName := "Log Suite"
30+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3031
}

pkg/log/zap/zap_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,6 @@ import (
2626

2727
func TestSource(t *testing.T) {
2828
RegisterFailHandler(Fail)
29-
RunSpecsWithDefaultAndCustomReporters(t, "Zap Log Suite", []Reporter{printer.NewlineReporter{}})
29+
suiteName := "Zap Log Suite"
30+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3031
}

pkg/manager/manager_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ import (
3232

3333
func TestSource(t *testing.T) {
3434
RegisterFailHandler(Fail)
35-
RunSpecsWithDefaultAndCustomReporters(t, "Controller Integration Suite", []Reporter{printer.NewlineReporter{}})
35+
suiteName := "Manager Suite"
36+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3637
}
3738

3839
var testenv *envtest.Environment

pkg/manager/signals/signals_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ import (
2727

2828
func TestSource(t *testing.T) {
2929
RegisterFailHandler(Fail)
30-
RunSpecsWithDefaultAndCustomReporters(t, "Runtime Signal Suite", []Reporter{printer.NewlineReporter{}})
30+
suiteName := "Runtime Signal Suite"
31+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3132
}
3233

3334
var _ = BeforeSuite(func() {

pkg/predicate/predicate_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import (
2828

2929
func TestPredicate(t *testing.T) {
3030
RegisterFailHandler(Fail)
31-
RunSpecsWithDefaultAndCustomReporters(t, "Predicate Suite", []Reporter{printer.NewlineReporter{}})
31+
suiteName := "Predicate Suite"
32+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3233
}
3334

3435
var _ = BeforeSuite(func() {

pkg/reconcile/reconcile_suite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import (
2828

2929
func TestReconcile(t *testing.T) {
3030
RegisterFailHandler(Fail)
31-
RunSpecsWithDefaultAndCustomReporters(t, "reconcile Suite", []Reporter{printer.NewlineReporter{}})
31+
suiteName := "Reconcile Suite"
32+
RunSpecsWithDefaultAndCustomReporters(t, suiteName, []Reporter{printer.NewlineReporter{}, printer.NewProwReporter(suiteName)})
3233
}
3334

3435
var _ = BeforeSuite(func() {

0 commit comments

Comments
 (0)