github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/cataloger/golang/parse_go_mod_test.go (about)

     1  package golang
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/anchore/syft/syft/file"
     7  	"github.com/anchore/syft/syft/pkg"
     8  	"github.com/anchore/syft/syft/pkg/cataloger/internal/pkgtest"
     9  )
    10  
    11  func TestParseGoMod(t *testing.T) {
    12  	tests := []struct {
    13  		fixture  string
    14  		expected []pkg.Package
    15  	}{
    16  		{
    17  			fixture: "test-fixtures/one-package",
    18  			expected: []pkg.Package{
    19  				{
    20  					Name:         "github.com/bmatcuk/doublestar",
    21  					Version:      "v1.3.1",
    22  					PURL:         "pkg:golang/github.com/bmatcuk/doublestar@v1.3.1",
    23  					Locations:    file.NewLocationSet(file.NewLocation("test-fixtures/one-package")),
    24  					Language:     pkg.Go,
    25  					Type:         pkg.GoModulePkg,
    26  					MetadataType: pkg.GolangModMetadataType,
    27  					Metadata:     pkg.GolangModMetadata{},
    28  				},
    29  			},
    30  		},
    31  		{
    32  
    33  			fixture: "test-fixtures/many-packages",
    34  			expected: []pkg.Package{
    35  				{
    36  					Name:         "github.com/anchore/go-testutils",
    37  					Version:      "v0.0.0-20200624184116-66aa578126db",
    38  					PURL:         "pkg:golang/github.com/anchore/go-testutils@v0.0.0-20200624184116-66aa578126db",
    39  					Locations:    file.NewLocationSet(file.NewLocation("test-fixtures/many-packages")),
    40  					Language:     pkg.Go,
    41  					Type:         pkg.GoModulePkg,
    42  					MetadataType: pkg.GolangModMetadataType,
    43  					Metadata:     pkg.GolangModMetadata{},
    44  				},
    45  				{
    46  					Name:         "github.com/anchore/go-version",
    47  					Version:      "v1.2.2-0.20200701162849-18adb9c92b9b",
    48  					PURL:         "pkg:golang/github.com/anchore/go-version@v1.2.2-0.20200701162849-18adb9c92b9b",
    49  					Locations:    file.NewLocationSet(file.NewLocation("test-fixtures/many-packages")),
    50  					Language:     pkg.Go,
    51  					Type:         pkg.GoModulePkg,
    52  					MetadataType: pkg.GolangModMetadataType,
    53  					Metadata:     pkg.GolangModMetadata{},
    54  				},
    55  				{
    56  					Name:         "github.com/anchore/stereoscope",
    57  					Version:      "v0.0.0-20200706164556-7cf39d7f4639",
    58  					PURL:         "pkg:golang/github.com/anchore/stereoscope@v0.0.0-20200706164556-7cf39d7f4639",
    59  					Locations:    file.NewLocationSet(file.NewLocation("test-fixtures/many-packages")),
    60  					Language:     pkg.Go,
    61  					Type:         pkg.GoModulePkg,
    62  					MetadataType: pkg.GolangModMetadataType,
    63  					Metadata:     pkg.GolangModMetadata{},
    64  				},
    65  				{
    66  					Name:         "github.com/bmatcuk/doublestar",
    67  					Version:      "v8.8.8",
    68  					PURL:         "pkg:golang/github.com/bmatcuk/doublestar@v8.8.8",
    69  					Locations:    file.NewLocationSet(file.NewLocation("test-fixtures/many-packages")),
    70  					Language:     pkg.Go,
    71  					Type:         pkg.GoModulePkg,
    72  					MetadataType: pkg.GolangModMetadataType,
    73  					Metadata:     pkg.GolangModMetadata{},
    74  				},
    75  				{
    76  					Name:         "github.com/go-test/deep",
    77  					Version:      "v1.0.6",
    78  					PURL:         "pkg:golang/github.com/go-test/deep@v1.0.6",
    79  					Locations:    file.NewLocationSet(file.NewLocation("test-fixtures/many-packages")),
    80  					Language:     pkg.Go,
    81  					Type:         pkg.GoModulePkg,
    82  					MetadataType: pkg.GolangModMetadataType,
    83  					Metadata:     pkg.GolangModMetadata{},
    84  				},
    85  			},
    86  		},
    87  	}
    88  
    89  	for _, test := range tests {
    90  		t.Run(test.fixture, func(t *testing.T) {
    91  			c := goModCataloger{}
    92  			pkgtest.NewCatalogTester().
    93  				FromFile(t, test.fixture).
    94  				Expects(test.expected, nil).
    95  				TestParser(t, c.parseGoModFile)
    96  		})
    97  	}
    98  }
    99  
   100  func Test_GoSumHashes(t *testing.T) {
   101  	tests := []struct {
   102  		fixture  string
   103  		expected []pkg.Package
   104  	}{
   105  		{
   106  			fixture: "test-fixtures/go-sum-hashes",
   107  			expected: []pkg.Package{
   108  				{
   109  					Name:         "github.com/CycloneDX/cyclonedx-go",
   110  					Version:      "v0.6.0",
   111  					PURL:         "pkg:golang/github.com/CycloneDX/cyclonedx-go@v0.6.0",
   112  					Locations:    file.NewLocationSet(file.NewLocation("go.mod")),
   113  					FoundBy:      "go-mod-file-cataloger",
   114  					Language:     pkg.Go,
   115  					Type:         pkg.GoModulePkg,
   116  					MetadataType: pkg.GolangModMetadataType,
   117  					Metadata:     pkg.GolangModMetadata{},
   118  				},
   119  				{
   120  					Name:         "github.com/acarl005/stripansi",
   121  					Version:      "v0.0.0-20180116102854-5a71ef0e047d",
   122  					PURL:         "pkg:golang/github.com/acarl005/stripansi@v0.0.0-20180116102854-5a71ef0e047d",
   123  					Locations:    file.NewLocationSet(file.NewLocation("go.mod")),
   124  					FoundBy:      "go-mod-file-cataloger",
   125  					Language:     pkg.Go,
   126  					Type:         pkg.GoModulePkg,
   127  					MetadataType: pkg.GolangModMetadataType,
   128  					Metadata: pkg.GolangModMetadata{
   129  						H1Digest: "h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8=",
   130  					},
   131  				},
   132  				{
   133  					Name:         "github.com/mgutz/ansi",
   134  					Version:      "v0.0.0-20200706080929-d51e80ef957d",
   135  					PURL:         "pkg:golang/github.com/mgutz/ansi@v0.0.0-20200706080929-d51e80ef957d",
   136  					Locations:    file.NewLocationSet(file.NewLocation("go.mod")),
   137  					FoundBy:      "go-mod-file-cataloger",
   138  					Language:     pkg.Go,
   139  					Type:         pkg.GoModulePkg,
   140  					MetadataType: pkg.GolangModMetadataType,
   141  					Metadata: pkg.GolangModMetadata{
   142  						H1Digest: "h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=",
   143  					},
   144  				},
   145  			},
   146  		},
   147  	}
   148  
   149  	for _, test := range tests {
   150  		t.Run(test.fixture, func(t *testing.T) {
   151  			pkgtest.NewCatalogTester().
   152  				FromDirectory(t, test.fixture).
   153  				Expects(test.expected, nil).
   154  				TestCataloger(t, NewGoModFileCataloger(GoCatalogerOpts{}))
   155  		})
   156  	}
   157  }