Skip to content

Commit f772956

Browse files
committed
blockmanager: clean up test, use require
1 parent 85d9b53 commit f772956

File tree

1 file changed

+67
-111
lines changed

1 file changed

+67
-111
lines changed

blockmanager_test.go

Lines changed: 67 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ package neutrino
33
import (
44
"encoding/binary"
55
"fmt"
6-
"io/ioutil"
76
"math/rand"
8-
"os"
97
"strings"
108
"testing"
119
"time"
@@ -22,13 +20,14 @@ import (
2220
"github.com/lightninglabs/neutrino/blockntfns"
2321
"github.com/lightninglabs/neutrino/headerfs"
2422
"github.com/lightninglabs/neutrino/query"
23+
"github.com/stretchr/testify/require"
2524
)
2625

2726
const (
28-
// maxHeight is the height we will generate filter headers up to. We use an odd
29-
// number of checkpoints to ensure we can test cases where the block manager is
30-
// only able to fetch filter headers for one checkpoint interval rather than
31-
// two.
27+
// maxHeight is the height we will generate filter headers up to. We use
28+
// an odd number of checkpoints to ensure we can test cases where the
29+
// block manager is only able to fetch filter headers for one checkpoint
30+
// interval rather than two.
3231
maxHeight = 21 * uint32(wire.CFCheckptInterval)
3332

3433
dbOpenTimeout = time.Second * 10
@@ -52,36 +51,27 @@ func (m *mockDispatcher) Query(requests []*query.Request,
5251
}
5352

5453
// setupBlockManager initialises a blockManager to be used in tests.
55-
func setupBlockManager() (*blockManager, headerfs.BlockHeaderStore,
56-
*headerfs.FilterHeaderStore, func(), error) {
54+
func setupBlockManager(t *testing.T) (*blockManager, headerfs.BlockHeaderStore,
55+
*headerfs.FilterHeaderStore, error) {
5756

5857
// Set up the block and filter header stores.
59-
tempDir, err := ioutil.TempDir("", "neutrino")
60-
if err != nil {
61-
return nil, nil, nil, nil, fmt.Errorf("Failed to create "+
62-
"temporary directory: %s", err)
63-
}
64-
58+
tempDir := t.TempDir()
6559
db, err := walletdb.Create(
6660
"bdb", tempDir+"/weks.db", true, dbOpenTimeout,
6761
)
6862
if err != nil {
69-
os.RemoveAll(tempDir)
70-
return nil, nil, nil, nil, fmt.Errorf("Error opening DB: %s",
71-
err)
63+
return nil, nil, nil, fmt.Errorf("error opening DB: %s", err)
7264
}
7365

74-
cleanUp := func() {
75-
db.Close()
76-
os.RemoveAll(tempDir)
77-
}
66+
t.Cleanup(func() {
67+
require.NoError(t, db.Close())
68+
})
7869

7970
hdrStore, err := headerfs.NewBlockHeaderStore(
8071
tempDir, db, &chaincfg.SimNetParams,
8172
)
8273
if err != nil {
83-
cleanUp()
84-
return nil, nil, nil, nil, fmt.Errorf("Error creating block "+
74+
return nil, nil, nil, fmt.Errorf("error creating block "+
8575
"header store: %s", err)
8676
}
8777

@@ -90,8 +80,7 @@ func setupBlockManager() (*blockManager, headerfs.BlockHeaderStore,
9080
nil,
9181
)
9282
if err != nil {
93-
cleanUp()
94-
return nil, nil, nil, nil, fmt.Errorf("Error creating filter "+
83+
return nil, nil, nil, fmt.Errorf("error creating filter "+
9584
"header store: %s", err)
9685
}
9786

@@ -101,14 +90,16 @@ func setupBlockManager() (*blockManager, headerfs.BlockHeaderStore,
10190
BlockHeaders: hdrStore,
10291
RegFilterHeaders: cfStore,
10392
QueryDispatcher: &mockDispatcher{},
104-
BanPeer: func(string, banman.Reason) error { return nil },
93+
BanPeer: func(string, banman.Reason) error {
94+
return nil
95+
},
10596
})
10697
if err != nil {
107-
return nil, nil, nil, nil, fmt.Errorf("unable to create "+
98+
return nil, nil, nil, fmt.Errorf("unable to create "+
10899
"blockmanager: %v", err)
109100
}
110101

111-
return bm, hdrStore, cfStore, cleanUp, nil
102+
return bm, hdrStore, cfStore, nil
112103
}
113104

114105
// headers wraps the different headers and filters used throughout the tests.
@@ -315,47 +306,37 @@ func TestBlockManagerInitialInterval(t *testing.T) {
315306
testDesc := fmt.Sprintf("permute=%v, partial=%v, repeat=%v",
316307
test.permute, test.partialInterval, test.repeat)
317308

318-
bm, hdrStore, cfStore, cleanUp, err := setupBlockManager()
309+
bm, hdrStore, cfStore, err := setupBlockManager(t)
319310
if err != nil {
320311
t.Fatalf("unable to set up ChainService: %v", err)
321312
}
322-
defer cleanUp()
323313

324314
// Keep track of the filter headers and block headers. Since
325315
// the genesis headers are written automatically when the store
326316
// is created, we query it to add to the slices.
327317
genesisBlockHeader, _, err := hdrStore.ChainTip()
328-
if err != nil {
329-
t.Fatal(err)
330-
}
318+
require.NoError(t, err)
331319

332320
genesisFilterHeader, _, err := cfStore.ChainTip()
333-
if err != nil {
334-
t.Fatal(err)
335-
}
321+
require.NoError(t, err)
336322

337-
headers, err := generateHeaders(genesisBlockHeader,
338-
genesisFilterHeader, nil)
339-
if err != nil {
340-
t.Fatalf("unable to generate headers: %v", err)
341-
}
323+
headers, err := generateHeaders(
324+
genesisBlockHeader, genesisFilterHeader, nil,
325+
)
326+
require.NoError(t, err)
342327

343328
// Write all block headers but the genesis, since it is already
344329
// in the store.
345-
if err = hdrStore.WriteHeaders(headers.blockHeaders[1:]...); err != nil {
346-
t.Fatalf("Error writing batch of headers: %s", err)
347-
}
330+
err = hdrStore.WriteHeaders(headers.blockHeaders[1:]...)
331+
require.NoError(t, err)
348332

349333
// We emulate the case where a few filter headers are already
350334
// written to the store by writing 1/3 of the first interval.
351335
if test.partialInterval {
352336
err = cfStore.WriteHeaders(
353337
headers.cfHeaders[1 : wire.CFCheckptInterval/3]...,
354338
)
355-
if err != nil {
356-
t.Fatalf("Error writing batch of headers: %s",
357-
err)
358-
}
339+
require.NoError(t, err)
359340
}
360341

361342
// We set up a custom query batch method for this test, as we
@@ -371,10 +352,7 @@ func TestBlockManagerInitialInterval(t *testing.T) {
371352
}
372353

373354
responses, err := generateResponses(msgs, headers)
374-
if err != nil {
375-
t.Fatalf("unable to generate responses: %v",
376-
err)
377-
}
355+
require.NoError(t, err)
378356

379357
// We permute the response order if the test signals
380358
// that.
@@ -459,20 +437,12 @@ func TestBlockManagerInitialInterval(t *testing.T) {
459437

460438
// Finally make sure the filter header tip is what we expect.
461439
tip, tipHeight, err := cfStore.ChainTip()
462-
if err != nil {
463-
t.Fatal(err)
464-
}
440+
require.NoError(t, err)
465441

466-
if tipHeight != maxHeight {
467-
t.Fatalf("expected tip height to be %v, was %v",
468-
maxHeight, tipHeight)
469-
}
442+
require.Equal(t, maxHeight, tipHeight, "tip height")
470443

471444
lastCheckpoint := headers.checkpoints[len(headers.checkpoints)-1]
472-
if *tip != *lastCheckpoint {
473-
t.Fatalf("expected tip to be %v, was %v",
474-
lastCheckpoint, tip)
475-
}
445+
require.Equal(t, *lastCheckpoint, *tip, "tip")
476446
}
477447
}
478448

@@ -547,43 +517,35 @@ func TestBlockManagerInvalidInterval(t *testing.T) {
547517

548518
for _, test := range testCases {
549519
test := test
550-
bm, hdrStore, cfStore, cleanUp, err := setupBlockManager()
551-
if err != nil {
552-
t.Fatalf("unable to set up ChainService: %v", err)
553-
}
554-
defer cleanUp()
520+
bm, hdrStore, cfStore, err := setupBlockManager(t)
521+
require.NoError(t, err)
555522

556523
// Create a mock peer to prevent panics when attempting to ban
557524
// a peer that served an invalid filter header.
558525
mockPeer := NewServerPeer(&ChainService{}, false)
559526
mockPeer.Peer, err = peer.NewOutboundPeer(
560527
NewPeerConfig(mockPeer), "127.0.0.1:8333",
561528
)
562-
if err != nil {
563-
t.Fatal(err)
564-
}
529+
require.NoError(t, err)
565530

566531
// Keep track of the filter headers and block headers. Since
567532
// the genesis headers are written automatically when the store
568533
// is created, we query it to add to the slices.
569534
genesisBlockHeader, _, err := hdrStore.ChainTip()
570-
if err != nil {
571-
t.Fatal(err)
572-
}
535+
require.NoError(t, err)
573536

574537
genesisFilterHeader, _, err := cfStore.ChainTip()
575-
if err != nil {
576-
t.Fatal(err)
577-
}
538+
require.NoError(t, err)
539+
578540
// To emulate a full node serving us filter headers derived
579541
// from different genesis than what we have, we flip a bit in
580542
// the genesis filter header.
581543
if test.wrongGenesis {
582544
genesisFilterHeader[0] ^= 1
583545
}
584546

585-
headers, err := generateHeaders(genesisBlockHeader,
586-
genesisFilterHeader,
547+
headers, err := generateHeaders(
548+
genesisBlockHeader, genesisFilterHeader,
587549
func(currentCFHeader *chainhash.Hash) {
588550
// If we are testing that each interval doesn't
589551
// line up properly with the previous, we flip
@@ -592,27 +554,22 @@ func TestBlockManagerInvalidInterval(t *testing.T) {
592554
if test.intervalMisaligned {
593555
currentCFHeader[0] ^= 1
594556
}
595-
})
596-
if err != nil {
597-
t.Fatalf("unable to generate headers: %v", err)
598-
}
557+
},
558+
)
559+
require.NoError(t, err)
599560

600561
// Write all block headers but the genesis, since it is already
601562
// in the store.
602-
if err = hdrStore.WriteHeaders(headers.blockHeaders[1:]...); err != nil {
603-
t.Fatalf("Error writing batch of headers: %s", err)
604-
}
563+
err = hdrStore.WriteHeaders(headers.blockHeaders[1:]...)
564+
require.NoError(t, err)
605565

606566
// We emulate the case where a few filter headers are already
607567
// written to the store by writing 1/3 of the first interval.
608568
if test.partialInterval {
609569
err = cfStore.WriteHeaders(
610570
headers.cfHeaders[1 : wire.CFCheckptInterval/3]...,
611571
)
612-
if err != nil {
613-
t.Fatalf("Error writing batch of headers: %s",
614-
err)
615-
}
572+
require.NoError(t, err)
616573
}
617574

618575
bm.cfg.QueryDispatcher.(*mockDispatcher).query = func(
@@ -624,10 +581,7 @@ func TestBlockManagerInvalidInterval(t *testing.T) {
624581
msgs = append(msgs, q.Req)
625582
}
626583
responses, err := generateResponses(msgs, headers)
627-
if err != nil {
628-
t.Fatalf("unable to generate responses: %v",
629-
err)
630-
}
584+
require.NoError(t, err)
631585

632586
// Since we used the generated checkpoints when
633587
// creating the responses, we must flip the
@@ -644,7 +598,7 @@ func TestBlockManagerInvalidInterval(t *testing.T) {
644598
}
645599

646600
// If we are testing for intervals with invalid prev
647-
// hashes, we flip a bit to corrup them, regardless of
601+
// hashes, we flip a bit to corrupt them, regardless of
648602
// whether we are testing misaligned intervals.
649603
if test.invalidPrevHash {
650604
for i := range responses {
@@ -760,12 +714,12 @@ func assertBadPeers(expBad map[string]struct{}, badPeers []string) error {
760714
for p := range expBad {
761715
remBad[p] = struct{}{}
762716
}
763-
for _, peer := range badPeers {
764-
_, ok := remBad[peer]
717+
for _, p := range badPeers {
718+
_, ok := remBad[p]
765719
if !ok {
766-
return fmt.Errorf("did not expect %v to be bad", peer)
720+
return fmt.Errorf("did not expect %v to be bad", p)
767721
}
768-
delete(remBad, peer)
722+
delete(remBad, p)
769723
}
770724

771725
if len(remBad) != 0 {
@@ -855,20 +809,25 @@ func TestBlockManagerDetectBadPeers(t *testing.T) {
855809
options ...QueryOption) {
856810

857811
for p, resp := range answers {
858-
pp, err := peer.NewOutboundPeer(&peer.Config{}, p)
812+
pp, err := peer.NewOutboundPeer(
813+
&peer.Config{}, p,
814+
)
859815
if err != nil {
860816
panic(err)
861817
}
862818

863819
sp := &ServerPeer{
864820
Peer: pp,
865821
}
866-
checkResponse(sp, resp, make(chan struct{}), make(chan struct{}))
822+
checkResponse(
823+
sp, resp, make(chan struct{}),
824+
make(chan struct{}),
825+
)
867826
}
868827
}
869828

870-
for _, peer := range peers {
871-
test.filterAnswers(peer, answers)
829+
for _, p := range peers {
830+
test.filterAnswers(p, answers)
872831
}
873832

874833
// For the CFHeaders, we pretend all peers responded with the same
@@ -884,8 +843,8 @@ func TestBlockManagerDetectBadPeers(t *testing.T) {
884843
}
885844

886845
headers := make(map[string]*wire.MsgCFHeaders)
887-
for _, peer := range peers {
888-
headers[peer] = msg
846+
for _, p := range peers {
847+
headers[p] = msg
889848
}
890849

891850
bm := &blockManager{
@@ -900,12 +859,9 @@ func TestBlockManagerDetectBadPeers(t *testing.T) {
900859
badPeers, err := bm.detectBadPeers(
901860
headers, targetIndex, badIndex, fType,
902861
)
903-
if err != nil {
904-
t.Fatalf("failed to detect bad peers: %v", err)
905-
}
862+
require.NoError(t, err)
906863

907-
if err := assertBadPeers(expBad, badPeers); err != nil {
908-
t.Fatal(err)
909-
}
864+
err = assertBadPeers(expBad, badPeers)
865+
require.NoError(t, err)
910866
}
911867
}

0 commit comments

Comments
 (0)