github.com/MetalBlockchain/subnet-evm@v0.4.9/plugin/evm/message/leafs_request_test.go (about) 1 // (c) 2021-2022, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package message 5 6 import ( 7 "encoding/base64" 8 "math/rand" 9 "testing" 10 11 "github.com/ethereum/go-ethereum/common" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 // TestMarshalLeafsRequest asserts that the structure or serialization logic hasn't changed, primarily to 16 // ensure compatibility with the network. 17 func TestMarshalLeafsRequest(t *testing.T) { 18 // generate some random code data 19 // set random seed for deterministic random 20 rand.Seed(1) 21 22 startBytes := make([]byte, common.HashLength) 23 endBytes := make([]byte, common.HashLength) 24 25 _, err := rand.Read(startBytes) 26 assert.NoError(t, err) 27 28 _, err = rand.Read(endBytes) 29 assert.NoError(t, err) 30 31 leafsRequest := LeafsRequest{ 32 Root: common.BytesToHash([]byte("im ROOTing for ya")), 33 Start: startBytes, 34 End: endBytes, 35 Limit: 1024, 36 } 37 38 base64LeafsRequest := "AAAAAAAAAAAAAAAAAAAAAABpbSBST09UaW5nIGZvciB5YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFL9/AchgmVPFj9fD5piHXKVZsdNEAN8TXu7BAfR4sZJAAAAIIGFWthoHQ2G0ekeABZ5OctmlNLEIqzSCKAHKTlIf2mZBAA=" 39 40 leafsRequestBytes, err := Codec.Marshal(Version, leafsRequest) 41 assert.NoError(t, err) 42 assert.Equal(t, base64LeafsRequest, base64.StdEncoding.EncodeToString(leafsRequestBytes)) 43 44 var l LeafsRequest 45 _, err = Codec.Unmarshal(leafsRequestBytes, &l) 46 assert.NoError(t, err) 47 assert.Equal(t, leafsRequest.Root, l.Root) 48 assert.Equal(t, leafsRequest.Start, l.Start) 49 assert.Equal(t, leafsRequest.End, l.End) 50 assert.Equal(t, leafsRequest.Limit, l.Limit) 51 } 52 53 // TestMarshalLeafsResponse asserts that the structure or serialization logic hasn't changed, primarily to 54 // ensure compatibility with the network. 55 func TestMarshalLeafsResponse(t *testing.T) { 56 // generate some random code data 57 // set random seed for deterministic random 58 rand.Seed(1) 59 60 keysBytes := make([][]byte, 16) 61 valsBytes := make([][]byte, 16) 62 for i := range keysBytes { 63 keysBytes[i] = make([]byte, common.HashLength) 64 valsBytes[i] = make([]byte, rand.Intn(8)+8) // min 8 bytes, max 16 bytes 65 66 _, err := rand.Read(keysBytes[i]) 67 assert.NoError(t, err) 68 _, err = rand.Read(valsBytes[i]) 69 assert.NoError(t, err) 70 } 71 72 nextKey := make([]byte, common.HashLength) 73 _, err := rand.Read(nextKey) 74 assert.NoError(t, err) 75 76 proofVals := make([][]byte, 4) 77 for i := range proofVals { 78 proofVals[i] = make([]byte, rand.Intn(8)+8) // min 8 bytes, max 16 bytes 79 80 _, err = rand.Read(proofVals[i]) 81 assert.NoError(t, err) 82 } 83 84 leafsResponse := LeafsResponse{ 85 Keys: keysBytes, 86 Vals: valsBytes, 87 More: true, 88 ProofVals: proofVals, 89 } 90 91 base64LeafsResponse := "AAAAAAAQAAAAIE8WP18PmmIdcpVmx00QA3xNe7sEB9HixkmBhVrYaB0NAAAAIGagByk5SH9pmeudGKRHhARdh/PGfPInRumVr1olNnlRAAAAIK2zfFghtmgLTnyLdjobHUnUlVyEhiFjJSU/7HON16niAAAAIIYVu9oIMfUFmHWSHmaKW98sf8SERZLSVyvNBmjS1sUvAAAAIHHb2Wiw9xcu2FeUuzWLDDtSXaF4b5//CUJ52xlE69ehAAAAIPhMiSs77qX090OR9EXRWv1ClAQDdPaSS5jL+HE/jZYtAAAAIMr8yuOmvI+effHZKTM/+ZOTO+pvWzr23gN0NmxHGeQ6AAAAIBZZpE856x5YScYHfbtXIvVxeiiaJm+XZHmBmY6+qJwLAAAAIHOq53hmZ/fpNs1PJKv334ZrqlYDg2etYUXeHuj0qLCZAAAAIHiN5WOvpGfUnexqQOmh0AfwM8KCMGG90Oqln45NpkMBAAAAIKAQ13yW6oCnpmX2BvamO389/SVnwYl55NYPJmhtm/L7AAAAIAfuKbpk+Eq0PKDG5rkcH9O+iZBDQXnTr0SRo2kBLbktAAAAILsXyQKL6ZFOt2ScbJNHgAl50YMDVvKlTD3qsqS0R11jAAAAIOqxOTXzHYRIRRfpJK73iuFRwAdVklg2twdYhWUMMOwpAAAAIHnqPf5BNqv3UrO4Jx0D6USzyds2a3UEX479adIq5UEZAAAAIDLWEMqsbjP+qjJjo5lDcCS6nJsUZ4onTwGpEK4pX277AAAAEAAAAAmG0ekeABZ5OcsAAAAMuqL/bNRxxIPxX7kLAAAACov5IRGcFg8HAkQAAAAIUFTi0INr+EwAAAAOnQ97usvgJVqlt9RL7EAAAAAJfI0BkZLCQiTiAAAACxsGfYm8fwHx9XOYAAAADUs3OXARXoLtb0ElyPoAAAAKPr34iDoK2L6cOQAAAAoFIg0LKWiLc0uOAAAACCbJAf81TN4WAAAADBhPw50XNP9XFkKJUwAAAAuvvo+1aYfHf1gYUgAAAAqjcDk0v1CijaECAAAADkfLVT12lCZ670686kBrAAAADf5fWr9EzN4mO1YGYz4AAAAEAAAADlcyXwVWMEo+Pq4Uwo0MAAAADeo50qHks46vP0TGxu8AAAAOg2Ly9WQIVMFd/KyqiiwAAAAL7M5aOpS00zilFD4=" 92 93 leafsResponseBytes, err := Codec.Marshal(Version, leafsResponse) 94 assert.NoError(t, err) 95 assert.Equal(t, base64LeafsResponse, base64.StdEncoding.EncodeToString(leafsResponseBytes)) 96 97 var l LeafsResponse 98 _, err = Codec.Unmarshal(leafsResponseBytes, &l) 99 assert.NoError(t, err) 100 assert.Equal(t, leafsResponse.Keys, l.Keys) 101 assert.Equal(t, leafsResponse.Vals, l.Vals) 102 assert.False(t, l.More) // make sure it is not serialized 103 assert.Equal(t, leafsResponse.ProofVals, l.ProofVals) 104 }