channelnotifier: let notifier take channel updates
This commit is contained in:
2 files changed
+60
No files matched your search
@@ -72,6 +72,12 @@ type ClosedChannelEvent struct {
|
|||||||
CloseSummary *channeldb.ChannelCloseSummary
|
CloseSummary *channeldb.ChannelCloseSummary
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChannelUpdateEvent represents a new event where a channel's state is updated.
|
||||||
|
type ChannelUpdateEvent struct {
|
||||||
|
// Channel is the channel that has been updated.
|
||||||
|
Channel *channeldb.OpenChannel
|
||||||
|
}
|
||||||
|
|
||||||
// FullyResolvedChannelEvent represents a new event where a channel becomes
|
// FullyResolvedChannelEvent represents a new event where a channel becomes
|
||||||
// fully resolved.
|
// fully resolved.
|
||||||
type FullyResolvedChannelEvent struct {
|
type FullyResolvedChannelEvent struct {
|
||||||
@@ -238,3 +244,14 @@ func (c *ChannelNotifier) NotifyInactiveChannelEvent(chanPoint wire.OutPoint) {
|
|||||||
log.Warnf("Unable to send inactive channel update: %v", err)
|
log.Warnf("Unable to send inactive channel update: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotifyChannelUpdateEvent notifies subscribers that a channel's state has been
|
||||||
|
// updated.
|
||||||
|
func (c *ChannelNotifier) NotifyChannelUpdateEvent(
|
||||||
|
channel *channeldb.OpenChannel) {
|
||||||
|
|
||||||
|
event := ChannelUpdateEvent{Channel: channel}
|
||||||
|
if err := c.ntfnServer.SendUpdate(event); err != nil {
|
||||||
|
log.Warnf("Unable to send channel update: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package channelnotifier
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TestChannelUpdateEvent tests that channel update events are properly
|
||||||
|
// notified to subscribers.
|
||||||
|
func TestChannelUpdateEvent(t *testing.T) {
|
||||||
|
// Initialize the notification server.
|
||||||
|
ntfnServer := New(nil)
|
||||||
|
require.NoError(t, ntfnServer.Start())
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
require.NoError(t, ntfnServer.Stop())
|
||||||
|
}()
|
||||||
|
|
||||||
|
// Subscribe to channel events.
|
||||||
|
sub, err := ntfnServer.SubscribeChannelEvents()
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer sub.Cancel()
|
||||||
|
|
||||||
|
// Create a mock channel state.
|
||||||
|
channel := &channeldb.OpenChannel{}
|
||||||
|
|
||||||
|
// Notify the server of a channel update event.
|
||||||
|
ntfnServer.NotifyChannelUpdateEvent(channel)
|
||||||
|
|
||||||
|
// Consume the event.
|
||||||
|
select {
|
||||||
|
case event := <-sub.Updates():
|
||||||
|
updateEvent, ok := event.(ChannelUpdateEvent)
|
||||||
|
require.True(t, ok)
|
||||||
|
require.Equal(t, channel, updateEvent.Channel)
|
||||||
|
|
||||||
|
case <-time.After(time.Second):
|
||||||
|
t.Fatalf("expected to receive channel update event")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user