@@ -29,9 +29,10 @@ func TestSyncer_TailInit(t *testing.T) {
29
29
require .NoError (t , err )
30
30
31
31
tests := []struct {
32
- name string
33
- option Option
34
- expected func () * headertest.DummyHeader
32
+ name string
33
+ option Option
34
+ expected func () * headertest.DummyHeader
35
+ expectedAfterRestart func () * headertest.DummyHeader
35
36
}{
36
37
{
37
38
"Estimate" ,
@@ -41,27 +42,42 @@ func TestSyncer_TailInit(t *testing.T) {
41
42
require .NoError (t , err )
42
43
return remoteTail
43
44
},
45
+ func () * headertest.DummyHeader {
46
+ remoteTail , err := remoteStore .Tail (ctx )
47
+ require .NoError (t , err )
48
+ return remoteTail
49
+ },
44
50
},
45
51
{
46
52
"SyncFromHash" ,
47
53
WithSyncFromHash (expectedTail .Hash ()),
48
54
func () * headertest.DummyHeader {
49
55
return expectedTail
50
56
},
57
+ func () * headertest.DummyHeader {
58
+ expectedTail , err := remoteStore .GetByHeight (ctx , expectedTail .Height ()+ 10 )
59
+ require .NoError (t , err )
60
+ return expectedTail
61
+ },
51
62
},
52
63
{
53
64
"SyncFromHeight" ,
54
65
WithSyncFromHeight (expectedTail .Height ()),
55
66
func () * headertest.DummyHeader {
56
67
return expectedTail
57
68
},
69
+ func () * headertest.DummyHeader {
70
+ expectedTail , err := remoteStore .GetByHeight (ctx , expectedTail .Height ()- 10 )
71
+ require .NoError (t , err )
72
+ return expectedTail
73
+ },
58
74
},
59
75
}
60
76
61
77
for _ , test := range tests {
62
78
t .Run (test .name , func (t * testing.T ) {
63
79
ds := dssync .MutexWrap (datastore .NewMapDatastore ())
64
- localStore , err := store.NewStore [* headertest.DummyHeader ](ds )
80
+ localStore , err := store .NewStore [* headertest.DummyHeader ](ds , store . WithWriteBatchSize ( 1 ) )
65
81
require .NoError (t , err )
66
82
err = localStore .Start (ctx )
67
83
require .NoError (t , err )
@@ -77,18 +93,30 @@ func TestSyncer_TailInit(t *testing.T) {
77
93
78
94
err = syncer .Start (ctx )
79
95
require .NoError (t , err )
80
-
81
96
time .Sleep (time .Millisecond * 100 )
82
97
98
+ // check that the syncer has the expected tail and head
83
99
expectedTail := test .expected ()
84
-
85
100
storeTail , err := localStore .Tail (ctx )
86
101
require .NoError (t , err )
87
102
assert .EqualValues (t , expectedTail .Height (), storeTail .Height ())
88
-
89
103
storeHead , err := localStore .Head (ctx )
90
104
require .NoError (t , err )
91
105
assert .EqualValues (t , remoteStore .Height (), storeHead .Height ())
106
+
107
+ // restart the Syncer and set a new tail
108
+ err = syncer .Stop (ctx )
109
+ require .NoError (t , err )
110
+ expectedTail = test .expectedAfterRestart ()
111
+ syncer .Params .SyncFromHeight = expectedTail .Height ()
112
+ syncer .Params .SyncFromHash = expectedTail .Hash ()
113
+ err = syncer .Start (ctx )
114
+ require .NoError (t , err )
115
+
116
+ // ensure that the Syncer moved to the new tail after restart
117
+ storeTail , err = localStore .Tail (ctx )
118
+ require .NoError (t , err )
119
+ assert .EqualValues (t , expectedTail .Height (), storeTail .Height ())
92
120
})
93
121
}
94
122
}
0 commit comments