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