baseapp: more tests
This commit is contained in:
parent
958a632eed
commit
31ce53e256
|
@ -384,13 +384,3 @@ func (app *BaseApp) Commit() (res abci.ResponseCommit) {
|
||||||
Data: commitID.Hash,
|
Data: commitID.Hash,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------
|
|
||||||
// Helpers
|
|
||||||
|
|
||||||
func (app *BaseApp) getMultiStore(isCheckTx bool) sdk.MultiStore {
|
|
||||||
if isCheckTx {
|
|
||||||
return app.msCheck
|
|
||||||
}
|
|
||||||
return app.msDeliver
|
|
||||||
}
|
|
||||||
|
|
|
@ -51,6 +51,19 @@ func TestMountStores(t *testing.T) {
|
||||||
|
|
||||||
func TestLoadVersion(t *testing.T) {
|
func TestLoadVersion(t *testing.T) {
|
||||||
// TODO
|
// TODO
|
||||||
|
// Test that we can make commits and then reload old versions.
|
||||||
|
// Test that LoadLatestVersion actually does.
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTxDecoder(t *testing.T) {
|
||||||
|
// TODO
|
||||||
|
// Test that txs can be unmarshalled and read and that
|
||||||
|
// correct error codes are returned when not
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInfo(t *testing.T) {
|
||||||
|
// TODO
|
||||||
|
// Test that Info returns the latest committed state.
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInitChainer(t *testing.T) {
|
func TestInitChainer(t *testing.T) {
|
||||||
|
@ -88,7 +101,114 @@ func TestInitChainer(t *testing.T) {
|
||||||
assert.Equal(t, value, res.Value)
|
assert.Equal(t, value, res.Value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test that successive CheckTx can see eachothers effects
|
||||||
|
// on the store within a block, and that the CheckTx state
|
||||||
|
// gets reset to the latest Committed state during Commit
|
||||||
|
func TestCheckTx(t *testing.T) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test that successive DeliverTx can see eachothers effects
|
||||||
|
// on the store, both within and across blocks.
|
||||||
|
func TestDeliverTx(t *testing.T) {
|
||||||
|
app := newBaseApp(t.Name())
|
||||||
|
|
||||||
|
// make a cap key and mount the store
|
||||||
|
capKey := sdk.NewKVStoreKey("main")
|
||||||
|
app.MountStoresIAVL(capKey)
|
||||||
|
err := app.LoadLatestVersion(capKey) // needed to make stores non-nil
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
counter := 0
|
||||||
|
txPerHeight := 2
|
||||||
|
app.SetAnteHandler(func(ctx sdk.Context, tx sdk.Tx) (newCtx sdk.Context, res sdk.Result, abort bool) { return })
|
||||||
|
app.Router().AddRoute(msgType, func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
|
||||||
|
store := ctx.KVStore(capKey)
|
||||||
|
if counter > 0 {
|
||||||
|
// check previous value in store
|
||||||
|
counterBytes := []byte{byte(counter - 1)}
|
||||||
|
prevBytes := store.Get(counterBytes)
|
||||||
|
assert.Equal(t, prevBytes, counterBytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
// set the current counter in the store
|
||||||
|
counterBytes := []byte{byte(counter)}
|
||||||
|
store.Set(counterBytes, counterBytes)
|
||||||
|
|
||||||
|
// check we can see the current header
|
||||||
|
thisHeader := ctx.BlockHeader()
|
||||||
|
height := int64((counter / txPerHeight) + 1)
|
||||||
|
assert.Equal(t, height, thisHeader.Height)
|
||||||
|
|
||||||
|
counter += 1
|
||||||
|
return sdk.Result{}
|
||||||
|
})
|
||||||
|
|
||||||
|
tx := testUpdatePowerTx{} // doesn't matter
|
||||||
|
header := abci.Header{AppHash: []byte("apphash")}
|
||||||
|
|
||||||
|
nBlocks := 3
|
||||||
|
for blockN := 0; blockN < nBlocks; blockN++ {
|
||||||
|
// block1
|
||||||
|
header.Height = int64(blockN + 1)
|
||||||
|
app.BeginBlock(abci.RequestBeginBlock{Header: header})
|
||||||
|
for i := 0; i < txPerHeight; i++ {
|
||||||
|
app.Deliver(tx)
|
||||||
|
}
|
||||||
|
app.EndBlock(abci.RequestEndBlock{})
|
||||||
|
app.Commit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test that we can only query from the latest committed state.
|
||||||
|
func TestQuery(t *testing.T) {
|
||||||
|
app := newBaseApp(t.Name())
|
||||||
|
|
||||||
|
// make a cap key and mount the store
|
||||||
|
capKey := sdk.NewKVStoreKey("main")
|
||||||
|
app.MountStoresIAVL(capKey)
|
||||||
|
err := app.LoadLatestVersion(capKey) // needed to make stores non-nil
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
key, value := []byte("hello"), []byte("goodbye")
|
||||||
|
|
||||||
|
app.SetAnteHandler(func(ctx sdk.Context, tx sdk.Tx) (newCtx sdk.Context, res sdk.Result, abort bool) { return })
|
||||||
|
app.Router().AddRoute(msgType, func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
|
||||||
|
store := ctx.KVStore(capKey)
|
||||||
|
store.Set(key, value)
|
||||||
|
return sdk.Result{}
|
||||||
|
})
|
||||||
|
|
||||||
|
query := abci.RequestQuery{
|
||||||
|
Path: "/main/key",
|
||||||
|
Data: key,
|
||||||
|
}
|
||||||
|
|
||||||
|
// query is empty before we do anything
|
||||||
|
res := app.Query(query)
|
||||||
|
assert.Equal(t, 0, len(res.Value))
|
||||||
|
|
||||||
|
tx := testUpdatePowerTx{} // doesn't matter
|
||||||
|
|
||||||
|
// query is still empty after a CheckTx
|
||||||
|
app.Check(tx)
|
||||||
|
res = app.Query(query)
|
||||||
|
assert.Equal(t, 0, len(res.Value))
|
||||||
|
|
||||||
|
// query is still empty after a DeliverTx before we commit
|
||||||
|
app.BeginBlock(abci.RequestBeginBlock{})
|
||||||
|
app.Deliver(tx)
|
||||||
|
res = app.Query(query)
|
||||||
|
assert.Equal(t, 0, len(res.Value))
|
||||||
|
|
||||||
|
// query returns correct value after Commit
|
||||||
|
app.Commit()
|
||||||
|
res = app.Query(query)
|
||||||
|
assert.Equal(t, value, res.Value)
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------
|
//----------------------
|
||||||
|
// TODO: clean this up
|
||||||
|
|
||||||
// A mock transaction to update a validator's voting power.
|
// A mock transaction to update a validator's voting power.
|
||||||
type testUpdatePowerTx struct {
|
type testUpdatePowerTx struct {
|
||||||
|
@ -107,7 +227,7 @@ func (tx testUpdatePowerTx) GetSigners() []crypto.Address { return ni
|
||||||
func (tx testUpdatePowerTx) GetFeePayer() crypto.Address { return nil }
|
func (tx testUpdatePowerTx) GetFeePayer() crypto.Address { return nil }
|
||||||
func (tx testUpdatePowerTx) GetSignatures() []sdk.StdSignature { return nil }
|
func (tx testUpdatePowerTx) GetSignatures() []sdk.StdSignature { return nil }
|
||||||
|
|
||||||
func TestExecution(t *testing.T) {
|
func TestValidatorChange(t *testing.T) {
|
||||||
|
|
||||||
// Create app.
|
// Create app.
|
||||||
app := newBaseApp(t.Name())
|
app := newBaseApp(t.Name())
|
||||||
|
|
Loading…
Reference in New Issue