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  }