Skip to content

Commit ff38723

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 282a862 commit ff38723

289 files changed

Lines changed: 29339 additions & 4338 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: 57 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,25 @@ module github.com/openshift/windows-machine-config-operator
22

33
go 1.25.7
44

5+
replace (
6+
// fix CVE-2025-30204 transitive deps still using older v4. Remove once `go mod graph` shows only 4.5.2 or higher
7+
github.com/golang-jwt/jwt/v4 => github.com/golang-jwt/jwt/v4 v4.5.2
8+
github.com/golang-jwt/jwt/v5 => github.com/golang-jwt/jwt/v5 v5.2.2
9+
)
10+
511
require (
612
github.com/apparentlymart/go-cidr v1.1.0
713
github.com/aws/aws-sdk-go v1.55.8
8-
github.com/coreos/ignition/v2 v2.26.0
14+
github.com/coreos/ignition/v2 v2.23.0
915
github.com/go-imports-organizer/goio v1.5.0
1016
github.com/go-logr/logr v1.4.3
17+
github.com/openshift-eng/openshift-tests-extension v0.0.0-20260127124016-0fed2b824818
1118
github.com/openshift/api v0.0.0-20260311132013-1d84ab4f6a62
1219
github.com/openshift/client-go v0.0.0-20260306160707-3935d929fc7d
1320
github.com/openshift/library-go v0.0.0-20260311094140-ac826d10cb40
1421
github.com/operator-framework/api v0.41.0
1522
github.com/operator-framework/operator-lib v0.4.0
16-
github.com/operator-framework/operator-lifecycle-manager v0.41.0
23+
github.com/operator-framework/operator-lifecycle-manager v0.22.0
1724
github.com/pkg/sftp v1.13.10
1825
github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.86.2
1926
github.com/prometheus-operator/prometheus-operator/pkg/client v0.86.2
@@ -23,19 +30,19 @@ require (
2330
github.com/vincent-petithory/dataurl v1.0.0
2431
go.uber.org/zap v1.27.1
2532
golang.org/x/crypto v0.48.0
26-
golang.org/x/mod v0.34.0
27-
golang.org/x/sys v0.42.0
28-
k8s.io/api v0.35.2
29-
k8s.io/apimachinery v0.35.2
30-
k8s.io/client-go v0.35.2
31-
k8s.io/cloud-provider v0.35.2
32-
k8s.io/component-base v0.35.2
33-
k8s.io/klog/v2 v2.140.0
34-
k8s.io/kubectl v0.35.2
35-
k8s.io/kubelet v0.35.2
36-
k8s.io/kubernetes v1.35.2
33+
golang.org/x/mod v0.32.0
34+
golang.org/x/sys v0.41.0
35+
k8s.io/api v0.35.1
36+
k8s.io/apimachinery v0.35.1
37+
k8s.io/client-go v0.35.1
38+
k8s.io/cloud-provider v0.34.4
39+
k8s.io/component-base v0.35.1
40+
k8s.io/klog/v2 v2.130.1
41+
k8s.io/kubectl v0.34.4
42+
k8s.io/kubelet v0.34.4
43+
k8s.io/kubernetes v1.34.2
3744
k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2
38-
sigs.k8s.io/controller-runtime v0.23.3
45+
sigs.k8s.io/controller-runtime v0.23.1
3946
sigs.k8s.io/yaml v1.6.0
4047
)
4148

@@ -44,15 +51,15 @@ require (
4451
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
4552
github.com/MakeNowJust/heredoc v1.0.0 // indirect
4653
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
47-
github.com/aws/aws-sdk-go-v2 v1.41.1 // indirect
54+
github.com/aws/aws-sdk-go-v2 v1.38.2 // indirect
4855
github.com/beorn7/perks v1.0.1 // indirect
4956
github.com/blang/semver/v4 v4.0.0 // indirect
5057
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
5158
github.com/cespare/xxhash/v2 v2.3.0 // indirect
5259
github.com/chai2010/gettext-go v1.0.2 // indirect
5360
github.com/coreos/go-json v0.0.0-20230131223807-18775e0fb4fb // indirect
5461
github.com/coreos/go-semver v0.3.1 // indirect
55-
github.com/coreos/go-systemd/v22 v22.7.0 // indirect
62+
github.com/coreos/go-systemd/v22 v22.5.1-0.20231103132048-7d375ecc2b09 // indirect
5663
github.com/coreos/vcontext v0.0.0-20231102161604-685dc7299dc5 // indirect
5764
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
5865
github.com/emicklei/go-restful/v3 v3.13.0 // indirect
@@ -64,25 +71,26 @@ require (
6471
github.com/go-errors/errors v1.4.2 // indirect
6572
github.com/go-logr/stdr v1.2.2 // indirect
6673
github.com/go-logr/zapr v1.3.0 // indirect
67-
github.com/go-openapi/jsonpointer v0.22.5 // indirect
68-
github.com/go-openapi/jsonreference v0.21.5 // indirect
69-
github.com/go-openapi/swag v0.25.5 // indirect
70-
github.com/go-openapi/swag/cmdutils v0.25.5 // indirect
71-
github.com/go-openapi/swag/conv v0.25.5 // indirect
72-
github.com/go-openapi/swag/fileutils v0.25.5 // indirect
73-
github.com/go-openapi/swag/jsonname v0.25.5 // indirect
74-
github.com/go-openapi/swag/jsonutils v0.25.5 // indirect
75-
github.com/go-openapi/swag/loading v0.25.5 // indirect
76-
github.com/go-openapi/swag/mangling v0.25.5 // indirect
77-
github.com/go-openapi/swag/netutils v0.25.5 // indirect
78-
github.com/go-openapi/swag/stringutils v0.25.5 // indirect
79-
github.com/go-openapi/swag/typeutils v0.25.5 // indirect
80-
github.com/go-openapi/swag/yamlutils v0.25.5 // indirect
74+
github.com/go-openapi/jsonpointer v0.22.4 // indirect
75+
github.com/go-openapi/jsonreference v0.21.4 // indirect
76+
github.com/go-openapi/swag v0.25.4 // indirect
77+
github.com/go-openapi/swag/cmdutils v0.25.4 // indirect
78+
github.com/go-openapi/swag/conv v0.25.4 // indirect
79+
github.com/go-openapi/swag/fileutils v0.25.4 // indirect
80+
github.com/go-openapi/swag/jsonname v0.25.4 // indirect
81+
github.com/go-openapi/swag/jsonutils v0.25.4 // indirect
82+
github.com/go-openapi/swag/loading v0.25.4 // indirect
83+
github.com/go-openapi/swag/mangling v0.25.4 // indirect
84+
github.com/go-openapi/swag/netutils v0.25.4 // indirect
85+
github.com/go-openapi/swag/stringutils v0.25.4 // indirect
86+
github.com/go-openapi/swag/typeutils v0.25.4 // indirect
87+
github.com/go-openapi/swag/yamlutils v0.25.4 // indirect
8188
github.com/google/btree v1.1.3 // indirect
8289
github.com/google/cel-go v0.27.0 // indirect
8390
github.com/google/gnostic-models v0.7.1 // indirect
8491
github.com/google/go-cmp v0.7.0 // indirect
8592
github.com/google/uuid v1.6.0 // indirect
93+
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
8694
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
8795
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect
8896
github.com/inconshreveable/mousetrap v1.1.0 // indirect
@@ -91,18 +99,21 @@ require (
9199
github.com/kr/fs v0.1.0 // indirect
92100
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
93101
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
102+
github.com/moby/spdystream v0.5.0 // indirect
94103
github.com/moby/term v0.5.2 // indirect
95104
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
96105
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
97106
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
98107
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
108+
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
99109
github.com/onsi/ginkgo v1.16.5 // indirect
100110
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
111+
github.com/pkg/errors v0.9.1 // indirect
101112
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
102113
github.com/prometheus/client_golang v1.23.2 // indirect
103114
github.com/prometheus/client_model v0.6.2 // indirect
104115
github.com/prometheus/common v0.67.5 // indirect
105-
github.com/prometheus/procfs v0.20.1 // indirect
116+
github.com/prometheus/procfs v0.19.2 // indirect
106117
github.com/russross/blackfriday/v2 v2.1.0 // indirect
107118
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
108119
github.com/sirupsen/logrus v1.9.4 // indirect
@@ -118,28 +129,28 @@ require (
118129
go.opentelemetry.io/otel/trace v1.40.0 // indirect
119130
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
120131
go.uber.org/multierr v1.11.0 // indirect
121-
go.yaml.in/yaml/v2 v2.4.4 // indirect
132+
go.yaml.in/yaml/v2 v2.4.3 // indirect
122133
go.yaml.in/yaml/v3 v3.0.4 // indirect
123134
golang.org/x/exp v0.0.0-20260112195511-716be5621a96 // indirect
124-
golang.org/x/net v0.51.0 // indirect
125-
golang.org/x/oauth2 v0.36.0 // indirect
126-
golang.org/x/sync v0.20.0 // indirect
127-
golang.org/x/term v0.41.0 // indirect
128-
golang.org/x/text v0.35.0 // indirect
129-
golang.org/x/time v0.15.0 // indirect
135+
golang.org/x/net v0.49.0 // indirect
136+
golang.org/x/oauth2 v0.34.0 // indirect
137+
golang.org/x/sync v0.19.0 // indirect
138+
golang.org/x/term v0.40.0 // indirect
139+
golang.org/x/text v0.34.0 // indirect
140+
golang.org/x/time v0.14.0 // indirect
130141
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
131-
google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect
132-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect
133-
google.golang.org/grpc v1.79.1 // indirect
142+
google.golang.org/genproto/googleapis/api v0.0.0-20260202165425-ce8ad4cf556b // indirect
143+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260202165425-ce8ad4cf556b // indirect
144+
google.golang.org/grpc v1.78.0 // indirect
134145
google.golang.org/protobuf v1.36.11 // indirect
135146
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
136147
gopkg.in/inf.v0 v0.9.1 // indirect
137148
gopkg.in/yaml.v3 v3.0.1 // indirect
138-
k8s.io/apiextensions-apiserver v0.35.2 // indirect
139-
k8s.io/apiserver v0.35.2 // indirect
140-
k8s.io/cli-runtime v0.35.2 // indirect
141-
k8s.io/controller-manager v0.35.2 // indirect
142-
k8s.io/kube-openapi v0.0.0-20260304202019-5b3e3fdb0acf // indirect
149+
k8s.io/apiextensions-apiserver v0.35.1 // indirect
150+
k8s.io/apiserver v0.35.1 // indirect
151+
k8s.io/cli-runtime v0.34.4 // indirect
152+
k8s.io/controller-manager v0.34.4 // indirect
153+
k8s.io/kube-openapi v0.0.0-20260127142750-a19766b6e2d4 // indirect
143154
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0 // indirect
144155
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
145156
sigs.k8s.io/kustomize/api v0.20.1 // indirect

0 commit comments

Comments
 (0)