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 }