github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/pkg/cataloger/java/package_url_test.go (about) 1 package java 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 8 "github.com/anchore/syft/syft/pkg" 9 ) 10 11 func Test_packageURL(t *testing.T) { 12 tests := []struct { 13 name string 14 pkg pkg.Package 15 expect string 16 }{ 17 { 18 name: "maven", 19 pkg: pkg.Package{ 20 Name: "example-java-app-maven", 21 Version: "0.1.0", 22 Language: pkg.Java, 23 Type: pkg.JavaPkg, 24 Metadata: pkg.JavaArchive{ 25 VirtualPath: "test-fixtures/java-builds/packages/example-java-app-maven-0.1.0.jar", 26 Manifest: &pkg.JavaManifest{ 27 Main: []pkg.KeyValue{ 28 { 29 Key: "Manifest-Version", 30 Value: "1.0", 31 }, 32 }, 33 }, 34 PomProperties: &pkg.JavaPomProperties{ 35 Path: "META-INF/maven/org.anchore/example-java-app-maven/pom.properties", 36 GroupID: "org.anchore", 37 ArtifactID: "example-java-app-maven", 38 Version: "0.1.0", 39 Extra: make(map[string]string), 40 }, 41 }, 42 }, 43 expect: "pkg:maven/org.anchore/example-java-app-maven@0.1.0", 44 }, 45 { 46 name: "POM properties have explicit group ID without . in it", 47 pkg: pkg.Package{ 48 Name: "example-java-app-maven", 49 Version: "0.1.0", 50 Language: pkg.Java, 51 Type: pkg.JavaPkg, 52 Metadata: pkg.JavaArchive{ 53 VirtualPath: "test-fixtures/java-builds/packages/example-java-app-maven-0.1.0.jar", 54 Manifest: &pkg.JavaManifest{ 55 Main: []pkg.KeyValue{ 56 { 57 Key: "Manifest-Version", 58 Value: "1.0", 59 }, 60 }, 61 }, 62 PomProperties: &pkg.JavaPomProperties{ 63 Path: "META-INF/maven/org.anchore/example-java-app-maven/pom.properties", 64 GroupID: "commons", 65 ArtifactID: "example-java-app-maven", 66 Version: "0.1.0", 67 Extra: make(map[string]string), 68 }, 69 }, 70 }, 71 expect: "pkg:maven/commons/example-java-app-maven@0.1.0", 72 }, 73 { 74 name: "POM project has explicit group ID without . in it", 75 pkg: pkg.Package{ 76 Name: "example-java-app-maven", 77 Version: "0.1.0", 78 Language: pkg.Java, 79 Type: pkg.JavaPkg, 80 Metadata: pkg.JavaArchive{ 81 VirtualPath: "test-fixtures/java-builds/packages/example-java-app-maven-0.1.0.jar", 82 Manifest: &pkg.JavaManifest{ 83 Main: []pkg.KeyValue{ 84 { 85 Key: "Manifest-Version", 86 Value: "1.0", 87 }, 88 }, 89 }, 90 PomProperties: &pkg.JavaPomProperties{ 91 Path: "META-INF/maven/org.anchore/example-java-app-maven/pom.properties", 92 ArtifactID: "example-java-app-maven", 93 Version: "0.1.0", 94 Extra: make(map[string]string), 95 }, 96 PomProject: &pkg.JavaPomProject{ 97 GroupID: "commons", 98 }, 99 }, 100 }, 101 expect: "pkg:maven/commons/example-java-app-maven@0.1.0", 102 }, 103 { 104 name: "POM project has explicit group ID without . in it", 105 pkg: pkg.Package{ 106 Name: "example-java-app-maven", 107 Version: "0.1.0", 108 Language: pkg.Java, 109 Type: pkg.JavaPkg, 110 Metadata: pkg.JavaArchive{ 111 VirtualPath: "test-fixtures/java-builds/packages/example-java-app-maven-0.1.0.jar", 112 Manifest: &pkg.JavaManifest{ 113 Main: []pkg.KeyValue{ 114 { 115 Key: "Manifest-Version", 116 Value: "1.0", 117 }, 118 }, 119 }, 120 PomProperties: &pkg.JavaPomProperties{ 121 Path: "META-INF/maven/org.anchore/example-java-app-maven/pom.properties", 122 ArtifactID: "example-java-app-maven", 123 Version: "0.1.0", 124 Extra: make(map[string]string), 125 }, 126 PomProject: &pkg.JavaPomProject{ 127 Parent: &pkg.JavaPomParent{ 128 GroupID: "parent", 129 }, 130 }, 131 }, 132 }, 133 expect: "pkg:maven/parent/example-java-app-maven@0.1.0", 134 }, 135 } 136 for _, tt := range tests { 137 t.Run(tt.expect, func(t *testing.T) { 138 assert.Equal(t, tt.expect, packageURL(tt.pkg.Name, tt.pkg.Version, tt.pkg.Metadata.(pkg.JavaArchive))) 139 }) 140 } 141 } 142 143 func Test_groupIDFromJavaMetadata(t *testing.T) { 144 tests := []struct { 145 name string 146 pkgName string 147 metadata pkg.JavaArchive 148 expect string 149 }{ 150 { 151 name: "pom properties", 152 metadata: pkg.JavaArchive{ 153 PomProperties: &pkg.JavaPomProperties{ 154 GroupID: "org.anchore", 155 }, 156 }, 157 expect: "org.anchore", 158 }, 159 { 160 name: "pom project", 161 metadata: pkg.JavaArchive{ 162 PomProject: &pkg.JavaPomProject{ 163 GroupID: "org.anchore", 164 }, 165 }, 166 expect: "org.anchore", 167 }, 168 { 169 name: "known package list", 170 pkgName: "ant-antlr", 171 metadata: pkg.JavaArchive{}, 172 expect: "org.apache.ant", 173 }, 174 { 175 name: "java manifest", 176 metadata: pkg.JavaArchive{ 177 Manifest: &pkg.JavaManifest{ 178 Main: []pkg.KeyValue{ 179 { 180 Key: "Implementation-Vendor", 181 Value: "org.anchore", 182 }, 183 }, 184 }, 185 }, 186 expect: "org.anchore", 187 }, 188 { 189 name: "no group id", 190 metadata: pkg.JavaArchive{}, 191 expect: "", 192 }, 193 } 194 195 for _, tt := range tests { 196 t.Run(tt.name, func(t *testing.T) { 197 assert.Equal(t, tt.expect, groupIDFromJavaMetadata(tt.pkgName, tt.metadata)) 198 }) 199 } 200 }