github.com/lineaje-labs/syft@v0.98.1-0.20231227153149-9e393f60ff1b/syft/pkg/cataloger/debian/cataloger_test.go (about) 1 package debian 2 3 import ( 4 "testing" 5 6 "github.com/anchore/syft/syft/file" 7 "github.com/anchore/syft/syft/pkg" 8 "github.com/lineaje-labs/syft/syft/pkg/cataloger/internal/pkgtest" 9 ) 10 11 func TestDpkgCataloger(t *testing.T) { 12 tests := []struct { 13 name string 14 expected []pkg.Package 15 }{ 16 { 17 name: "image-dpkg", 18 expected: []pkg.Package{ 19 { 20 Name: "libpam-runtime", 21 Version: "1.1.8-3.6", 22 FoundBy: "dpkg-db-cataloger", 23 Licenses: pkg.NewLicenseSet( 24 pkg.NewLicenseFromLocations("GPL-1", file.NewVirtualLocation("/usr/share/doc/libpam-runtime/copyright", "/usr/share/doc/libpam-runtime/copyright")), 25 pkg.NewLicenseFromLocations("GPL-2", file.NewVirtualLocation("/usr/share/doc/libpam-runtime/copyright", "/usr/share/doc/libpam-runtime/copyright")), 26 pkg.NewLicenseFromLocations("LGPL-2.1", file.NewVirtualLocation("/usr/share/doc/libpam-runtime/copyright", "/usr/share/doc/libpam-runtime/copyright")), 27 ), 28 Locations: file.NewLocationSet( 29 file.NewVirtualLocation("/var/lib/dpkg/status", "/var/lib/dpkg/status"), 30 file.NewVirtualLocation("/var/lib/dpkg/info/libpam-runtime.md5sums", "/var/lib/dpkg/info/libpam-runtime.md5sums"), 31 file.NewVirtualLocation("/var/lib/dpkg/info/libpam-runtime.conffiles", "/var/lib/dpkg/info/libpam-runtime.conffiles"), 32 file.NewVirtualLocation("/usr/share/doc/libpam-runtime/copyright", "/usr/share/doc/libpam-runtime/copyright"), 33 ), 34 Type: pkg.DebPkg, 35 Metadata: pkg.DpkgDBEntry{ 36 Package: "libpam-runtime", 37 Source: "pam", 38 Version: "1.1.8-3.6", 39 Architecture: "all", 40 Maintainer: "Steve Langasek <vorlon@debian.org>", 41 InstalledSize: 1016, 42 Description: `Runtime support for the PAM library 43 Contains configuration files and directories required for 44 authentication to work on Debian systems. This package is required 45 on almost all installations.`, 46 Depends: []string{ 47 "debconf (>= 0.5) | debconf-2.0", 48 "debconf (>= 1.5.19) | cdebconf", 49 "libpam-modules (>= 1.0.1-6)", 50 }, 51 Files: []pkg.DpkgFileRecord{ 52 { 53 Path: "/etc/pam.conf", 54 Digest: &file.Digest{ 55 Algorithm: "md5", 56 Value: "87fc76f18e98ee7d3848f6b81b3391e5", 57 }, 58 IsConfigFile: true, 59 }, 60 { 61 Path: "/etc/pam.d/other", 62 Digest: &file.Digest{ 63 Algorithm: "md5", 64 Value: "31aa7f2181889ffb00b87df4126d1701", 65 }, 66 IsConfigFile: true, 67 }, 68 {Path: "/lib/x86_64-linux-gnu/libz.so.1.2.11", Digest: &file.Digest{ 69 Algorithm: "md5", 70 Value: "55f905631797551d4d936a34c7e73474", 71 }}, 72 {Path: "/usr/share/doc/zlib1g/changelog.Debian.gz", Digest: &file.Digest{ 73 Algorithm: "md5", 74 Value: "cede84bda30d2380217f97753c8ccf3a", 75 }}, 76 {Path: "/usr/share/doc/zlib1g/changelog.gz", Digest: &file.Digest{ 77 Algorithm: "md5", 78 Value: "f3c9dafa6da7992c47328b4464f6d122", 79 }}, 80 {Path: "/usr/share/doc/zlib1g/copyright", Digest: &file.Digest{ 81 Algorithm: "md5", 82 Value: "a4fae96070439a5209a62ae5b8017ab2", 83 }}, 84 }, 85 }, 86 }, 87 }, 88 }, 89 { 90 name: "image-distroless-deb", 91 expected: []pkg.Package{ 92 { 93 Name: "libsqlite3-0", 94 Version: "3.34.1-3", 95 FoundBy: "dpkg-db-cataloger", 96 Licenses: pkg.NewLicenseSet( 97 pkg.NewLicenseFromLocations("public-domain", file.NewVirtualLocation("/usr/share/doc/libsqlite3-0/copyright", "/usr/share/doc/libsqlite3-0/copyright")), 98 pkg.NewLicenseFromLocations("GPL-2+", file.NewVirtualLocation("/usr/share/doc/libsqlite3-0/copyright", "/usr/share/doc/libsqlite3-0/copyright")), 99 pkg.NewLicenseFromLocations("GPL-2", file.NewVirtualLocation("/usr/share/doc/libsqlite3-0/copyright", "/usr/share/doc/libsqlite3-0/copyright")), 100 ), 101 Locations: file.NewLocationSet( 102 file.NewVirtualLocation("/var/lib/dpkg/status.d/libsqlite3-0", "/var/lib/dpkg/status.d/libsqlite3-0"), 103 file.NewVirtualLocation("/var/lib/dpkg/status.d/libsqlite3-0.md5sums", "/var/lib/dpkg/status.d/libsqlite3-0.md5sums"), 104 file.NewVirtualLocation("/usr/share/doc/libsqlite3-0/copyright", "/usr/share/doc/libsqlite3-0/copyright"), 105 ), 106 Type: pkg.DebPkg, 107 Metadata: pkg.DpkgDBEntry{ 108 Package: "libsqlite3-0", 109 Source: "sqlite3", 110 Version: "3.34.1-3", 111 Architecture: "arm64", 112 Maintainer: "Laszlo Boszormenyi (GCS) <gcs@debian.org>", 113 InstalledSize: 1490, 114 Description: `SQLite 3 shared library 115 SQLite is a C library that implements an SQL database engine. 116 Programs that link with the SQLite library can have SQL database 117 access without running a separate RDBMS process.`, 118 Depends: []string{"libc6 (>= 2.29)"}, 119 Files: []pkg.DpkgFileRecord{ 120 {Path: "/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6", Digest: &file.Digest{ 121 Algorithm: "md5", 122 Value: "e11d70c96979a1328ae4e7e50542782b", 123 }}, 124 {Path: "/usr/share/doc/libsqlite3-0/README.Debian", Digest: &file.Digest{ 125 Algorithm: "md5", 126 Value: "9d8facc2fa9d2df52f1c7cb4e5fa4741", 127 }}, 128 {Path: "/usr/share/doc/libsqlite3-0/changelog.Debian.gz", Digest: &file.Digest{ 129 Algorithm: "md5", 130 Value: "a58942e742f5056be0595e6ba69a323f", 131 }}, 132 {Path: "/usr/share/doc/libsqlite3-0/changelog.gz", Digest: &file.Digest{ 133 Algorithm: "md5", 134 Value: "52317be84c3ca44b7888c6921131e37d", 135 }}, 136 {Path: "/usr/share/doc/libsqlite3-0/changelog.html.gz", Digest: &file.Digest{ 137 Algorithm: "md5", 138 Value: "a856310354e6c8768e85b39ae838dd0a", 139 }}, 140 {Path: "/usr/share/doc/libsqlite3-0/copyright", Digest: &file.Digest{ 141 Algorithm: "md5", 142 Value: "be64db3e095486e5e105652c51199358", 143 }}, 144 }, 145 }, 146 }, 147 }, 148 }, 149 } 150 151 for _, tt := range tests { 152 t.Run(tt.name, func(t *testing.T) { 153 c := NewDBCataloger() 154 pkgtest.NewCatalogTester(). 155 WithImageResolver(t, tt.name). 156 IgnoreLocationLayer(). // this fixture can be rebuilt, thus the layer ID will change 157 Expects(tt.expected, nil). 158 TestCataloger(t, c) 159 }) 160 } 161 } 162 163 func TestCataloger_Globs(t *testing.T) { 164 tests := []struct { 165 name string 166 fixture string 167 expected []string 168 }{ 169 { 170 name: "obtain db status files", 171 fixture: "test-fixtures/glob-paths", 172 expected: []string{ 173 "var/lib/dpkg/status", 174 "var/lib/dpkg/status.d/pkg-1.0", 175 "usr/lib/opkg/status", 176 "usr/lib/opkg/info/pkg-1.0.control", 177 }, 178 }, 179 } 180 181 for _, test := range tests { 182 t.Run(test.name, func(t *testing.T) { 183 pkgtest.NewCatalogTester(). 184 FromDirectory(t, test.fixture). 185 ExpectsResolverContentQueries(test.expected). 186 TestCataloger(t, NewDBCataloger()) 187 }) 188 } 189 }