86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
|
package coin
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/tendermint/basecoin"
|
||
|
"github.com/tendermint/basecoin/types"
|
||
|
)
|
||
|
|
||
|
// these are some constructs for the test cases
|
||
|
var actors = []struct {
|
||
|
actor basecoin.Actor
|
||
|
valid bool
|
||
|
}{
|
||
|
{basecoin.Actor{}, false},
|
||
|
{basecoin.Actor{App: "fooz"}, false},
|
||
|
{basecoin.Actor{Address: []byte{1, 2, 3, 4}}, false},
|
||
|
{basecoin.Actor{App: "fooz", Address: []byte{1, 2, 3, 4}}, true},
|
||
|
{basecoin.Actor{ChainID: "dings", App: "fooz", Address: []byte{1, 2, 3, 4}}, true},
|
||
|
{basecoin.Actor{ChainID: "dat", App: "fooz"}, false},
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
zeroCoin = types.Coin{"zeros", 0}
|
||
|
plusCoin = types.Coin{"plus", 23}
|
||
|
negCoin = types.Coin{"neg", -42}
|
||
|
)
|
||
|
|
||
|
var coins = []struct {
|
||
|
coins types.Coins
|
||
|
valid bool
|
||
|
}{
|
||
|
{types.Coins{}, false},
|
||
|
{types.Coins{zeroCoin}, false},
|
||
|
{types.Coins{plusCoin}, true},
|
||
|
{types.Coins{negCoin}, false},
|
||
|
{types.Coins{plusCoin, plusCoin}, false},
|
||
|
{types.Coins{plusCoin, zeroCoin}, false},
|
||
|
{types.Coins{negCoin, plusCoin}, false},
|
||
|
}
|
||
|
|
||
|
func TestTxValidateInput(t *testing.T) {
|
||
|
assert := assert.New(t)
|
||
|
|
||
|
seqs := []struct {
|
||
|
seq int
|
||
|
valid bool
|
||
|
}{
|
||
|
{-3, false},
|
||
|
{0, false},
|
||
|
{1, true},
|
||
|
{6571265735, true},
|
||
|
}
|
||
|
|
||
|
for i, act := range actors {
|
||
|
for j, coin := range coins {
|
||
|
for k, seq := range seqs {
|
||
|
input := NewTxInput(act.actor, coin.coins, seq.seq)
|
||
|
err := input.ValidateBasic()
|
||
|
if act.valid && coin.valid && seq.valid {
|
||
|
assert.Nil(err, "%d,%d,%d: %+v", i, j, k, err)
|
||
|
} else {
|
||
|
assert.NotNil(err, "%d,%d,%d", i, j, k)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestTxValidateOutput(t *testing.T) {
|
||
|
assert := assert.New(t)
|
||
|
|
||
|
for i, act := range actors {
|
||
|
for j, coin := range coins {
|
||
|
input := NewTxOutput(act.actor, coin.coins)
|
||
|
err := input.ValidateBasic()
|
||
|
if act.valid && coin.valid {
|
||
|
assert.Nil(err, "%d,%d: %+v", i, j, err)
|
||
|
} else {
|
||
|
assert.NotNil(err, "%d,%d", i, j)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|