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  }