github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/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: "/some/path/pkg-extra-field-maven-4.3.2-rc1.jpi", 91 version: "4.3.2-rc1", 92 extension: "jpi", 93 name: "pkg-extra-field-maven", 94 ty: pkg.JenkinsPluginPkg, 95 }, 96 { 97 filename: "/some/path-with-version-5.4.3/pkg-extra-field-maven-4.3.2-rc1.hpi", 98 version: "4.3.2-rc1", 99 extension: "hpi", 100 name: "pkg-extra-field-maven", 101 ty: pkg.JenkinsPluginPkg, 102 }, 103 { 104 filename: "/some/path-with-version-5.4.3/wagon-webdav-1.0.2-beta-2.2.3a-hudson.jar", 105 version: "1.0.2-beta-2.2.3a-hudson", 106 extension: "jar", 107 name: "wagon-webdav", 108 ty: pkg.JavaPkg, 109 }, 110 { 111 filename: "/some/path-with-version-5.4.3/wagon-webdav-1.0.2-beta-2.2.3-hudson.jar", 112 version: "1.0.2-beta-2.2.3-hudson", 113 extension: "jar", 114 name: "wagon-webdav", 115 ty: pkg.JavaPkg, 116 }, 117 { 118 filename: "/some/path-with-version-5.4.3/windows-remote-command-1.0.jar", 119 version: "1.0", 120 extension: "jar", 121 name: "windows-remote-command", 122 ty: pkg.JavaPkg, 123 }, 124 { 125 filename: "/some/path-with-version-5.4.3/wagon-http-lightweight-1.0.5-beta-2.jar", 126 version: "1.0.5-beta-2", 127 extension: "jar", 128 name: "wagon-http-lightweight", 129 ty: pkg.JavaPkg, 130 }, 131 { 132 filename: "/hudson.war:WEB-INF/lib/commons-jelly-1.1-hudson-20100305.jar", 133 version: "1.1-hudson-20100305", 134 extension: "jar", 135 name: "commons-jelly", 136 ty: pkg.JavaPkg, 137 }, 138 { 139 filename: "/hudson.war:WEB-INF/lib/jtidy-4aug2000r7-dev-hudson-1.jar", 140 version: "4aug2000r7-dev-hudson-1", 141 extension: "jar", 142 name: "jtidy", 143 ty: pkg.JavaPkg, 144 }, 145 { 146 filename: "/hudson.war:WEB-INF/lib/trilead-ssh2-build212-hudson-5.jar", 147 version: "build212-hudson-5", 148 extension: "jar", 149 name: "trilead-ssh2", 150 ty: pkg.JavaPkg, 151 }, 152 { 153 filename: "/hudson.war:WEB-INF/lib/guava-r06.jar", 154 version: "r06", 155 extension: "jar", 156 name: "guava", 157 ty: pkg.JavaPkg, 158 }, 159 { 160 // regression: https://github.com/anchore/syft/issues/255 161 filename: "BOOT-INF/lib/spring-data-r2dbc-1.1.0.RELEASE.jar", 162 version: "1.1.0.RELEASE", 163 extension: "jar", 164 name: "spring-data-r2dbc", 165 ty: pkg.JavaPkg, 166 }, 167 { 168 // regression for artifact of the same name within jboss/keycloak:13.0.1 docker image 169 // which covers package name components with periods in them 170 filename: "jboss-saaj-api_1.4_spec-1.0.2.Final.jar", 171 version: "1.0.2.Final", 172 extension: "jar", 173 name: "jboss-saaj-api_1.4_spec", 174 ty: pkg.JavaPkg, 175 }, 176 { 177 filename: "/usr/share/java/gradle/lib/gradle-build-cache-8.1.1.jar", 178 version: "8.1.1", 179 extension: "jar", 180 name: "gradle-build-cache", 181 ty: pkg.JavaPkg, 182 }, 183 } 184 185 for _, test := range tests { 186 t.Run(test.filename, func(t *testing.T) { 187 obj := newJavaArchiveFilename(test.filename) 188 189 ty := obj.pkgType() 190 if ty != test.ty { 191 t.Errorf("mismatched type: %+v != %v", ty, test.ty) 192 } 193 194 version := obj.version 195 if version != test.version { 196 dmp := diffmatchpatch.New() 197 diffs := dmp.DiffMain(test.version, version, true) 198 t.Errorf("mismatched version:\n%s", dmp.DiffPrettyText(diffs)) 199 } 200 201 extension := obj.extension() 202 if extension != test.extension { 203 dmp := diffmatchpatch.New() 204 diffs := dmp.DiffMain(test.extension, extension, true) 205 t.Errorf("mismatched extension:\n%s", dmp.DiffPrettyText(diffs)) 206 } 207 208 name := obj.name 209 if name != test.name { 210 dmp := diffmatchpatch.New() 211 diffs := dmp.DiffMain(test.name, name, true) 212 t.Errorf("mismatched name:\n%s", dmp.DiffPrettyText(diffs)) 213 } 214 }) 215 } 216 }