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

lightningnetwork / lnd / 12312390362

13 Dec 2024 08:44AM UTC coverage: 57.458% (+8.5%) from 48.92%
12312390362

Pull #9343

github

ellemouton
fn: rework the ContextGuard and add tests

In this commit, the ContextGuard struct is re-worked such that the
context that its new main WithCtx method provides is cancelled in sync
with a parent context being cancelled or with it's quit channel being
cancelled. Tests are added to assert the behaviour. In order for the
close of the quit channel to be consistent with the cancelling of the
derived context, the quit channel _must_ be contained internal to the
ContextGuard so that callers are only able to close the channel via the
exposed Quit method which will then take care to first cancel any
derived context that depend on the quit channel before returning.
Pull Request #9343: fn: expand the ContextGuard and add tests

101853 of 177264 relevant lines covered (57.46%)

24972.93 hits per line

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

63.46
/lnwire/update_fulfill_htlc.go
1
package lnwire
2

3
import (
4
        "bytes"
5
        "io"
6
)
7

8
// UpdateFulfillHTLC is sent by Alice to Bob when she wishes to settle a
9
// particular HTLC referenced by its HTLCKey within a specific active channel
10
// referenced by ChannelPoint.  A subsequent CommitSig message will be sent by
11
// Alice to "lock-in" the removal of the specified HTLC, possible containing a
12
// batch signature covering several settled HTLC's.
13
type UpdateFulfillHTLC struct {
14
        // ChanID references an active channel which holds the HTLC to be
15
        // settled.
16
        ChanID ChannelID
17

18
        // ID denotes the exact HTLC stage within the receiving node's
19
        // commitment transaction to be removed.
20
        ID uint64
21

22
        // PaymentPreimage is the R-value preimage required to fully settle an
23
        // HTLC.
24
        PaymentPreimage [32]byte
25

26
        // CustomRecords maps TLV types to byte slices, storing arbitrary data
27
        // intended for inclusion in the ExtraData field.
28
        CustomRecords CustomRecords
29

30
        // ExtraData is the set of data that was appended to this message to
31
        // fill out the full maximum transport message size. These fields can
32
        // be used to specify optional data such as custom TLV fields.
33
        ExtraData ExtraOpaqueData
34
}
35

36
// NewUpdateFulfillHTLC returns a new empty UpdateFulfillHTLC.
37
func NewUpdateFulfillHTLC(chanID ChannelID, id uint64,
38
        preimage [32]byte) *UpdateFulfillHTLC {
×
39

×
40
        return &UpdateFulfillHTLC{
×
41
                ChanID:          chanID,
×
42
                ID:              id,
×
43
                PaymentPreimage: preimage,
×
44
        }
×
45
}
×
46

47
// A compile time check to ensure UpdateFulfillHTLC implements the lnwire.Message
48
// interface.
49
var _ Message = (*UpdateFulfillHTLC)(nil)
50

51
// Decode deserializes a serialized UpdateFulfillHTLC message stored in the passed
52
// io.Reader observing the specified protocol version.
53
//
54
// This is part of the lnwire.Message interface.
55
func (c *UpdateFulfillHTLC) Decode(r io.Reader, pver uint32) error {
1,058✔
56
        // msgExtraData is a temporary variable used to read the message extra
1,058✔
57
        // data field from the reader.
1,058✔
58
        var msgExtraData ExtraOpaqueData
1,058✔
59

1,058✔
60
        if err := ReadElements(r,
1,058✔
61
                &c.ChanID,
1,058✔
62
                &c.ID,
1,058✔
63
                c.PaymentPreimage[:],
1,058✔
64
                &msgExtraData,
1,058✔
65
        ); err != nil {
1,062✔
66
                return err
4✔
67
        }
4✔
68

69
        // Extract custom records from the extra data field.
70
        customRecords, _, extraData, err := ParseAndExtractCustomRecords(
1,054✔
71
                msgExtraData,
1,054✔
72
        )
1,054✔
73
        if err != nil {
1,067✔
74
                return err
13✔
75
        }
13✔
76

77
        c.CustomRecords = customRecords
1,041✔
78
        c.ExtraData = extraData
1,041✔
79

1,041✔
80
        return nil
1,041✔
81
}
82

83
// Encode serializes the target UpdateFulfillHTLC into the passed io.Writer
84
// observing the protocol version specified.
85
//
86
// This is part of the lnwire.Message interface.
87
func (c *UpdateFulfillHTLC) Encode(w *bytes.Buffer, pver uint32) error {
1,498✔
88
        if err := WriteChannelID(w, c.ChanID); err != nil {
1,498✔
89
                return err
×
90
        }
×
91

92
        if err := WriteUint64(w, c.ID); err != nil {
1,498✔
93
                return err
×
94
        }
×
95

96
        if err := WriteBytes(w, c.PaymentPreimage[:]); err != nil {
1,498✔
97
                return err
×
98
        }
×
99

100
        // Combine the custom records and the extra data, then encode the
101
        // result as a byte slice.
102
        extraData, err := MergeAndEncode(nil, c.ExtraData, c.CustomRecords)
1,498✔
103
        if err != nil {
1,498✔
104
                return err
×
105
        }
×
106

107
        return WriteBytes(w, extraData)
1,498✔
108
}
109

110
// MsgType returns the integer uniquely identifying this message type on the
111
// wire.
112
//
113
// This is part of the lnwire.Message interface.
114
func (c *UpdateFulfillHTLC) MsgType() MessageType {
1,754✔
115
        return MsgUpdateFulfillHTLC
1,754✔
116
}
1,754✔
117

118
// TargetChanID returns the channel id of the link for which this message is
119
// intended.
120
//
121
// NOTE: Part of peer.LinkUpdater interface.
122
func (c *UpdateFulfillHTLC) TargetChanID() ChannelID {
×
123
        return c.ChanID
×
124
}
×
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