Conformance EE is a Ginkgo v2-based test framework that follows a three-phase pattern: Build, Execute, and Report. It uses combinatorial scenario generation, SHA-256 deduplication, and parallel execution to efficiently validate KKP cluster configurations.
┌─────────────────────────────────────────────────────────────────┐
│ Ginkgo Test Suite │
│ provider/kubevirt/provider_suite_test.go │
│ provider/kubevirt/provider_kubevirt_test.go │
└──────────────────────┬──────────────────────────────────────────┘
│ calls
▼
┌─────────────────────────────────────────────────────────────────┐
│ build.GetTableEntries() │
│ Combinatorially generates all test scenarios │
│ Deduplicates using SHA-256 of sanitized cluster specs │
└──────────────────────┬──────────────────────────────────────────┘
│ uses
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────────┐
│settings/ │ │options/ │ │build/ │
│cluster.go│ │options.go│ │provider/ │
│kubevirt │ │ │ │kubevirt.go │
└──────────┘ └──────────┘ └──────────────┘
Parallel Ginkgo nodes
┌─────────────────────────────────┐
│ Node 1 Node 2 ... Node N │
│ cluster/ utils/ │
│ ensure.go provider_suite_ │
│ update.go utils.go │
└─────────────────────────────────┘
Reporting
┌─────────────────────────────────┐
│ utils/junit_reporter.go │
│ utils/reports_configmap.go │
└─────────────────────────────────┘
The build.GetTableEntries() function generates the complete scenario matrix before any test spec runs:
DiscoverDefaultDatacenterSettings() to enumerate VPCs, subnets, storage classes, instance types, etc. from the live infrastructure cluster.ClusterSpec to JSON, hashes with SHA-256, and uses a (dcHash[:6], specHash[:6], k8sVersion) key to identify truly distinct clusters.The result is a map[string]*Scenario where each key is a cluster dedup key and each Scenario contains the cluster spec plus all machines to test against it.
Test scenarios are executed in parallel across Ginkgo nodes:
SynchronizedBeforeSuite): Expensive one-time operations (project creation, cluster setup) run only on the first parallel Ginkgo node. Results are shared via []byte to all nodes.SynchronizedAfterSuite): Cluster deletion and report publishing run only on the first node after all others finish.build/)The scenario generator is the core engine that produces the test matrix. It uses 100 concurrent workers to parallelize cluster and machine spec generation:
Discover Infrastructure
↓ (VPCs, subnets, storage classes, instance types)
Generate Cluster Specs
↓ (apply 28 cluster modifiers across 17 groups)
Deduplicate Cluster Specs
↓ (SHA-256 hash: dcNameHash[:6] + specHash[:6] + k8sVersion)
For Each Unique Cluster:
Generate Machine Specs
↓ (apply machine modifiers: CPU, memory, disk, OS, DNS, etc.)
Deduplicate Machine Specs
↓ (SHA-256 hash of sanitized spec + machineName)
Return Map[clusterDedupKey]*Scenario
cluster/)Handles the full lifecycle of KKP clusters:
utils/)Manages machine deployments within user clusters:
MachineDeployment, attach OSP annotations, wait for node references, label nodes, wait for Ready state and pod readinessui/)A Bubble Tea-based terminal interface that guides users through:
deploy/)Creates Kubernetes resources for in-cluster test execution:
conformance-ee/
├── cmd/ # CLI entry point
│ └── main.go
├── deploy/ # Kubernetes deployment utilities
│ └── kubernetes.go
├── tests/ # Core test framework
│ ├── build/ # Scenario generation engine
│ │ ├── build.go # GetTableEntries(), worker pools
│ │ ├── scenario.go # Entry point for scenario generation
│ │ ├── types.go # Core types (Scenario, clusterJob)
│ │ ├── labels.go # Ginkgo label helpers
│ │ ├── provider.go # Provider-agnostic building
│ │ └── provider/ # Provider implementations
│ ├── cluster/ # Cluster lifecycle
│ │ ├── ensure.go # Creation and health validation
│ │ └── update.go # Version upgrade logic
│ ├── options/ # Configuration loading
│ │ └── options.go # YAML config and runtime options
│ ├── settings/ # Modifier definitions
│ │ ├── types.go # Core modifier types
│ │ ├── cluster.go # 28 cluster modifiers
│ │ └── kubevirt.go # KubeVirt machine/DC modifiers
│ ├── utils/ # Test utilities and reporters
│ └── provider/kubevirt/ # Ginkgo test suite
├── ui/ # Interactive TUI
├── Dockerfile.ginkgo # Multi-stage Docker build
└── go.mod # Go module dependencies