package types import ( "bytes" "encoding/hex" "strings" "testing" "github.com/davecgh/go-spew/spew" "github.com/vapor/encoding/blockchain" "github.com/vapor/testutil" ) func TestSerializationTxOutput(t *testing.T) { assetID := testutil.MustDecodeAsset("81756fdab39a17163b0ce582ee4ee256fb4d1e156c692b997d608a42ecb38d47") txOutput := NewTxOutput(assetID, 254354, []byte("TestSerializationTxOutput")) wantHex := strings.Join([]string{ "01", // asset version "3e", // serialization 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)) } }