Skip to content

Commit abe56c1

Browse files
committed
lint + combine tests
1 parent 00e2e9b commit abe56c1

File tree

3 files changed

+79
-123
lines changed

3 files changed

+79
-123
lines changed

headertest/store.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ func NewDummyStore(t *testing.T) *Store[*DummyHeader] {
2828
func NewStore[H header.Header[H]](_ *testing.T, gen Generator[H], numHeaders int) *Store[H] {
2929
store := &Store[H]{
3030
Headers: make(map[uint64]H),
31-
HeadHeight: 0,
31+
HeadHeight: 1,
32+
TailHeight: 1,
3233
}
3334

3435
for i := 0; i < numHeaders; i++ {

sync/sync_head.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,22 +150,35 @@ func (s *Syncer[H]) Tail(ctx context.Context) (H, error) {
150150
}
151151
}
152152

153-
if currentTail.Height() > newTail.Height() {
154-
log.Infow("tail header changed from %d to %d, syncing the diff...", currentTail, newTail)
153+
switch {
154+
case currentTail.Height() > newTail.Height():
155+
log.Infow(
156+
"tail header changed from %d to %d, syncing the diff...",
157+
currentTail,
158+
newTail,
159+
)
155160
// TODO(@Wondertan): This works but it assumes this code is only run before syncing routine starts.
156161
// If run after, it may race with other in prog syncs.
157162
// To be reworked by bsync.
158163
err := s.doSync(ctx, newTail, currentTail)
159164
if err != nil {
160165
return tail, fmt.Errorf("syncing the diff between old and new Tail: %w", err)
161166
}
162-
} else if currentTail.Height() < newTail.Height() {
163-
log.Infow("Tail header changed from %d to %d, pruning the diff...", currentTail, newTail)
167+
case currentTail.Height() < newTail.Height():
168+
log.Infow(
169+
"Tail header changed from %d to %d, pruning the diff...",
170+
currentTail,
171+
newTail,
172+
)
164173
err := s.store.DeleteTo(ctx, newTail.Height())
165174
if err != nil {
166-
return tail, fmt.Errorf("deleting headers up to newly configured Tail(%d): %w", newTail.Height(), err)
175+
return tail, fmt.Errorf(
176+
"deleting headers up to newly configured Tail(%d): %w",
177+
newTail.Height(),
178+
err,
179+
)
167180
}
168-
} else {
181+
default:
169182
// equals case, must not happen
170183
panic("currentTail == newTail")
171184
}

sync/sync_head_test.go

Lines changed: 58 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -19,136 +19,78 @@ import (
1919
"github.com/celestiaorg/go-header/store"
2020
)
2121

22-
func TestSyncer_Tail(t *testing.T) {
22+
func TestSyncer_TailInit(t *testing.T) {
2323
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
2424
t.Cleanup(cancel)
2525

2626
remoteStore := headertest.NewStore[*headertest.DummyHeader](t, headertest.NewTestSuite(t), 100)
2727

28-
ds := dssync.MutexWrap(datastore.NewMapDatastore())
29-
localStore, err := store.NewStore[*headertest.DummyHeader](ds)
30-
require.NoError(t, err)
31-
err = localStore.Start(ctx)
32-
require.NoError(t, err)
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-
7428
expectedTail, err := remoteStore.GetByHeight(ctx, 69)
7529
require.NoError(t, err)
7630

77-
syncer, err := NewSyncer[*headertest.DummyHeader](
78-
remoteStore,
79-
localStore,
80-
headertest.NewDummySubscriber(),
81-
WithRecencyThreshold(time.Nanosecond), // force recent requests
82-
WithBlockTime(time.Second*6),
83-
WithSyncFromHash(expectedTail.Hash()),
84-
)
85-
require.NoError(t, err)
86-
87-
tail, err := syncer.Tail(ctx)
88-
require.NoError(t, err)
89-
assert.NotNil(t, tail)
90-
assert.EqualValues(t, tail.Height(), expectedTail.Height())
91-
92-
time.Sleep(time.Millisecond * 10)
93-
94-
err = syncer.Start(ctx)
95-
require.NoError(t, err)
96-
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)
31+
tests := []struct {
32+
name string
33+
option Option
34+
expected func() *headertest.DummyHeader
35+
}{
36+
{
37+
"Estimate",
38+
func(p *Parameters) {}, // noop to trigger estimation,
39+
func() *headertest.DummyHeader {
40+
remoteTail, err := remoteStore.Tail(ctx)
41+
require.NoError(t, err)
42+
return remoteTail
43+
},
44+
},
45+
{
46+
"SyncFromHash",
47+
WithSyncFromHash(expectedTail.Hash()),
48+
func() *headertest.DummyHeader {
49+
return expectedTail
50+
},
51+
},
52+
{
53+
"SyncFromHeight",
54+
WithSyncFromHeight(expectedTail.Height()),
55+
func() *headertest.DummyHeader {
56+
return expectedTail
57+
},
58+
},
59+
}
12260

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)
61+
for _, test := range tests {
62+
t.Run(test.name, func(t *testing.T) {
63+
ds := dssync.MutexWrap(datastore.NewMapDatastore())
64+
localStore, err := store.NewStore[*headertest.DummyHeader](ds)
65+
require.NoError(t, err)
66+
err = localStore.Start(ctx)
67+
require.NoError(t, err)
13268

133-
tail, err := syncer.Tail(ctx)
134-
require.NoError(t, err)
135-
assert.NotNil(t, tail)
136-
assert.EqualValues(t, tail.Height(), expectedTail.Height())
69+
syncer, err := NewSyncer[*headertest.DummyHeader](
70+
remoteStore,
71+
localStore,
72+
headertest.NewDummySubscriber(),
73+
WithBlockTime(time.Second*6),
74+
test.option,
75+
)
76+
require.NoError(t, err)
13777

138-
time.Sleep(time.Millisecond * 10)
78+
err = syncer.Start(ctx)
79+
require.NoError(t, err)
13980

140-
err = syncer.Start(ctx)
141-
require.NoError(t, err)
81+
time.Sleep(time.Millisecond * 100)
14282

143-
time.Sleep(time.Millisecond * 10)
83+
expectedTail := test.expected()
14484

145-
storeTail, err := localStore.Tail(ctx)
146-
require.NoError(t, err)
147-
assert.EqualValues(t, tail.Height(), storeTail.Height())
85+
storeTail, err := localStore.Tail(ctx)
86+
require.NoError(t, err)
87+
assert.EqualValues(t, expectedTail.Height(), storeTail.Height())
14888

149-
storeHead, err := localStore.Head(ctx)
150-
require.NoError(t, err)
151-
assert.EqualValues(t, remoteStore.Height(), storeHead.Height())
89+
storeHead, err := localStore.Head(ctx)
90+
require.NoError(t, err)
91+
assert.EqualValues(t, remoteStore.Height(), storeHead.Height())
92+
})
93+
}
15294
}
15395

15496
func TestSyncer_HeadConcurrencyError(t *testing.T) {
@@ -537,7 +479,7 @@ type errorGetter struct{}
537479

538480
func (e errorGetter) Head(
539481
context.Context,
540-
...header.HeadOption[*headertest.DummyHeader],
482+
...header.HeadOption[*headertest.DummyHeader],
541483
) (*headertest.DummyHeader, error) {
542484
time.Sleep(time.Millisecond * 1)
543485
return nil, fmt.Errorf("error")

0 commit comments

Comments
 (0)