github.com/0chain/gosdk@v1.17.11/core/util/fixed_merkle_tree_test.go (about) 1 package util 2 3 import ( 4 "math/rand" 5 "testing" 6 7 "fmt" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 const ( 13 KB = 1024 14 ) 15 16 func TestFixedMerkleTreeWrite(t *testing.T) { 17 for i := 0; i < 100; i++ { 18 var n int64 19 for { 20 n = rand.Int63n(KB * KB) 21 if n != 0 { 22 break 23 } 24 } 25 26 t.Run(fmt.Sprintf("Fmt test with dataSize: %d", n), func(t *testing.T) { 27 28 b := make([]byte, n) 29 rand.Read(b) //nolint 30 31 leaves := make([]Hashable, FixedMerkleLeaves) 32 for i := 0; i < len(leaves); i++ { 33 leaves[i] = getNewLeaf() 34 } 35 36 for i := 0; i < len(b); i += MaxMerkleLeavesSize { 37 leafCount := 0 38 endInd := i + MaxMerkleLeavesSize 39 if endInd > len(b) { 40 endInd = len(b) 41 } 42 43 d := b[i:endInd] 44 for j := 0; j < len(d); j += MerkleChunkSize { 45 endInd := j + MerkleChunkSize 46 if endInd > len(d) { 47 endInd = len(d) 48 } 49 50 _, err := leaves[leafCount].Write(d[j:endInd]) 51 require.NoError(t, err) 52 leafCount++ 53 } 54 } 55 56 mt := MerkleTree{} 57 mt.ComputeTree(leaves) 58 59 root := mt.GetRoot() 60 61 ft := NewFixedMerkleTree() 62 _, err := ft.Write(b) 63 require.NoError(t, err) 64 err = ft.Finalize() 65 require.NoError(t, err) 66 67 root1 := ft.GetMerkleRoot() 68 require.Equal(t, root, root1) 69 }) 70 } 71 }