OSDN Git Service

c5ef8da1333e936ee4159923ad162c7d806edef8
[bytom/vapor.git] / protocol / bc / types / output_commitment_test.go
1 package types
2
3 import (
4         "bytes"
5         "encoding/hex"
6         "testing"
7
8         "github.com/vapor/encoding/blockchain"
9         "github.com/vapor/protocol/bc"
10         "github.com/vapor/testutil"
11 )
12
13 func TestReadWriteOutputCommitment(t *testing.T) {
14         btmAssetID := testutil.MustDecodeAsset("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
15         cases := []struct {
16                 oc           *OutputCommitment
17                 encodeString string
18         }{
19                 {
20                         oc: &OutputCommitment{
21                                 AssetAmount:    bc.AssetAmount{AssetId: &btmAssetID, Amount: 100},
22                                 VMVersion:      1,
23                                 ControlProgram: testutil.MustDecodeHexString("00140876db6ca8f4542a836f0edd42b87d095d081182"),
24                         },
25                         encodeString: "39ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff64011600140876db6ca8f4542a836f0edd42b87d095d081182",
26                 },
27                 {
28                         oc: &OutputCommitment{
29                                 AssetAmount:    bc.AssetAmount{AssetId: &btmAssetID, Amount: 50},
30                                 VMVersion:      1,
31                                 ControlProgram: testutil.MustDecodeHexString("00148bf7800b2333afd8414d6e903d58c4908b9bbcc7"),
32                         },
33                         encodeString: "39ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32011600148bf7800b2333afd8414d6e903d58c4908b9bbcc7",
34                 },
35         }
36
37         for _, c := range cases {
38                 buff := []byte{}
39                 buffer := bytes.NewBuffer(buff)
40                 if err := c.oc.writeExtensibleString(buffer, nil, 1); err != nil {
41                         t.Fatal(err)
42                 }
43
44                 got := hex.EncodeToString(buffer.Bytes())
45                 if got != c.encodeString {
46                         t.Errorf("got:%s, want:%s", got, c.encodeString)
47                 }
48
49                 oc := &OutputCommitment{}
50                 _, err := oc.readFrom(blockchain.NewReader(buffer.Bytes()), 1)
51                 if err != nil {
52                         t.Fatal(err)
53                 }
54
55                 if !testutil.DeepEqual(*oc, *c.oc) {
56                         t.Errorf("got:%v, want:%v", *oc, *c.oc)
57                 }
58         }
59 }