@@ -473,5 +473,83 @@ func TestHeaderSerializationSize(t *testing.T) {
473473 require .NoError (err )
474474
475475 assert .Equal (t , len (blob ), 175 , "Serialized header size has changed" )
476+ }
477+
478+ // TestFromDAEnvelopeProto_InvalidHeaders checks that FromDAEnvelopeProto returns errors for headers with missing required fields.
479+ func TestFromDAEnvelopeProto_InvalidHeaders (t * testing.T ) {
480+ cases := []struct {
481+ name string
482+ envelope * pb.DAHeaderEnvelope
483+ wantErr string
484+ }{
485+ {
486+ name : "nil header" ,
487+ envelope : & pb.DAHeaderEnvelope {Header : nil },
488+ wantErr : "da header envelope's Header is nil" ,
489+ },
490+ {
491+ name : "zero height" ,
492+ envelope : & pb.DAHeaderEnvelope {
493+ Header : & pb.Header {
494+ Height : 0 ,
495+ ChainId : "testchain" ,
496+ Time : 123456789 ,
497+ },
498+ },
499+ wantErr : "da header envelope's Header height cannot be 0" ,
500+ },
501+ {
502+ name : "empty chain_id" ,
503+ envelope : & pb.DAHeaderEnvelope {
504+ Header : & pb.Header {
505+ Height : 1 ,
506+ ChainId : "" ,
507+ Time : 123456789 ,
508+ },
509+ },
510+ wantErr : "da header envelope's Header chain_id cannot be empty" ,
511+ },
512+ {
513+ name : "zero time" ,
514+ envelope : & pb.DAHeaderEnvelope {
515+ Header : & pb.Header {
516+ Height : 1 ,
517+ ChainId : "testchain" ,
518+ Time : 0 ,
519+ },
520+ },
521+ wantErr : "da header envelope's Header time cannot be 0" ,
522+ },
523+ }
476524
525+ for _ , c := range cases {
526+ t .Run (c .name , func (t * testing.T ) {
527+ sh := & SignedHeader {}
528+ err := sh .FromDAEnvelopeProto (c .envelope )
529+ assert .Error (t , err )
530+ assert .Contains (t , err .Error (), c .wantErr )
531+ })
532+ }
533+ }
534+
535+ // TestFromDAEnvelopeProto_ValidHeader checks that FromDAEnvelopeProto succeeds with valid header.
536+ func TestFromDAEnvelopeProto_ValidHeader (t * testing.T ) {
537+ envelope := & pb.DAHeaderEnvelope {
538+ Header : & pb.Header {
539+ Height : 1 ,
540+ ChainId : "testchain" ,
541+ Time : 123456789 ,
542+ ProposerAddress : []byte {1 , 2 , 3 , 4 },
543+ },
544+ Signature : []byte {5 , 6 , 7 , 8 },
545+ }
546+
547+ sh := & SignedHeader {}
548+ err := sh .FromDAEnvelopeProto (envelope )
549+ assert .NoError (t , err )
550+ assert .Equal (t , uint64 (1 ), sh .Header .Height ())
551+ assert .Equal (t , "testchain" , sh .Header .ChainID ())
552+ assert .Equal (t , uint64 (123456789 ), sh .Header .BaseHeader .Time )
553+ assert .Equal (t , []byte {1 , 2 , 3 , 4 }, sh .Header .ProposerAddress )
554+ assert .Equal (t , Signature {5 , 6 , 7 , 8 }, sh .Signature )
477555}
0 commit comments