github.com/artpar/rclone@v1.67.3/backend/dropbox/dbhash/dbhash_test.go (about) 1 package dbhash_test 2 3 import ( 4 "encoding/hex" 5 "fmt" 6 "testing" 7 8 "github.com/artpar/rclone/backend/dropbox/dbhash" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func testChunk(t *testing.T, chunk int) { 13 data := make([]byte, chunk) 14 for i := 0; i < chunk; i++ { 15 data[i] = 'A' 16 } 17 for _, test := range []struct { 18 n int 19 want string 20 }{ 21 {0, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, 22 {1, "1cd6ef71e6e0ff46ad2609d403dc3fee244417089aa4461245a4e4fe23a55e42"}, 23 {2, "01e0655fb754d10418a73760f57515f4903b298e6d67dda6bf0987fa79c22c88"}, 24 {4096, "8620913d33852befe09f16fff8fd75f77a83160d29f76f07e0276e9690903035"}, 25 {4194303, "647c8627d70f7a7d13ce96b1e7710a771a55d41a62c3da490d92e56044d311fa"}, 26 {4194304, "d4d63bac5b866c71620185392a8a6218ac1092454a2d16f820363b69852befa3"}, 27 {4194305, "8f553da8d00d0bf509d8470e242888be33019c20c0544811f5b2b89e98360b92"}, 28 {8388607, "83b30cf4fb5195b04a937727ae379cf3d06673bf8f77947f6a92858536e8369c"}, 29 {8388608, "e08b3ba1f538804075c5f939accdeaa9efc7b5c01865c94a41e78ca6550a88e7"}, 30 {8388609, "02c8a4aefc2bfc9036f89a7098001865885938ca580e5c9e5db672385edd303c"}, 31 } { 32 d := dbhash.New() 33 var toWrite int 34 for toWrite = test.n; toWrite >= chunk; toWrite -= chunk { 35 n, err := d.Write(data) 36 assert.Nil(t, err) 37 assert.Equal(t, chunk, n) 38 } 39 n, err := d.Write(data[:toWrite]) 40 assert.Nil(t, err) 41 assert.Equal(t, toWrite, n) 42 got := hex.EncodeToString(d.Sum(nil)) 43 assert.Equal(t, test.want, got, fmt.Sprintf("when testing length %d", n)) 44 45 } 46 } 47 48 func TestHashChunk16M(t *testing.T) { testChunk(t, 16*1024*1024) } 49 func TestHashChunk8M(t *testing.T) { testChunk(t, 8*1024*1024) } 50 func TestHashChunk4M(t *testing.T) { testChunk(t, 4*1024*1024) } 51 func TestHashChunk2M(t *testing.T) { testChunk(t, 2*1024*1024) } 52 func TestHashChunk1M(t *testing.T) { testChunk(t, 1*1024*1024) } 53 func TestHashChunk64k(t *testing.T) { testChunk(t, 64*1024) } 54 func TestHashChunk32k(t *testing.T) { testChunk(t, 32*1024) } 55 func TestHashChunk2048(t *testing.T) { testChunk(t, 2048) } 56 func TestHashChunk2047(t *testing.T) { testChunk(t, 2047) } 57 58 func TestSumCalledTwice(t *testing.T) { 59 d := dbhash.New() 60 assert.NotPanics(t, func() { d.Sum(nil) }) 61 d.Reset() 62 assert.NotPanics(t, func() { d.Sum(nil) }) 63 assert.NotPanics(t, func() { d.Sum(nil) }) 64 _, _ = d.Write([]byte{1}) 65 assert.Panics(t, func() { d.Sum(nil) }) 66 } 67 68 func TestSize(t *testing.T) { 69 d := dbhash.New() 70 assert.Equal(t, 32, d.Size()) 71 } 72 73 func TestBlockSize(t *testing.T) { 74 d := dbhash.New() 75 assert.Equal(t, 64, d.BlockSize()) 76 } 77 78 func TestSum(t *testing.T) { 79 assert.Equal(t, 80 [64]byte{ 81 0x1c, 0xd6, 0xef, 0x71, 0xe6, 0xe0, 0xff, 0x46, 82 0xad, 0x26, 0x09, 0xd4, 0x03, 0xdc, 0x3f, 0xee, 83 0x24, 0x44, 0x17, 0x08, 0x9a, 0xa4, 0x46, 0x12, 84 0x45, 0xa4, 0xe4, 0xfe, 0x23, 0xa5, 0x5e, 0x42, 85 }, 86 dbhash.Sum([]byte{'A'}), 87 ) 88 }