-
Notifications
You must be signed in to change notification settings - Fork 105
[WIP]Refactor test/extended to use OpenShift Tests Extension (OTE) framework #568
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: wangke19 The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
WalkthroughAdds a new tests-extension module under test/tests-extension with build, run, and metadata Makefile targets; updates root Makefile to delegate tests-extension targets; adds a Ginkgo test suite validating openshift-apiserver resources; introduces module files, metadata JSON and .gitignore; removes a legacy test file. Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (3)
test/tests-extension/Makefile (2)
17-17: Consider using $(CURDIR) for better portability.Using
$(shell pwd)can have issues in certain build environments.$(CURDIR)is a built-in Make variable that's more reliable.Apply this diff:
-METADATA := $(shell pwd)/.openshift-tests-extension/openshift_payload_openshift-apiserver.json +METADATA := $(CURDIR)/.openshift-tests-extension/openshift_payload_openshift-apiserver.json
43-43: Timestamp in filename may complicate artifact management.The JUnit filename includes a timestamp which creates unique files on each run. This could make it harder to track or overwrite results in CI systems that expect consistent filenames.
Consider using a fixed filename or making the timestamp optional:
- $(TOOLS_BIN_DIR)/openshift-apiserver-tests-ext run-suite $(SUITE) -j $(ARTIFACT_DIR)/junit_$(shell date +%Y%m%d-%H%M%S).xml + $(TOOLS_BIN_DIR)/openshift-apiserver-tests-ext run-suite $(SUITE) -j $(ARTIFACT_DIR)/junit.xmltest/tests-extension/README.md (1)
64-65: Minor: Markdown list indentation.The static analysis tool flagged inconsistent indentation in the unordered list (4 spaces instead of 2). While this doesn't affect functionality, fixing it would improve markdown consistency.
Apply this diff:
- Before committing your changes: - - Run `make build-update` - - Run `make verify` to check formatting, linting, and validation + - Run `make build-update` + - Run `make verify` to check formatting, linting, and validation
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting
⛔ Files ignored due to path filters (1)
test/tests-extension/go.sumis excluded by!**/*.sum
📒 Files selected for processing (9)
.openshift-tests-extension/openshift_payload_openshift-apiserver.json(1 hunks)Makefile(2 hunks)test/extended/main.go(0 hunks)test/tests-extension/.gitignore(1 hunks)test/tests-extension/Makefile(1 hunks)test/tests-extension/README.md(7 hunks)test/tests-extension/cmd/main.go(1 hunks)test/tests-extension/go.mod(1 hunks)test/tests-extension/test/openshift_apiserver.go(1 hunks)
💤 Files with no reviewable changes (1)
- test/extended/main.go
🧰 Additional context used
🪛 checkmake (0.2.2)
Makefile
[warning] 106-106: Missing required phony target "test"
(minphony)
test/tests-extension/Makefile
[warning] 135-135: Missing required phony target "all"
(minphony)
[warning] 135-135: Missing required phony target "test"
(minphony)
🪛 markdownlint-cli2 (0.18.1)
test/tests-extension/README.md
64-64: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
65-65: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
🔇 Additional comments (19)
.openshift-tests-extension/openshift_payload_openshift-apiserver.json (1)
1-1: LGTM! Empty metadata payload is expected.The empty JSON array serves as the initial state before running metadata generation via
make build-update. This will be populated with test metadata when the build process runs.test/tests-extension/Makefile (2)
19-22: Well-structured help system.The help target with AWK-based extraction from inline comments is a clean pattern that makes the Makefile self-documenting.
83-112: Excellent documentation for test management.The inline comments explaining TestID uniqueness, test renaming workflow, and test deletion procedures are comprehensive and will help maintainers understand the metadata management system.
test/tests-extension/.gitignore (1)
1-38: LGTM! Comprehensive gitignore patterns.The ignore patterns appropriately cover build artifacts, IDE files, and OS-specific files for the test extension project.
Makefile (3)
17-17: LGTM! Package path updated correctly.The TESTS_EXT_PACKAGE path has been updated to match the new test extension structure under
test/tests-extension/cmd.
74-96: Clean delegation pattern to test extension Makefile.The new targets properly delegate to the test extension's Makefile while maintaining a consistent interface at the root level.
99-106: Proper integration with main build lifecycle.The integration of test extension targets into the main
all,clean, andverifytargets ensures the test extension is built and verified as part of the standard workflow.test/tests-extension/go.mod (2)
68-68: Replace directive for Ginkgo fork is appropriate.The replace directive pointing to the OpenShift fork of Ginkgo is a standard pattern in OpenShift projects for maintaining compatibility with OCP-specific test infrastructure.
3-3: Go 1.24.0 is available and supported.Go 1.24.0 was released before the current latest stable version (Go 1.25.3, released October 13, 2025), confirming it is a valid, available, and supported version for your build environment. No action required.
test/tests-extension/cmd/main.go (5)
26-60: Well-structured test suite hierarchy.The extension and suite definitions are clean and follow a logical structure:
- Parallel conformance suite for fast, concurrent tests
- Serial conformance suite for order-dependent tests
- Optional slow suite for long-running tests
- All suite as a catch-all
The use of qualifiers with name-based filtering is appropriate for this test organization.
68-76: Good practice: Ensuring disruptive tests are serial.Automatically labeling
[Disruptive]tests as[Serial]prevents concurrent execution of tests that could interfere with each other, improving test reliability.
79-88: Correct implementation of test name preservation.The logic to restore
OriginalNamefrom labels prefixed withoriginal-name:correctly handles test renaming while maintaining TestID stability, which is crucial for CI/CD tracking.
91-93: Empty placeholder is acceptable for initial implementation.The
IgnoreObsoleteTestsfunction is currently empty with a comment placeholder. This is fine for the initial implementation and can be populated as tests are deprecated.
96-98: Empty BeforeAll hook is acceptable.The empty
BeforeAllhook with a "do stuff" comment serves as a placeholder for future initialization logic. This is acceptable for the initial scaffold.test/tests-extension/README.md (2)
1-26: Comprehensive documentation for local testing.The README provides clear instructions for building, listing, and running tests locally with practical examples. The command table is especially helpful for quick reference.
67-102: Excellent guidance for test maintenance.The documentation for renaming and deleting tests is thorough, including:
- Step-by-step workflows
- Code examples
- Important warnings about Sippy integration
- References to related tracking issues
This will help maintainers avoid breaking test tracking systems.
test/tests-extension/test/openshift_apiserver.go (3)
23-44: Well-designed configuration fallback logic.The helper functions properly prioritize
KUBECONFIGenvironment variable while falling back to in-cluster configuration. This supports both local development and CI environments.
49-65: Good use of Eventually for async readiness checks.The deployment test properly uses
Eventuallywith 2-minute timeout and 10-second polling to wait for resources to become available. The subsequent synchronous checks verify the final state.
46-134: Comprehensive test coverage for API Server components.The test suite covers all critical API Server resources:
- Deployment availability and readiness
- Pod health and count
- Service configuration
- Endpoint availability
- ConfigMap presence
- Secret existence
All tests are appropriately tagged for parallel execution, which will help with CI performance.
This commit refactors the openshift-apiserver extended tests to use the modern OpenShift Tests Extension (OTE) framework, following the pattern established in the service-ca-operator repository. Changes: - Migrate from test/extended/ to test/tests-extension/ directory structure - Implement OTE framework integration in cmd/main.go - Add comprehensive test coverage for openshift-apiserver components: * Deployment status and health checks * Pod running state validation * Service and endpoints verification * ConfigMap and Secret validation - Create proper Go module (go.mod/go.sum) for tests-extension - Add Makefile with build, test, and metadata management targets - Update main Makefile to include tests-extension targets - Add .gitignore and comprehensive README.md documentation - Generate test metadata for CI/CD pipeline integration Test suites available: - openshift/openshift-apiserver/all - openshift/openshift-apiserver/conformance/parallel - openshift/openshift-apiserver/conformance/serial - openshift/openshift-apiserver/optional/slow This refactoring modernizes the test infrastructure while maintaining backward compatibility and adding enhanced test coverage for the openshift-apiserver component. Resolves: Refactor test/extended to OTE framework
4378780 to
daabf23
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (1)
test/tests-extension/test/openshift_apiserver.go (1)
62-65: Guard against nil Spec.Replicas before dereferencing.Spec.Replicas is a pointer; dereferencing without a check risks a panic if defaulting didn’t set it.
Apply this diff:
- o.Expect(apiserverDeployment.Status.UpdatedReplicas).To(o.Equal(*apiserverDeployment.Spec.Replicas)) + desired := int32(1) // Deployment defaults to 1 replica if nil + if apiserverDeployment.Spec.Replicas != nil { + desired = *apiserverDeployment.Spec.Replicas + } + o.Expect(apiserverDeployment.Status.UpdatedReplicas).To(o.Equal(desired))
🧹 Nitpick comments (15)
test/tests-extension/test/openshift_apiserver.go (5)
82-85: Avoid flakiness: wait until all pods are Running.The prior Eventually only guarantees pods exist, not that they’re Running. Add an Eventually that waits for all pods to reach Running.
- for _, pod := range pods.Items { - o.Expect(pod.Status.Phase).To(o.Equal(corev1.PodRunning)) - } + o.Eventually(func() bool { + // Re-list to avoid stale state + cur, err := client.CoreV1().Pods(operatorNamespace).List(context.Background(), metav1.ListOptions{ + LabelSelector: "app=openshift-apiserver", + }) + if err != nil || len(cur.Items) == 0 { + return false + } + for _, p := range cur.Items { + if p.Status.Phase != corev1.PodRunning { + return false + } + } + return true + }).WithTimeout(2 * time.Minute).WithPolling(10 * time.Second).Should(o.BeTrue())
105-110: Don’t assume Subsets[0]; assert at least one address across all subsets.Indexing the first subset can be brittle. Sum addresses across subsets instead.
- gomega.Expect(len(endpoints.Subsets)).To(o.BeNumerically(">", 0)) - gomega.Expect(len(endpoints.Subsets[0].Addresses)).To(o.BeNumerically(">", 0)) + gomega.Expect(len(endpoints.Subsets)).To(o.BeNumerically(">", 0)) + total := 0 + for _, ss := range endpoints.Subsets { + total += len(ss.Addresses) + } + gomega.Expect(total).To(o.BeNumerically(">", 0))
33-44: Fail fast when KUBECONFIG is set but invalid.Silently falling back to in-cluster config hides misconfiguration. If KUBECONFIG is provided, return its error; only fall back when it’s not set.
func getKubeConfig() (*rest.Config, error) { // First try to use kubeconfig file if kubeconfig := os.Getenv("KUBECONFIG"); kubeconfig != "" { - config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) - if err == nil { - return config, nil - } + config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) + if err != nil { + return nil, fmt.Errorf("failed to build rest.Config from KUBECONFIG=%q: %w", kubeconfig, err) + } + return config, nil } // Fall back to in-cluster config return rest.InClusterConfig() }Add the missing import:
import ( "fmt" // existing imports… )
47-47: Remove unnecessary GinkgoRecover.GinkgoRecover is only needed inside goroutines. It does nothing here and can be dropped.
128-133: Be flexible on Secret type or assert on expected keys instead.The “openshift-apiserver” Secret type may change (often TLS). Asserting exact type risks brittle failures. Prefer checking for required data keys or allow a set of expected types.
If you want, I can adjust the assertion to validate expected keys (e.g., serving cert/key) based on current cluster conventions.
test/tests-extension/README.md (5)
56-56: Clarify the tests directory path.Specify the full path to avoid ambiguity:
-You can write tests in the `test/` directory. +You can write tests in the `test/tests-extension/test/` directory.
64-65: Fix Markdown list indentation (MD007).Adjust list indentation under “Before committing your changes:” to two spaces.
- - Run `make build-update` - - Run `make verify` to check formatting, linting, and validation + - Run `make build-update` + - Run `make verify` to check formatting, linting, and validation
8-16: Deduplicate “How to Run the Tests Locally”.The section appears twice. Keep one and merge examples to reduce drift.
Also applies to: 18-26, 49-52
138-144: Mirror root-level targets nomenclature (optional).If developers run from repo root, mention the pass-through targets:
make tests-ext-run-suite,make tests-ext-list,make tests-ext-build-update.
168-171: Tighten rationale for build-update (nice-to-have).Consider linking to TRT-2186 note about stripping codeLocations here too to explain deterministic metadata.
Makefile (3)
80-96: Prefer ‘$(MAKE) -C …’ over ‘cd … && make’.This preserves make’s jobserver flags and is more robust.
-tests-ext-verify: - cd test/tests-extension && make verify +tests-ext-verify: + $(MAKE) -C test/tests-extension verify @@ -tests-ext-clean: - cd test/tests-extension && make clean +tests-ext-clean: + $(MAKE) -C test/tests-extension clean @@ -tests-ext-run-suite: - cd test/tests-extension && make run-suite SUITE=$(SUITE) ARTIFACT_DIR=$(ARTIFACT_DIR) +tests-ext-run-suite: + $(MAKE) -C test/tests-extension run-suite SUITE="$(SUITE)" ARTIFACT_DIR="$(ARTIFACT_DIR)" @@ -tests-ext-list: - cd test/tests-extension && make list-test-names +tests-ext-list: + $(MAKE) -C test/tests-extension list-test-names @@ -tests-ext-build-update: - cd test/tests-extension && make build-update +tests-ext-build-update: + $(MAKE) -C test/tests-extension build-update
68-74: Consolidate metadata update flows.You have both tests-ext-update and tests-ext-build-update. Consider removing the former or delegating it to the latter to avoid drift.
Example:
-.PHONY: tests-ext-update -tests-ext-update: tests-ext-build - ./$(TESTS_EXT_BINARY) update - for f in .openshift-tests-extension/*.json; do \ - jq 'map(del(.codeLocations))' "$f" > tmpp && mv tmpp "$f"; \ - done +.PHONY: tests-ext-update +tests-ext-update: tests-ext-build-update
71-73: Handle missing jq gracefully (optional).Add a quick check so CI fails fast with a clear message if jq isn’t installed.
for f in .openshift-tests-extension/*.json; do \ + command -v jq >/dev/null 2>&1 || { echo "jq is required"; exit 127; }; \ jq 'map(del(.codeLocations))' "$f" > tmpp && mv tmpp "$f"; \ donetest/tests-extension/Makefile (2)
73-76: Make build reproducible across envs (optional).Explicitly set GOOS/GOARCH via pass-through variables to avoid surprising cross-compiles.
- GO_COMPLIANCE_POLICY="exempt_all" go build -ldflags "$(LDFLAGS)" -o $(TOOLS_BIN_DIR)/openshift-apiserver-tests-ext ./cmd/... + GO_COMPLIANCE_POLICY="exempt_all" GOOS=$(GOOS) GOARCH=$(GOARCH) go build -ldflags "$(LDFLAGS)" -o $(TOOLS_BIN_DIR)/openshift-apiserver-tests-ext ./cmd/...
135-140: Avoid mutating worktree in verify by default (optional).verify-metadata currently regenerates metadata. Consider a pure check mode that exits non‑zero if regeneration would change files, without rewriting first.
I can wire a “check-metadata” target that runs the tool to a tmp path and diffs against $(METADATA).
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting
⛔ Files ignored due to path filters (290)
go.sumis excluded by!**/*.sumtest/tests-extension/go.sumis excluded by!**/*.sumtest/tests-extension/vendor/cel.dev/expr/.bazelversionis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/.gitattributesis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/.gitignoreis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/BUILD.bazelis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/CONTRIBUTING.mdis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/GOVERNANCE.mdis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/MAINTAINERS.mdis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/MODULE.bazelis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/README.mdis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/WORKSPACEis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/WORKSPACE.bzlmodis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/checked.pb.gois excluded by!**/*.pb.go,!**/vendor/**test/tests-extension/vendor/cel.dev/expr/cloudbuild.yamlis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/eval.pb.gois excluded by!**/*.pb.go,!**/vendor/**test/tests-extension/vendor/cel.dev/expr/explain.pb.gois excluded by!**/*.pb.go,!**/vendor/**test/tests-extension/vendor/cel.dev/expr/regen_go_proto.shis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/regen_go_proto_canonical_protos.shis excluded by!**/vendor/**test/tests-extension/vendor/cel.dev/expr/syntax.pb.gois excluded by!**/*.pb.go,!**/vendor/**test/tests-extension/vendor/cel.dev/expr/value.pb.gois excluded by!**/*.pb.go,!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/.gitignoreis excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/README.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/antlrdoc.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_config.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_config_set.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_deserialization_options.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_deserializer.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_simulator.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_state.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_type.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/char_stream.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/common_token_factory.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/common_token_stream.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/comparators.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/configuration.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/dfa.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/dfa_serializer.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/dfa_state.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/diagnostic_error_listener.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/error_listener.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/error_strategy.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/errors.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/file_stream.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/input_stream.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/int_stream.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/interval_set.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/jcollect.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/lexer.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/lexer_action.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/lexer_action_executor.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/lexer_atn_simulator.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/ll1_analyzer.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/mutex.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/mutex_nomutex.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/nostatistics.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/parser.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/parser_atn_simulator.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/parser_rule_context.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/prediction_context.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/prediction_context_cache.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/prediction_mode.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/recognizer.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/rule_context.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/semantic_context.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/statistics.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/stats_data.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/token.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/token_source.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/token_stream.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/tokenstream_rewriter.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/trace_listener.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/transition.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/tree.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/trees.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/utils.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/davecgh/go-spew/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/davecgh/go-spew/spew/bypass.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/davecgh/go-spew/spew/bypasssafe.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/davecgh/go-spew/spew/common.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/davecgh/go-spew/spew/config.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/davecgh/go-spew/spew/doc.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/davecgh/go-spew/spew/dump.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/davecgh/go-spew/spew/format.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/davecgh/go-spew/spew/spew.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/.gitignoreis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/.goconveyis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/.travis.ymlis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/CHANGES.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/Makefileis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/README.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/SECURITY.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/Srcfileis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/bench_test.shis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/compress.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/compressor_cache.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/compressor_pools.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/compressors.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/constants.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/container.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/cors_filter.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/coverage.shis excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/curly.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/curly_route.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/custom_verb.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/doc.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/entity_accessors.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/extensions.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/filter.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/filter_adapter.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/jsr311.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/log/log.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/logger.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/mime.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/options_filter.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/parameter.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/path_expression.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/path_processor.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/request.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/response.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/route.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/route_builder.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/route_reader.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/router.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/service_error.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/web_service.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/emicklei/go-restful/v3/web_service_container.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/.gitignoreis excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/.golangci.ymlis excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/CONTRIBUTING.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/README.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/SECURITY.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/bytestring.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/cache.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/common.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/decode.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/diagnose.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/doc.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/encode.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/encode_map.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/omitzero_go124.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/omitzero_pre_go124.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/simplevalue.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/stream.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/structfields.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/tag.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/fxamacker/cbor/v2/valid.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/.golangci.yamlis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/CHANGELOG.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/CONTRIBUTING.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/README.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/SECURITY.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/context.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/context_noslog.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/context_slog.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/discard.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/funcr/funcr.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/funcr/slogsink.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/logr.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/sloghandler.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/slogr.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-logr/logr/slogsink.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonpointer/.editorconfigis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonpointer/.gitignoreis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonpointer/.golangci.ymlis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonpointer/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonpointer/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonpointer/README.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonpointer/pointer.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonreference/.gitignoreis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonreference/.golangci.ymlis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonreference/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonreference/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonreference/README.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonreference/internal/normalize_url.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/jsonreference/reference.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/.editorconfigis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/.gitattributesis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/.gitignoreis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/.golangci.ymlis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/BENCHMARK.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/README.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/convert.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/convert_types.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/doc.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/file.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/initialism_index.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/json.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/loading.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/name_lexem.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/net.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/path.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/split.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/string_bytes.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/util.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-openapi/swag/yaml.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/.editorconfigis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/.gitattributesis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/.gitignoreis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/CHANGELOG.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/LICENSE.txtis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/README.mdis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/Taskfile.ymlis excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/crypto.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/date.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/defaults.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/dict.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/doc.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/functions.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/list.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/network.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/numeric.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/reflect.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/regex.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/strings.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/url.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/AUTHORSis excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/CONTRIBUTORSis excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/Makefileis excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/clone.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/custom_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/decode.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/deprecated.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/discard.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/duration.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/duration_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/encode.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/encode_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/equal.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/extensions.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/extensions_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/lib.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/lib_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/message_set.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/pointer_reflect.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/properties.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/properties_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/skip_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_marshal.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_merge.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_unmarshal.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/text.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/text_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/text_parser.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/timestamp.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/wrappers.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/proto/wrappers_gogo.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/gogo/protobuf/sortkeys/sortkeys.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/LICENSEis excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/BUILD.bazelis excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/cel.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/decls.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/env.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/folding.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/inlining.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/io.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/library.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/macro.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/optimizer.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/options.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/program.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/prompt.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/templates/authoring.tmplis excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/cel/validator.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/checker/BUILD.bazelis excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/checker/checker.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/checker/cost.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/checker/decls/BUILD.bazelis excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/checker/decls/decls.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/checker/env.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/checker/errors.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/checker/format.gois excluded by!**/vendor/**test/tests-extension/vendor/github.com/google/cel-go/checker/mapping.gois excluded by!**/vendor/**
📒 Files selected for processing (10)
.openshift-tests-extension/openshift_payload_openshift-apiserver.json(1 hunks)Makefile(2 hunks)go.mod(1 hunks)test/extended/main.go(0 hunks)test/tests-extension/.gitignore(1 hunks)test/tests-extension/Makefile(1 hunks)test/tests-extension/README.md(7 hunks)test/tests-extension/cmd/main.go(2 hunks)test/tests-extension/go.mod(1 hunks)test/tests-extension/test/openshift_apiserver.go(1 hunks)
💤 Files with no reviewable changes (1)
- test/extended/main.go
✅ Files skipped from review due to trivial changes (1)
- test/tests-extension/.gitignore
🚧 Files skipped from review as they are similar to previous changes (3)
- .openshift-tests-extension/openshift_payload_openshift-apiserver.json
- test/tests-extension/cmd/main.go
- test/tests-extension/go.mod
🧰 Additional context used
🪛 checkmake (0.2.2)
test/tests-extension/Makefile
[warning] 135-135: Missing required phony target "all"
(minphony)
[warning] 135-135: Missing required phony target "test"
(minphony)
Makefile
[warning] 106-106: Missing required phony target "test"
(minphony)
🪛 markdownlint-cli2 (0.18.1)
test/tests-extension/README.md
64-64: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
65-65: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
🔇 Additional comments (1)
go.mod (1)
115-116: The review comment is incorrect; these dependencies are required and preserved bygo mod tidy.The verification shows that
go mod tidyran successfully without removing theginkgo/gomegaindirect dependencies at lines 115–116. If these were truly unused,go mod tidywould have removed them. Their presence after tidy indicates they are transitively required by actual root-level dependencies, not test-only artifacts that can be safely dropped. The grep search confirms they are not directly referenced in root packages, but that does not mean they are unused—they are dependencies of your root dependencies.The optional suggestion to remove the replace directive should also not be applied, as the replace is actively being used (the OpenShift fork was downloaded during the tidy operation).
Likely an incorrect or invalid review comment.
The test/tests-extension directory is a separate Go module with its own go.mod file. The build command was trying to build it from the root directory, causing Go to fail finding the package. This fix changes the build to run from within the test/tests-extension directory where the separate module is located. Fixes CI build error: main module does not contain package github.com/openshift/openshift-apiserver/test/tests-extension/cmd
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
Makefile (1)
79-97: Review delegation pattern consistency.The new targets (lines 79-97) delegate to the
test/tests-extensionsubdirectory Makefile. One inconsistency:tests-ext-run-suite(line 89) passes environment variables (SUITE,ARTIFACT_DIR), but the other delegation targets do not. Consider whether targets liketests-ext-verify,tests-ext-clean, etc., should also accept and forward environment variables for consistency and flexibility.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting
📒 Files selected for processing (1)
Makefile(3 hunks)
🧰 Additional context used
🪛 checkmake (0.2.2)
Makefile
[warning] 107-107: Missing required phony target "test"
(minphony)
🔇 Additional comments (3)
Makefile (3)
76-107: Verify intention of merged target definitions.The main targets (
all,clean,verify) are redefined with new prerequisites alongside their original definitions. In GNU Make, this results in target rules being merged:
all: build(line 1) +all: tests-ext-build(line 100) →allnow requires bothclean(lines 37-39) andclean: tests-ext-clean(line 103-104) → both commands executeverify(lines 50-55) andverify: tests-ext-verify(line 106) → both commands executeThis is a significant behavioral change. Confirm this merged behavior is intentional (e.g., to always build and verify tests-extension alongside core targets) rather than an unintended side-effect that could cause issues with duplicate work or conflicting cleanup.
17-17: Confirm package path relocation.
TESTS_EXT_PACKAGEupdated to./test/tests-extension/cmd, reflecting the migration from./cmd/openshift-apiserver-tests-ext. Verify that all downstream references and build steps correctly resolve this new path, especially in CI/CD pipelines that may cache or hardcode paths.
62-64: Verify relative path in subdirectory build command.The build command now changes to
test/tests-extensionand outputs to../../$(TESTS_EXT_BINARY). Confirm that:
- The relative path
../../correctly points to the repository root when executed from the subdirectory.- The binary location matches expectations in deployment/CI workflows.
Rename the test file from openshift_apiserver.go to oas.go for brevity. Also update references in the Makefile comments to reflect the new filename.
Run gofmt to fix indentation in the IgnoreObsoleteTests comment block.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (2)
test/tests-extension/test/oas.go (1)
49-65: Add nil check before dereferencing Spec.Replicas.Line 64 dereferences
apiserverDeployment.Spec.Replicaswithout verifying it's non-nil. While typically set in production, defensive coding requires a nil check.Apply this diff:
g.By("verifying the deployment is ready") o.Expect(apiserverDeployment.Status.ReadyReplicas).To(o.BeNumerically(">", 0)) - o.Expect(apiserverDeployment.Status.UpdatedReplicas).To(o.Equal(*apiserverDeployment.Spec.Replicas)) + if apiserverDeployment.Spec.Replicas != nil { + o.Expect(apiserverDeployment.Status.UpdatedReplicas).To(o.Equal(*apiserverDeployment.Spec.Replicas)) + }test/tests-extension/Makefile (1)
17-18: Fix METADATA path to point to repository root.Using
$(shell pwd)resolves to the current working directory, which varies depending on wheremakeis invoked. The metadata file belongs at the repository root.Apply this diff:
-METADATA := $(shell pwd)/.openshift-tests-extension/openshift_payload_openshift-apiserver.json +REPO_ROOT := $(shell git rev-parse --show-toplevel) +METADATA := $(REPO_ROOT)/.openshift-tests-extension/openshift_payload_openshift-apiserver.json
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting
📒 Files selected for processing (2)
test/tests-extension/Makefile(1 hunks)test/tests-extension/test/oas.go(1 hunks)
🧰 Additional context used
🪛 checkmake (0.2.2)
test/tests-extension/Makefile
[warning] 135-135: Missing required phony target "all"
(minphony)
[warning] 135-135: Missing required phony target "test"
(minphony)
🔇 Additional comments (13)
test/tests-extension/test/oas.go (6)
1-21: LGTM! Clean test setup.The package structure, imports, and namespace definition are well-organized and follow standard Ginkgo/Gomega patterns for Kubernetes testing.
23-44: LGTM! Standard client configuration pattern.The helper functions follow the standard approach: prefer explicit KUBECONFIG, fall back to in-cluster credentials. Error handling is appropriate.
67-86: LGTM! Robust pod verification.The test properly uses
Eventuallyfor timing-dependent checks and validates both pod existence and running state.
88-98: LGTM! Service validation is straightforward.The synchronous check is appropriate here—services are typically created before pods start.
100-111: LGTM! Endpoints check uses proper timing.
Eventuallyis correct here since endpoints populate after pods become ready. The array access on line 109 is safe because line 108 verifies the array is non-empty.
113-133: LGTM! ConfigMap and Secret validation is appropriate.Both tests verify critical resource properties. The synchronous checks are reasonable since these resources are typically created during API server deployment.
test/tests-extension/Makefile (7)
1-2: LGTM! Standard Makefile directory resolution.Using
realpathandlastwordto locate the Makefile directory is a robust, portable pattern.
4-14: LGTM! Standard build metadata setup.The version information embedding via LDFLAGS is a standard Go practice for tracking build provenance.
19-21: LGTM! Standard help target implementation.The awk-based help extraction is a widely used Makefile pattern for generating usage documentation.
45-67: LGTM! Standard development workflow targets.The verify/tidy/fmt/vet targets follow Go conventions. Skipping linting for test code (lines 63, 67) is a reasonable pragmatic choice.
69-75: LGTM! Build target with appropriate compliance exemption.The
GO_COMPLIANCE_POLICY="exempt_all"setting is correctly scoped to test binaries only, with clear documentation about its limited use.
77-133: LGTM! Comprehensive metadata workflow.The metadata targets are well-structured. Removing
codeLocations(lines 132-133) to avoid machine-specific paths is good practice. The extensive comments (lines 83-112) provide valuable guidance for test maintenance.
135-140: LGTM! Standard metadata verification for CI.The
git diffcheck ensures metadata stays in sync with code changes. Note: The static analysis warnings about missingallandtestphony targets are conventional but not required for this specialized test Makefile.
Use shell parameter expansion to properly set ARTIFACT_DIR_FINAL with a default value of CURDIR when ARTIFACT_DIR is not set. This fixes the issue where the assignment within a subshell didn't persist to subsequent lines in the Makefile target.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (3)
test/tests-extension/test/oas.go (1)
64-66: Good defensive nil-check on Spec.Replicas.This resolves the prior potential NPE on dereferencing Replicas. Thanks for addressing it.
test/tests-extension/Makefile (2)
16-18: METADATA path now anchored to repo root.This addresses the earlier misplaced path under test/tests-extension. LGTM.
38-41: ARTIFACT_DIR defaulting logic fixed.Runtime fallback to $(CURDIR) is clear and works cross‑shell. Good improvement.
🧹 Nitpick comments (6)
test/tests-extension/test/oas.go (4)
33-44: Broaden kubeconfig loading before falling back in-cluster.Support default kubeconfig loading (e.g., ~/.kube/config) when KUBECONFIG is unset, then fall back to in‑cluster. Reduces surprises for local runs.
Apply this diff:
func getKubeConfig() (*rest.Config, error) { // First try to use kubeconfig file if kubeconfig := os.Getenv("KUBECONFIG"); kubeconfig != "" { config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) if err == nil { return config, nil } } - // Fall back to in-cluster config - return rest.InClusterConfig() + // Try default kubeconfig chain (e.g., ~/.kube/config) + rules := clientcmd.NewDefaultClientConfigLoadingRules() + defaultCfg, err := clientcmd. + NewNonInteractiveDeferredLoadingClientConfig(rules, &clientcmd.ConfigOverrides{}). + ClientConfig() + if err == nil { + return defaultCfg, nil + } + + // Fall back to in-cluster config + return rest.InClusterConfig() }
47-47: Remove unnecessary GinkgoRecover.Not needed in Ginkgo v2 unless starting goroutines yourself. Safe to drop.
- defer g.GinkgoRecover()
75-87: Reduce flakiness: wait for pods to be Running and containers Ready inside Eventually.Currently we only wait for “pods exist,” then assert Running immediately. Race risk remains. Fold readiness checks into Eventually.
Apply this diff:
- var pods *corev1.PodList - o.Eventually(func(gomega o.Gomega) { - var err error - pods, err = client.CoreV1().Pods(operatorNamespace).List(context.Background(), metav1.ListOptions{ - LabelSelector: "app=openshift-apiserver", - }) - gomega.Expect(err).NotTo(o.HaveOccurred()) - gomega.Expect(len(pods.Items)).To(o.BeNumerically(">", 0)) - }).WithTimeout(2 * time.Minute).WithPolling(10 * time.Second).Should(o.Succeed()) - - g.By("verifying all pods are running") - for _, pod := range pods.Items { - o.Expect(pod.Status.Phase).To(o.Equal(corev1.PodRunning)) - } + o.Eventually(func(gomega o.Gomega) { + pods, err := client.CoreV1().Pods(operatorNamespace).List(context.Background(), metav1.ListOptions{ + LabelSelector: "app=openshift-apiserver", + }) + gomega.Expect(err).NotTo(o.HaveOccurred()) + gomega.Expect(len(pods.Items)).To(o.BeNumerically(">", 0)) + for _, pod := range pods.Items { + gomega.Expect(pod.Status.Phase).To(o.Equal(corev1.PodRunning)) + for _, cs := range pod.Status.ContainerStatuses { + gomega.Expect(cs.Ready).To(o.BeTrue()) + } + } + }).WithTimeout(2 * time.Minute).WithPolling(10 * time.Second).Should(o.Succeed())
133-135: Avoid asserting Secret type to Opaque unless guaranteed by contract.Secret type may vary (e.g., kubernetes.io/tls). Asserting existence and expected keys is more robust.
Apply this diff:
- o.Expect(secret.Type).To(o.Equal(corev1.SecretTypeOpaque)) + // Optionally assert on required keys instead of type, e.g.: + // o.Expect(secret.Data).To(o.HaveKey("config.yaml"))test/tests-extension/Makefile (2)
129-132: Guard jq dependency for metadata sanitation.Fail fast with a clear message if jq is missing.
Apply this diff:
clean-metadata: #HELP Remove 'codeLocations' from metadata JSON @echo "Cleaning metadata (removing codeLocations)..." - @jq 'map(del(.codeLocations))' $(METADATA) > $(METADATA).tmp && mv $(METADATA).tmp $(METADATA) + @command -v jq >/dev/null 2>&1 || { echo "ERROR: 'jq' is required for clean-metadata"; exit 1; } + @jq 'map(del(.codeLocations))' $(METADATA) > $(METADATA).tmp && mv $(METADATA).tmp $(METADATA)
133-138: Add minimal “all” and “test” targets to satisfy common tooling.Keeps checkers happy without changing workflow.
Apply this diff:
verify-metadata: update-metadata @if ! git diff --exit-code $(METADATA); then \ echo "ERROR: Metadata is out of date. Please run 'make build-update' and commit the result."; \ exit 1; \ fi + +.PHONY: all test +all: build +test: + @echo "Use: make run-suite SUITE=openshift/openshift-apiserver/all [ARTIFACT_DIR=/tmp/artifacts]" + @exit 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Cache: Disabled due to data retention organization setting
Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting
📒 Files selected for processing (2)
test/tests-extension/Makefile(1 hunks)test/tests-extension/test/oas.go(1 hunks)
🧰 Additional context used
🪛 checkmake (0.2.2)
test/tests-extension/Makefile
[warning] 133-133: Missing required phony target "all"
(minphony)
[warning] 133-133: Missing required phony target "test"
(minphony)
|
This PR will merged into #563 |
|
/hold |
|
@wangke19: The following tests failed, say
Full PR test history. Your PR dashboard. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
This PR refactors the openshift-apiserver extended tests to use the modern OpenShift Tests Extension (OTE) framework, following the pattern established in the service-ca-operator repository.
Key Changes:
Test Suites Available:
This refactoring modernizes the test infrastructure while maintaining backward compatibility and adding enhanced test coverage for the openshift-apiserver component.