github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/java/archive_filename_test.go (about) 1 package java 2 3 import ( 4 "testing" 5 6 "github.com/sergi/go-diff/diffmatchpatch" 7 8 "github.com/anchore/syft/syft/pkg" 9 ) 10 11 func TestExtractInfoFromJavaArchiveFilename(t *testing.T) { 12 tests := []struct { 13 filename string 14 version string 15 extension string 16 name string 17 ty pkg.Type 18 }{ 19 { 20 filename: "pkg-maven-4.3.2.blerg", 21 version: "4.3.2", 22 extension: "blerg", 23 name: "pkg-maven", 24 ty: pkg.UnknownPkg, 25 }, 26 { 27 filename: "pkg-maven.4.3.2.blerg", 28 version: "4.3.2", 29 extension: "blerg", 30 name: "pkg-maven", 31 ty: pkg.UnknownPkg, 32 }, 33 { 34 filename: "pkg-maven_4.3.2.blerg", 35 version: "4.3.2", 36 extension: "blerg", 37 name: "pkg-maven", 38 ty: pkg.UnknownPkg, 39 }, 40 { 41 filename: "pkg-maven-4.3.2.jar", 42 version: "4.3.2", 43 extension: "jar", 44 name: "pkg-maven", 45 ty: pkg.JavaPkg, 46 }, 47 { 48 filename: "pkg-extra-field-maven-4.3.2.war", 49 version: "4.3.2", 50 extension: "war", 51 name: "pkg-extra-field-maven", 52 ty: pkg.JavaPkg, 53 }, 54 { 55 filename: "liferay-package.lpkg", 56 version: "", 57 extension: "lpkg", 58 name: "liferay-package", 59 ty: pkg.JavaPkg, 60 }, 61 { 62 filename: "pkg-extra-field-maven-4.3.2-rc1.ear", 63 version: "4.3.2-rc1", 64 extension: "ear", 65 name: "pkg-extra-field-maven", 66 ty: pkg.JavaPkg, 67 }, 68 { 69 filename: "pkg-extra-field-maven-4.3.2-rc1.par", 70 version: "4.3.2-rc1", 71 extension: "par", 72 name: "pkg-extra-field-maven", 73 ty: pkg.JavaPkg, 74 }, 75 { 76 filename: "pkg-extra-field-maven-4.3.2-rc1.sar", 77 version: "4.3.2-rc1", 78 extension: "sar", 79 name: "pkg-extra-field-maven", 80 ty: pkg.JavaPkg, 81 }, 82 { 83 filename: "pkg-extra-field-maven-4.3.2-rc1.nar", 84 version: "4.3.2-rc1", 85 extension: "nar", 86 name: "pkg-extra-field-maven", 87 ty: pkg.JavaPkg, 88 }, 89 { 90 filename: "pkg-extra-field-maven-4.3.2-rc1.kar", 91 version: "4.3.2-rc1", 92 extension: "kar", 93 name: "pkg-extra-field-maven", 94 ty: pkg.JavaPkg, 95 }, 96 { 97 filename: "/some/path/pkg-extra-field-maven-4.3.2-rc1.jpi", 98 version: "4.3.2-rc1", 99 extension: "jpi", 100 name: "pkg-extra-field-maven", 101 ty: pkg.JenkinsPluginPkg, 102 }, 103 { 104 filename: "/some/path-with-version-5.4.3/pkg-extra-field-maven-4.3.2-rc1.hpi", 105 version: "4.3.2-rc1", 106 extension: "hpi", 107 name: "pkg-extra-field-maven", 108 ty: pkg.JenkinsPluginPkg, 109 }, 110 { 111 filename: "/some/path-with-version-5.4.3/wagon-webdav-1.0.2-beta-2.2.3a-hudson.jar", 112 version: "1.0.2-beta-2.2.3a-hudson", 113 extension: "jar", 114 name: "wagon-webdav", 115 ty: pkg.JavaPkg, 116 }, 117 { 118 filename: "/some/path-with-version-5.4.3/wagon-webdav-1.0.2-beta-2.2.3-hudson.jar", 119 version: "1.0.2-beta-2.2.3-hudson", 120 extension: "jar", 121 name: "wagon-webdav", 122 ty: pkg.JavaPkg, 123 }, 124 { 125 filename: "/some/path-with-version-5.4.3/windows-remote-command-1.0.jar", 126 version: "1.0", 127 extension: "jar", 128 name: "windows-remote-command", 129 ty: pkg.JavaPkg, 130 }, 131 { 132 filename: "/some/path-with-version-5.4.3/wagon-http-lightweight-1.0.5-beta-2.jar", 133 version: "1.0.5-beta-2", 134 extension: "jar", 135 name: "wagon-http-lightweight", 136 ty: pkg.JavaPkg, 137 }, 138 { 139 filename: "/hudson.war:WEB-INF/lib/commons-jelly-1.1-hudson-20100305.jar", 140 version: "1.1-hudson-20100305", 141 extension: "jar", 142 name: "commons-jelly", 143 ty: pkg.JavaPkg, 144 }, 145 { 146 filename: "/hudson.war:WEB-INF/lib/jtidy-4aug2000r7-dev-hudson-1.jar", 147 version: "4aug2000r7-dev-hudson-1", 148 extension: "jar", 149 name: "jtidy", 150 ty: pkg.JavaPkg, 151 }, 152 { 153 filename: "/hudson.war:WEB-INF/lib/trilead-ssh2-build212-hudson-5.jar", 154 version: "build212-hudson-5", 155 extension: "jar", 156 name: "trilead-ssh2", 157 ty: pkg.JavaPkg, 158 }, 159 { 160 filename: "/hudson.war:WEB-INF/lib/guava-r06.jar", 161 version: "r06", 162 extension: "jar", 163 name: "guava", 164 ty: pkg.JavaPkg, 165 }, 166 { 167 // regression: https://github.com/anchore/syft/issues/255 168 filename: "BOOT-INF/lib/spring-data-r2dbc-1.1.0.RELEASE.jar", 169 version: "1.1.0.RELEASE", 170 extension: "jar", 171 name: "spring-data-r2dbc", 172 ty: pkg.JavaPkg, 173 }, 174 { 175 // regression for artifact of the same name within jboss/keycloak:13.0.1 docker image 176 // which covers package name components with periods in them 177 filename: "jboss-saaj-api_1.4_spec-1.0.2.Final.jar", 178 version: "1.0.2.Final", 179 extension: "jar", 180 name: "jboss-saaj-api_1.4_spec", 181 ty: pkg.JavaPkg, 182 }, 183 { 184 filename: "/usr/share/java/gradle/lib/gradle-build-cache-8.1.1.jar", 185 version: "8.1.1", 186 extension: "jar", 187 name: "gradle-build-cache", 188 ty: pkg.JavaPkg, 189 }, 190 { 191 filename: "pkg-extra-field-maven-4.3.2-rc1.rar", 192 version: "4.3.2-rc1", 193 extension: "rar", 194 name: "pkg-extra-field-maven", 195 ty: pkg.JavaPkg, 196 }, 197 } 198 199 for _, test := range tests { 200 t.Run(test.filename, func(t *testing.T) { 201 obj := newJavaArchiveFilename(test.filename) 202 203 ty := obj.pkgType() 204 if ty != test.ty { 205 t.Errorf("mismatched type: %+v != %v", ty, test.ty) 206 } 207 208 version := obj.version 209 if version != test.version { 210 dmp := diffmatchpatch.New() 211 diffs := dmp.DiffMain(test.version, version, true) 212 t.Errorf("mismatched version:\n%s", dmp.DiffPrettyText(diffs)) 213 } 214 215 extension := obj.extension() 216 if extension != test.extension { 217 dmp := diffmatchpatch.New() 218 diffs := dmp.DiffMain(test.extension, extension, true) 219 t.Errorf("mismatched extension:\n%s", dmp.DiffPrettyText(diffs)) 220 } 221 222 name := obj.name 223 if name != test.name { 224 dmp := diffmatchpatch.New() 225 diffs := dmp.DiffMain(test.name, name, true) 226 t.Errorf("mismatched name:\n%s", dmp.DiffPrettyText(diffs)) 227 } 228 }) 229 } 230 }