github.com/code-to-go/safepool.lib@v0.0.0-20221205180519-ee25e63c226e/algo/merkle_test.go (about) 1 package algo 2 3 import ( 4 "bytes" 5 "math/rand" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "golang.org/x/crypto/blake2b" 10 ) 11 12 func Test_MerkleTree(t *testing.T) { 13 rn := make([]byte, 40000) 14 rand.Seed(1975) 15 rand.Read(rn) 16 17 rn[0] = 16 18 m1, err := MerkleTreeFromReader(bytes.NewBuffer(rn), 13) 19 assert.NoErrorf(t, err, "Cannot create tree: %v", err) 20 assert.Equal(t, uint32(len(rn)), m1.DataLength, "unexpected length") 21 22 rn[0] = 8 23 m2, err := MerkleTreeFromReader(bytes.NewBuffer(rn), 13) 24 assert.NoErrorf(t, err, "Cannot create tree: %v", err) 25 assert.Equal(t, uint32(len(rn)), m2.DataLength, "unexpected length") 26 27 assert.NotEqualValues(t, m1.Blocks[0].Hash, m2.Blocks[0].Hash, "Unexpected same hash for first block") 28 assert.EqualValues(t, m1.Blocks[1].Hash, m2.Blocks[1].Hash, "Unexpected different hash for second block") 29 assert.NotEqualValues(t, MerkleTreeHash(m1), MerkleTreeHash(m2), "Unexpected same hash") 30 31 } 32 33 func Benchmark_Merkle(b *testing.B) { 34 rn := make([]byte, 1000*1000) 35 rand.Seed(1975) 36 rand.Read(rn) 37 38 for i := 0; i < 512; i++ { 39 MerkleTreeFromReader(bytes.NewBuffer(rn), 13) 40 } 41 } 42 43 func Benchmark_Blake(b *testing.B) { 44 blake, _ := blake2b.New256(nil) 45 rn := make([]byte, 1000*1000) 46 47 for i := 0; i < 512; i++ { 48 blake.Reset() 49 blake.Sum(rn) 50 } 51 52 }