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  }