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  }