github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/keeper/snapshotter_integration_test.go (about) 1 package keeper_test 2 3 //import ( 4 // "crypto/sha256" 5 // "io/ioutil" 6 // "testing" 7 // "time" 8 // 9 // "github.com/fibonacci-chain/fbc/x/wasm/types" 10 // 11 // "github.com/stretchr/testify/assert" 12 // 13 // cryptocodec "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/crypto/codec" 14 // "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/crypto/keys/ed25519" 15 // sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 16 // authtypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/types" 17 // banktypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank/types" 18 // "github.com/stretchr/testify/require" 19 // tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 20 // tmtypes "github.com/tendermint/tendermint/types" 21 // 22 // "github.com/fibonacci-chain/fbc/app" 23 // "github.com/fibonacci-chain/fbc/x/wasm/keeper" 24 //) 25 // 26 //func TestSnapshotter(t *testing.T) { 27 // specs := map[string]struct { 28 // wasmFiles []string 29 // }{ 30 // "single contract": { 31 // wasmFiles: []string{"./testdata/reflect.wasm"}, 32 // }, 33 // "multiple contract": { 34 // wasmFiles: []string{"./testdata/reflect.wasm", "./testdata/burner.wasm", "./testdata/reflect.wasm"}, 35 // }, 36 // "duplicate contracts": { 37 // wasmFiles: []string{"./testdata/reflect.wasm", "./testdata/reflect.wasm"}, 38 // }, 39 // } 40 // for name, spec := range specs { 41 // t.Run(name, func(t *testing.T) { 42 // // setup source app 43 // srcWasmApp, genesisAddr := newWasmExampleApp(t) 44 // 45 // // store wasm codes on chain 46 // ctx := srcWasmApp.NewUncachedContext(false, tmproto.Header{ 47 // ChainID: "foo", 48 // Height: srcWasmApp.LastBlockHeight() + 1, 49 // Time: time.Now(), 50 // }) 51 // wasmKeeper := app.NewTestSupport(t, srcWasmApp).WasmKeeper() 52 // contractKeeper := keeper.NewDefaultPermissionKeeper(&wasmKeeper) 53 // 54 // srcCodeIDToChecksum := make(map[uint64][]byte, len(spec.wasmFiles)) 55 // for i, v := range spec.wasmFiles { 56 // wasmCode, err := ioutil.ReadFile(v) 57 // require.NoError(t, err) 58 // codeID, err := contractKeeper.Create(ctx, genesisAddr, wasmCode, nil) 59 // require.NoError(t, err) 60 // require.Equal(t, uint64(i+1), codeID) 61 // hash := sha256.Sum256(wasmCode) 62 // srcCodeIDToChecksum[codeID] = hash[:] 63 // } 64 // // create snapshot 65 // srcWasmApp.Commit() 66 // snapshotHeight := uint64(srcWasmApp.LastBlockHeight()) 67 // snapshot, err := srcWasmApp.SnapshotManager().Create(snapshotHeight) 68 // require.NoError(t, err) 69 // assert.NotNil(t, snapshot) 70 // 71 // // when snapshot imported into dest app instance 72 // destWasmApp := app.SetupWithEmptyStore(t) 73 // require.NoError(t, destWasmApp.SnapshotManager().Restore(*snapshot)) 74 // for i := uint32(0); i < snapshot.Chunks; i++ { 75 // chunkBz, err := srcWasmApp.SnapshotManager().LoadChunk(snapshot.Height, snapshot.Format, i) 76 // require.NoError(t, err) 77 // end, err := destWasmApp.SnapshotManager().RestoreChunk(chunkBz) 78 // require.NoError(t, err) 79 // if end { 80 // break 81 // } 82 // } 83 // 84 // // then all wasm contracts are imported 85 // wasmKeeper = app.NewTestSupport(t, destWasmApp).WasmKeeper() 86 // ctx = destWasmApp.NewUncachedContext(false, tmproto.Header{ 87 // ChainID: "foo", 88 // Height: destWasmApp.LastBlockHeight() + 1, 89 // Time: time.Now(), 90 // }) 91 // 92 // destCodeIDToChecksum := make(map[uint64][]byte, len(spec.wasmFiles)) 93 // wasmKeeper.IterateCodeInfos(ctx, func(id uint64, info types.CodeInfo) bool { 94 // bz, err := wasmKeeper.GetByteCode(ctx, id) 95 // require.NoError(t, err) 96 // hash := sha256.Sum256(bz) 97 // destCodeIDToChecksum[id] = hash[:] 98 // assert.Equal(t, hash[:], info.CodeHash) 99 // return false 100 // }) 101 // assert.Equal(t, srcCodeIDToChecksum, destCodeIDToChecksum) 102 // }) 103 // } 104 //} 105 // 106 //func newWasmExampleApp(t *testing.T) (*app.WasmApp, sdk.AccAddress) { 107 // senderPrivKey := ed25519.GenPrivKey() 108 // pubKey, err := cryptocodec.ToTmPubKeyInterface(senderPrivKey.PubKey()) 109 // require.NoError(t, err) 110 // 111 // senderAddr := senderPrivKey.PubKey().Address().Bytes() 112 // acc := authtypes.NewBaseAccount(senderAddr, senderPrivKey.PubKey(), 0, 0) 113 // amount, ok := sdk.NewIntFromString("10000000000000000000") 114 // require.True(t, ok) 115 // 116 // balance := banktypes.Balance{ 117 // Address: acc.GetAddress().String(), 118 // Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, amount)), 119 // } 120 // validator := tmtypes.NewValidator(pubKey, 1) 121 // valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator}) 122 // wasmApp := app.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, nil, balance) 123 // 124 // return wasmApp, senderAddr 125 //}