cosmos-sdk/x/bank/msgs_test.go

292 lines
7.8 KiB
Go
Raw Normal View History

package bank
import (
2018-02-20 17:15:57 -08:00
"fmt"
"testing"
"github.com/stretchr/testify/assert"
2018-01-12 12:03:23 -08:00
sdk "github.com/cosmos/cosmos-sdk/types"
)
2018-04-18 21:49:24 -07:00
func TestNewMsgSend(t *testing.T) {}
2018-02-20 17:15:57 -08:00
2018-04-18 21:49:24 -07:00
func TestMsgSendType(t *testing.T) {
// Construct a MsgSend
2018-03-03 23:36:10 -08:00
addr1 := sdk.Address([]byte("input"))
addr2 := sdk.Address([]byte("output"))
coins := sdk.Coins{{"atom", 10}}
2018-04-18 21:49:24 -07:00
var msg = MsgSend{
2018-03-03 23:36:10 -08:00
Inputs: []Input{NewInput(addr1, coins)},
Outputs: []Output{NewOutput(addr2, coins)},
2018-02-20 15:57:24 -08:00
}
2018-02-20 17:15:57 -08:00
// TODO some failures for bad result
2018-02-20 15:57:24 -08:00
assert.Equal(t, msg.Type(), "bank")
}
2018-01-15 17:21:33 -08:00
func TestInputValidation(t *testing.T) {
2018-03-01 23:49:07 -08:00
addr1 := sdk.Address([]byte{1, 2})
addr2 := sdk.Address([]byte{7, 8})
2018-01-12 12:03:23 -08:00
someCoins := sdk.Coins{{"atom", 123}}
multiCoins := sdk.Coins{{"atom", 123}, {"eth", 20}}
2018-03-01 23:49:07 -08:00
var emptyAddr sdk.Address
2018-01-12 12:03:23 -08:00
emptyCoins := sdk.Coins{}
emptyCoins2 := sdk.Coins{{"eth", 0}}
someEmptyCoins := sdk.Coins{{"eth", 10}, {"atom", 0}}
minusCoins := sdk.Coins{{"eth", -34}}
someMinusCoins := sdk.Coins{{"atom", 20}, {"eth", -34}}
unsortedCoins := sdk.Coins{{"eth", 1}, {"atom", 1}}
cases := []struct {
valid bool
2018-01-15 17:21:33 -08:00
txIn Input
}{
// auth works with different apps
2018-01-15 17:21:33 -08:00
{true, NewInput(addr1, someCoins)},
2018-03-03 23:36:10 -08:00
{true, NewInput(addr2, someCoins)},
{true, NewInput(addr2, multiCoins)},
{false, NewInput(emptyAddr, someCoins)}, // empty address
{false, NewInput(addr1, emptyCoins)}, // invalid coins
{false, NewInput(addr1, emptyCoins2)}, // invalid coins
{false, NewInput(addr1, someEmptyCoins)}, // invalid coins
{false, NewInput(addr1, minusCoins)}, // negative coins
{false, NewInput(addr1, someMinusCoins)}, // negative coins
{false, NewInput(addr1, unsortedCoins)}, // unsorted coins
}
for i, tc := range cases {
err := tc.txIn.ValidateBasic()
if tc.valid {
assert.Nil(t, err, "%d: %+v", i, err)
} else {
assert.NotNil(t, err, "%d", i)
}
}
}
2018-01-15 17:21:33 -08:00
func TestOutputValidation(t *testing.T) {
2018-03-01 23:49:07 -08:00
addr1 := sdk.Address([]byte{1, 2})
addr2 := sdk.Address([]byte{7, 8})
2018-01-12 12:03:23 -08:00
someCoins := sdk.Coins{{"atom", 123}}
multiCoins := sdk.Coins{{"atom", 123}, {"eth", 20}}
2018-03-01 23:49:07 -08:00
var emptyAddr sdk.Address
2018-01-12 12:03:23 -08:00
emptyCoins := sdk.Coins{}
emptyCoins2 := sdk.Coins{{"eth", 0}}
someEmptyCoins := sdk.Coins{{"eth", 10}, {"atom", 0}}
minusCoins := sdk.Coins{{"eth", -34}}
someMinusCoins := sdk.Coins{{"atom", 20}, {"eth", -34}}
unsortedCoins := sdk.Coins{{"eth", 1}, {"atom", 1}}
cases := []struct {
valid bool
2018-01-15 17:21:33 -08:00
txOut Output
}{
// auth works with different apps
2018-01-15 17:21:33 -08:00
{true, NewOutput(addr1, someCoins)},
{true, NewOutput(addr2, someCoins)},
{true, NewOutput(addr2, multiCoins)},
{false, NewOutput(emptyAddr, someCoins)}, // empty address
{false, NewOutput(addr1, emptyCoins)}, // invalid coins
{false, NewOutput(addr1, emptyCoins2)}, // invalid coins
{false, NewOutput(addr1, someEmptyCoins)}, // invalid coins
{false, NewOutput(addr1, minusCoins)}, // negative coins
{false, NewOutput(addr1, someMinusCoins)}, // negative coins
{false, NewOutput(addr1, unsortedCoins)}, // unsorted coins
}
for i, tc := range cases {
err := tc.txOut.ValidateBasic()
if tc.valid {
assert.Nil(t, err, "%d: %+v", i, err)
} else {
assert.NotNil(t, err, "%d", i)
}
}
}
2018-04-18 21:49:24 -07:00
func TestMsgSendValidation(t *testing.T) {
2018-03-01 23:49:07 -08:00
addr1 := sdk.Address([]byte{1, 2})
addr2 := sdk.Address([]byte{7, 8})
2018-01-12 12:03:23 -08:00
atom123 := sdk.Coins{{"atom", 123}}
atom124 := sdk.Coins{{"atom", 124}}
eth123 := sdk.Coins{{"eth", 123}}
atom123eth123 := sdk.Coins{{"atom", 123}, {"eth", 123}}
2018-01-15 17:21:33 -08:00
input1 := NewInput(addr1, atom123)
input2 := NewInput(addr1, eth123)
output1 := NewOutput(addr2, atom123)
output2 := NewOutput(addr2, atom124)
output3 := NewOutput(addr2, eth123)
outputMulti := NewOutput(addr2, atom123eth123)
2018-03-01 23:49:07 -08:00
var emptyAddr sdk.Address
cases := []struct {
valid bool
2018-04-18 21:49:24 -07:00
tx MsgSend
}{
2018-04-18 21:49:24 -07:00
{false, MsgSend{}}, // no input or output
{false, MsgSend{Inputs: []Input{input1}}}, // just input
{false, MsgSend{Outputs: []Output{output1}}}, // just ouput
{false, MsgSend{
2018-03-03 23:36:10 -08:00
Inputs: []Input{NewInput(emptyAddr, atom123)}, // invalid input
2018-01-15 17:21:33 -08:00
Outputs: []Output{output1}}},
2018-04-18 21:49:24 -07:00
{false, MsgSend{
2018-01-15 17:21:33 -08:00
Inputs: []Input{input1},
Outputs: []Output{{emptyAddr, atom123}}}, // invalid ouput
},
2018-04-18 21:49:24 -07:00
{false, MsgSend{
2018-01-15 17:21:33 -08:00
Inputs: []Input{input1},
Outputs: []Output{output2}}, // amounts dont match
},
2018-04-18 21:49:24 -07:00
{false, MsgSend{
2018-01-15 17:21:33 -08:00
Inputs: []Input{input1},
Outputs: []Output{output3}}, // amounts dont match
},
2018-04-18 21:49:24 -07:00
{false, MsgSend{
2018-01-15 17:21:33 -08:00
Inputs: []Input{input1},
Outputs: []Output{outputMulti}}, // amounts dont match
},
2018-04-18 21:49:24 -07:00
{false, MsgSend{
2018-01-15 17:21:33 -08:00
Inputs: []Input{input2},
Outputs: []Output{output1}}, // amounts dont match
},
2018-04-18 21:49:24 -07:00
{true, MsgSend{
2018-01-15 17:21:33 -08:00
Inputs: []Input{input1},
Outputs: []Output{output1}},
},
2018-04-18 21:49:24 -07:00
{true, MsgSend{
2018-01-15 17:21:33 -08:00
Inputs: []Input{input1, input2},
Outputs: []Output{outputMulti}},
},
}
for i, tc := range cases {
err := tc.tx.ValidateBasic()
if tc.valid {
assert.Nil(t, err, "%d: %+v", i, err)
} else {
assert.NotNil(t, err, "%d", i)
}
}
}
2018-04-18 21:49:24 -07:00
func TestMsgSendGet(t *testing.T) {
2018-03-03 23:50:57 -08:00
addr1 := sdk.Address([]byte("input"))
addr2 := sdk.Address([]byte("output"))
coins := sdk.Coins{{"atom", 10}}
2018-04-18 21:49:24 -07:00
var msg = MsgSend{
2018-03-03 23:50:57 -08:00
Inputs: []Input{NewInput(addr1, coins)},
Outputs: []Output{NewOutput(addr2, coins)},
2018-02-20 15:57:24 -08:00
}
2018-02-20 17:15:57 -08:00
res := msg.Get(nil)
assert.Nil(t, res)
2018-02-20 15:57:24 -08:00
}
2018-04-18 21:49:24 -07:00
func TestMsgSendGetSignBytes(t *testing.T) {
2018-03-03 23:50:57 -08:00
addr1 := sdk.Address([]byte("input"))
addr2 := sdk.Address([]byte("output"))
coins := sdk.Coins{{"atom", 10}}
2018-04-18 21:49:24 -07:00
var msg = MsgSend{
2018-03-03 23:50:57 -08:00
Inputs: []Input{NewInput(addr1, coins)},
Outputs: []Output{NewOutput(addr2, coins)},
2018-02-20 15:57:24 -08:00
}
2018-02-20 17:15:57 -08:00
res := msg.GetSignBytes()
// TODO bad results
2018-03-03 23:50:57 -08:00
assert.Equal(t, string(res), `{"inputs":[{"address":"696E707574","coins":[{"denom":"atom","amount":10}]}],"outputs":[{"address":"6F7574707574","coins":[{"denom":"atom","amount":10}]}]}`)
2018-02-20 17:15:57 -08:00
}
2018-02-20 15:57:24 -08:00
2018-04-18 21:49:24 -07:00
func TestMsgSendGetSigners(t *testing.T) {
var msg = MsgSend{
2018-02-20 17:15:57 -08:00
Inputs: []Input{
2018-03-03 23:50:57 -08:00
NewInput(sdk.Address([]byte("input1")), nil),
NewInput(sdk.Address([]byte("input2")), nil),
NewInput(sdk.Address([]byte("input3")), nil),
2018-02-20 17:15:57 -08:00
},
}
res := msg.GetSigners()
2018-03-03 23:50:57 -08:00
// TODO: fix this !
2018-02-20 17:15:57 -08:00
assert.Equal(t, fmt.Sprintf("%v", res), "[696E70757431 696E70757432 696E70757433]")
2018-02-20 15:57:24 -08:00
}
2018-01-15 17:21:33 -08:00
/*
2018-02-20 17:15:57 -08:00
// what to do w/ this test?
2018-04-18 21:49:24 -07:00
func TestMsgSendSigners(t *testing.T) {
2018-03-01 23:49:07 -08:00
signers := []sdk.Address{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
2018-01-12 12:03:23 -08:00
someCoins := sdk.Coins{{"atom", 123}}
2018-01-15 17:21:33 -08:00
inputs := make([]Input, len(signers))
for i, signer := range signers {
2018-01-15 17:21:33 -08:00
inputs[i] = NewInput(signer, someCoins)
}
2018-04-18 21:49:24 -07:00
tx := NewMsgSend(inputs, nil)
assert.Equal(t, signers, tx.Signers())
}
2018-01-15 17:21:33 -08:00
*/
2018-02-20 17:15:57 -08:00
// ----------------------------------------
2018-04-18 21:49:24 -07:00
// MsgIssue Tests
2018-02-20 17:15:57 -08:00
2018-04-18 21:49:24 -07:00
func TestNewMsgIssue(t *testing.T) {
2018-02-20 17:15:57 -08:00
// TODO
}
2018-04-18 21:49:24 -07:00
func TestMsgIssueType(t *testing.T) {
// Construct an MsgIssue
2018-03-03 23:50:57 -08:00
addr := sdk.Address([]byte("loan-from-bank"))
coins := sdk.Coins{{"atom", 10}}
2018-04-18 21:49:24 -07:00
var msg = MsgIssue{
2018-03-03 23:50:57 -08:00
Banker: sdk.Address([]byte("input")),
Outputs: []Output{NewOutput(addr, coins)},
2018-02-20 17:15:57 -08:00
}
// TODO some failures for bad result
assert.Equal(t, msg.Type(), "bank")
}
2018-04-18 21:49:24 -07:00
func TestMsgIssueValidation(t *testing.T) {
2018-02-20 17:15:57 -08:00
// TODO
}
2018-04-18 21:49:24 -07:00
func TestMsgIssueGet(t *testing.T) {
2018-03-03 23:50:57 -08:00
addr := sdk.Address([]byte("loan-from-bank"))
coins := sdk.Coins{{"atom", 10}}
2018-04-18 21:49:24 -07:00
var msg = MsgIssue{
2018-03-03 23:50:57 -08:00
Banker: sdk.Address([]byte("input")),
Outputs: []Output{NewOutput(addr, coins)},
2018-02-20 17:15:57 -08:00
}
res := msg.Get(nil)
assert.Nil(t, res)
}
2018-04-18 21:49:24 -07:00
func TestMsgIssueGetSignBytes(t *testing.T) {
2018-03-03 23:50:57 -08:00
addr := sdk.Address([]byte("loan-from-bank"))
coins := sdk.Coins{{"atom", 10}}
2018-04-18 21:49:24 -07:00
var msg = MsgIssue{
2018-03-03 23:50:57 -08:00
Banker: sdk.Address([]byte("input")),
Outputs: []Output{NewOutput(addr, coins)},
2018-02-20 17:15:57 -08:00
}
res := msg.GetSignBytes()
// TODO bad results
assert.Equal(t, string(res), `{"banker":"696E707574","outputs":[{"address":"6C6F616E2D66726F6D2D62616E6B","coins":[{"denom":"atom","amount":10}]}]}`)
}
2018-04-18 21:49:24 -07:00
func TestMsgIssueGetSigners(t *testing.T) {
var msg = MsgIssue{
2018-03-01 23:49:07 -08:00
Banker: sdk.Address([]byte("onlyone")),
2018-02-20 17:15:57 -08:00
}
res := msg.GetSigners()
assert.Equal(t, fmt.Sprintf("%v", res), "[6F6E6C796F6E65]")
}