mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
* ignore target link files based on path log when files are actually indexed add test for sym link resolution golang test nits Signed-off-by: Jonas Galvão Xavier <jonas.agx@gmail.com> * nil catalog should act like an empty catalog Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * remove dir path filtering in favor of file type filtering Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * split out addPathToIndex into specialized functions Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add test for nul catalog enumeration Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * conditionally discover MIME types for file based on file resolver index Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * change logging around cataloging Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add tests to cover possible infinite symlink loop for resolver Signed-off-by: Alex Goodman <alex.goodman@anchore.com> Co-authored-by: Alex Goodman <alex.goodman@anchore.com>
153 lines
3.4 KiB
Go
153 lines
3.4 KiB
Go
package file
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/anchore/syft/syft/source"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestClassifierCataloger_DefaultClassifiers_PositiveCases(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
fixtureDir string
|
|
location string
|
|
expected []Classification
|
|
expectedErr func(assert.TestingT, error, ...interface{}) bool
|
|
}{
|
|
{
|
|
name: "positive-libpython3.7.so",
|
|
fixtureDir: "test-fixtures/classifiers/positive",
|
|
location: "libpython3.7.so",
|
|
expected: []Classification{
|
|
{
|
|
Class: "python-binary",
|
|
Metadata: map[string]string{
|
|
"version": "3.7.4a-vZ9",
|
|
},
|
|
},
|
|
},
|
|
expectedErr: assert.NoError,
|
|
},
|
|
{
|
|
name: "positive-python3.6",
|
|
fixtureDir: "test-fixtures/classifiers/positive",
|
|
location: "python3.6",
|
|
expected: []Classification{
|
|
{
|
|
Class: "python-binary",
|
|
Metadata: map[string]string{
|
|
"version": "3.6.3a-vZ9",
|
|
},
|
|
},
|
|
},
|
|
expectedErr: assert.NoError,
|
|
},
|
|
{
|
|
name: "positive-patchlevel.h",
|
|
fixtureDir: "test-fixtures/classifiers/positive",
|
|
location: "patchlevel.h",
|
|
expected: []Classification{
|
|
{
|
|
Class: "cpython-source",
|
|
Metadata: map[string]string{
|
|
"version": "3.9-aZ5",
|
|
},
|
|
},
|
|
},
|
|
expectedErr: assert.NoError,
|
|
},
|
|
{
|
|
name: "positive-go",
|
|
fixtureDir: "test-fixtures/classifiers/positive",
|
|
location: "go",
|
|
expected: []Classification{
|
|
{
|
|
Class: "go-binary",
|
|
Metadata: map[string]string{
|
|
"version": "1.14",
|
|
},
|
|
},
|
|
},
|
|
expectedErr: assert.NoError,
|
|
},
|
|
{
|
|
name: "positive-go-hint",
|
|
fixtureDir: "test-fixtures/classifiers/positive",
|
|
location: "VERSION",
|
|
expected: []Classification{
|
|
{
|
|
Class: "go-binary-hint",
|
|
Metadata: map[string]string{
|
|
"version": "1.15",
|
|
},
|
|
},
|
|
},
|
|
expectedErr: assert.NoError,
|
|
},
|
|
{
|
|
name: "positive-busybox",
|
|
fixtureDir: "test-fixtures/classifiers/positive",
|
|
location: "busybox",
|
|
expected: []Classification{
|
|
{
|
|
Class: "busybox-binary",
|
|
Metadata: map[string]string{
|
|
"version": "3.33.3",
|
|
},
|
|
},
|
|
},
|
|
expectedErr: assert.NoError,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
|
|
c, err := NewClassificationCataloger(DefaultClassifiers)
|
|
test.expectedErr(t, err)
|
|
|
|
src, err := source.NewFromDirectory(test.fixtureDir)
|
|
test.expectedErr(t, err)
|
|
|
|
resolver, err := src.FileResolver(source.SquashedScope)
|
|
test.expectedErr(t, err)
|
|
|
|
actualResults, err := c.Catalog(resolver)
|
|
test.expectedErr(t, err)
|
|
|
|
loc := source.NewLocation(test.location)
|
|
|
|
ok := false
|
|
for actual_loc, actual_classification := range actualResults {
|
|
if loc.RealPath == actual_loc.RealPath {
|
|
ok = true
|
|
assert.Equal(t, test.expected, actual_classification)
|
|
}
|
|
}
|
|
|
|
if !ok {
|
|
t.Fatalf("could not find test location=%q", test.location)
|
|
}
|
|
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestClassifierCataloger_DefaultClassifiers_NegativeCases(t *testing.T) {
|
|
|
|
c, err := NewClassificationCataloger(DefaultClassifiers)
|
|
assert.NoError(t, err)
|
|
|
|
src, err := source.NewFromDirectory("test-fixtures/classifiers/negative")
|
|
assert.NoError(t, err)
|
|
|
|
resolver, err := src.FileResolver(source.SquashedScope)
|
|
assert.NoError(t, err)
|
|
|
|
actualResults, err := c.Catalog(resolver)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 0, len(actualResults))
|
|
|
|
}
|