processVSAResult processes a VSA validation result and updates the image status and aggregated data
(vsaResult *vsa.ValidationResult, imgStatus *ImageStatus, data *AllSectionsData, shortDigest string)
| 801 | |
| 802 | // processVSAResult processes a VSA validation result and updates the image status and aggregated data |
| 803 | func processVSAResult(vsaResult *vsa.ValidationResult, imgStatus *ImageStatus, data *AllSectionsData, shortDigest string) { |
| 804 | if vsaResult.Passed { |
| 805 | imgStatus.VSAStatus = "PASSED" |
| 806 | data.VSAPassed++ |
| 807 | } else { |
| 808 | reason := extractFallbackReason(vsaResult) |
| 809 | imgStatus.VSAStatus = fmt.Sprintf("FAILED(reason=%s)", reason) |
| 810 | data.VSAFailed++ |
| 811 | data.FallbackReasons[reason] = true |
| 812 | } |
| 813 | |
| 814 | // Aggregate signature status |
| 815 | // When SignatureVerified is false, mark as NOT VERIFIED |
| 816 | // This covers both cases: signature verification failure and retrieval failure (no VSA to verify) |
| 817 | if !vsaResult.SignatureVerified { |
| 818 | data.SignatureStatus = "NOT VERIFIED" |
| 819 | } |
| 820 | |
| 821 | // Aggregate predicate status |
| 822 | if vsaResult.PredicateOutcome == "passed" { |
| 823 | data.PredicatePassed++ |
| 824 | } else if vsaResult.PredicateOutcome != "" { |
| 825 | data.PredicateFailed++ |
| 826 | } |
| 827 | |
| 828 | // Check for policy diff using structured fields (preferred) or message parsing (fallback) |
| 829 | added, removed, changed, hasDiff := parsePolicyDiffFromMessage(vsaResult) |
| 830 | if hasDiff { |
| 831 | data.HasPolicyDiff = true |
| 832 | data.AffectedImages = append(data.AffectedImages, shortDigest) |
| 833 | data.PolicyDiffCounts[shortDigest] = PolicyDiffCounts{ |
| 834 | Added: added, Removed: removed, Changed: changed, |
| 835 | } |
| 836 | data.PolicyMismatches++ |
| 837 | } else if vsaResult.Passed { |
| 838 | data.PolicyMatches++ |
| 839 | } |
| 840 | } |
| 841 | |
| 842 | // aggregateAllSectionsData - Single pass aggregation, collects all data needed |
| 843 | func aggregateAllSectionsData(allResults []vsa.ComponentResult) AllSectionsData { |
no test coverage detected