Skip to content

Commit d83aab6

Browse files
committed
[WINC-1777] Add OTE extension binary skeleton for Windows Containers tests
Add initial OTE (OpenShift Tests Extension) binary using upstream Ginkgo (github.com/onsi/ginkgo/v2 v2.22.2) without the OpenShift fork. Tests are registered as plain Go functions via et.ExtensionTestSpecs instead of BuildExtensionTestSpecsFromOpenShiftGinkgoSuite(), which requires the OpenShift Ginkgo fork's internal APIs. This keeps WMCO's go.mod clean. Changes: - cmd/windows-machine-config-operator-tests-ext/main.go: OTE binary with four suites (windows/all, windows/parallel, windows/serial, windows/storage). Specs registered manually; no OpenShift Ginkgo fork required. - test/extended/winc.go: OCP-37362 as a plain Go function returning error - test/extended/utils/cli.go: lightweight oc wrapper; AsAdmin() wired to --as=system:admin - Makefile: add build-tests-ext target with mkdir -p guard - Containerfile: add COPY test test so the OTE binary can find internal packages during Konflux hermetic build - go.mod: add openshift-tests-extension; upstream ginkgo v2.22.2 used directly, no fork replace directive Verified locally: make build-tests-ext OK ./windows-machine-config-operator-tests-ext list 1 test listed ./windows-machine-config-operator-tests-ext run-test OCP-37362 PASSED (Azure IPI, OCP 4.20, WMCO v10.20.1) Jira: WINC-1777
1 parent f3be5c1 commit d83aab6

2,804 files changed

Lines changed: 119474 additions & 121650 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Containerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ COPY cmd cmd
8888
COPY controllers controllers
8989
COPY hack hack
9090
COPY pkg pkg
91+
COPY test test
9192
RUN make build
9293
RUN make build-daemon
9394

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ build: fmt vet
103103
build-daemon:
104104
env GOOS=windows GOARCH=amd64 go build -o ${OUTPUT_DIR}/bin/windows-instance-config-daemon.exe ./cmd/daemon
105105

106+
# Build the OTE (OpenShift Tests Extension) binary for Windows Containers tests.
107+
# GO_COMPLIANCE_POLICY=exempt_all is required for test binaries per ART compliance policy.
108+
.PHONY: build-tests-ext
109+
build-tests-ext:
110+
mkdir -p ${OUTPUT_DIR}/bin
111+
GO_COMPLIANCE_POLICY="exempt_all" go build -o ${OUTPUT_DIR}/bin/windows-machine-config-operator-tests-ext \
112+
./cmd/windows-machine-config-operator-tests-ext
113+
106114
.PHONY: run
107115
run: manifests generate fmt vet ## Run a controller from your host.
108116
go run cmd/operator/main.go
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// windows-machine-config-operator-tests-ext is the OTE (OpenShift Tests Extension)
2+
// binary for Windows Containers tests. Tests are registered as plain Go functions
3+
// using upstream Ginkgo, without the OpenShift Ginkgo fork.
4+
//
5+
// References:
6+
// - OTE Integration Guide: https://github.com/openshift-eng/openshift-tests-extension
7+
package main
8+
9+
import (
10+
"context"
11+
"os"
12+
13+
otecmd "github.com/openshift-eng/openshift-tests-extension/pkg/cmd"
14+
e "github.com/openshift-eng/openshift-tests-extension/pkg/extension"
15+
et "github.com/openshift-eng/openshift-tests-extension/pkg/extension/extensiontests"
16+
"github.com/spf13/cobra"
17+
18+
"github.com/openshift/windows-machine-config-operator/test/extended"
19+
"github.com/openshift/windows-machine-config-operator/test/extended/utils"
20+
)
21+
22+
func main() {
23+
registry := e.NewRegistry()
24+
ext := e.NewExtension("openshift", "payload", "windows-machine-config-operator")
25+
26+
// All WINC tests - used for full runs and informing jobs.
27+
ext.AddSuite(e.Suite{
28+
Name: "windows/all",
29+
Qualifiers: []string{
30+
`name.contains("[sig-windows]")`,
31+
},
32+
})
33+
34+
// Parallel subset: non-Serial, non-Slow, non-Disruptive tests.
35+
ext.AddSuite(e.Suite{
36+
Name: "windows/parallel",
37+
Qualifiers: []string{
38+
`name.contains("[sig-windows]") && !name.contains("[Serial]") && !name.contains("[Slow]") && !name.contains("[Disruptive]")`,
39+
},
40+
})
41+
42+
// Serial subset: tests that must run in isolation.
43+
ext.AddSuite(e.Suite{
44+
Name: "windows/serial",
45+
Qualifiers: []string{
46+
`name.contains("[sig-windows]") && name.contains("[Serial]")`,
47+
},
48+
})
49+
50+
// Storage-specific tests.
51+
ext.AddSuite(e.Suite{
52+
Name: "windows/storage",
53+
Qualifiers: []string{
54+
`name.contains("[sig-windows]") && name.contains("storage")`,
55+
},
56+
})
57+
58+
// Register test specs manually — no OpenShift Ginkgo fork required.
59+
specs := et.ExtensionTestSpecs{
60+
{
61+
Name: "[sig-windows] Windows_Containers Author:rrasouli-Smokerun-Medium-37362-[wmco] wmco using correct golang version [OTP]",
62+
Run: func(ctx context.Context) *et.ExtensionTestResult {
63+
if err := extended.CheckWmcoGolangVersion(ctx, utils.NewCLIWithoutNamespace()); err != nil {
64+
return &et.ExtensionTestResult{Result: et.ResultFailed, Output: err.Error()}
65+
}
66+
return &et.ExtensionTestResult{Result: et.ResultPassed}
67+
},
68+
},
69+
}
70+
71+
ext.AddSpecs(specs)
72+
registry.Register(ext)
73+
74+
root := &cobra.Command{
75+
Use: "windows-machine-config-operator-tests-ext",
76+
Short: "OpenShift Windows Containers test extension (OTE)",
77+
Long: "Runs the WINC test suite as an OpenShift Tests Extension binary.",
78+
}
79+
80+
root.AddCommand(otecmd.DefaultExtensionCommands(registry)...)
81+
82+
if err := root.Execute(); err != nil {
83+
os.Exit(1)
84+
}
85+
}

go.mod

Lines changed: 69 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,20 @@
11
module github.com/openshift/windows-machine-config-operator
22

3-
go 1.24.0
4-
5-
toolchain go1.24.6
6-
7-
replace (
8-
// fix CVE-2025-30204 transitive deps still using older v4. Remove once `go mod graph` shows only 4.5.2 or higher
9-
github.com/golang-jwt/jwt/v4 => github.com/golang-jwt/jwt/v4 v4.5.2
10-
github.com/golang-jwt/jwt/v5 => github.com/golang-jwt/jwt/v5 v5.2.2
11-
)
3+
go 1.25.7
124

135
require (
146
github.com/apparentlymart/go-cidr v1.1.0
157
github.com/aws/aws-sdk-go v1.55.8
16-
github.com/coreos/ignition/v2 v2.23.0
8+
github.com/coreos/ignition/v2 v2.26.0
179
github.com/go-imports-organizer/goio v1.5.0
1810
github.com/go-logr/logr v1.4.3
19-
github.com/openshift/api v0.0.0-20260213204242-d34f11c515b3
20-
github.com/openshift/client-go v0.0.0-20260213141500-06efc6dce93b
21-
github.com/openshift/library-go v0.0.0-20260213153706-03f1709971c5
22-
github.com/operator-framework/api v0.16.0
11+
github.com/openshift-eng/openshift-tests-extension v0.0.0-20260127124016-0fed2b824818
12+
github.com/openshift/api v0.0.0-20260311132013-1d84ab4f6a62
13+
github.com/openshift/client-go v0.0.0-20260306160707-3935d929fc7d
14+
github.com/openshift/library-go v0.0.0-20260311094140-ac826d10cb40
15+
github.com/operator-framework/api v0.41.0
2316
github.com/operator-framework/operator-lib v0.4.0
24-
github.com/operator-framework/operator-lifecycle-manager v0.22.0
17+
github.com/operator-framework/operator-lifecycle-manager v0.41.0
2518
github.com/pkg/sftp v1.13.10
2619
github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.86.2
2720
github.com/prometheus-operator/prometheus-operator/pkg/client v0.86.2
@@ -31,36 +24,36 @@ require (
3124
github.com/vincent-petithory/dataurl v1.0.0
3225
go.uber.org/zap v1.27.1
3326
golang.org/x/crypto v0.48.0
34-
golang.org/x/mod v0.32.0
35-
golang.org/x/sys v0.41.0
36-
k8s.io/api v0.34.4
37-
k8s.io/apimachinery v0.34.4
38-
k8s.io/client-go v0.34.4
39-
k8s.io/cloud-provider v0.34.4
40-
k8s.io/component-base v0.34.4
41-
k8s.io/klog/v2 v2.130.1
42-
k8s.io/kubectl v0.34.4
43-
k8s.io/kubelet v0.34.4
44-
k8s.io/kubernetes v1.34.2
27+
golang.org/x/mod v0.34.0
28+
golang.org/x/sys v0.42.0
29+
k8s.io/api v0.35.2
30+
k8s.io/apimachinery v0.35.2
31+
k8s.io/client-go v0.35.2
32+
k8s.io/cloud-provider v0.35.2
33+
k8s.io/component-base v0.35.2
34+
k8s.io/klog/v2 v2.140.0
35+
k8s.io/kubectl v0.35.2
36+
k8s.io/kubelet v0.35.2
37+
k8s.io/kubernetes v1.35.2
4538
k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2
46-
sigs.k8s.io/controller-runtime v0.22.5
39+
sigs.k8s.io/controller-runtime v0.23.3
4740
sigs.k8s.io/yaml v1.6.0
4841
)
4942

5043
require (
51-
cel.dev/expr v0.24.0 // indirect
44+
cel.dev/expr v0.25.1 // indirect
5245
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
5346
github.com/MakeNowJust/heredoc v1.0.0 // indirect
5447
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
55-
github.com/aws/aws-sdk-go-v2 v1.38.2 // indirect
48+
github.com/aws/aws-sdk-go-v2 v1.41.1 // indirect
5649
github.com/beorn7/perks v1.0.1 // indirect
5750
github.com/blang/semver/v4 v4.0.0 // indirect
58-
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
51+
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
5952
github.com/cespare/xxhash/v2 v2.3.0 // indirect
6053
github.com/chai2010/gettext-go v1.0.2 // indirect
6154
github.com/coreos/go-json v0.0.0-20230131223807-18775e0fb4fb // indirect
6255
github.com/coreos/go-semver v0.3.1 // indirect
63-
github.com/coreos/go-systemd/v22 v22.5.1-0.20231103132048-7d375ecc2b09 // indirect
56+
github.com/coreos/go-systemd/v22 v22.7.0 // indirect
6457
github.com/coreos/vcontext v0.0.0-20231102161604-685dc7299dc5 // indirect
6558
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
6659
github.com/emicklei/go-restful/v3 v3.13.0 // indirect
@@ -72,91 +65,84 @@ require (
7265
github.com/go-errors/errors v1.4.2 // indirect
7366
github.com/go-logr/stdr v1.2.2 // indirect
7467
github.com/go-logr/zapr v1.3.0 // indirect
75-
github.com/go-openapi/jsonpointer v0.22.4 // indirect
76-
github.com/go-openapi/jsonreference v0.21.4 // indirect
77-
github.com/go-openapi/swag v0.25.4 // indirect
78-
github.com/go-openapi/swag/cmdutils v0.25.4 // indirect
79-
github.com/go-openapi/swag/conv v0.25.4 // indirect
80-
github.com/go-openapi/swag/fileutils v0.25.4 // indirect
81-
github.com/go-openapi/swag/jsonname v0.25.4 // indirect
82-
github.com/go-openapi/swag/jsonutils v0.25.4 // indirect
83-
github.com/go-openapi/swag/loading v0.25.4 // indirect
84-
github.com/go-openapi/swag/mangling v0.25.4 // indirect
85-
github.com/go-openapi/swag/netutils v0.25.4 // indirect
86-
github.com/go-openapi/swag/stringutils v0.25.4 // indirect
87-
github.com/go-openapi/swag/typeutils v0.25.4 // indirect
88-
github.com/go-openapi/swag/yamlutils v0.25.4 // indirect
89-
github.com/gogo/protobuf v1.3.2 // indirect
68+
github.com/go-openapi/jsonpointer v0.22.5 // indirect
69+
github.com/go-openapi/jsonreference v0.21.5 // indirect
70+
github.com/go-openapi/swag v0.25.5 // indirect
71+
github.com/go-openapi/swag/cmdutils v0.25.5 // indirect
72+
github.com/go-openapi/swag/conv v0.25.5 // indirect
73+
github.com/go-openapi/swag/fileutils v0.25.5 // indirect
74+
github.com/go-openapi/swag/jsonname v0.25.5 // indirect
75+
github.com/go-openapi/swag/jsonutils v0.25.5 // indirect
76+
github.com/go-openapi/swag/loading v0.25.5 // indirect
77+
github.com/go-openapi/swag/mangling v0.25.5 // indirect
78+
github.com/go-openapi/swag/netutils v0.25.5 // indirect
79+
github.com/go-openapi/swag/stringutils v0.25.5 // indirect
80+
github.com/go-openapi/swag/typeutils v0.25.5 // indirect
81+
github.com/go-openapi/swag/yamlutils v0.25.5 // indirect
9082
github.com/google/btree v1.1.3 // indirect
91-
github.com/google/cel-go v0.26.0 // indirect
83+
github.com/google/cel-go v0.27.0 // indirect
9284
github.com/google/gnostic-models v0.7.1 // indirect
9385
github.com/google/go-cmp v0.7.0 // indirect
9486
github.com/google/uuid v1.6.0 // indirect
95-
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
9687
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
97-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
88+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect
9889
github.com/inconshreveable/mousetrap v1.1.0 // indirect
9990
github.com/jmespath/go-jmespath v0.4.0 // indirect
10091
github.com/json-iterator/go v1.1.12 // indirect
10192
github.com/kr/fs v0.1.0 // indirect
10293
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
10394
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
104-
github.com/moby/spdystream v0.5.0 // indirect
10595
github.com/moby/term v0.5.2 // indirect
10696
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
10797
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
10898
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
10999
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
110-
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
111100
github.com/onsi/ginkgo v1.16.5 // indirect
112-
github.com/onsi/ginkgo/v2 v2.22.2 // indirect
113-
github.com/onsi/gomega v1.36.2 // indirect
114101
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
102+
github.com/pkg/errors v0.9.1 // indirect
115103
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
116104
github.com/prometheus/client_golang v1.23.2 // indirect
117105
github.com/prometheus/client_model v0.6.2 // indirect
118106
github.com/prometheus/common v0.67.5 // indirect
119-
github.com/prometheus/procfs v0.19.2 // indirect
120-
github.com/rogpeppe/go-internal v1.14.1 // indirect
107+
github.com/prometheus/procfs v0.20.1 // indirect
121108
github.com/russross/blackfriday/v2 v2.1.0 // indirect
122109
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
123-
github.com/sirupsen/logrus v1.9.3 // indirect
124-
github.com/stoewer/go-strcase v1.3.0 // indirect
110+
github.com/sirupsen/logrus v1.9.4 // indirect
125111
github.com/x448/float16 v0.8.4 // indirect
126112
github.com/xlab/treeprint v1.2.0 // indirect
127-
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
128-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
129-
go.opentelemetry.io/otel v1.36.0 // indirect
130-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
131-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
132-
go.opentelemetry.io/otel/metric v1.36.0 // indirect
133-
go.opentelemetry.io/otel/sdk v1.36.0 // indirect
134-
go.opentelemetry.io/otel/trace v1.36.0 // indirect
135-
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
113+
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
114+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect
115+
go.opentelemetry.io/otel v1.40.0 // indirect
116+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect
117+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect
118+
go.opentelemetry.io/otel/metric v1.40.0 // indirect
119+
go.opentelemetry.io/otel/sdk v1.40.0 // indirect
120+
go.opentelemetry.io/otel/trace v1.40.0 // indirect
121+
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
136122
go.uber.org/multierr v1.11.0 // indirect
137-
go.yaml.in/yaml/v2 v2.4.3 // indirect
123+
go.yaml.in/yaml/v2 v2.4.4 // indirect
138124
go.yaml.in/yaml/v3 v3.0.4 // indirect
139-
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c // indirect
140-
golang.org/x/net v0.49.0 // indirect
141-
golang.org/x/oauth2 v0.34.0 // indirect
142-
golang.org/x/sync v0.19.0 // indirect
143-
golang.org/x/term v0.40.0 // indirect
144-
golang.org/x/text v0.34.0 // indirect
145-
golang.org/x/time v0.14.0 // indirect
125+
golang.org/x/exp v0.0.0-20260112195511-716be5621a96 // indirect
126+
golang.org/x/net v0.51.0 // indirect
127+
golang.org/x/oauth2 v0.36.0 // indirect
128+
golang.org/x/sync v0.20.0 // indirect
129+
golang.org/x/term v0.41.0 // indirect
130+
golang.org/x/text v0.35.0 // indirect
131+
golang.org/x/time v0.15.0 // indirect
146132
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
147-
google.golang.org/genproto/googleapis/api v0.0.0-20250721164621-a45f3dfb1074 // indirect
148-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250721164621-a45f3dfb1074 // indirect
149-
google.golang.org/grpc v1.74.2 // indirect
133+
google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect
134+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect
135+
google.golang.org/grpc v1.79.1 // indirect
150136
google.golang.org/protobuf v1.36.11 // indirect
151137
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
152138
gopkg.in/inf.v0 v0.9.1 // indirect
153139
gopkg.in/yaml.v3 v3.0.1 // indirect
154-
k8s.io/apiextensions-apiserver v0.34.4 // indirect
155-
k8s.io/apiserver v0.34.4 // indirect
156-
k8s.io/cli-runtime v0.34.4 // indirect
157-
k8s.io/controller-manager v0.34.4 // indirect
158-
k8s.io/kube-openapi v0.0.0-20260127142750-a19766b6e2d4 // indirect
159-
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 // indirect
140+
k8s.io/apiextensions-apiserver v0.35.2 // indirect
141+
k8s.io/apiserver v0.35.2 // indirect
142+
k8s.io/cli-runtime v0.35.2 // indirect
143+
k8s.io/controller-manager v0.35.2 // indirect
144+
k8s.io/kube-openapi v0.0.0-20260304202019-5b3e3fdb0acf // indirect
145+
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0 // indirect
160146
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
161147
sigs.k8s.io/kustomize/api v0.20.1 // indirect
162148
sigs.k8s.io/kustomize/kyaml v0.20.1 // indirect

0 commit comments

Comments
 (0)