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 }