Skip to content

Commit

Permalink
Fix tests, handle genesis init as well
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanfrey committed Jan 20, 2022
1 parent 484bb74 commit a44184a
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 8 deletions.
1 change: 1 addition & 0 deletions x/wasm/client/cli/genesis_msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ func GenesisInstantiateContractCmd(defaultNodeHome string, genesisMutator Genesi
cmd.Flags().String(flagAmount, "", "Coins to send to the contract during instantiation")
cmd.Flags().String(flagLabel, "", "A human-readable name for this contract in lists")
cmd.Flags().String(flagAdmin, "", "Address of an admin")
cmd.Flags().Bool(flagNoAdmin, false, "You must set this explicitly if you don't want an admin")
cmd.Flags().String(flagRunAs, "", "The address that pays the init funds. It is the creator of the contract.")

cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory")
Expand Down
60 changes: 60 additions & 0 deletions x/wasm/client/cli/genesis_msg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ func TestInstantiateContractCmd(t *testing.T) {
flagSet := cmd.Flags()
flagSet.Set("label", "testing")
flagSet.Set("run-as", myWellFundedAccount)
flagSet.Set("no-admin", "true")
},
expMsgCount: 1,
},
Expand All @@ -157,6 +158,7 @@ func TestInstantiateContractCmd(t *testing.T) {
flagSet := cmd.Flags()
flagSet.Set("label", "testing")
flagSet.Set("run-as", myWellFundedAccount)
flagSet.Set("admin", myWellFundedAccount)
},
expMsgCount: 2,
},
Expand All @@ -175,6 +177,7 @@ func TestInstantiateContractCmd(t *testing.T) {
flagSet := cmd.Flags()
flagSet.Set("label", "testing")
flagSet.Set("run-as", myWellFundedAccount)
flagSet.Set("no-admin", "true")
},
expMsgCount: 2,
},
Expand All @@ -185,6 +188,7 @@ func TestInstantiateContractCmd(t *testing.T) {
flagSet := cmd.Flags()
flagSet.Set("label", "testing")
flagSet.Set("run-as", myWellFundedAccount)
flagSet.Set("no-admin", "true")
},
expError: true,
},
Expand All @@ -202,6 +206,59 @@ func TestInstantiateContractCmd(t *testing.T) {
flagSet := cmd.Flags()
flagSet.Set("label", "testing")
flagSet.Set("run-as", myWellFundedAccount)
flagSet.Set("no-admin", "true")
},
expError: true,
},
"fails if no explicit --no-admin passed": {
srcGenesis: types.GenesisState{
Params: types.DefaultParams(),
Codes: []types.Code{
{
CodeID: 1,
CodeInfo: types.CodeInfo{
CodeHash: []byte("a-valid-code-hash"),
Creator: keeper.RandomBech32AccountAddress(t),
InstantiateConfig: types.AccessConfig{
Permission: types.AccessTypeEverybody,
},
},
CodeBytes: wasmIdent,
},
},
},
mutator: func(cmd *cobra.Command) {
cmd.SetArgs([]string{"1", `{}`})
flagSet := cmd.Flags()
flagSet.Set("label", "testing")
flagSet.Set("run-as", myWellFundedAccount)
},
expError: true,
},
"fails if both --admin and --no-admin passed": {
srcGenesis: types.GenesisState{
Params: types.DefaultParams(),
Codes: []types.Code{
{
CodeID: 1,
CodeInfo: types.CodeInfo{
CodeHash: []byte("a-valid-code-hash"),
Creator: keeper.RandomBech32AccountAddress(t),
InstantiateConfig: types.AccessConfig{
Permission: types.AccessTypeEverybody,
},
},
CodeBytes: wasmIdent,
},
},
},
mutator: func(cmd *cobra.Command) {
cmd.SetArgs([]string{"1", `{}`})
flagSet := cmd.Flags()
flagSet.Set("label", "testing")
flagSet.Set("run-as", myWellFundedAccount)
flagSet.Set("no-admin", "true")
flagSet.Set("admin", myWellFundedAccount)
},
expError: true,
},
Expand All @@ -227,6 +284,7 @@ func TestInstantiateContractCmd(t *testing.T) {
flagSet := cmd.Flags()
flagSet.Set("label", "testing")
flagSet.Set("run-as", keeper.RandomBech32AccountAddress(t))
flagSet.Set("no-admin", "true")
},
expMsgCount: 1,
},
Expand All @@ -253,6 +311,7 @@ func TestInstantiateContractCmd(t *testing.T) {
flagSet.Set("label", "testing")
flagSet.Set("run-as", myWellFundedAccount)
flagSet.Set("amount", "100stake")
flagSet.Set("no-admin", "true")
},
expMsgCount: 1,
},
Expand All @@ -279,6 +338,7 @@ func TestInstantiateContractCmd(t *testing.T) {
flagSet.Set("label", "testing")
flagSet.Set("run-as", keeper.RandomBech32AccountAddress(t))
flagSet.Set("amount", "10stake")
flagSet.Set("no-admin", "true")
},
expError: true,
},
Expand Down
18 changes: 10 additions & 8 deletions x/wasm/client/cli/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,15 +189,17 @@ func parseInstantiateArgs(rawCodeID, initMsg string, sender sdk.AccAddress, flag
if err != nil {
return types.MsgInstantiateContract{}, fmt.Errorf("admin: %s", err)
}
noAdmin, err := flags.GetBool(flagNoAdmin)
if err != nil {
return types.MsgInstantiateContract{}, fmt.Errorf("no-admin: %s", err)
}

if adminStr == "" {
noAdmin, err := flags.GetBool(flagNoAdmin)
if err != nil {
return types.MsgInstantiateContract{}, fmt.Errorf("no-admin: %s", err)
}
if !noAdmin {
return types.MsgInstantiateContract{}, fmt.Errorf("You must set an admin or explicitly pass --no-admin to make it immutible (wasmd issue #719)")
}
// ensure sensible admin is set (or explicitly immutable)
if adminStr == "" && !noAdmin {
return types.MsgInstantiateContract{}, fmt.Errorf("You must set an admin or explicitly pass --no-admin to make it immutible (wasmd issue #719)")
}
if adminStr != "" && noAdmin {
return types.MsgInstantiateContract{}, fmt.Errorf("You set an admin and passed --no-admin, those cannot both be true")
}

// build and sign the transaction, then broadcast to Tendermint
Expand Down

0 comments on commit a44184a

Please sign in to comment.