github.com/nextlinux/gosbom@v0.81.1-0.20230627115839-1ff50c281391/gosbom/formats/common/cyclonedxhelpers/external_references_test.go (about)

     1  package cyclonedxhelpers
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/CycloneDX/cyclonedx-go"
     7  	"github.com/nextlinux/gosbom/gosbom/pkg"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func Test_encodeExternalReferences(t *testing.T) {
    12  	tests := []struct {
    13  		name     string
    14  		input    pkg.Package
    15  		expected *[]cyclonedx.ExternalReference
    16  	}{
    17  		{
    18  			name:     "no metadata",
    19  			input:    pkg.Package{},
    20  			expected: nil,
    21  		},
    22  		{
    23  			name: "from apk",
    24  			input: pkg.Package{
    25  				Metadata: pkg.ApkMetadata{
    26  					URL: "http://a-place.gov",
    27  				},
    28  			},
    29  			expected: &[]cyclonedx.ExternalReference{
    30  				{URL: "http://a-place.gov", Type: cyclonedx.ERTypeDistribution},
    31  			},
    32  		},
    33  		{
    34  			name: "from npm",
    35  			input: pkg.Package{
    36  				Metadata: pkg.NpmPackageJSONMetadata{
    37  					URL: "http://a-place.gov",
    38  				},
    39  			},
    40  			expected: &[]cyclonedx.ExternalReference{
    41  				{URL: "http://a-place.gov", Type: cyclonedx.ERTypeDistribution},
    42  			},
    43  		},
    44  		{
    45  			name: "from cargo lock",
    46  			input: pkg.Package{
    47  				Name:         "ansi_term",
    48  				Version:      "0.12.1",
    49  				Language:     pkg.Rust,
    50  				Type:         pkg.RustPkg,
    51  				MetadataType: pkg.RustCargoPackageMetadataType,
    52  				Licenses:     pkg.NewLicenseSet(),
    53  				Metadata: pkg.CargoPackageMetadata{
    54  					Name:     "ansi_term",
    55  					Version:  "0.12.1",
    56  					Source:   "registry+https://github.com/rust-lang/crates.io-index",
    57  					Checksum: "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2",
    58  					Dependencies: []string{
    59  						"winapi",
    60  					},
    61  				},
    62  			},
    63  			expected: &[]cyclonedx.ExternalReference{
    64  				{URL: "registry+https://github.com/rust-lang/crates.io-index", Type: cyclonedx.ERTypeDistribution},
    65  			},
    66  		},
    67  		{
    68  			name: "from npm with homepage",
    69  			input: pkg.Package{
    70  				Metadata: pkg.NpmPackageJSONMetadata{
    71  					URL:      "http://a-place.gov",
    72  					Homepage: "http://homepage",
    73  				},
    74  			},
    75  			expected: &[]cyclonedx.ExternalReference{
    76  				{URL: "http://a-place.gov", Type: cyclonedx.ERTypeDistribution},
    77  				{URL: "http://homepage", Type: cyclonedx.ERTypeWebsite},
    78  			},
    79  		},
    80  		{
    81  			name: "from gem",
    82  			input: pkg.Package{
    83  				Metadata: pkg.GemMetadata{
    84  					Homepage: "http://a-place.gov",
    85  				},
    86  			},
    87  			expected: &[]cyclonedx.ExternalReference{
    88  				{URL: "http://a-place.gov", Type: cyclonedx.ERTypeWebsite},
    89  			},
    90  		},
    91  		{
    92  			name: "from python direct url",
    93  			input: pkg.Package{
    94  				Metadata: pkg.PythonPackageMetadata{
    95  					DirectURLOrigin: &pkg.PythonDirectURLOriginInfo{
    96  						URL: "http://a-place.gov",
    97  					},
    98  				},
    99  			},
   100  			expected: &[]cyclonedx.ExternalReference{
   101  				{URL: "http://a-place.gov", Type: cyclonedx.ERTypeVCS},
   102  			},
   103  		},
   104  		{
   105  			name: "from python direct url with commit",
   106  			input: pkg.Package{
   107  				Metadata: pkg.PythonPackageMetadata{
   108  					DirectURLOrigin: &pkg.PythonDirectURLOriginInfo{
   109  						URL:      "http://a-place.gov",
   110  						CommitID: "test",
   111  					},
   112  				},
   113  			},
   114  			expected: &[]cyclonedx.ExternalReference{
   115  				{URL: "http://a-place.gov", Type: cyclonedx.ERTypeVCS, Comment: "commit: test"},
   116  			},
   117  		},
   118  		{
   119  			name: "empty",
   120  			input: pkg.Package{
   121  				Metadata: pkg.NpmPackageJSONMetadata{
   122  					URL: "",
   123  				},
   124  			},
   125  			expected: nil,
   126  		},
   127  	}
   128  	for _, test := range tests {
   129  		t.Run(test.name, func(t *testing.T) {
   130  			assert.Equal(t, test.expected, encodeExternalReferences(test.input))
   131  		})
   132  	}
   133  }