@@ -2,6 +2,7 @@ package sync
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"sync"
6
7
"sync/atomic"
7
8
"testing"
@@ -15,6 +16,35 @@ import (
15
16
"github.com/celestiaorg/go-header/local"
16
17
)
17
18
19
+ func TestSyncer_HeadConcurrencyError (t * testing.T ) {
20
+ ctx , cancel := context .WithTimeout (context .Background (), time .Second * 5 )
21
+ t .Cleanup (cancel )
22
+
23
+ suite := headertest .NewTestSuite (t )
24
+ store := headertest .NewStore [* headertest.DummyHeader ](t , suite , 1 )
25
+
26
+ syncer , err := NewSyncer [* headertest.DummyHeader ](
27
+ errorGetter {},
28
+ store ,
29
+ headertest .NewDummySubscriber (),
30
+ WithRecencyThreshold (time .Nanosecond ), // force recent requests
31
+ )
32
+ require .NoError (t , err )
33
+
34
+ var wg sync.WaitGroup
35
+ for i := 0 ; i < 1000 ; i ++ {
36
+ wg .Add (1 )
37
+ go func () {
38
+ defer wg .Done ()
39
+
40
+ _ , err := syncer .Head (ctx )
41
+ require .NoError (t , err )
42
+ }()
43
+ }
44
+
45
+ wg .Wait ()
46
+ }
47
+
18
48
func TestSyncer_incomingNetworkHeadRaces (t * testing.T ) {
19
49
ctx , cancel := context .WithTimeout (context .Background (), time .Second * 5 )
20
50
t .Cleanup (cancel )
@@ -121,12 +151,10 @@ func (t *wrappedGetter) Head(ctx context.Context, options ...header.HeadOption[*
121
151
}
122
152
123
153
func (t * wrappedGetter ) Get (ctx context.Context , hash header.Hash ) (* headertest.DummyHeader , error ) {
124
- // TODO implement me
125
154
panic ("implement me" )
126
155
}
127
156
128
157
func (t * wrappedGetter ) GetByHeight (ctx context.Context , u uint64 ) (* headertest.DummyHeader , error ) {
129
- // TODO implement me
130
158
panic ("implement me" )
131
159
}
132
160
@@ -135,6 +163,24 @@ func (t *wrappedGetter) GetRangeByHeight(
135
163
from * headertest.DummyHeader ,
136
164
to uint64 ,
137
165
) ([]* headertest.DummyHeader , error ) {
138
- // TODO implement me
166
+ panic ("implement me" )
167
+ }
168
+
169
+ type errorGetter struct {}
170
+
171
+ func (e errorGetter ) Head (ctx context.Context , h ... header.HeadOption [* headertest.DummyHeader ]) (* headertest.DummyHeader , error ) {
172
+ time .Sleep (time .Millisecond * 1 )
173
+ return nil , fmt .Errorf ("error" )
174
+ }
175
+
176
+ func (e errorGetter ) Get (ctx context.Context , hash header.Hash ) (* headertest.DummyHeader , error ) {
177
+ panic ("implement me" )
178
+ }
179
+
180
+ func (e errorGetter ) GetByHeight (ctx context.Context , u uint64 ) (* headertest.DummyHeader , error ) {
181
+ panic ("implement me" )
182
+ }
183
+
184
+ func (e errorGetter ) GetRangeByHeight (ctx context.Context , from * headertest.DummyHeader , to uint64 ) ([]* headertest.DummyHeader , error ) {
139
185
panic ("implement me" )
140
186
}
0 commit comments