11package types
22
33import (
4- "crypto/rand "
4+ "bytes "
55 "testing"
66 "time"
77
@@ -13,11 +13,12 @@ func TestP2PEnvelope_MarshalUnmarshal(t *testing.T) {
1313 // Create a P2PData envelope
1414 data := & Data {
1515 Metadata : & Metadata {
16- ChainID : "test-chain" ,
17- Height : 10 ,
18- Time : uint64 (time .Now ().UnixNano ()),
16+ ChainID : "test-chain" ,
17+ Height : 10 ,
18+ Time : uint64 (time .Now ().UnixNano ()),
19+ LastDataHash : bytes .Repeat ([]byte {0x1 }, 32 ),
1920 },
20- Txs : nil ,
21+ Txs : Txs {[] byte { 0x1 }, [] byte { 0x2 }} ,
2122 }
2223 envelope := & P2PData {
2324 Message : data ,
@@ -36,11 +37,11 @@ func TestP2PEnvelope_MarshalUnmarshal(t *testing.T) {
3637 assert .Equal (t , envelope .DAHeightHint , newEnvelope .DAHeightHint )
3738 assert .Equal (t , envelope .Message .Height (), newEnvelope .Message .Height ())
3839 assert .Equal (t , envelope .Message .ChainID (), newEnvelope .Message .ChainID ())
40+ assert .Equal (t , envelope .Message .LastDataHash , newEnvelope .Message .LastDataHash )
41+ assert .Equal (t , envelope .Message .Txs , newEnvelope .Message .Txs )
3942}
4043
4144func TestP2PSignedHeader_MarshalUnmarshal (t * testing.T ) {
42- // Create a SignedHeader
43- // Minimal valid SignedHeader
4445 header := & SignedHeader {
4546 Header : Header {
4647 BaseHeader : BaseHeader {
@@ -52,34 +53,92 @@ func TestP2PSignedHeader_MarshalUnmarshal(t *testing.T) {
5253 Block : 1 ,
5354 App : 2 ,
5455 },
55- DataHash : make ([]byte , 32 ),
56- },
57- Signature : make ([]byte , 64 ),
58- Signer : Signer {
59- // PubKey can be nil for basic marshal check
60- Address : make ([]byte , 20 ),
56+ LastHeaderHash : GetRandomBytes (32 ),
57+ DataHash : GetRandomBytes (32 ),
58+ AppHash : GetRandomBytes (32 ),
59+ ProposerAddress : GetRandomBytes (32 ),
60+ ValidatorHash : GetRandomBytes (32 ),
6161 },
62+ // Signature and Signer are transient
6263 }
63- _ , _ = rand .Read (header .DataHash )
64- _ , _ = rand .Read (header .Signature )
65- _ , _ = rand .Read (header .Signer .Address )
6664
6765 envelope := & P2PSignedHeader {
6866 Message : header ,
6967 DAHeightHint : 200 ,
7068 }
7169
7270 // Marshaling
73- bytes , err := envelope .MarshalBinary ()
71+ bz , err := envelope .MarshalBinary ()
7472 require .NoError (t , err )
75- assert .NotEmpty (t , bytes )
73+ assert .NotEmpty (t , bz )
7674
7775 // Unmarshaling
7876 newEnvelope := (& P2PSignedHeader {}).New ()
79- err = newEnvelope .UnmarshalBinary (bytes )
77+ err = newEnvelope .UnmarshalBinary (bz )
8078 require .NoError (t , err )
8179 assert .Equal (t , envelope .DAHeightHint , newEnvelope .DAHeightHint )
82- assert .Equal (t , envelope .Message .Height (), newEnvelope .Message .Height ())
83- assert .Equal (t , envelope .Message .ChainID (), newEnvelope .Message .ChainID ())
84- // Deep comparison of structs if needed
80+ assert .Equal (t , envelope , newEnvelope )
81+ }
82+
83+ func TestSignedHeaderBinaryCompatibility (t * testing.T ) {
84+ signedHeader , _ , err := GetRandomSignedHeader ("chain-id" )
85+ require .NoError (t , err )
86+ bytes , err := signedHeader .MarshalBinary ()
87+ require .NoError (t , err )
88+
89+ p2pHeader := (& P2PSignedHeader {}).New ()
90+ err = p2pHeader .UnmarshalBinary (bytes )
91+ require .NoError (t , err )
92+
93+ assert .Equal (t , signedHeader .Header , p2pHeader .Message .Header )
94+ assert .Equal (t , signedHeader .Signature , p2pHeader .Message .Signature )
95+ assert .Equal (t , signedHeader .Signer , p2pHeader .Message .Signer )
96+ assert .Zero (t , p2pHeader .DAHeightHint )
97+
98+ p2pHeader .DAHeightHint = 100
99+ p2pBytes , err := p2pHeader .MarshalBinary ()
100+ require .NoError (t , err )
101+
102+ var decodedSignedHeader SignedHeader
103+ err = decodedSignedHeader .UnmarshalBinary (p2pBytes )
104+ require .NoError (t , err )
105+ assert .Equal (t , signedHeader .Header , decodedSignedHeader .Header )
106+ assert .Equal (t , signedHeader .Signature , decodedSignedHeader .Signature )
107+ assert .Equal (t , signedHeader .Signer , decodedSignedHeader .Signer )
108+ }
109+
110+ func TestDataBinaryCompatibility (t * testing.T ) {
111+ data := & Data {
112+ Metadata : & Metadata {
113+ ChainID : "chain-id" ,
114+ Height : 10 ,
115+ Time : uint64 (time .Now ().UnixNano ()),
116+ LastDataHash : []byte ("last-hash" ),
117+ },
118+ Txs : Txs {
119+ []byte ("tx1" ),
120+ []byte ("tx2" ),
121+ },
122+ }
123+ bytes , err := data .MarshalBinary ()
124+ require .NoError (t , err )
125+
126+ p2pData := (& P2PData {}).New ()
127+ err = p2pData .UnmarshalBinary (bytes )
128+ require .NoError (t , err )
129+
130+ assert .Equal (t , data .Metadata , p2pData .Message .Metadata )
131+ assert .Equal (t , data .Txs , p2pData .Message .Txs )
132+ assert .Zero (t , p2pData .DAHeightHint )
133+
134+ p2pData .DAHeightHint = 200
135+
136+ p2pBytes , err := p2pData .MarshalBinary ()
137+ require .NoError (t , err )
138+
139+ var decodedData Data
140+ err = decodedData .UnmarshalBinary (p2pBytes )
141+ require .NoError (t , err )
142+ assert .Equal (t , data .Metadata , decodedData .Metadata )
143+ assert .Equal (t , data .Txs , decodedData .Txs )
85144}
0 commit comments