github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/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 MetadataType: pkg.JavaMetadataType, 25 Metadata: pkg.JavaMetadata{ 26 VirtualPath: "test-fixtures/java-builds/packages/example-java-app-maven-0.1.0.jar", 27 Manifest: &pkg.JavaManifest{ 28 Main: map[string]string{ 29 "Manifest-Version": "1.0", 30 }, 31 }, 32 PomProperties: &pkg.PomProperties{ 33 Path: "META-INF/maven/org.anchore/example-java-app-maven/pom.properties", 34 GroupID: "org.anchore", 35 ArtifactID: "example-java-app-maven", 36 Version: "0.1.0", 37 Extra: make(map[string]string), 38 }, 39 }, 40 }, 41 expect: "pkg:maven/org.anchore/example-java-app-maven@0.1.0", 42 }, 43 { 44 name: "POM properties have explicit group ID without . in it", 45 pkg: pkg.Package{ 46 Name: "example-java-app-maven", 47 Version: "0.1.0", 48 Language: pkg.Java, 49 Type: pkg.JavaPkg, 50 MetadataType: pkg.JavaMetadataType, 51 Metadata: pkg.JavaMetadata{ 52 VirtualPath: "test-fixtures/java-builds/packages/example-java-app-maven-0.1.0.jar", 53 Manifest: &pkg.JavaManifest{ 54 Main: map[string]string{ 55 "Manifest-Version": "1.0", 56 }, 57 }, 58 PomProperties: &pkg.PomProperties{ 59 Path: "META-INF/maven/org.anchore/example-java-app-maven/pom.properties", 60 GroupID: "commons", 61 ArtifactID: "example-java-app-maven", 62 Version: "0.1.0", 63 Extra: make(map[string]string), 64 }, 65 }, 66 }, 67 expect: "pkg:maven/commons/example-java-app-maven@0.1.0", 68 }, 69 { 70 name: "POM project has explicit group ID without . in it", 71 pkg: pkg.Package{ 72 Name: "example-java-app-maven", 73 Version: "0.1.0", 74 Language: pkg.Java, 75 Type: pkg.JavaPkg, 76 MetadataType: pkg.JavaMetadataType, 77 Metadata: pkg.JavaMetadata{ 78 VirtualPath: "test-fixtures/java-builds/packages/example-java-app-maven-0.1.0.jar", 79 Manifest: &pkg.JavaManifest{ 80 Main: map[string]string{ 81 "Manifest-Version": "1.0", 82 }, 83 }, 84 PomProperties: &pkg.PomProperties{ 85 Path: "META-INF/maven/org.anchore/example-java-app-maven/pom.properties", 86 ArtifactID: "example-java-app-maven", 87 Version: "0.1.0", 88 Extra: make(map[string]string), 89 }, 90 PomProject: &pkg.PomProject{ 91 GroupID: "commons", 92 }, 93 }, 94 }, 95 expect: "pkg:maven/commons/example-java-app-maven@0.1.0", 96 }, 97 { 98 name: "POM project has explicit group ID without . in it", 99 pkg: pkg.Package{ 100 Name: "example-java-app-maven", 101 Version: "0.1.0", 102 Language: pkg.Java, 103 Type: pkg.JavaPkg, 104 MetadataType: pkg.JavaMetadataType, 105 Metadata: pkg.JavaMetadata{ 106 VirtualPath: "test-fixtures/java-builds/packages/example-java-app-maven-0.1.0.jar", 107 Manifest: &pkg.JavaManifest{ 108 Main: map[string]string{ 109 "Manifest-Version": "1.0", 110 }, 111 }, 112 PomProperties: &pkg.PomProperties{ 113 Path: "META-INF/maven/org.anchore/example-java-app-maven/pom.properties", 114 ArtifactID: "example-java-app-maven", 115 Version: "0.1.0", 116 Extra: make(map[string]string), 117 }, 118 PomProject: &pkg.PomProject{ 119 Parent: &pkg.PomParent{ 120 GroupID: "parent", 121 }, 122 }, 123 }, 124 }, 125 expect: "pkg:maven/parent/example-java-app-maven@0.1.0", 126 }, 127 } 128 for _, tt := range tests { 129 t.Run(tt.expect, func(t *testing.T) { 130 assert.Equal(t, tt.expect, packageURL(tt.pkg.Name, tt.pkg.Version, tt.pkg.Metadata.(pkg.JavaMetadata))) 131 }) 132 } 133 } 134 135 func Test_groupIDFromJavaMetadata(t *testing.T) { 136 tests := []struct { 137 name string 138 pkgName string 139 metadata pkg.JavaMetadata 140 expect string 141 }{ 142 { 143 name: "pom properties", 144 metadata: pkg.JavaMetadata{ 145 PomProperties: &pkg.PomProperties{ 146 GroupID: "org.anchore", 147 }, 148 }, 149 expect: "org.anchore", 150 }, 151 { 152 name: "pom project", 153 metadata: pkg.JavaMetadata{ 154 PomProject: &pkg.PomProject{ 155 GroupID: "org.anchore", 156 }, 157 }, 158 expect: "org.anchore", 159 }, 160 { 161 name: "known package list", 162 pkgName: "ant-antlr", 163 metadata: pkg.JavaMetadata{}, 164 expect: "org.apache.ant", 165 }, 166 { 167 name: "java manifest", 168 metadata: pkg.JavaMetadata{ 169 Manifest: &pkg.JavaManifest{ 170 Main: map[string]string{ 171 "Implementation-Vendor": "org.anchore", 172 }, 173 }, 174 }, 175 expect: "org.anchore", 176 }, 177 { 178 name: "no group id", 179 metadata: pkg.JavaMetadata{}, 180 expect: "", 181 }, 182 } 183 184 for _, tt := range tests { 185 t.Run(tt.name, func(t *testing.T) { 186 assert.Equal(t, tt.expect, groupIDFromJavaMetadata(tt.pkgName, tt.metadata)) 187 }) 188 } 189 }