OSDN Git Service

Small edit (#241)
[bytom/vapor.git] / protocol / bc / types / txoutput_test.go
index b978073..58eaa85 100644 (file)
@@ -13,7 +13,7 @@ import (
        "github.com/vapor/testutil"
 )
 
-func TestSerializationTxOutput(t *testing.T) {
+func TestSerializationIntraChainTxOutput(t *testing.T) {
        assetID := testutil.MustDecodeAsset("81756fdab39a17163b0ce582ee4ee256fb4d1e156c692b997d608a42ecb38d47")
        txOutput := NewIntraChainOutput(assetID, 254354, []byte("TestSerializationTxOutput"))
        wantHex := strings.Join([]string{
@@ -56,7 +56,50 @@ func TestSerializationTxOutput(t *testing.T) {
        }
 }
 
-func TestSerializationVoteTxOutput(t *testing.T) {
+func TestSerializationCrossChainTxOutput(t *testing.T) {
+       assetID := testutil.MustDecodeAsset("81756fdab39a17163b0ce582ee4ee256fb4d1e156c692b997d608a42ecb38d47")
+       txOutput := NewCrossChainOutput(assetID, 254354, []byte("TestSerializationTxOutput"))
+       wantHex := strings.Join([]string{
+               "01", // asset version
+               "40", // serialization length
+               "01", // outType
+               "3e", // output commitment length
+               "81756fdab39a17163b0ce582ee4ee256fb4d1e156c692b997d608a42ecb38d47", // assetID
+               "92c30f", // amount
+               "01",     // version
+               "19",     // control program length
+               "5465737453657269616c697a6174696f6e54784f7574707574", // control program
+               "00", // witness length
+       }, "")
+
+       // Test convert struct to hex
+       var buffer bytes.Buffer
+       if err := txOutput.writeTo(&buffer); err != nil {
+               t.Fatal(err)
+       }
+
+       gotHex := hex.EncodeToString(buffer.Bytes())
+       if gotHex != wantHex {
+               t.Errorf("serialization bytes = %s want %s", gotHex, wantHex)
+       }
+
+       // Test convert hex to struct
+       var gotTxOutput TxOutput
+       decodeHex, err := hex.DecodeString(wantHex)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       if err := gotTxOutput.readFrom(blockchain.NewReader(decodeHex)); err != nil {
+               t.Fatal(err)
+       }
+
+       if !testutil.DeepEqual(*txOutput, gotTxOutput) {
+               t.Errorf("expected marshaled/unmarshaled txoutput to be:\n%sgot:\n%s", spew.Sdump(*txOutput), spew.Sdump(gotTxOutput))
+       }
+}
+
+func TestSerializationVoteOutput(t *testing.T) {
        assetID := testutil.MustDecodeAsset("81756fdab39a17163b0ce582ee4ee256fb4d1e156c692b997d608a42ecb38d47")
        voteTxOutput := NewVoteOutput(assetID, 1000, []byte("TestSerializationTxOutput"), []byte("af594006a40837d9f028daabb6d589df0b9138daefad5683e5233c2646279217294a8d532e60863bcf196625a35fb8ceeffa3c09610eb92dcfb655a947f13269"))
 
@@ -106,6 +149,8 @@ func TestComputeOutputID(t *testing.T) {
        btmAssetID := testutil.MustDecodeAsset("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
        cases := []struct {
                sc           *SpendCommitment
+               inputType    uint8
+               vote         []byte
                wantOutputID string
        }{
                {
@@ -116,6 +161,8 @@ func TestComputeOutputID(t *testing.T) {
                                VMVersion:      1,
                                ControlProgram: testutil.MustDecodeHexString("0014cb9f2391bafe2bc1159b2c4c8a0f17ba1b4dd94e"),
                        },
+                       inputType:    SpendInputType,
+                       vote:         nil,
                        wantOutputID: "73eea4d38b22ffd60fc30d0941f3875f45e29d424227bfde100193a08568605b",
                },
                {
@@ -126,12 +173,38 @@ func TestComputeOutputID(t *testing.T) {
                                VMVersion:      1,
                                ControlProgram: testutil.MustDecodeHexString("001418549d84daf53344d32563830c7cf979dc19d5c0"),
                        },
+                       inputType:    SpendInputType,
+                       vote:         nil,
                        wantOutputID: "8371e76fd1c873503a326268bfd286ffe13009a0f1140d2c858e8187825696ab",
                },
+               {
+                       sc: &SpendCommitment{
+                               AssetAmount:    bc.AssetAmount{AssetId: &btmAssetID, Amount: 999},
+                               SourceID:       testutil.MustDecodeHash("993d3797fa3b2d958f300e599987dc10904b13f56ce89d158f60f9131424e0e2"),
+                               SourcePosition: 2,
+                               VMVersion:      1,
+                               ControlProgram: testutil.MustDecodeHexString("00145c47f3a0dd3e1e9956fe5b0f897072ed33f9efb9"),
+                       },
+                       inputType:    VetoInputType,
+                       vote:         []byte("af594006a40837d9f028daabb6d589df0b9138daefad5683e5233c2646279217294a8d532e60863bcf196625a35fb8ceeffa3c09610eb92dcfb655a947f13269"),
+                       wantOutputID: "a4de5a81babc7949d6b38d1cd4bcbc83da340387e747b5f521af3e427c6b0132",
+               },
+               {
+                       sc: &SpendCommitment{
+                               AssetAmount:    bc.AssetAmount{AssetId: &btmAssetID, Amount: 999},
+                               SourceID:       testutil.MustDecodeHash("993d3797fa3b2d958f300e599987dc10904b13f56ce89d158f60f9131424e0e2"),
+                               SourcePosition: 2,
+                               VMVersion:      1,
+                               ControlProgram: testutil.MustDecodeHexString("00145c47f3a0dd3e1e9956fe5b0f897072ed33f9efb9"),
+                       },
+                       inputType:    VetoInputType,
+                       vote:         []byte(""),
+                       wantOutputID: "e42a48ef401b993c5e523b6a7b5456ad4b297c7aeda163405f265d8d00af983e",
+               },
        }
 
        for _, c := range cases {
-               outputID, err := ComputeOutputID(c.sc)
+               outputID, err := ComputeOutputID(c.sc, c.inputType, c.vote)
                if err != nil {
                        t.Fatal(err)
                }