• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lightningnetwork / lnd / 13586005509

28 Feb 2025 10:14AM UTC coverage: 68.629% (+9.9%) from 58.77%
13586005509

Pull #9521

github

web-flow
Merge 37d3a70a5 into 8532955b3
Pull Request #9521: unit: remove GOACC, use Go 1.20 native coverage functionality

129950 of 189351 relevant lines covered (68.63%)

23726.46 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.6
/chainntnfs/bitcoindnotify/bitcoind_dev.go
1
//go:build dev
2
// +build dev
3

4
package bitcoindnotify
5

6
import (
7
        "fmt"
8
        "time"
9

10
        "github.com/btcsuite/btcd/chaincfg/chainhash"
11
        "github.com/btcsuite/btcwallet/chain"
12
        "github.com/lightningnetwork/lnd/chainntnfs"
13
)
14

15
// UnsafeStart starts the notifier with a specified best height and optional
16
// best hash. Its bestBlock and txNotifier are initialized with bestHeight and
17
// optionally bestHash. The parameter generateBlocks is necessary for the
18
// bitcoind notifier to ensure we drain all notifications up to syncHeight,
19
// since if they are generated ahead of UnsafeStart the chainConn may start up
20
// with an outdated best block and miss sending ntfns. Used for testing.
21
func (b *BitcoindNotifier) UnsafeStart(bestHeight int32, bestHash *chainhash.Hash,
22
        syncHeight int32, generateBlocks func() error) error {
6✔
23

6✔
24
        // Connect to bitcoind, and register for notifications on connected,
6✔
25
        // and disconnected blocks.
6✔
26
        if err := b.chainConn.Start(); err != nil {
6✔
27
                return err
×
28
        }
×
29
        if err := b.chainConn.NotifyBlocks(); err != nil {
6✔
30
                return err
×
31
        }
×
32

33
        b.txNotifier = chainntnfs.NewTxNotifier(
6✔
34
                uint32(bestHeight), chainntnfs.ReorgSafetyLimit,
6✔
35
                b.confirmHintCache, b.spendHintCache,
6✔
36
        )
6✔
37

6✔
38
        if generateBlocks != nil {
10✔
39
                // Ensure no block notifications are pending when we start the
4✔
40
                // notification dispatcher goroutine.
4✔
41

4✔
42
                // First generate the blocks, then drain the notifications
4✔
43
                // for the generated blocks.
4✔
44
                if err := generateBlocks(); err != nil {
4✔
45
                        return err
×
46
                }
×
47

48
                timeout := time.After(60 * time.Second)
4✔
49
        loop:
4✔
50
                for {
91✔
51
                        select {
87✔
52
                        case ntfn := <-b.chainConn.Notifications():
87✔
53
                                switch update := ntfn.(type) {
87✔
54
                                case chain.BlockConnected:
41✔
55
                                        if update.Height >= syncHeight {
45✔
56
                                                break loop
4✔
57
                                        }
58
                                }
59
                        case <-timeout:
×
60
                                return fmt.Errorf("unable to catch up to height %d",
×
61
                                        syncHeight)
×
62
                        }
63
                }
64
        }
65

66
        // Run notificationDispatcher after setting the notifier's best block
67
        // to avoid a race condition.
68
        b.bestBlock = chainntnfs.BlockEpoch{Height: bestHeight, Hash: bestHash}
6✔
69
        if bestHash == nil {
10✔
70
                hash, err := b.chainConn.GetBlockHash(int64(bestHeight))
4✔
71
                if err != nil {
4✔
72
                        return err
×
73
                }
×
74
                b.bestBlock.Hash = hash
4✔
75
        }
76

77
        b.wg.Add(1)
6✔
78
        go b.notificationDispatcher()
6✔
79

6✔
80
        return nil
6✔
81
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc