github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/dump/source_test.go (about)

     1  package dump
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/hyperledger/burrow/bcm"
     7  	"github.com/hyperledger/burrow/execution/state"
     8  	"github.com/hyperledger/burrow/genesis"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestDumpLoadCycle(t *testing.T) {
    13  	// Get some initial test data from a mock state
    14  	mock := NewMockSource(100, 1, 20, 10)
    15  	st, err := state.MakeGenesisState(testDB(t), &genesis.GenesisDoc{})
    16  	err = Load(mock, st)
    17  	require.NoError(t, err)
    18  
    19  	// We want to check we get the same state after a dump restore, but we cannot compare with the intial loaded state
    20  	// st because mock source does not give dump in same order and IAVL is order-dependent, so we'll chain 2 dump/restores
    21  	// and compare the two resultant states
    22  
    23  	// Fresh states to load back into
    24  	stOut1, err := state.MakeGenesisState(testDB(t), &genesis.GenesisDoc{})
    25  	require.NoError(t, err)
    26  
    27  	stOut2, err := state.MakeGenesisState(testDB(t), &genesis.GenesisDoc{})
    28  	require.NoError(t, err)
    29  
    30  	// First dump from st and load stOut1
    31  	dump := dumpToJSONString(t, st, &bcm.Blockchain{})
    32  	loadDumpFromJSONString(t, stOut1, dump)
    33  
    34  	// Now dump from stOut1 and load to stOut2
    35  	dump2 := dumpToJSONString(t, stOut1, &bcm.Blockchain{})
    36  	loadDumpFromJSONString(t, stOut2, dump2)
    37  
    38  	require.Equal(t, dump, dump2)
    39  	require.Equal(t, stOut1.Version(), stOut2.Version())
    40  	require.Equal(t, stOut1.Hash(), stOut2.Hash())
    41  }