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