github.com/artpar/rclone@v1.67.3/backend/mailru/mrhash/mrhash_test.go (about) 1 package mrhash_test 2 3 import ( 4 "encoding/hex" 5 "fmt" 6 "testing" 7 8 "github.com/artpar/rclone/backend/mailru/mrhash" 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, "0000000000000000000000000000000000000000"}, 22 {1, "4100000000000000000000000000000000000000"}, 23 {2, "4141000000000000000000000000000000000000"}, 24 {19, "4141414141414141414141414141414141414100"}, 25 {20, "4141414141414141414141414141414141414141"}, 26 {21, "eb1d05e78a18691a5aa196a6c2b60cd40b5faafb"}, 27 {22, "037e6d960601118a0639afbeff30fe716c66ed2d"}, 28 {4096, "45a16aa192502b010280fb5b44274c601a91fd9f"}, 29 {4194303, "fa019d5bd26498cf6abe35e0d61801bf19bf704b"}, 30 {4194304, "5ed0e07aa6ea5c1beb9402b4d807258f27d40773"}, 31 {4194305, "67bd0b9247db92e0e7d7e29a0947a50fedcb5452"}, 32 {8388607, "41a8e2eb044c2e242971b5445d7be2a13fc0dd84"}, 33 {8388608, "267a970917c624c11fe624276ec60233a66dc2c0"}, 34 {8388609, "37b60b308d553d2732aefb62b3ea88f74acfa13f"}, 35 } { 36 d := mrhash.New() 37 var toWrite int 38 for toWrite = test.n; toWrite >= chunk; toWrite -= chunk { 39 n, err := d.Write(data) 40 assert.Nil(t, err) 41 assert.Equal(t, chunk, n) 42 } 43 n, err := d.Write(data[:toWrite]) 44 assert.Nil(t, err) 45 assert.Equal(t, toWrite, n) 46 got1 := hex.EncodeToString(d.Sum(nil)) 47 assert.Equal(t, test.want, got1, fmt.Sprintf("when testing length %d", n)) 48 got2 := hex.EncodeToString(d.Sum(nil)) 49 assert.Equal(t, test.want, got2, fmt.Sprintf("when testing length %d (2nd sum)", n)) 50 } 51 } 52 53 func TestHashChunk16M(t *testing.T) { testChunk(t, 16*1024*1024) } 54 func TestHashChunk8M(t *testing.T) { testChunk(t, 8*1024*1024) } 55 func TestHashChunk4M(t *testing.T) { testChunk(t, 4*1024*1024) } 56 func TestHashChunk2M(t *testing.T) { testChunk(t, 2*1024*1024) } 57 func TestHashChunk1M(t *testing.T) { testChunk(t, 1*1024*1024) } 58 func TestHashChunk64k(t *testing.T) { testChunk(t, 64*1024) } 59 func TestHashChunk32k(t *testing.T) { testChunk(t, 32*1024) } 60 func TestHashChunk2048(t *testing.T) { testChunk(t, 2048) } 61 func TestHashChunk2047(t *testing.T) { testChunk(t, 2047) } 62 63 func TestSumCalledTwice(t *testing.T) { 64 d := mrhash.New() 65 assert.NotPanics(t, func() { d.Sum(nil) }) 66 d.Reset() 67 assert.NotPanics(t, func() { d.Sum(nil) }) 68 assert.NotPanics(t, func() { d.Sum(nil) }) 69 _, _ = d.Write([]byte{1}) 70 assert.NotPanics(t, func() { d.Sum(nil) }) 71 } 72 73 func TestSize(t *testing.T) { 74 d := mrhash.New() 75 assert.Equal(t, 20, d.Size()) 76 } 77 78 func TestBlockSize(t *testing.T) { 79 d := mrhash.New() 80 assert.Equal(t, 64, d.BlockSize()) 81 }