Skip to content

Commit d72d23a

Browse files
committed
chore: improve error handling
1 parent 1023109 commit d72d23a

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

types/serialization.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,15 @@ func (sh *SignedHeader) FromDAEnvelopeProto(envelope *pb.DAHeaderEnvelope) error
182182
if envelope.Header == nil {
183183
return errors.New("da header envelope's Header is nil")
184184
}
185+
if envelope.Header.Height == 0 {
186+
return errors.New("da header envelope's Header height cannot be 0")
187+
}
188+
if envelope.Header.ChainId == "" {
189+
return errors.New("da header envelope's Header chain_id cannot be empty")
190+
}
191+
if envelope.Header.Time == 0 {
192+
return errors.New("da header envelope's Header time cannot be 0")
193+
}
185194
if err := sh.Header.FromProto(envelope.Header); err != nil {
186195
return err
187196
}

types/serialization_test.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)