From a3d87f16b9ba805548f2d30cd297072ee56715e9 Mon Sep 17 00:00:00 2001 From: bitromortac Date: Tue, 23 Sep 2025 10:34:15 +0200 Subject: [PATCH] channelnotifier: let notifier take channel updates --- channelnotifier/channelnotifier.go | 17 ++++++++++ channelnotifier/channelnotifier_test.go | 43 +++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 channelnotifier/channelnotifier_test.go diff --git a/channelnotifier/channelnotifier.go b/channelnotifier/channelnotifier.go index f13ca6d75..e7b815b30 100644 --- a/channelnotifier/channelnotifier.go +++ b/channelnotifier/channelnotifier.go @@ -72,6 +72,12 @@ type ClosedChannelEvent struct { 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 // fully resolved. type FullyResolvedChannelEvent struct { @@ -238,3 +244,14 @@ func (c *ChannelNotifier) NotifyInactiveChannelEvent(chanPoint wire.OutPoint) { 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) + } +} diff --git a/channelnotifier/channelnotifier_test.go b/channelnotifier/channelnotifier_test.go new file mode 100644 index 000000000..5dbdb4a45 --- /dev/null +++ b/channelnotifier/channelnotifier_test.go @@ -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") + } +}