Skip to content

Commit cdd05ae

Browse files
committed
filterdb: lint and modernize the pkg
Lint the files and update the tests to use the `require` package.
1 parent 5aac983 commit cdd05ae

File tree

2 files changed

+50
-80
lines changed

2 files changed

+50
-80
lines changed

filterdb/db.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,13 @@ var (
1818

1919
// regBucket is the bucket that stores the regular filters.
2020
regBucket = []byte("regular")
21+
22+
// ErrFilterNotFound is returned when a filter for a target block hash
23+
// is unable to be located.
24+
ErrFilterNotFound = fmt.Errorf("unable to find filter")
2125
)
2226

23-
// FilterType is a enum-like type that represents the various filter types
27+
// FilterType is an enum-like type that represents the various filter types
2428
// currently defined.
2529
type FilterType uint8
2630

@@ -30,15 +34,9 @@ const (
3034
RegularFilter FilterType = iota
3135
)
3236

33-
var (
34-
// ErrFilterNotFound is returned when a filter for a target block hash is
35-
// unable to be located.
36-
ErrFilterNotFound = fmt.Errorf("unable to find filter")
37-
)
38-
3937
// FilterDatabase is an interface which represents an object that is capable of
40-
// storing and retrieving filters according to their corresponding block hash and
41-
// also their filter type.
38+
// storing and retrieving filters according to their corresponding block hash
39+
// and also their filter type.
4240
//
4341
// TODO(roasbeef): similar interface for headerfs?
4442
type FilterDatabase interface {
@@ -52,7 +50,8 @@ type FilterDatabase interface {
5250
// returned.
5351
FetchFilter(*chainhash.Hash, FilterType) (*gcs.Filter, error)
5452

55-
// PurgeFilters purge all filters with a given type from persistent storage.
53+
// PurgeFilters purge all filters with a given type from persistent
54+
// storage.
5655
PurgeFilters(FilterType) error
5756
}
5857

@@ -117,10 +116,13 @@ func (f *FilterStore) PurgeFilters(fType FilterType) error {
117116

118117
switch fType {
119118
case RegularFilter:
120-
if err := filters.DeleteNestedBucket(regBucket); err != nil {
119+
err := filters.DeleteNestedBucket(regBucket)
120+
if err != nil {
121121
return err
122122
}
123-
if _, err := filters.CreateBucket(regBucket); err != nil {
123+
124+
_, err = filters.CreateBucket(regBucket)
125+
if err != nil {
124126
return err
125127
}
126128
default:

filterdb/db_test.go

Lines changed: 36 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package filterdb
22

33
import (
4-
"io/ioutil"
54
"math/rand"
6-
"os"
7-
"reflect"
85
"testing"
96
"time"
107

@@ -14,116 +11,87 @@ import (
1411
"github.com/btcsuite/btcd/chaincfg/chainhash"
1512
"github.com/btcsuite/btcwallet/walletdb"
1613
_ "github.com/btcsuite/btcwallet/walletdb/bdb"
14+
"github.com/stretchr/testify/require"
1715
)
1816

19-
func createTestDatabase() (func(), FilterDatabase, error) {
20-
tempDir, err := ioutil.TempDir("", "neutrino")
21-
if err != nil {
22-
return nil, nil, err
23-
}
17+
func createTestDatabase(t *testing.T) FilterDatabase {
18+
tempDir := t.TempDir()
2419

2520
db, err := walletdb.Create(
2621
"bdb", tempDir+"/test.db", true, time.Second*10,
2722
)
28-
if err != nil {
29-
return nil, nil, err
30-
}
31-
32-
cleanUp := func() {
33-
os.RemoveAll(tempDir)
34-
db.Close()
35-
}
23+
require.NoError(t, err)
24+
t.Cleanup(func() {
25+
require.NoError(t, db.Close())
26+
})
3627

3728
filterDB, err := New(db, chaincfg.SimNetParams)
38-
if err != nil {
39-
return nil, nil, err
40-
}
29+
require.NoError(t, err)
4130

42-
return cleanUp, filterDB, nil
31+
return filterDB
4332
}
4433

34+
// TestGenesisFilterCreation tests the fetching of the genesis block filter.
4535
func TestGenesisFilterCreation(t *testing.T) {
46-
cleanUp, database, err := createTestDatabase()
47-
defer cleanUp()
48-
if err != nil {
49-
t.Fatalf("unable to create test db: %v", err)
50-
}
51-
52-
genesisHash := chaincfg.SimNetParams.GenesisHash
36+
var (
37+
database = createTestDatabase(t)
38+
genesisHash = chaincfg.SimNetParams.GenesisHash
39+
)
5340

5441
// With the database initialized, we should be able to fetch the
5542
// regular filter for the genesis block.
56-
regGenesisFilter, err := database.FetchFilter(genesisHash, RegularFilter)
57-
if err != nil {
58-
t.Fatalf("unable to fetch regular genesis filter: %v", err)
59-
}
43+
regGenesisFilter, err := database.FetchFilter(
44+
genesisHash, RegularFilter,
45+
)
46+
require.NoError(t, err)
6047

6148
// The regular filter should be non-nil as the gensis block's output
6249
// and the coinbase txid should be indexed.
63-
if regGenesisFilter == nil {
64-
t.Fatalf("regular genesis filter is nil")
65-
}
50+
require.NotNil(t, regGenesisFilter)
6651
}
6752

68-
func genRandFilter(numElements uint32) (*gcs.Filter, error) {
53+
func genRandFilter(t *testing.T, numElements uint32) *gcs.Filter {
6954
elements := make([][]byte, numElements)
7055
for i := uint32(0); i < numElements; i++ {
7156
var elem [20]byte
72-
if _, err := rand.Read(elem[:]); err != nil {
73-
return nil, err
74-
}
57+
_, err := rand.Read(elem[:])
58+
require.NoError(t, err)
7559

7660
elements[i] = elem[:]
7761
}
7862

7963
var key [16]byte
80-
if _, err := rand.Read(key[:]); err != nil {
81-
return nil, err
82-
}
64+
_, err := rand.Read(key[:])
65+
require.NoError(t, err)
8366

8467
filter, err := gcs.BuildGCSFilter(
8568
builder.DefaultP, builder.DefaultM, key, elements,
8669
)
87-
if err != nil {
88-
return nil, err
89-
}
70+
require.NoError(t, err)
9071

91-
return filter, nil
72+
return filter
9273
}
9374

75+
// TestFilterStorage test writing to and reading from the filter DB.
9476
func TestFilterStorage(t *testing.T) {
95-
// TODO(roasbeef): use testing.Quick
96-
cleanUp, database, err := createTestDatabase()
97-
defer cleanUp()
98-
if err != nil {
99-
t.Fatalf("unable to create test db: %v", err)
100-
}
77+
database := createTestDatabase(t)
10178

10279
// We'll generate a random block hash to create our test filters
10380
// against.
10481
var randHash chainhash.Hash
105-
if _, err := rand.Read(randHash[:]); err != nil {
106-
t.Fatalf("unable to generate random hash: %v", err)
107-
}
82+
_, err := rand.Read(randHash[:])
83+
require.NoError(t, err)
10884

109-
// First, we'll create and store a random fitler for the regular filter
85+
// First, we'll create and store a random filter for the regular filter
11086
// type for the block hash generate above.
111-
regFilter, err := genRandFilter(100)
112-
if err != nil {
113-
t.Fatalf("unable to create random filter: %v", err)
114-
}
87+
regFilter := genRandFilter(t, 100)
88+
11589
err = database.PutFilter(&randHash, regFilter, RegularFilter)
116-
if err != nil {
117-
t.Fatalf("unable to store regular filter: %v", err)
118-
}
90+
require.NoError(t, err)
11991

12092
// With the filter stored, we should be able to retrieve the filter
12193
// without any issue, and it should match the stored filter exactly.
12294
regFilterDB, err := database.FetchFilter(&randHash, RegularFilter)
123-
if err != nil {
124-
t.Fatalf("unable to retrieve reg filter: %v", err)
125-
}
126-
if !reflect.DeepEqual(regFilter, regFilterDB) {
127-
t.Fatalf("regular filter doesn't match!")
128-
}
95+
require.NoError(t, err)
96+
require.Equal(t, regFilter, regFilterDB)
12997
}

0 commit comments

Comments
 (0)