7 "github.com/vapor/errors"
8 "github.com/vapor/protocol/bc"
9 "github.com/vapor/protocol/bc/types"
10 "github.com/vapor/protocol/vm"
13 func TestCheckOutput(t *testing.T) {
14 tx := types.NewTx(types.TxData{
15 Inputs: []*types.TxInput{
16 types.NewSpendInput(nil, bc.Hash{}, bc.NewAssetID([32]byte{1}), 5, 1, []byte("spendprog")),
17 types.NewIssuanceInput(nil, 6, []byte("issueprog"), nil, nil),
19 Outputs: []*types.TxOutput{
20 types.NewTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("wrongprog")),
21 types.NewTxOutput(bc.NewAssetID([32]byte{3}), 8, []byte("controlprog")),
22 types.NewTxOutput(bc.NewAssetID([32]byte{2}), 8, []byte("controlprog")),
23 types.NewTxOutput(bc.NewAssetID([32]byte{2}), 7, []byte("controlprog")),
24 types.NewTxOutput(bc.NewAssetID([32]byte{2}), 7, []byte("controlprog")),
28 txCtx := &entryContext{
29 entry: tx.Tx.Entries[tx.Tx.InputIDs[0]],
30 entries: tx.Tx.Entries,
34 // args to CheckOutput
47 assetID: append([]byte{2}, make([]byte, 31)...),
49 code: []byte("controlprog"),
55 assetID: append([]byte{2}, make([]byte, 31)...),
57 code: []byte("controlprog"),
63 assetID: append([]byte{9}, make([]byte, 31)...),
65 code: []byte("missingprog"),
71 assetID: append([]byte{2}, make([]byte, 31)...),
73 code: []byte("controlprog"),
74 wantErr: vm.ErrBadValue,
78 for i, test := range cases {
79 t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) {
80 gotOk, err := txCtx.checkOutput(test.index, test.amount, test.assetID, test.vmVersion, test.code, false)
81 if g := errors.Root(err); g != test.wantErr {
82 t.Errorf("checkOutput(%v, %v, %x, %v, %x) err = %v, want %v", test.index, test.amount, test.assetID, test.vmVersion, test.code, g, test.wantErr)
85 if gotOk != test.wantOk {
86 t.Errorf("checkOutput(%v, %v, %x, %v, %x) ok = %t, want %v", test.index, test.amount, test.assetID, test.vmVersion, test.code, gotOk, test.wantOk)