98 lines
2.5 KiB
Go
98 lines
2.5 KiB
Go
package baseapp
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
)
|
|
|
|
// Test that we can only query from the latest committed state.
|
|
func TestQuery(t *testing.T) {
|
|
key, value := []byte("hello"), []byte("goodbye")
|
|
anteOpt := func(bapp *BaseApp) {
|
|
bapp.SetAnteHandler(func(ctx sdk.Context, tx sdk.Tx, simulate bool) (newCtx sdk.Context, res sdk.Result, abort bool) {
|
|
store := ctx.KVStore(capKey1)
|
|
store.Set(key, value)
|
|
return
|
|
})
|
|
}
|
|
|
|
routerOpt := func(bapp *BaseApp) {
|
|
bapp.Router().AddRoute(routeMsgCounter, func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
|
|
store := ctx.KVStore(capKey1)
|
|
store.Set(key, value)
|
|
return sdk.Result{}
|
|
})
|
|
}
|
|
|
|
app := setupBaseApp(t, anteOpt, routerOpt)
|
|
|
|
app.InitChain(abci.RequestInitChain{})
|
|
|
|
// NOTE: "/store/key1" tells us KVStore
|
|
// and the final "/key" says to use the data as the
|
|
// key in the given KVStore ...
|
|
query := abci.RequestQuery{
|
|
Path: "/store/key1/key",
|
|
Data: key,
|
|
}
|
|
tx := newTxCounter(0, 0)
|
|
|
|
// query is empty before we do anything
|
|
res := app.Query(query)
|
|
require.Equal(t, 0, len(res.Value))
|
|
|
|
// query is still empty after a CheckTx
|
|
resTx := app.Check(tx)
|
|
require.True(t, resTx.IsOK(), fmt.Sprintf("%v", resTx))
|
|
res = app.Query(query)
|
|
require.Equal(t, 0, len(res.Value))
|
|
|
|
// query is still empty after a DeliverTx before we commit
|
|
app.BeginBlock(abci.RequestBeginBlock{})
|
|
resTx = app.Deliver(tx)
|
|
require.True(t, resTx.IsOK(), fmt.Sprintf("%v", resTx))
|
|
res = app.Query(query)
|
|
require.Equal(t, 0, len(res.Value))
|
|
|
|
// query returns correct value after Commit
|
|
app.Commit()
|
|
res = app.Query(query)
|
|
require.Equal(t, value, res.Value)
|
|
}
|
|
|
|
// Test p2p filter queries
|
|
func TestP2PQuery(t *testing.T) {
|
|
addrPeerFilterOpt := func(bapp *BaseApp) {
|
|
bapp.SetAddrPeerFilter(func(addrport string) abci.ResponseQuery {
|
|
require.Equal(t, "1.1.1.1:8000", addrport)
|
|
return abci.ResponseQuery{Code: uint32(3)}
|
|
})
|
|
}
|
|
|
|
pubkeyPeerFilterOpt := func(bapp *BaseApp) {
|
|
bapp.SetPubKeyPeerFilter(func(pubkey string) abci.ResponseQuery {
|
|
require.Equal(t, "testpubkey", pubkey)
|
|
return abci.ResponseQuery{Code: uint32(4)}
|
|
})
|
|
}
|
|
|
|
app := setupBaseApp(t, addrPeerFilterOpt, pubkeyPeerFilterOpt)
|
|
|
|
addrQuery := abci.RequestQuery{
|
|
Path: "/p2p/filter/addr/1.1.1.1:8000",
|
|
}
|
|
res := app.Query(addrQuery)
|
|
require.Equal(t, uint32(3), res.Code)
|
|
|
|
pubkeyQuery := abci.RequestQuery{
|
|
Path: "/p2p/filter/pubkey/testpubkey",
|
|
}
|
|
res = app.Query(pubkeyQuery)
|
|
require.Equal(t, uint32(4), res.Code)
|
|
}
|