github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/internal/file/digest_test.go (about) 1 package file 2 3 import ( 4 "crypto" 5 "os" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 11 "github.com/anchore/syft/syft/file" 12 ) 13 14 func TestCleanDigestAlgorithmName(t *testing.T) { 15 tests := []struct { 16 name string 17 input string 18 want string 19 }{ 20 { 21 name: "go case", 22 input: "SHA-256", 23 want: "sha256", 24 }, 25 } 26 for _, tt := range tests { 27 t.Run(tt.name, func(t *testing.T) { 28 assert.Equal(t, tt.want, CleanDigestAlgorithmName(tt.input)) 29 }) 30 } 31 } 32 33 func TestNewDigestsFromFile(t *testing.T) { 34 require.NotEmpty(t, supportedHashAlgorithms()) 35 36 tests := []struct { 37 name string 38 fixture string 39 hashes []crypto.Hash 40 want []file.Digest 41 wantErr require.ErrorAssertionFunc 42 }{ 43 { 44 name: "check supported hash algorithms", 45 fixture: "test-fixtures/digest.txt", 46 hashes: supportedHashAlgorithms(), 47 want: []file.Digest{ 48 { 49 Algorithm: "md5", 50 Value: "e8818a24402ae7f8b874cdd9350c1b51", 51 }, 52 { 53 Algorithm: "sha1", 54 Value: "eea4671d168c81fd52e615ed9fb3531a526f4748", 55 }, 56 { 57 Algorithm: "sha224", 58 Value: "fd993e84c7afb449d34bcae7c5ee118f5c73b50170da05171523b22c", 59 }, 60 { 61 Algorithm: "sha256", 62 Value: "cbf1a703b7e4a67529d6e17114880dfa9f879f3749872e1a9d4a20ac509165ad", 63 }, 64 { 65 Algorithm: "sha384", 66 Value: "1eaded3f17fb8d7b731c9175a0f355d3a35575c3cb6cdda46a5272b632968d7257a5e6437d0efae599a81a1b2dcc81ba", 67 }, 68 { 69 Algorithm: "sha512", 70 Value: "b49d5995456edba144dce750eaa8eae12af8fd08c076d401fcf78aac4172080feb70baaa5ed8c1b05046ec278446330fbf77e8ca9e60c03945ded761a641a7e1", 71 }, 72 }, 73 }, 74 } 75 for _, tt := range tests { 76 t.Run(tt.name, func(t *testing.T) { 77 if tt.wantErr == nil { 78 tt.wantErr = require.NoError 79 } 80 81 fh, err := os.Open(tt.fixture) 82 require.NoError(t, err) 83 84 got, err := NewDigestsFromFile(fh, tt.hashes) 85 tt.wantErr(t, err) 86 if err != nil { 87 return 88 } 89 assert.Equal(t, tt.want, got) 90 }) 91 } 92 } 93 94 func TestHashers(t *testing.T) { 95 tests := []struct { 96 name string 97 names []string 98 want []crypto.Hash 99 wantErr require.ErrorAssertionFunc 100 }{ 101 { 102 name: "check supported hash algorithms", 103 names: []string{"MD-5", "shA1", "sHa224", "sha---256", "sha384", "sha512"}, 104 want: []crypto.Hash{ 105 crypto.MD5, 106 crypto.SHA1, 107 crypto.SHA224, 108 crypto.SHA256, 109 crypto.SHA384, 110 crypto.SHA512, 111 }, 112 }, 113 { 114 name: "error on unsupported hash algorithm", 115 names: []string{"made-up"}, 116 wantErr: require.Error, 117 }, 118 } 119 for _, tt := range tests { 120 t.Run(tt.name, func(t *testing.T) { 121 if tt.wantErr == nil { 122 tt.wantErr = require.NoError 123 } 124 got, err := Hashers(tt.names...) 125 tt.wantErr(t, err) 126 if err != nil { 127 return 128 } 129 assert.Equal(t, tt.want, got) 130 }) 131 } 132 }