From 060e60b6dd1f07404510452832c4d87412de5a92 Mon Sep 17 00:00:00 2001 From: Dan Luhring Date: Tue, 20 Apr 2021 20:42:40 -0400 Subject: [PATCH] Add more tests to CPE generation Signed-off-by: Dan Luhring --- syft/pkg/cataloger/cpe.go | 1 + syft/pkg/cataloger/cpe_test.go | 89 +++++++++++++++++++++++++++++++++- 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/syft/pkg/cataloger/cpe.go b/syft/pkg/cataloger/cpe.go index ad5ee4e04..0a8ad7c3a 100644 --- a/syft/pkg/cataloger/cpe.go +++ b/syft/pkg/cataloger/cpe.go @@ -138,6 +138,7 @@ func candidateVendors(p pkg.Package) []string { func candidateProducts(p pkg.Package) []string { products := []string{p.Name} + if p.Language == pkg.Java { products = append(products, candidateProductsForJava(p)...) } diff --git a/syft/pkg/cataloger/cpe_test.go b/syft/pkg/cataloger/cpe_test.go index 678eed7aa..17289344f 100644 --- a/syft/pkg/cataloger/cpe_test.go +++ b/syft/pkg/cataloger/cpe_test.go @@ -195,7 +195,6 @@ func TestGeneratePackageCPEs(t *testing.T) { for _, d := range missing { t.Errorf("missing CPE: %+v", d) } - }) } } @@ -212,6 +211,32 @@ func TestCandidateProducts(t *testing.T) { }, expected: []string{"spring_framework", "springsource_spring_framework" /* <-- known good names | default guess --> */, "springframework"}, }, + { + p: pkg.Package{ + Name: "some-java-package-with-group-id", + Type: pkg.JavaPkg, + Language: pkg.Java, + Metadata: pkg.JavaMetadata{ + PomProperties: &pkg.PomProperties{ + GroupID: "com.apple.itunes", + }, + }, + }, + expected: []string{"itunes", "some-java-package-with-group-id"}, + }, + { + p: pkg.Package{ + Name: "some-jenkins-plugin", + Type: pkg.JenkinsPluginPkg, + Language: pkg.Java, + Metadata: pkg.JavaMetadata{ + PomProperties: &pkg.PomProperties{ + GroupID: "com.cloudbees.jenkins.plugins", + }, + }, + }, + expected: []string{"some-jenkins-plugin"}, + }, { p: pkg.Package{ Name: "handlebars.js", @@ -237,7 +262,67 @@ func TestCandidateProducts(t *testing.T) { for _, test := range tests { t.Run(fmt.Sprintf("%+v %+v", test.p, test.expected), func(t *testing.T) { - assert.Equal(t, test.expected, candidateProducts(test.p)) + assert.ElementsMatch(t, test.expected, candidateProducts(test.p)) + }) + } +} + +func TestCandidateTargetSoftwareAttrs(t *testing.T) { + cases := []struct { + name string + p pkg.Package + expected []string + }{ + { + name: "Java", + p: pkg.Package{ + Language: pkg.Java, + Type: pkg.JavaPkg, + }, + expected: []string{"java", "maven"}, + }, + { + name: "Jenkins plugin", + p: pkg.Package{ + Language: pkg.Java, + Type: pkg.JenkinsPluginPkg, + }, + expected: []string{"jenkins", "cloudbees_jenkins"}, + }, + { + name: "JavaScript", + p: pkg.Package{ + Language: pkg.JavaScript, + }, + expected: []string{"node.js", "nodejs"}, + }, + { + name: "Ruby", + p: pkg.Package{ + Language: pkg.Ruby, + }, + expected: []string{"ruby", "rails"}, + }, + { + name: "Python", + p: pkg.Package{ + Language: pkg.Python, + }, + expected: []string{"python"}, + }, + { + name: "Other language", + p: pkg.Package{ + Language: pkg.Rust, + }, + expected: nil, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + actual := candidateTargetSoftwareAttrs(tc.p) + assert.Equal(t, tc.expected, actual) }) } }