@@ -326,7 +326,22 @@ var (
326326 StatusNotes : "Vulnerability was falsely identified or associated with this component" ,
327327 KnownSince : time .Unix (0 , 0 ).UTC (),
328328 }
329- // Vulnerability specs for new test cases
329+ // VexData for resolved_with_pedigree status without detail (maps to VexStatusFixed)
330+ VexDataResolvedWithPedigreeNoDetail = & generated.VexStatementInputSpec {
331+ Status : generated .VexStatusFixed ,
332+ VexJustification : generated .VexJustificationNotProvided ,
333+ Statement : "" ,
334+ StatusNotes : "CDX state: resolved_with_pedigree" ,
335+ KnownSince : time .Unix (0 , 0 ).UTC (),
336+ }
337+ // VexData for false_positive status without detail (maps to VexStatusNotAffected)
338+ VexDataFalsePositiveNoDetail = & generated.VexStatementInputSpec {
339+ Status : generated .VexStatusNotAffected ,
340+ VexJustification : generated .VexJustificationNotProvided ,
341+ Statement : "" ,
342+ StatusNotes : "CDX state: false_positive" ,
343+ KnownSince : time .Unix (0 , 0 ).UTC (),
344+ }
330345 VulnSpecResolvedWithPedigree = & generated.VulnerabilityInputSpec {
331346 Type : "cve" ,
332347 VulnerabilityID : "cve-2024-0001" ,
@@ -335,6 +350,15 @@ var (
335350 Type : "cve" ,
336351 VulnerabilityID : "cve-2024-0002" ,
337352 }
353+ // Vulnerability specs for no-detail test cases
354+ VulnSpecResolvedWithPedigreeNoDetail = & generated.VulnerabilityInputSpec {
355+ Type : "cve" ,
356+ VulnerabilityID : "cve-2024-0003" ,
357+ }
358+ VulnSpecFalsePositiveNoDetail = & generated.VulnerabilityInputSpec {
359+ Type : "cve" ,
360+ VulnerabilityID : "cve-2024-0004" ,
361+ }
338362 // VulnMetadata for resolved_with_pedigree test
339363 CycloneDXResolvedWithPedigreeVulnMetadata = []assembler.VulnMetadataIngest {
340364 {
@@ -345,6 +369,14 @@ var (
345369 Timestamp : time .Unix (0 , 0 ).UTC (),
346370 },
347371 },
372+ {
373+ Vulnerability : VulnSpecResolvedWithPedigreeNoDetail ,
374+ VulnMetadata : & generated.VulnerabilityMetadataInputSpec {
375+ ScoreType : generated .VulnerabilityScoreTypeCvssv31 ,
376+ ScoreValue : 7.5 ,
377+ Timestamp : time .Unix (0 , 0 ).UTC (),
378+ },
379+ },
348380 }
349381 // VulnMetadata for false_positive test
350382 CycloneDXFalsePositiveVulnMetadata = []assembler.VulnMetadataIngest {
@@ -356,6 +388,14 @@ var (
356388 Timestamp : time .Unix (0 , 0 ).UTC (),
357389 },
358390 },
391+ {
392+ Vulnerability : VulnSpecFalsePositiveNoDetail ,
393+ VulnMetadata : & generated.VulnerabilityMetadataInputSpec {
394+ ScoreType : generated .VulnerabilityScoreTypeCvssv31 ,
395+ ScoreValue : 6.0 ,
396+ Timestamp : time .Unix (0 , 0 ).UTC (),
397+ },
398+ },
359399 }
360400
361401 topLevelPkg , _ = asmhelpers .PurlToPkg ("pkg:guac/cdx/ABC" )
@@ -387,7 +427,7 @@ var (
387427 HasSBOM : & model.HasSBOMInputSpec {
388428 Uri : "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" ,
389429 Algorithm : "sha256" ,
390- Digest : "a9e5e5fcc0939b4e9ddf74a5863ff577bef9bbf8086d99a4dafb8154c451b56f " ,
430+ Digest : "32981b0c4f87df9243c0e9b8a9600f2e19aae0c0cb76122edfe4a54ef59b9d48 " ,
391431 KnownSince : parseRfc3339 ("2024-01-15T10:30:00Z" ),
392432 },
393433 },
@@ -400,22 +440,25 @@ var (
400440 HasSBOM : & model.HasSBOMInputSpec {
401441 Uri : "urn:uuid:4e671687-395b-41f5-a30f-a58921a69b80" ,
402442 Algorithm : "sha256" ,
403- Digest : "738690dd4acaf82b417072354ee631a20a50453278053b558770c6f65906f11d " ,
443+ Digest : "0731373583749ae046d0992e9b417d4b2960f75d7a979c72fd0b7a258566d520 " ,
404444 KnownSince : parseRfc3339 ("2024-01-15T10:30:00Z" ),
405445 },
406446 },
407447 }
408448 // Predicates for resolved_with_pedigree test
409- // The affects ref is "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79/1#test-component"
410- // The parser splits on "#" and uses "test-component" as pkdIdentifier
411- // Then creates PURL as pkg:guac/pkg/[email protected] using guacCDXPkgPurl 412449 resolvedWithPedigreePkg ,
_ = asmhelpers .
PurlToPkg (
"pkg:guac/pkg/[email protected] " )
450+ resolvedWithPedigreeNoDetailPkg ,
_ = asmhelpers .
PurlToPkg (
"pkg:guac/pkg/[email protected] " )
413451 CycloneDXResolvedWithPedigreeVexIngest = []assembler.VexIngest {
414452 {
415453 Pkg : resolvedWithPedigreePkg ,
416454 Vulnerability : VulnSpecResolvedWithPedigree ,
417455 VexData : VexDataResolvedWithPedigree ,
418456 },
457+ {
458+ Pkg : resolvedWithPedigreeNoDetailPkg ,
459+ Vulnerability : VulnSpecResolvedWithPedigreeNoDetail ,
460+ VexData : VexDataResolvedWithPedigreeNoDetail ,
461+ },
419462 }
420463 CycloneDXResolvedWithPedigreePredicates = assembler.IngestPredicates {
421464 HasSBOM : HasSBOMVexResolvedWithPedigree ,
@@ -424,22 +467,24 @@ var (
424467 // Note: No CertifyVuln because status is Fixed (not Affected/UnderInvestigation)
425468 }
426469 // Predicates for false_positive test
427- // The affects ref is "urn:uuid:4e671687-395b-41f5-a30f-a58921a69b80/1#test-component-2"
428- // The parser splits on "#" and uses "test-component-2" as pkdIdentifier
429- // Then creates PURL as pkg:guac/pkg/[email protected] using guacCDXPkgPurl 430470 falsePositivePkg ,
_ = asmhelpers .
PurlToPkg (
"pkg:guac/pkg/[email protected] " )
471+ falsePositiveNoDetailPkg ,
_ = asmhelpers .
PurlToPkg (
"pkg:guac/pkg/[email protected] " )
431472 CycloneDXFalsePositiveVexIngest = []assembler.VexIngest {
432473 {
433474 Pkg : falsePositivePkg ,
434475 Vulnerability : VulnSpecFalsePositive ,
435476 VexData : VexDataFalsePositive ,
436477 },
478+ {
479+ Pkg : falsePositiveNoDetailPkg ,
480+ Vulnerability : VulnSpecFalsePositiveNoDetail ,
481+ VexData : VexDataFalsePositiveNoDetail ,
482+ },
437483 }
438484 CycloneDXFalsePositivePredicates = assembler.IngestPredicates {
439485 HasSBOM : HasSBOMVexFalsePositive ,
440486 VulnMetadata : CycloneDXFalsePositiveVulnMetadata ,
441487 Vex : CycloneDXFalsePositiveVexIngest ,
442- // Note: No CertifyVuln because status is NotAffected (not Affected/UnderInvestigation)
443488 }
444489
445490 // DSSE/SLSA Testdata
0 commit comments