chainntnfs: add cross interface implementation tests
This commit refactors the existing chainntnfns package in order to allow more easily allow integration into the main system, by allowing one to gain access to a set of end-to-end tests for a particular ChainNotifier implementation. In order to achieve this, the existing set of tests for the only concrete implementation (`BtcdNoitifer`) have been refactored to test against all “registered” notifier interfaces registered. This is achieved by creating the concept of a “driver” for each concrete `ChainNotifer` implementation. Once a the package of a particular driver is imported, solely for the side effects, the init() method automatically registers the driver. Additionally, the documentation in various areas of the package have been cleaned up a bit.
This commit is contained in:
7 files changed
+180
-32
No files matched your search
@@ -0,0 +1,40 @@
|
||||
package btcdnotify
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/lightningnetwork/lnd/chainntnfs"
|
||||
"github.com/roasbeef/btcrpcclient"
|
||||
)
|
||||
|
||||
// createNewNotifier creates a new instance of the ChainNotifier interface
|
||||
// implemented by BtcdNotifier.
|
||||
func createNewNotifier(args ...interface{}) (chainntnfs.ChainNotifier, error) {
|
||||
if len(args) != 1 {
|
||||
return nil, fmt.Errorf("incorrect number of arguments to .New(...), "+
|
||||
"expected 1, instead passed %v", len(args))
|
||||
}
|
||||
|
||||
config, ok := args[0].(*btcrpcclient.ConnConfig)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("first argument to btcdnotifier.New is " +
|
||||
"incorrect, expected a *btcrpcclient.ConnConfig")
|
||||
}
|
||||
|
||||
return New(config)
|
||||
}
|
||||
|
||||
// init registers a driver for the BtcdNotifier concrete implementation of the
|
||||
// chainntnfs.ChainNotifier interface.
|
||||
func init() {
|
||||
// Register the driver.
|
||||
notifier := &chainntnfs.NotifierDriver{
|
||||
NotifierType: notifierType,
|
||||
New: createNewNotifier,
|
||||
}
|
||||
|
||||
if err := chainntnfs.RegisterNotifier(notifier); err != nil {
|
||||
panic(fmt.Sprintf("failed to register notifier driver '%s': %v",
|
||||
notifierType, err))
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user