mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
--------- Signed-off-by: Christopher Phillips <32073428+spiffcs@users.noreply.github.com> Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> Co-authored-by: Alex Goodman <wagoodman@users.noreply.github.com>
82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
package licenses
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/google/licensecheck"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDefaultScanner_FindEvidence(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
fixture string
|
|
wantIDs []string // expected license IDs
|
|
minMatch int // minimum # of matches required
|
|
}{
|
|
{
|
|
name: "Single licenses are able to be recognized and returned Apache 2.0",
|
|
fixture: "test-fixtures/apache-license-2.0",
|
|
wantIDs: []string{"Apache-2.0"},
|
|
minMatch: 1,
|
|
},
|
|
{
|
|
name: "Multiple Licenses are returned as evidence with duplicates at different offset",
|
|
fixture: "test-fixtures/multi-license",
|
|
wantIDs: []string{
|
|
"MIT",
|
|
"MIT",
|
|
"NCSA",
|
|
"Apache-2.0",
|
|
"Zlib",
|
|
"Unlicense",
|
|
"BSD-2-Clause",
|
|
"BSD-2-Clause",
|
|
"BSD-3-Clause",
|
|
},
|
|
minMatch: 2,
|
|
},
|
|
}
|
|
|
|
scanner := testScanner()
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
filePath := filepath.Clean(tc.fixture)
|
|
f, err := os.Open(filePath)
|
|
require.NoError(t, err)
|
|
defer f.Close()
|
|
|
|
evidence, content, err := scanner.FindEvidence(context.Background(), f)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, content)
|
|
require.GreaterOrEqual(t, len(evidence), tc.minMatch, "expected at least %d matches", tc.minMatch)
|
|
|
|
var foundIDs []string
|
|
for _, ev := range evidence {
|
|
foundIDs = append(foundIDs, ev.ID)
|
|
}
|
|
|
|
require.ElementsMatch(t, tc.wantIDs, foundIDs, "expected license IDs %v, but got %v", tc.wantIDs, foundIDs)
|
|
})
|
|
}
|
|
}
|
|
|
|
func testScanner() Scanner {
|
|
return &scanner{
|
|
coverageThreshold: DefaultCoverageThreshold,
|
|
scanner: licensecheck.Scan,
|
|
}
|
|
}
|
|
|
|
func mustOpen(fixture string) []byte {
|
|
content, err := os.ReadFile(fixture)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return content
|
|
}
|