github.com/lineaje-labs/syft@v0.98.1-0.20231227153149-9e393f60ff1b/syft/pkg/cataloger/debian/package_test.go (about) 1 package debian 2 3 import ( 4 "testing" 5 6 "github.com/google/go-cmp/cmp" 7 8 "github.com/anchore/syft/syft/linux" 9 "github.com/anchore/syft/syft/pkg" 10 ) 11 12 func Test_packageURL(t *testing.T) { 13 tests := []struct { 14 name string 15 distro *linux.Release 16 metadata pkg.DpkgDBEntry 17 expected string 18 }{ 19 { 20 name: "go case", 21 distro: &linux.Release{ 22 ID: "debian", 23 VersionID: "11", 24 IDLike: []string{ 25 "debian", 26 }, 27 }, 28 metadata: pkg.DpkgDBEntry{ 29 Package: "p", 30 Version: "v", 31 }, 32 expected: "pkg:deb/debian/p@v?distro=debian-11", 33 }, 34 { 35 name: "missing ID_LIKE", 36 distro: &linux.Release{ 37 ID: "debian", 38 VersionID: "11", 39 }, 40 metadata: pkg.DpkgDBEntry{ 41 Package: "p", 42 Version: "v", 43 }, 44 expected: "pkg:deb/debian/p@v?distro=debian-11", 45 }, 46 { 47 name: "with arch info", 48 distro: &linux.Release{ 49 ID: "ubuntu", 50 IDLike: []string{ 51 "debian", 52 }, 53 VersionID: "16.04", 54 }, 55 metadata: pkg.DpkgDBEntry{ 56 Package: "p", 57 Version: "v", 58 Architecture: "a", 59 }, 60 expected: "pkg:deb/ubuntu/p@v?arch=a&distro=ubuntu-16.04", 61 }, 62 { 63 name: "missing distro", 64 metadata: pkg.DpkgDBEntry{ 65 Package: "p", 66 Version: "v", 67 }, 68 expected: "", 69 }, 70 { 71 name: "with upstream qualifier with source pkg name info", 72 distro: &linux.Release{ 73 ID: "debian", 74 VersionID: "11", 75 IDLike: []string{ 76 "debian", 77 }, 78 }, 79 metadata: pkg.DpkgDBEntry{ 80 Package: "p", 81 Source: "s", 82 Version: "v", 83 }, 84 expected: "pkg:deb/debian/p@v?upstream=s&distro=debian-11", 85 }, 86 { 87 name: "with upstream qualifier with source pkg name and version info", 88 distro: &linux.Release{ 89 ID: "debian", 90 VersionID: "11", 91 IDLike: []string{ 92 "debian", 93 }, 94 }, 95 metadata: pkg.DpkgDBEntry{ 96 Package: "p", 97 Source: "s", 98 Version: "v", 99 SourceVersion: "2.3", 100 }, 101 expected: "pkg:deb/debian/p@v?upstream=s%402.3&distro=debian-11", 102 }, 103 } 104 105 for _, test := range tests { 106 t.Run(test.name, func(t *testing.T) { 107 actual := packageURL(test.metadata, test.distro) 108 if diff := cmp.Diff(test.expected, actual); diff != "" { 109 t.Errorf("unexpected packageURL (-want +got):\n%s", diff) 110 } 111 }) 112 } 113 }