11package filterdb
22
33import (
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.
4535func 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.
9476func 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