@@ -31,23 +31,117 @@ func TestSyncer_Tail(t *testing.T) {
31
31
err = localStore .Start (ctx )
32
32
require .NoError (t , err )
33
33
34
+ syncer , err := NewSyncer [* headertest.DummyHeader ](
35
+ remoteStore ,
36
+ localStore ,
37
+ headertest .NewDummySubscriber (),
38
+ WithBlockTime (time .Second * 6 ),
39
+ )
40
+ require .NoError (t , err )
41
+
42
+ tail , err := syncer .Tail (ctx )
43
+ require .NoError (t , err )
44
+ assert .NotNil (t , tail )
45
+
46
+ time .Sleep (time .Millisecond * 10 )
47
+
48
+ err = syncer .Start (ctx )
49
+ require .NoError (t , err )
50
+
51
+ time .Sleep (time .Millisecond * 10 )
52
+
53
+ storeTail , err := localStore .Tail (ctx )
54
+ require .NoError (t , err )
55
+ assert .EqualValues (t , tail .Height (), storeTail .Height ())
56
+
57
+ storeHead , err := localStore .Head (ctx )
58
+ require .NoError (t , err )
59
+ assert .EqualValues (t , remoteStore .Height (), storeHead .Height ())
60
+ }
61
+
62
+ func TestSyncer_TailInitFromHash (t * testing.T ) {
63
+ ctx , cancel := context .WithTimeout (context .Background (), time .Second * 5 )
64
+ t .Cleanup (cancel )
65
+
66
+ remoteStore := headertest .NewStore [* headertest.DummyHeader ](t , headertest .NewTestSuite (t ), 100 )
67
+
68
+ ds := dssync .MutexWrap (datastore .NewMapDatastore ())
69
+ localStore , err := store.NewStore [* headertest.DummyHeader ](ds )
70
+ require .NoError (t , err )
71
+ err = localStore .Start (ctx )
72
+ require .NoError (t , err )
73
+
74
+ expectedTail , err := remoteStore .GetByHeight (ctx , 69 )
75
+ require .NoError (t , err )
76
+
34
77
syncer , err := NewSyncer [* headertest.DummyHeader ](
35
78
remoteStore ,
36
79
localStore ,
37
80
headertest .NewDummySubscriber (),
38
81
WithRecencyThreshold (time .Nanosecond ), // force recent requests
39
82
WithBlockTime (time .Second * 6 ),
83
+ WithSyncFromHash (expectedTail .Hash ()),
40
84
)
41
85
require .NoError (t , err )
42
86
43
87
tail , err := syncer .Tail (ctx )
44
88
require .NoError (t , err )
45
89
assert .NotNil (t , tail )
90
+ assert .EqualValues (t , tail .Height (), expectedTail .Height ())
91
+
92
+ time .Sleep (time .Millisecond * 10 )
46
93
47
94
err = syncer .Start (ctx )
48
95
require .NoError (t , err )
49
96
50
- time .Sleep (time .Millisecond * 100 )
97
+ time .Sleep (time .Millisecond * 10 )
98
+
99
+ storeTail , err := localStore .Tail (ctx )
100
+ require .NoError (t , err )
101
+ assert .EqualValues (t , tail .Height (), storeTail .Height ())
102
+
103
+ storeHead , err := localStore .Head (ctx )
104
+ require .NoError (t , err )
105
+ assert .EqualValues (t , remoteStore .Height (), storeHead .Height ())
106
+ }
107
+
108
+ func TestSyncer_TailInitFromHeight (t * testing.T ) {
109
+ ctx , cancel := context .WithTimeout (context .Background (), time .Second * 5 )
110
+ t .Cleanup (cancel )
111
+
112
+ remoteStore := headertest .NewStore [* headertest.DummyHeader ](t , headertest .NewTestSuite (t ), 100 )
113
+
114
+ ds := dssync .MutexWrap (datastore .NewMapDatastore ())
115
+ localStore , err := store.NewStore [* headertest.DummyHeader ](ds )
116
+ require .NoError (t , err )
117
+ err = localStore .Start (ctx )
118
+ require .NoError (t , err )
119
+
120
+ expectedTail , err := remoteStore .GetByHeight (ctx , 69 )
121
+ require .NoError (t , err )
122
+
123
+ syncer , err := NewSyncer [* headertest.DummyHeader ](
124
+ remoteStore ,
125
+ localStore ,
126
+ headertest .NewDummySubscriber (),
127
+ WithRecencyThreshold (time .Nanosecond ), // force recent requests
128
+ WithBlockTime (time .Second * 6 ),
129
+ WithSyncFromHeight (expectedTail .Height ()),
130
+ )
131
+ require .NoError (t , err )
132
+
133
+ tail , err := syncer .Tail (ctx )
134
+ require .NoError (t , err )
135
+ assert .NotNil (t , tail )
136
+ assert .EqualValues (t , tail .Height (), expectedTail .Height ())
137
+
138
+ time .Sleep (time .Millisecond * 10 )
139
+
140
+ err = syncer .Start (ctx )
141
+ require .NoError (t , err )
142
+
143
+ time .Sleep (time .Millisecond * 10 )
144
+
51
145
storeTail , err := localStore .Tail (ctx )
52
146
require .NoError (t , err )
53
147
assert .EqualValues (t , tail .Height (), storeTail .Height ())
@@ -443,7 +537,7 @@ type errorGetter struct{}
443
537
444
538
func (e errorGetter ) Head (
445
539
context.Context ,
446
- ... header.HeadOption [* headertest.DummyHeader ],
540
+ ... header.HeadOption [* headertest.DummyHeader ],
447
541
) (* headertest.DummyHeader , error ) {
448
542
time .Sleep (time .Millisecond * 1 )
449
543
return nil , fmt .Errorf ("error" )
0 commit comments