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  }