github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/java/cataloger_test.go (about) 1 package java 2 3 import ( 4 "testing" 5 6 "github.com/anchore/syft/syft/cataloging" 7 "github.com/anchore/syft/syft/cpe" 8 "github.com/anchore/syft/syft/file" 9 "github.com/anchore/syft/syft/pkg" 10 "github.com/anchore/syft/syft/pkg/cataloger/internal/pkgtest" 11 ) 12 13 func Test_ArchiveCataloger_Globs(t *testing.T) { 14 tests := []struct { 15 name string 16 fixture string 17 expected []string 18 }{ 19 { 20 name: "obtain java archive files", 21 fixture: "test-fixtures/glob-paths", 22 expected: []string{ 23 "java-archives/example.jar", 24 "java-archives/example.war", 25 "java-archives/example.ear", 26 "java-archives/example.par", 27 "java-archives/example.sar", 28 "java-archives/example.nar", 29 "java-archives/example.kar", 30 "java-archives/example.jpi", 31 "java-archives/example.hpi", 32 "java-archives/example.far", 33 "java-archives/example.lpkg", 34 "java-archives/example.rar", 35 "archives/example.zip", 36 "archives/example.tar", 37 "archives/example.tar.gz", 38 "archives/example.tgz", 39 "archives/example.tar.bz", 40 "archives/example.tar.bz2", 41 "archives/example.tbz", 42 "archives/example.tbz2", 43 "archives/example.tar.br", 44 "archives/example.tbr", 45 "archives/example.tar.lz4", 46 "archives/example.tlz4", 47 "archives/example.tar.sz", 48 "archives/example.tsz", 49 "archives/example.tar.xz", 50 "archives/example.txz", 51 "archives/example.tar.zst", 52 "archives/example.tzst", 53 "archives/example.tar.zstd", 54 "archives/example.tzstd", 55 }, 56 }, 57 } 58 59 for _, test := range tests { 60 t.Run(test.name, func(t *testing.T) { 61 pkgtest.NewCatalogTester(). 62 FromDirectory(t, test.fixture). 63 ExpectsResolverContentQueries(test.expected). 64 TestCataloger(t, 65 NewArchiveCataloger( 66 ArchiveCatalogerConfig{ 67 ArchiveSearchConfig: cataloging.ArchiveSearchConfig{ 68 IncludeIndexedArchives: true, 69 IncludeUnindexedArchives: true, 70 }, 71 }, 72 ), 73 ) 74 }) 75 } 76 } 77 78 func Test_POMCataloger_Globs(t *testing.T) { 79 tests := []struct { 80 name string 81 fixture string 82 expected []string 83 }{ 84 { 85 name: "obtain java pom files", 86 fixture: "test-fixtures/glob-paths", 87 expected: []string{ 88 "src/pom.xml", 89 }, 90 }, 91 } 92 93 for _, test := range tests { 94 t.Run(test.name, func(t *testing.T) { 95 pkgtest.NewCatalogTester(). 96 FromDirectory(t, test.fixture). 97 ExpectsResolverContentQueries(test.expected). 98 TestCataloger(t, 99 NewPomCataloger( 100 ArchiveCatalogerConfig{ 101 ArchiveSearchConfig: cataloging.ArchiveSearchConfig{ 102 IncludeIndexedArchives: true, 103 IncludeUnindexedArchives: true, 104 }, 105 }, 106 )) 107 }) 108 } 109 } 110 111 func TestJvmDistributionCataloger(t *testing.T) { 112 113 cases := []struct { 114 name string 115 fixture string 116 expected pkg.Package 117 }{ 118 { 119 name: "valid 1.8.0", 120 fixture: "test-fixtures/jvm-installs/oracle-jdk-se-8", 121 expected: pkg.Package{ 122 Name: "jdk", 123 Version: "1.8.0_411-b25", 124 FoundBy: "java-jvm-cataloger", 125 Locations: file.NewLocationSet(file.NewLocation("usr/lib/jvm/jdk-1.8-oracle-x64/release")), 126 Licenses: pkg.NewLicenseSet(), 127 Type: pkg.BinaryPkg, 128 CPEs: []cpe.CPE{ 129 cpe.Must("cpe:2.3:a:oracle:java_se:1.8.0:update411:*:*:*:*:*:*", cpe.DeclaredSource), 130 cpe.Must("cpe:2.3:a:oracle:jre:1.8.0:update411:*:*:*:*:*:*", cpe.DeclaredSource), 131 cpe.Must("cpe:2.3:a:oracle:jdk:1.8.0:update411:*:*:*:*:*:*", cpe.DeclaredSource), 132 }, 133 PURL: "pkg:generic/oracle/jdk@1.8.0_411-b25", 134 Metadata: pkg.JavaVMInstallation{ 135 Release: pkg.JavaVMRelease{ 136 JavaRuntimeVersion: "1.8.0_411-b25", 137 JavaVersion: "1.8.0_411", 138 OsArch: "amd64", 139 OsName: "Linux", 140 OsVersion: "2.6", 141 Source: ".:git:71ec2089cf8c+", 142 BuildType: "commercial", 143 }, 144 Files: []string{ 145 "usr/lib/jvm/jdk-1.8-oracle-x64/bin/javac", 146 "usr/lib/jvm/jdk-1.8-oracle-x64/release", 147 }, 148 }, 149 }, 150 }, 151 { 152 name: "valid post-jep223", 153 fixture: "test-fixtures/jvm-installs/valid-post-jep223", 154 expected: pkg.Package{ 155 Name: "openjdk", 156 Version: "21.0.4+7-LTS", 157 FoundBy: "java-jvm-cataloger", 158 Locations: file.NewLocationSet(file.NewLocation("jvm/openjdk/release")), 159 Licenses: pkg.NewLicenseSet(), 160 Type: pkg.BinaryPkg, 161 CPEs: []cpe.CPE{cpe.Must("cpe:2.3:a:oracle:openjdk:21.0.4:*:*:*:*:*:*:*", cpe.DeclaredSource)}, 162 PURL: "pkg:generic/oracle/openjdk@21.0.4%2B7-LTS?repository_url=https%3A%2F%2Fgithub.com%2Fadoptium%2Fjdk21u.git", 163 Metadata: pkg.JavaVMInstallation{ 164 Release: pkg.JavaVMRelease{ 165 Implementor: "Eclipse Adoptium", 166 ImplementorVersion: "Temurin-21.0.4+7", 167 JavaRuntimeVersion: "21.0.4+7-LTS", 168 JavaVersion: "21.0.4", 169 JavaVersionDate: "2024-07-16", 170 Libc: "gnu", 171 Modules: []string{ 172 "java.base", "java.compiler", "java.datatransfer", "java.xml", "java.prefs", 173 "java.desktop", "java.instrument", "java.logging", "java.management", 174 "java.security.sasl", "java.naming", "java.rmi", "java.management.rmi", 175 "java.net.http", "java.scripting", "java.security.jgss", 176 "java.transaction.xa", "java.sql", "java.sql.rowset", "java.xml.crypto", "java.se", 177 "java.smartcardio", "jdk.accessibility", "jdk.internal.jvmstat", "jdk.attach", 178 "jdk.charsets", "jdk.internal.opt", "jdk.zipfs", "jdk.compiler", "jdk.crypto.ec", 179 "jdk.crypto.cryptoki", "jdk.dynalink", "jdk.internal.ed", "jdk.editpad", "jdk.hotspot.agent", 180 "jdk.httpserver", "jdk.incubator.vector", "jdk.internal.le", "jdk.internal.vm.ci", 181 "jdk.internal.vm.compiler", "jdk.internal.vm.compiler.management", "jdk.jartool", 182 "jdk.javadoc", "jdk.jcmd", "jdk.management", "jdk.management.agent", "jdk.jconsole", 183 "jdk.jdeps", "jdk.jdwp.agent", "jdk.jdi", "jdk.jfr", "jdk.jlink", "jdk.jpackage", "jdk.jshell", 184 "jdk.jsobject", "jdk.jstatd", "jdk.localedata", "jdk.management.jfr", "jdk.naming.dns", 185 "jdk.naming.rmi", "jdk.net", "jdk.nio.mapmode", "jdk.random", "jdk.sctp", "jdk.security.auth", 186 "jdk.security.jgss", "jdk.unsupported", "jdk.unsupported.desktop", "jdk.xml.dom", 187 }, 188 OsArch: "aarch64", 189 OsName: "Linux", 190 Source: ".:git:13710926b798", 191 BuildSource: "git:1271f10a26c47e1489a814dd2731f936a588d621", 192 BuildSourceRepo: "https://github.com/adoptium/temurin-build.git", 193 SourceRepo: "https://github.com/adoptium/jdk21u.git", 194 FullVersion: "21.0.4+7-LTS", 195 SemanticVersion: "21.0.4+7", 196 BuildInfo: "OS: Linux Version: 5.4.0-150-generic", 197 JvmVariant: "Hotspot", 198 JvmVersion: "21.0.4+7-LTS", 199 ImageType: "JDK", 200 }, 201 Files: []string{ 202 "jvm/openjdk/release", 203 "jvm/openjdk/sibling/child/file1.txt", 204 }, 205 }, 206 }, 207 }, 208 } 209 210 for _, tt := range cases { 211 t.Run(tt.name, func(t *testing.T) { 212 p := tt.expected 213 p.SetID() 214 215 pkgtest.TestCataloger(t, tt.fixture, NewJvmDistributionCataloger(), []pkg.Package{p}, nil) 216 }) 217 } 218 219 } 220 221 func TestJvmDistributionCatalogerFromFile(t *testing.T) { 222 223 cases := []struct { 224 name string 225 fixture string 226 expected pkg.Package 227 }{ 228 { 229 name: "valid 1.8.0", 230 fixture: "test-fixtures/jvm-installs/oracle-jdk-se-8/usr/lib/jvm/jdk-1.8-oracle-x64/release", 231 expected: pkg.Package{ 232 Name: "jdk", 233 Version: "1.8.0_411-b25", 234 FoundBy: "java-jvm-cataloger", 235 Locations: file.NewLocationSet(file.NewLocation("/release")), 236 Licenses: pkg.NewLicenseSet(), 237 Type: pkg.BinaryPkg, 238 CPEs: []cpe.CPE{ 239 cpe.Must("cpe:2.3:a:oracle:java_se:1.8.0:update411:*:*:*:*:*:*", cpe.DeclaredSource), 240 cpe.Must("cpe:2.3:a:oracle:jre:1.8.0:update411:*:*:*:*:*:*", cpe.DeclaredSource), 241 cpe.Must("cpe:2.3:a:oracle:jdk:1.8.0:update411:*:*:*:*:*:*", cpe.DeclaredSource), 242 }, 243 PURL: "pkg:generic/oracle/jdk@1.8.0_411-b25", 244 Metadata: pkg.JavaVMInstallation{ 245 Release: pkg.JavaVMRelease{ 246 JavaRuntimeVersion: "1.8.0_411-b25", 247 JavaVersion: "1.8.0_411", 248 OsArch: "amd64", 249 OsName: "Linux", 250 OsVersion: "2.6", 251 Source: ".:git:71ec2089cf8c+", 252 BuildType: "commercial", 253 }, 254 Files: []string{ 255 "/release", 256 }, 257 }, 258 }, 259 }, 260 { 261 name: "valid post-jep223", 262 fixture: "test-fixtures/jvm-installs/valid-post-jep223/jvm/openjdk/release", 263 expected: pkg.Package{ 264 Name: "openjdk", 265 Version: "21.0.4+7-LTS", 266 FoundBy: "java-jvm-cataloger", 267 Locations: file.NewLocationSet(file.NewLocation("/release")), 268 Licenses: pkg.NewLicenseSet(), 269 Type: pkg.BinaryPkg, 270 CPEs: []cpe.CPE{cpe.Must("cpe:2.3:a:oracle:openjdk:21.0.4:*:*:*:*:*:*:*", cpe.DeclaredSource)}, 271 PURL: "pkg:generic/oracle/openjdk@21.0.4%2B7-LTS?repository_url=https%3A%2F%2Fgithub.com%2Fadoptium%2Fjdk21u.git", 272 Metadata: pkg.JavaVMInstallation{ 273 Release: pkg.JavaVMRelease{ 274 Implementor: "Eclipse Adoptium", 275 ImplementorVersion: "Temurin-21.0.4+7", 276 JavaRuntimeVersion: "21.0.4+7-LTS", 277 JavaVersion: "21.0.4", 278 JavaVersionDate: "2024-07-16", 279 Libc: "gnu", 280 Modules: []string{ 281 "java.base", "java.compiler", "java.datatransfer", "java.xml", "java.prefs", 282 "java.desktop", "java.instrument", "java.logging", "java.management", 283 "java.security.sasl", "java.naming", "java.rmi", "java.management.rmi", 284 "java.net.http", "java.scripting", "java.security.jgss", 285 "java.transaction.xa", "java.sql", "java.sql.rowset", "java.xml.crypto", "java.se", 286 "java.smartcardio", "jdk.accessibility", "jdk.internal.jvmstat", "jdk.attach", 287 "jdk.charsets", "jdk.internal.opt", "jdk.zipfs", "jdk.compiler", "jdk.crypto.ec", 288 "jdk.crypto.cryptoki", "jdk.dynalink", "jdk.internal.ed", "jdk.editpad", "jdk.hotspot.agent", 289 "jdk.httpserver", "jdk.incubator.vector", "jdk.internal.le", "jdk.internal.vm.ci", 290 "jdk.internal.vm.compiler", "jdk.internal.vm.compiler.management", "jdk.jartool", 291 "jdk.javadoc", "jdk.jcmd", "jdk.management", "jdk.management.agent", "jdk.jconsole", 292 "jdk.jdeps", "jdk.jdwp.agent", "jdk.jdi", "jdk.jfr", "jdk.jlink", "jdk.jpackage", "jdk.jshell", 293 "jdk.jsobject", "jdk.jstatd", "jdk.localedata", "jdk.management.jfr", "jdk.naming.dns", 294 "jdk.naming.rmi", "jdk.net", "jdk.nio.mapmode", "jdk.random", "jdk.sctp", "jdk.security.auth", 295 "jdk.security.jgss", "jdk.unsupported", "jdk.unsupported.desktop", "jdk.xml.dom", 296 }, 297 OsArch: "aarch64", 298 OsName: "Linux", 299 Source: ".:git:13710926b798", 300 BuildSource: "git:1271f10a26c47e1489a814dd2731f936a588d621", 301 BuildSourceRepo: "https://github.com/adoptium/temurin-build.git", 302 SourceRepo: "https://github.com/adoptium/jdk21u.git", 303 FullVersion: "21.0.4+7-LTS", 304 SemanticVersion: "21.0.4+7", 305 BuildInfo: "OS: Linux Version: 5.4.0-150-generic", 306 JvmVariant: "Hotspot", 307 JvmVersion: "21.0.4+7-LTS", 308 ImageType: "JDK", 309 }, 310 Files: []string{ 311 "/release", 312 }, 313 }, 314 }, 315 }, 316 } 317 318 for _, tt := range cases { 319 t.Run(tt.name, func(t *testing.T) { 320 p := tt.expected 321 p.SetID() 322 323 pkgtest.TestCatalogerFromFileSource(t, tt.fixture, NewJvmDistributionCataloger(), []pkg.Package{p}, nil) 324 }) 325 } 326 327 }