Skip to content

Commit 1184c9e

Browse files
committed
autopilot: move tests code to test files
This is a pure code move commit where we move any code that is only ever used by tests to test files. Many of the calls to the graphdb.ChannelGraph pointer are only coming from tests code.
1 parent 7cf5b5b commit 1184c9e

File tree

2 files changed

+326
-328
lines changed

2 files changed

+326
-328
lines changed

autopilot/graph.go

Lines changed: 0 additions & 328 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
package autopilot
22

33
import (
4-
"bytes"
54
"encoding/hex"
6-
"errors"
75
"net"
86
"sort"
9-
"sync/atomic"
10-
"time"
117

128
"github.com/btcsuite/btcd/btcec/v2"
139
"github.com/btcsuite/btcd/btcec/v2/ecdsa"
@@ -154,330 +150,6 @@ func (d *databaseChannelGraph) ForEachNode(cb func(Node) error) error {
154150
})
155151
}
156152

157-
// addRandChannel creates a new channel two target nodes. This function is
158-
// meant to aide in the generation of random graphs for use within test cases
159-
// the exercise the autopilot package.
160-
func (d *databaseChannelGraph) addRandChannel(node1, node2 *btcec.PublicKey,
161-
capacity btcutil.Amount) (*ChannelEdge, *ChannelEdge, error) {
162-
163-
fetchNode := func(pub *btcec.PublicKey) (*models.LightningNode, error) {
164-
if pub != nil {
165-
vertex, err := route.NewVertexFromBytes(
166-
pub.SerializeCompressed(),
167-
)
168-
if err != nil {
169-
return nil, err
170-
}
171-
172-
dbNode, err := d.db.FetchLightningNode(vertex)
173-
switch {
174-
case errors.Is(err, graphdb.ErrGraphNodeNotFound):
175-
fallthrough
176-
case errors.Is(err, graphdb.ErrGraphNotFound):
177-
graphNode := &models.LightningNode{
178-
HaveNodeAnnouncement: true,
179-
Addresses: []net.Addr{
180-
&net.TCPAddr{
181-
IP: bytes.Repeat([]byte("a"), 16),
182-
},
183-
},
184-
Features: lnwire.NewFeatureVector(
185-
nil, lnwire.Features,
186-
),
187-
AuthSigBytes: testSig.Serialize(),
188-
}
189-
graphNode.AddPubKey(pub)
190-
if err := d.db.AddLightningNode(graphNode); err != nil {
191-
return nil, err
192-
}
193-
case err != nil:
194-
return nil, err
195-
}
196-
197-
return dbNode, nil
198-
}
199-
200-
nodeKey, err := randKey()
201-
if err != nil {
202-
return nil, err
203-
}
204-
dbNode := &models.LightningNode{
205-
HaveNodeAnnouncement: true,
206-
Addresses: []net.Addr{
207-
&net.TCPAddr{
208-
IP: bytes.Repeat([]byte("a"), 16),
209-
},
210-
},
211-
Features: lnwire.NewFeatureVector(
212-
nil, lnwire.Features,
213-
),
214-
AuthSigBytes: testSig.Serialize(),
215-
}
216-
dbNode.AddPubKey(nodeKey)
217-
if err := d.db.AddLightningNode(dbNode); err != nil {
218-
return nil, err
219-
}
220-
221-
return dbNode, nil
222-
}
223-
224-
vertex1, err := fetchNode(node1)
225-
if err != nil {
226-
return nil, nil, err
227-
}
228-
229-
vertex2, err := fetchNode(node2)
230-
if err != nil {
231-
return nil, nil, err
232-
}
233-
234-
var lnNode1, lnNode2 *btcec.PublicKey
235-
if bytes.Compare(vertex1.PubKeyBytes[:], vertex2.PubKeyBytes[:]) == -1 {
236-
lnNode1, _ = vertex1.PubKey()
237-
lnNode2, _ = vertex2.PubKey()
238-
} else {
239-
lnNode1, _ = vertex2.PubKey()
240-
lnNode2, _ = vertex1.PubKey()
241-
}
242-
243-
chanID := randChanID()
244-
edge := &models.ChannelEdgeInfo{
245-
ChannelID: chanID.ToUint64(),
246-
Capacity: capacity,
247-
}
248-
edge.AddNodeKeys(lnNode1, lnNode2, lnNode1, lnNode2)
249-
if err := d.db.AddChannelEdge(edge); err != nil {
250-
return nil, nil, err
251-
}
252-
edgePolicy := &models.ChannelEdgePolicy{
253-
SigBytes: testSig.Serialize(),
254-
ChannelID: chanID.ToUint64(),
255-
LastUpdate: time.Now(),
256-
TimeLockDelta: 10,
257-
MinHTLC: 1,
258-
MaxHTLC: lnwire.NewMSatFromSatoshis(capacity),
259-
FeeBaseMSat: 10,
260-
FeeProportionalMillionths: 10000,
261-
MessageFlags: 1,
262-
ChannelFlags: 0,
263-
}
264-
265-
if err := d.db.UpdateEdgePolicy(edgePolicy); err != nil {
266-
return nil, nil, err
267-
}
268-
edgePolicy = &models.ChannelEdgePolicy{
269-
SigBytes: testSig.Serialize(),
270-
ChannelID: chanID.ToUint64(),
271-
LastUpdate: time.Now(),
272-
TimeLockDelta: 10,
273-
MinHTLC: 1,
274-
MaxHTLC: lnwire.NewMSatFromSatoshis(capacity),
275-
FeeBaseMSat: 10,
276-
FeeProportionalMillionths: 10000,
277-
MessageFlags: 1,
278-
ChannelFlags: 1,
279-
}
280-
if err := d.db.UpdateEdgePolicy(edgePolicy); err != nil {
281-
return nil, nil, err
282-
}
283-
284-
return &ChannelEdge{
285-
ChanID: chanID,
286-
Capacity: capacity,
287-
Peer: &dbNode{
288-
db: d.db,
289-
node: vertex1,
290-
},
291-
},
292-
&ChannelEdge{
293-
ChanID: chanID,
294-
Capacity: capacity,
295-
Peer: &dbNode{
296-
db: d.db,
297-
node: vertex2,
298-
},
299-
},
300-
nil
301-
}
302-
303-
func (d *databaseChannelGraph) addRandNode() (*btcec.PublicKey, error) {
304-
nodeKey, err := randKey()
305-
if err != nil {
306-
return nil, err
307-
}
308-
dbNode := &models.LightningNode{
309-
HaveNodeAnnouncement: true,
310-
Addresses: []net.Addr{
311-
&net.TCPAddr{
312-
IP: bytes.Repeat([]byte("a"), 16),
313-
},
314-
},
315-
Features: lnwire.NewFeatureVector(
316-
nil, lnwire.Features,
317-
),
318-
AuthSigBytes: testSig.Serialize(),
319-
}
320-
dbNode.AddPubKey(nodeKey)
321-
if err := d.db.AddLightningNode(dbNode); err != nil {
322-
return nil, err
323-
}
324-
325-
return nodeKey, nil
326-
327-
}
328-
329-
// memChannelGraph is an implementation of the autopilot.ChannelGraph backed by
330-
// an in-memory graph.
331-
type memChannelGraph struct {
332-
graph map[NodeID]*memNode
333-
}
334-
335-
// A compile time assertion to ensure memChannelGraph meets the
336-
// autopilot.ChannelGraph interface.
337-
var _ ChannelGraph = (*memChannelGraph)(nil)
338-
339-
// newMemChannelGraph creates a new blank in-memory channel graph
340-
// implementation.
341-
func newMemChannelGraph() *memChannelGraph {
342-
return &memChannelGraph{
343-
graph: make(map[NodeID]*memNode),
344-
}
345-
}
346-
347-
// ForEachNode is a higher-order function that should be called once for each
348-
// connected node within the channel graph. If the passed callback returns an
349-
// error, then execution should be terminated.
350-
//
351-
// NOTE: Part of the autopilot.ChannelGraph interface.
352-
func (m memChannelGraph) ForEachNode(cb func(Node) error) error {
353-
for _, node := range m.graph {
354-
if err := cb(node); err != nil {
355-
return err
356-
}
357-
}
358-
359-
return nil
360-
}
361-
362-
// randChanID generates a new random channel ID.
363-
func randChanID() lnwire.ShortChannelID {
364-
id := atomic.AddUint64(&chanIDCounter, 1)
365-
return lnwire.NewShortChanIDFromInt(id)
366-
}
367-
368-
// randKey returns a random public key.
369-
func randKey() (*btcec.PublicKey, error) {
370-
priv, err := btcec.NewPrivateKey()
371-
if err != nil {
372-
return nil, err
373-
}
374-
375-
return priv.PubKey(), nil
376-
}
377-
378-
// addRandChannel creates a new channel two target nodes. This function is
379-
// meant to aide in the generation of random graphs for use within test cases
380-
// the exercise the autopilot package.
381-
func (m *memChannelGraph) addRandChannel(node1, node2 *btcec.PublicKey,
382-
capacity btcutil.Amount) (*ChannelEdge, *ChannelEdge, error) {
383-
384-
var (
385-
vertex1, vertex2 *memNode
386-
ok bool
387-
)
388-
389-
if node1 != nil {
390-
vertex1, ok = m.graph[NewNodeID(node1)]
391-
if !ok {
392-
vertex1 = &memNode{
393-
pub: node1,
394-
addrs: []net.Addr{
395-
&net.TCPAddr{
396-
IP: bytes.Repeat([]byte("a"), 16),
397-
},
398-
},
399-
}
400-
}
401-
} else {
402-
newPub, err := randKey()
403-
if err != nil {
404-
return nil, nil, err
405-
}
406-
vertex1 = &memNode{
407-
pub: newPub,
408-
addrs: []net.Addr{
409-
&net.TCPAddr{
410-
IP: bytes.Repeat([]byte("a"), 16),
411-
},
412-
},
413-
}
414-
}
415-
416-
if node2 != nil {
417-
vertex2, ok = m.graph[NewNodeID(node2)]
418-
if !ok {
419-
vertex2 = &memNode{
420-
pub: node2,
421-
addrs: []net.Addr{
422-
&net.TCPAddr{
423-
IP: bytes.Repeat([]byte("a"), 16),
424-
},
425-
},
426-
}
427-
}
428-
} else {
429-
newPub, err := randKey()
430-
if err != nil {
431-
return nil, nil, err
432-
}
433-
vertex2 = &memNode{
434-
pub: newPub,
435-
addrs: []net.Addr{
436-
&net.TCPAddr{
437-
IP: bytes.Repeat([]byte("a"), 16),
438-
},
439-
},
440-
}
441-
}
442-
443-
edge1 := ChannelEdge{
444-
ChanID: randChanID(),
445-
Capacity: capacity,
446-
Peer: vertex2,
447-
}
448-
vertex1.chans = append(vertex1.chans, edge1)
449-
450-
edge2 := ChannelEdge{
451-
ChanID: randChanID(),
452-
Capacity: capacity,
453-
Peer: vertex1,
454-
}
455-
vertex2.chans = append(vertex2.chans, edge2)
456-
457-
m.graph[NewNodeID(vertex1.pub)] = vertex1
458-
m.graph[NewNodeID(vertex2.pub)] = vertex2
459-
460-
return &edge1, &edge2, nil
461-
}
462-
463-
func (m *memChannelGraph) addRandNode() (*btcec.PublicKey, error) {
464-
newPub, err := randKey()
465-
if err != nil {
466-
return nil, err
467-
}
468-
vertex := &memNode{
469-
pub: newPub,
470-
addrs: []net.Addr{
471-
&net.TCPAddr{
472-
IP: bytes.Repeat([]byte("a"), 16),
473-
},
474-
},
475-
}
476-
m.graph[NewNodeID(newPub)] = vertex
477-
478-
return newPub, nil
479-
}
480-
481153
// databaseChannelGraphCached wraps a channeldb.ChannelGraph instance with the
482154
// necessary API to properly implement the autopilot.ChannelGraph interface.
483155
type databaseChannelGraphCached struct {

0 commit comments

Comments
 (0)