# Comparison rules for regression testing # Defines how different collector outputs should be compared # Global configuration (applies to both preflight and supportbundle) global: # Files that should be compared exactly (byte-for-byte) exact_match: - "static-data.txt/static-data" # Note: version.yaml is NOT here - versionNumber varies between builds # Default behavior for unknown files non_empty_default: true # Preflight-specific rules preflight: # Files that should be compared exactly exact_match: - "static-data.txt/static-data" - "files/example.yaml" # From data collector in v1beta2 - "files/example.json" # From data collector in v1beta2 - "config/replicas.txt" # From data collector in v1beta2 # Note: version.yaml is NOT here - it uses non-empty check (versionNumber varies) # Files that need structural/field-specific comparison # Format: "pattern": "comparator_function_name" structural_compare: # NOTE: Most collectors are now non-empty checks only # We're testing that collectors RUN and PRODUCE OUTPUT, not that # specific environmental values (versions, connection status, image availability) match # Keep structural comparison only for truly deterministic collectors: # (Currently none - all moved to non-empty or exact match) # Everything else uses non-empty check by default # This tests that collectors RUN and PRODUCE OUTPUT, not environmental state # This includes: # - postgres/*.json, mysql/*.json, etc. (connection status varies) # - dns/debug.json (IPs, pod names vary) # - registry/*.json (image availability varies) # - http/*.json (endpoint status varies) # - cluster-info/*.json (k8s version varies) # - analysis.json (analyzer results vary with cluster state) # - cluster-resources/**/*.json (UIDs, timestamps, status vary) # - node-metrics/**/*.json (all metric values vary) # - goldpinger/**/*.json (latencies vary) # - certificates/**/*.json (validity time-based) # - sysctl/* (some values vary) # - And everything else... # Support bundle-specific rules supportbundle: # Files that should be compared exactly exact_match: - "static-data.txt/static-data" # Note: version.yaml is NOT here - it uses non-empty check (versionNumber varies) # Files that need structural comparison structural_compare: # NOTE: Like preflight, we only test that collectors produce output # Environmental state (DB connections, registry access, etc.) will vary # (Currently none - all moved to non-empty or exact match) # Everything else uses non-empty check (see list above in preflight section) # Notes on comparison strategies: # # EXACT MATCH: # - Use for static data that should never change between runs # - Byte-for-byte comparison # - Any difference is a regression # # STRUCTURAL COMPARISON: # - Use for semi-deterministic output with consistent structure but variable values # - Compare specific fields only (e.g., status codes, booleans) # - Ignore timing-dependent or environment-specific values # # NON-EMPTY CHECK (default): # - Use for highly variable output where exact comparison is impractical # - Verifies file exists and is not empty # - For JSON files, also validates JSON is parseable # - Appropriate for: # * Kubernetes resources (UIDs, resourceVersions, timestamps) # * Metrics (all values constantly change) # * Logs (timestamps, dynamic content) # * Generated pod/resource names # * Runtime state (pod status, replica counts) # # This strategy catches major regressions (collectors breaking, files missing) # while avoiding false positives from expected variability.