@@ -3,8 +3,6 @@ package cache
33import (
44 "context"
55 "encoding/binary"
6- "sync"
7- "sync/atomic"
86 "testing"
97 "time"
108
@@ -520,205 +518,6 @@ func TestManager_DaHeightAfterCacheClear(t *testing.T) {
520518 "DaHeight should be seeded from finalized-tip metadata even after ClearCache" )
521519}
522520
523- // builds a minimal SignedHeader; variant differentiates hashes at the same height.
524- func signedHeaderForHeight (height uint64 , variant byte ) * types.SignedHeader {
525- return & types.SignedHeader {
526- Header : types.Header {
527- BaseHeader : types.BaseHeader {ChainID : "pending-signed" , Height : height , Time : 1 },
528- AppHash : []byte {variant , variant , variant },
529- },
530- }
531- }
532-
533- func TestManager_PendingSignedHeader_FirstWriteWins (t * testing.T ) {
534- t .Parallel ()
535- cfg := tempConfig (t )
536- st := testMemStore (t )
537-
538- m , err := NewManager (cfg , st , zerolog .Nop ())
539- require .NoError (t , err )
540-
541- first := signedHeaderForHeight (5 , 0x01 )
542- second := signedHeaderForHeight (5 , 0x02 )
543- require .NotEqual (t , first .Hash ().String (), second .Hash ().String ())
544-
545- m .SetPendingSignedHeader (first , "p2p" )
546- m .SetPendingSignedHeader (second , "da" )
547-
548- got , source , ok := m .GetPendingSignedHeader (5 )
549- require .True (t , ok )
550- require .Equal (t , first .Hash ().String (), got .Hash ().String ())
551- require .Equal (t , "p2p" , source )
552- }
553-
554- func TestManager_PendingSignedHeader_NilHeaderIgnored (t * testing.T ) {
555- t .Parallel ()
556- cfg := tempConfig (t )
557- st := testMemStore (t )
558-
559- m , err := NewManager (cfg , st , zerolog .Nop ())
560- require .NoError (t , err )
561-
562- m .SetPendingSignedHeader (nil , "p2p" )
563- _ , _ , ok := m .GetPendingSignedHeader (5 )
564- require .False (t , ok )
565-
566- hdr := signedHeaderForHeight (5 , 0x01 )
567- m .SetPendingSignedHeader (hdr , "p2p" )
568- got , _ , ok := m .GetPendingSignedHeader (5 )
569- require .True (t , ok )
570- require .Equal (t , hdr .Hash ().String (), got .Hash ().String ())
571- }
572-
573- func TestManager_GetPendingSignedHeader_Miss (t * testing.T ) {
574- t .Parallel ()
575- cfg := tempConfig (t )
576- st := testMemStore (t )
577-
578- m , err := NewManager (cfg , st , zerolog .Nop ())
579- require .NoError (t , err )
580-
581- hdr , source , ok := m .GetPendingSignedHeader (99 )
582- require .False (t , ok )
583- require .Nil (t , hdr )
584- require .Empty (t , source )
585- }
586-
587- func TestManager_RemovePendingSignedHeader_Idempotent (t * testing.T ) {
588- t .Parallel ()
589- cfg := tempConfig (t )
590- st := testMemStore (t )
591-
592- m , err := NewManager (cfg , st , zerolog .Nop ())
593- require .NoError (t , err )
594-
595- require .NotPanics (t , func () { m .RemovePendingSignedHeader (123 ) })
596-
597- hdr := signedHeaderForHeight (5 , 0x01 )
598- m .SetPendingSignedHeader (hdr , "p2p" )
599- m .RemovePendingSignedHeader (5 )
600- m .RemovePendingSignedHeader (5 )
601- _ , _ , ok := m .GetPendingSignedHeader (5 )
602- require .False (t , ok )
603- }
604-
605- func TestManager_DeleteHeight_EvictsPendingSignedHeader (t * testing.T ) {
606- t .Parallel ()
607- cfg := tempConfig (t )
608- st := testMemStore (t )
609-
610- m , err := NewManager (cfg , st , zerolog .Nop ())
611- require .NoError (t , err )
612-
613- hdr := signedHeaderForHeight (5 , 0x01 )
614- m .SetPendingSignedHeader (hdr , "p2p" )
615- _ , _ , ok := m .GetPendingSignedHeader (5 )
616- require .True (t , ok )
617-
618- m .DeleteHeight (5 )
619-
620- _ , _ , ok = m .GetPendingSignedHeader (5 )
621- require .False (t , ok )
622- }
623-
624- func TestManager_ClearFromStore_ResetsPendingSignedHeaders (t * testing.T ) {
625- t .Parallel ()
626- cfg := tempConfig (t )
627- st := testMemStore (t )
628-
629- m , err := NewManager (cfg , st , zerolog .Nop ())
630- require .NoError (t , err )
631-
632- m .SetPendingSignedHeader (signedHeaderForHeight (5 , 0x01 ), "p2p" )
633- m .SetPendingSignedHeader (signedHeaderForHeight (6 , 0x02 ), "da" )
634-
635- impl , ok := m .(* implementation )
636- require .True (t , ok )
637- require .NoError (t , impl .ClearFromStore ())
638-
639- for _ , h := range []uint64 {5 , 6 } {
640- _ , _ , present := m .GetPendingSignedHeader (h )
641- require .False (t , present , "pending entry at %d must be cleared" , h )
642- }
643- }
644-
645- // Race-detector coverage for the pending-signed-header map. Run with -race.
646- func TestManager_PendingSignedHeader_Concurrency (t * testing.T ) {
647- t .Parallel ()
648- cfg := tempConfig (t )
649- st := testMemStore (t )
650-
651- m , err := NewManager (cfg , st , zerolog .Nop ())
652- require .NoError (t , err )
653-
654- const (
655- writers = 8
656- readers = 8
657- removers = 4
658- heightsPerRun = 200
659- )
660-
661- headers := make ([]* types.SignedHeader , heightsPerRun )
662- for i := range headers {
663- headers [i ] = signedHeaderForHeight (uint64 (i + 1 ), byte (i & 0xff ))
664- }
665-
666- var (
667- wg sync.WaitGroup
668- startCh = make (chan struct {})
669- writerHit atomic.Int64
670- readerHit atomic.Int64
671- )
672-
673- for w := range writers {
674- wg .Add (1 )
675- go func (seed int ) {
676- defer wg .Done ()
677- <- startCh
678- for i := range heightsPerRun {
679- idx := (seed * 7 + i ) % heightsPerRun
680- m .SetPendingSignedHeader (headers [idx ], "p2p" )
681- writerHit .Add (1 )
682- }
683- }(w )
684- }
685-
686- for r := range readers {
687- wg .Add (1 )
688- go func (seed int ) {
689- defer wg .Done ()
690- <- startCh
691- for i := range heightsPerRun {
692- h := uint64 ((seed * 11 + i )% heightsPerRun + 1 )
693- _ , _ , _ = m .GetPendingSignedHeader (h )
694- readerHit .Add (1 )
695- }
696- }(r )
697- }
698-
699- for d := range removers {
700- wg .Add (1 )
701- go func (seed int ) {
702- defer wg .Done ()
703- <- startCh
704- for i := range heightsPerRun {
705- h := uint64 ((seed * 13 + i )% heightsPerRun + 1 )
706- if i % 2 == 0 {
707- m .RemovePendingSignedHeader (h )
708- } else {
709- m .DeleteHeight (h )
710- }
711- }
712- }(d )
713- }
714-
715- close (startCh )
716- wg .Wait ()
717-
718- require .Equal (t , int64 (writers * heightsPerRun ), writerHit .Load ())
719- require .Equal (t , int64 (readers * heightsPerRun ), readerHit .Load ())
720- }
721-
722521func TestManager_DaHeightFromStoreOnRestore (t * testing.T ) {
723522 t .Parallel ()
724523
0 commit comments