mirror of
https://github.com/anchore/syft.git
synced 2026-11-01 15:06:36 +01:00
add file source digest support (#1914)
Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
package file
|
||||
|
||||
import (
|
||||
"crypto"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/anchore/syft/syft/file"
|
||||
)
|
||||
|
||||
func TestCleanDigestAlgorithmName(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input string
|
||||
want string
|
||||
}{
|
||||
{
|
||||
name: "go case",
|
||||
input: "SHA-256",
|
||||
want: "sha256",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
assert.Equal(t, tt.want, CleanDigestAlgorithmName(tt.input))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewDigestsFromFile(t *testing.T) {
|
||||
require.NotEmpty(t, supportedHashAlgorithms())
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
fixture string
|
||||
hashes []crypto.Hash
|
||||
want []file.Digest
|
||||
wantErr require.ErrorAssertionFunc
|
||||
}{
|
||||
{
|
||||
name: "check supported hash algorithms",
|
||||
fixture: "test-fixtures/digest.txt",
|
||||
hashes: supportedHashAlgorithms(),
|
||||
want: []file.Digest{
|
||||
{
|
||||
Algorithm: "md5",
|
||||
Value: "e8818a24402ae7f8b874cdd9350c1b51",
|
||||
},
|
||||
{
|
||||
Algorithm: "sha1",
|
||||
Value: "eea4671d168c81fd52e615ed9fb3531a526f4748",
|
||||
},
|
||||
{
|
||||
Algorithm: "sha224",
|
||||
Value: "fd993e84c7afb449d34bcae7c5ee118f5c73b50170da05171523b22c",
|
||||
},
|
||||
{
|
||||
Algorithm: "sha256",
|
||||
Value: "cbf1a703b7e4a67529d6e17114880dfa9f879f3749872e1a9d4a20ac509165ad",
|
||||
},
|
||||
{
|
||||
Algorithm: "sha384",
|
||||
Value: "1eaded3f17fb8d7b731c9175a0f355d3a35575c3cb6cdda46a5272b632968d7257a5e6437d0efae599a81a1b2dcc81ba",
|
||||
},
|
||||
{
|
||||
Algorithm: "sha512",
|
||||
Value: "b49d5995456edba144dce750eaa8eae12af8fd08c076d401fcf78aac4172080feb70baaa5ed8c1b05046ec278446330fbf77e8ca9e60c03945ded761a641a7e1",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if tt.wantErr == nil {
|
||||
tt.wantErr = require.NoError
|
||||
}
|
||||
|
||||
fh, err := os.Open(tt.fixture)
|
||||
require.NoError(t, err)
|
||||
|
||||
got, err := NewDigestsFromFile(fh, tt.hashes)
|
||||
tt.wantErr(t, err)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestHashers(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
names []string
|
||||
want []crypto.Hash
|
||||
wantErr require.ErrorAssertionFunc
|
||||
}{
|
||||
{
|
||||
name: "check supported hash algorithms",
|
||||
names: []string{"MD-5", "shA1", "sHa224", "sha---256", "sha384", "sha512"},
|
||||
want: []crypto.Hash{
|
||||
crypto.MD5,
|
||||
crypto.SHA1,
|
||||
crypto.SHA224,
|
||||
crypto.SHA256,
|
||||
crypto.SHA384,
|
||||
crypto.SHA512,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "error on unsupported hash algorithm",
|
||||
names: []string{"made-up"},
|
||||
wantErr: require.Error,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if tt.wantErr == nil {
|
||||
tt.wantErr = require.NoError
|
||||
}
|
||||
got, err := Hashers(tt.names...)
|
||||
tt.wantErr(t, err)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user