Add genesis tests for source, builder

This commit is contained in:
anilCSE 2020-01-17 21:32:19 +05:30
parent 872a40eaa3
commit adb07de1db
6 changed files with 62 additions and 13 deletions

1
go.mod
View File

@ -3,6 +3,7 @@ module github.com/cosmwasm/wasmd
go 1.13
require (
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496
github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a // indirect
github.com/confio/go-cosmwasm v0.6.0
github.com/cosmos/cosmos-sdk v0.34.4-0.20191114141721-d4c831e63ad3

2
go.sum
View File

@ -12,6 +12,8 @@ github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBA
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0=
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
github.com/bartekn/go-bip39 v0.0.0-20171116152956-a05967ea095d h1:1aAija9gr0Hyv4KfQcRcwlmFIrhkDmIj2dz5bkg/s/8=
github.com/bartekn/go-bip39 v0.0.0-20171116152956-a05967ea095d/go.mod h1:icNx/6QdFblhsEjZehARqbNumymUT/ydwlLojFdv7Sk=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=

View File

@ -89,9 +89,11 @@ func StoreCodeCmd(cdc *codec.Codec) *cobra.Command {
Builder: builder,
}
err = msg.ValidateBasic()
if err != nil {
return fmt.Errorf("invalid message")
return err
}
return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg})
},
}

View File

@ -24,11 +24,45 @@ func TestInitGenesis(t *testing.T) {
h := data.module.NewHandler()
q := data.module.NewQuerierHandler()
t.Log("fail with invalid source url")
msg := MsgStoreCode{
Sender: creator,
WASMByteCode: testContract,
Source: "someinvalidurl",
Builder: "",
}
err := msg.ValidateBasic()
require.Error(t, err)
res := h(data.ctx, msg)
require.False(t, res.IsOK())
t.Log("fail with invalid build tag")
msg = MsgStoreCode{
Sender: creator,
WASMByteCode: testContract,
Source: "",
Builder: "somerandombuildtag-0.6.2",
}
err = msg.ValidateBasic()
require.Error(t, err)
res = h(data.ctx, msg)
require.False(t, res.IsOK())
t.Log("no error with valid source and build tag")
msg = MsgStoreCode{
Sender: creator,
WASMByteCode: testContract,
Source: "https://github.com/cosmwasm/wasmd/blob/master/x/wasm/testdata/escrow.wasm",
Builder: "cosmwasm-opt:0.5.2",
}
err = msg.ValidateBasic()
require.NoError(t, err)
res = h(data.ctx, msg)
require.True(t, res.IsOK())
require.Equal(t, res.Data, []byte("1"))
@ -37,8 +71,8 @@ func TestInitGenesis(t *testing.T) {
Verifier: fred,
Beneficiary: bob,
}
initMsgBz, err := json.Marshal(initMsg)
require.NoError(t, err)
initMsgBz, _err := json.Marshal(initMsg)
require.NoError(t, _err)
initCmd := MsgInstantiateContract{
Sender: creator,

View File

@ -40,6 +40,11 @@ func NewHandler(k Keeper) sdk.Handler {
}
func handleStoreCode(ctx sdk.Context, k Keeper, msg *MsgStoreCode) sdk.Result {
_err := msg.ValidateBasic()
if _err != nil {
return sdk.ResultFromError(_err)
}
codeID, err := k.Create(ctx, msg.Sender, msg.WASMByteCode, msg.Source, msg.Builder)
if err != nil {
return sdk.ResultFromError(err)

View File

@ -1,14 +1,17 @@
package types
import (
"net/url"
"fmt"
"regexp"
"github.com/asaskevich/govalidator"
sdk "github.com/cosmos/cosmos-sdk/types"
)
const (
MaxWasmSize = 500 * 1024
MaxWasmSize = 500 * 1024
BuildTagRegex = "cosmwasm-opt:"
)
type MsgStoreCode struct {
@ -33,21 +36,23 @@ func (msg MsgStoreCode) ValidateBasic() sdk.Error {
if len(msg.WASMByteCode) == 0 {
return sdk.ErrInternal("empty wasm code")
}
if len(msg.WASMByteCode) > MaxWasmSize {
return sdk.ErrInternal("wasm code too large")
}
if msg.Source != "" {
_, err := url.Parse(msg.Source)
if err != nil {
return sdk.ErrInternal("invalid source")
fmt.Println("source: ", msg.Source)
if !govalidator.IsURL(msg.Source) {
return sdk.ErrInternal("source should be a valid url")
}
}
if msg.Builder != "" {
ok, err := regexp.MatchString("cosmwasm-op:", msg.Builder)
if err != nil {
if !ok {
return sdk.ErrInternal("invalid tag supplied for builder")
}
ok, err := regexp.MatchString(BuildTagRegex, msg.Builder)
if err != nil || !ok {
return sdk.ErrInternal("invalid tag supplied for builder")
}
}