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