github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/formats/cyclonedxxml/decoder_test.go (about) 1 package cyclonedxxml 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func Test_decodeXML(t *testing.T) { 14 tests := []struct { 15 file string 16 err bool 17 distro string 18 packages []string 19 }{ 20 { 21 file: "snapshot/TestCycloneDxDirectoryEncoder.golden", 22 distro: "debian:1.2.3", 23 packages: []string{"package-1:1.0.1", "package-2:2.0.1"}, 24 }, 25 { 26 file: "snapshot/TestCycloneDxImageEncoder.golden", 27 distro: "debian:1.2.3", 28 packages: []string{"package-1:1.0.1", "package-2:2.0.1"}, 29 }, 30 { 31 file: "image-simple/Dockerfile", 32 err: true, 33 }, 34 } 35 for _, test := range tests { 36 t.Run(test.file, func(t *testing.T) { 37 reader, err := os.Open("test-fixtures/" + test.file) 38 require.NoError(t, err) 39 40 if test.err { 41 err = Format().Validate(reader) 42 assert.Error(t, err) 43 return 44 } 45 46 bom, err := Format().Decode(reader) 47 48 require.NoError(t, err) 49 50 split := strings.SplitN(test.distro, ":", 2) 51 name := split[0] 52 version := split[1] 53 assert.Equal(t, bom.Artifacts.LinuxDistribution.ID, name) 54 assert.Equal(t, bom.Artifacts.LinuxDistribution.Version, version) 55 56 pkgs: 57 for _, pkg := range test.packages { 58 split = strings.SplitN(pkg, ":", 2) 59 name = split[0] 60 version = split[1] 61 for p := range bom.Artifacts.Packages.Enumerate() { 62 if p.Name == name { 63 assert.Equal(t, version, p.Version) 64 continue pkgs 65 } 66 } 67 assert.Fail(t, fmt.Sprintf("package should be present: %s", pkg)) 68 } 69 }) 70 } 71 }