mirror of https://github.com/certusone/wasmd.git
Add genesis tests for source, builder
This commit is contained in:
parent
872a40eaa3
commit
adb07de1db
1
go.mod
1
go.mod
|
@ -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
2
go.sum
|
@ -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=
|
||||
|
|
|
@ -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})
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue