htlcswitch: update mockServer to be able to fail test directly

This commit is contained in:
Olaoluwa Osuntokun 2017-11-10 15:09:19 -08:00
parent a48ceac98f
commit 9873d4ece8
No known key found for this signature in database
GPG Key ID: 964EA263DD637C21
4 changed files with 56 additions and 90 deletions

@ -60,9 +60,9 @@ func messageToString(msg lnwire.Message) string {
return spew.Sdump(msg) return spew.Sdump(msg)
} }
// expectedMessage struct hols the message which travels from one peer to // expectedMessage struct holds the message which travels from one peer to
// another, and additional information like, should this message we skipped // another, and additional information like, should this message we skipped for
// for handling. // handling.
type expectedMessage struct { type expectedMessage struct {
from string from string
to string to string
@ -111,8 +111,9 @@ func createInterceptorFunc(prefix, receiver string, messages []expectedMessage,
if messageChanID == chanID { if messageChanID == chanID {
if len(expectToReceive) == 0 { if len(expectToReceive) == 0 {
return false, errors.Errorf("received unexpected message out "+ return false, errors.Errorf("%v received "+
"of range: %v", m.MsgType()) "unexpected message out of range: %v",
receiver, m.MsgType())
} }
expectedMessage := expectToReceive[0] expectedMessage := expectToReceive[0]
@ -160,16 +161,15 @@ func TestChannelLinkSingleHopPayment(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
defer n.stop() defer n.stop()
bobBandwidthBefore := n.firstBobChannelLink.Bandwidth()
aliceBandwidthBefore := n.aliceChannelLink.Bandwidth() aliceBandwidthBefore := n.aliceChannelLink.Bandwidth()
bobBandwidthBefore := n.firstBobChannelLink.Bandwidth()
debug := false debug := false
if debug { if debug {
@ -209,7 +209,7 @@ func TestChannelLinkSingleHopPayment(t *testing.T) {
// links was changed. // links was changed.
invoice, err := receiver.registry.LookupInvoice(rhash) invoice, err := receiver.registry.LookupInvoice(rhash)
if err != nil { if err != nil {
t.Fatalf("unable to get inveoice: %v", err) t.Fatalf("unable to get invoice: %v", err)
} }
if !invoice.Terms.Settled { if !invoice.Terms.Settled {
t.Fatal("alice invoice wasn't settled") t.Fatal("alice invoice wasn't settled")
@ -221,7 +221,9 @@ func TestChannelLinkSingleHopPayment(t *testing.T) {
} }
if bobBandwidthBefore+amount != n.firstBobChannelLink.Bandwidth() { if bobBandwidthBefore+amount != n.firstBobChannelLink.Bandwidth() {
t.Fatal("bob bandwidth isn't match") t.Fatalf("bob bandwidth isn't match: expected %v, got %v",
bobBandwidthBefore+amount,
n.firstBobChannelLink.Bandwidth())
} }
} }
@ -239,9 +241,8 @@ func TestChannelLinkBidirectionalOneHopPayments(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -366,9 +367,8 @@ func TestChannelLinkMultiHopPayment(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -474,9 +474,8 @@ func TestExitNodeTimelockPayloadMismatch(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -527,9 +526,8 @@ func TestExitNodeAmountPayloadMismatch(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -572,9 +570,8 @@ func TestLinkForwardTimelockPolicyMismatch(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -628,9 +625,8 @@ func TestLinkForwardFeePolicyMismatch(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -685,9 +681,8 @@ func TestLinkForwardMinHTLCPolicyMismatch(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -743,9 +738,8 @@ func TestUpdateForwardingPolicy(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -847,9 +841,8 @@ func TestChannelLinkMultiHopInsufficientPayment(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatalf("unable to start three hop network: %v", err) t.Fatalf("unable to start three hop network: %v", err)
} }
@ -930,9 +923,8 @@ func TestChannelLinkMultiHopUnknownPaymentHash(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatalf("unable to start three hop network: %v", err) t.Fatalf("unable to start three hop network: %v", err)
} }
@ -1020,9 +1012,8 @@ func TestChannelLinkMultiHopUnknownNextHop(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -1037,7 +1028,7 @@ func TestChannelLinkMultiHopUnknownNextHop(t *testing.T) {
htlcAmt, totalTimelock, hops := generateHops(amount, testStartingHeight, htlcAmt, totalTimelock, hops := generateHops(amount, testStartingHeight,
n.firstBobChannelLink, n.carolChannelLink) n.firstBobChannelLink, n.carolChannelLink)
davePub := newMockServer("save", serverErr).PubKey() davePub := newMockServer(t, "dave").PubKey()
receiver := n.bobServer receiver := n.bobServer
rhash, err := n.makePayment(n.aliceServer, n.bobServer, davePub, hops, rhash, err := n.makePayment(n.aliceServer, n.bobServer, davePub, hops,
amount, htlcAmt, totalTimelock).Wait(10 * time.Second) amount, htlcAmt, totalTimelock).Wait(10 * time.Second)
@ -1096,9 +1087,8 @@ func TestChannelLinkMultiHopDecodeError(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatalf("unable to start three hop network: %v", err) t.Fatalf("unable to start three hop network: %v", err)
} }
@ -1188,10 +1178,9 @@ func TestChannelLinkExpiryTooSoonExitNode(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
const startingHeight = 200 const startingHeight = 200
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, startingHeight) channels.bobToCarol, channels.carolToBob, startingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatalf("unable to start three hop network: %v", err) t.Fatalf("unable to start three hop network: %v", err)
} }
@ -1245,10 +1234,9 @@ func TestChannelLinkExpiryTooSoonMidNode(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
const startingHeight = 200 const startingHeight = 200
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, startingHeight) channels.bobToCarol, channels.carolToBob, startingHeight)
if err := n.start(); err != nil { if err := n.start(); err != nil {
t.Fatalf("unable to start three hop network: %v", err) t.Fatalf("unable to start three hop network: %v", err)
} }
@ -1301,9 +1289,8 @@ func TestChannelLinkSingleHopMessageOrdering(t *testing.T) {
} }
defer cleanUp() defer cleanUp()
serverErr := make(chan error, 4)
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
chanID := n.aliceChannelLink.ChanID() chanID := n.aliceChannelLink.ChanID()
@ -1358,8 +1345,7 @@ func TestChannelLinkSingleHopMessageOrdering(t *testing.T) {
// * settle request to be sent back from bob to alice. // * settle request to be sent back from bob to alice.
// * alice<->bob commitment state to be updated. // * alice<->bob commitment state to be updated.
// * user notification to be sent. // * user notification to be sent.
receiver := n.bobServer _, err = n.makePayment(n.aliceServer, n.bobServer,
_, err = n.makePayment(n.aliceServer, receiver,
n.bobServer.PubKey(), hops, amount, htlcAmt, n.bobServer.PubKey(), hops, amount, htlcAmt,
totalTimelock).Wait(10 * time.Second) totalTimelock).Wait(10 * time.Second)
if err != nil { if err != nil {
@ -1406,7 +1392,7 @@ func newSingleLinkTestHarness(chanAmt btcutil.Amount) (ChannelLink, func(), erro
} }
chanID := lnwire.NewShortChanIDFromInt(4) chanID := lnwire.NewShortChanIDFromInt(4)
aliceChannel, _, fCleanUp, err := createTestChannel( aliceChannel, _, fCleanUp, _, err := createTestChannel(
alicePrivKey, bobPrivKey, chanAmt, chanAmt, chanID, alicePrivKey, bobPrivKey, chanAmt, chanAmt, chanID,
) )
if err != nil { if err != nil {
@ -1833,8 +1819,11 @@ func TestChannelRetransmission(t *testing.T) {
"bob", messages, chanID, true) "bob", messages, chanID, true)
// Add interceptor to check the order of Bob and Alice messages. // Add interceptor to check the order of Bob and Alice messages.
n := newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n := newThreeHopNetwork(t,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob,
testStartingHeight,
)
n.aliceServer.intersect(aliceInterceptor) n.aliceServer.intersect(aliceInterceptor)
n.bobServer.intersect(bobInterceptor) n.bobServer.intersect(bobInterceptor)
if err := n.start(); err != nil { if err := n.start(); err != nil {
@ -1872,7 +1861,7 @@ func TestChannelRetransmission(t *testing.T) {
} }
n = newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice, n = newThreeHopNetwork(t, channels.aliceToBob, channels.bobToAlice,
channels.bobToCarol, channels.carolToBob, serverErr, testStartingHeight) channels.bobToCarol, channels.carolToBob, testStartingHeight)
n.firstBobChannelLink.cfg.Registry = bobRegistry n.firstBobChannelLink.cfg.Registry = bobRegistry
n.aliceServer.intersect(aliceInterceptor) n.aliceServer.intersect(aliceInterceptor)
n.bobServer.intersect(bobInterceptor) n.bobServer.intersect(bobInterceptor)
@ -1894,8 +1883,8 @@ func TestChannelRetransmission(t *testing.T) {
t.Fatalf("server error: %v", serverErr) t.Fatalf("server error: %v", serverErr)
} }
// Check that alice invoice wasn't settled and bandwidth of htlc // Check that alice invoice wasn't settled and
// links hasn't been changed. // bandwidth of htlc links hasn't been changed.
invoice, err = receiver.registry.LookupInvoice(rhash) invoice, err = receiver.registry.LookupInvoice(rhash)
if err != nil { if err != nil {
err = errors.Errorf("unable to get invoice: %v", err) err = errors.Errorf("unable to get invoice: %v", err)

@ -5,6 +5,7 @@ import (
"encoding/binary" "encoding/binary"
"fmt" "fmt"
"sync" "sync"
"testing"
"io" "io"
"sync/atomic" "sync/atomic"
@ -29,6 +30,8 @@ type mockServer struct {
wg sync.WaitGroup wg sync.WaitGroup
quit chan struct{} quit chan struct{}
t *testing.T
name string name string
messages chan lnwire.Message messages chan lnwire.Message
@ -43,13 +46,13 @@ type mockServer struct {
var _ Peer = (*mockServer)(nil) var _ Peer = (*mockServer)(nil)
func newMockServer(name string, errChan chan error) *mockServer { func newMockServer(t *testing.T, name string) *mockServer {
var id [33]byte var id [33]byte
h := sha256.Sum256([]byte(name)) h := sha256.Sum256([]byte(name))
copy(id[:], h[:]) copy(id[:], h[:])
return &mockServer{ return &mockServer{
errChan: errChan, t: t,
id: id, id: id,
name: name, name: name,
messages: make(chan lnwire.Message, 3000), messages: make(chan lnwire.Message, 3000),
@ -85,8 +88,8 @@ func (s *mockServer) Start() error {
for _, interceptor := range s.interceptorFuncs { for _, interceptor := range s.interceptorFuncs {
skip, err := interceptor(msg) skip, err := interceptor(msg)
if err != nil { if err != nil {
s.fail(errors.Errorf("%v: error in the "+ s.t.Fatalf("%v: error in the "+
"interceptor: %v", s.name, err)) "interceptor: %v", s.name, err)
return return
} }
shouldSkip = shouldSkip || skip shouldSkip = shouldSkip || skip
@ -97,7 +100,7 @@ func (s *mockServer) Start() error {
} }
if err := s.readHandler(msg); err != nil { if err := s.readHandler(msg); err != nil {
s.fail(err) s.t.Fatal(err)
return return
} }
case <-s.quit: case <-s.quit:
@ -109,16 +112,6 @@ func (s *mockServer) Start() error {
return nil return nil
} }
func (s *mockServer) fail(err error) {
go func() {
s.Stop()
}()
go func() {
s.errChan <- errors.Errorf("%v server error: %v", s.name, err)
}()
}
// mockHopIterator represents the test version of hop iterator which instead // mockHopIterator represents the test version of hop iterator which instead
// of encrypting the path in onion blob just stores the path as a list of hops. // of encrypting the path in onion blob just stores the path as a list of hops.
type mockHopIterator struct { type mockHopIterator struct {
@ -311,7 +304,6 @@ func (s *mockServer) readHandler(message lnwire.Message) error {
case *lnwire.ChannelReestablish: case *lnwire.ChannelReestablish:
targetChan = msg.ChanID targetChan = msg.ChanID
default: default:
return errors.New("unknown message type")
} }
// Dispatch the commitment update message to the proper // Dispatch the commitment update message to the proper
@ -323,15 +315,6 @@ func (s *mockServer) readHandler(message lnwire.Message) error {
// Create goroutine for this, in order to be able to properly stop // Create goroutine for this, in order to be able to properly stop
// the server when handler stacked (server unavailable) // the server when handler stacked (server unavailable)
done := make(chan struct{})
go func() {
link.HandleChannelUpdate(message)
done <- struct{}{}
}()
select {
case <-done:
case <-s.quit:
}
return nil return nil
} }
@ -343,7 +326,6 @@ func (s *mockServer) PubKey() [33]byte {
func (s *mockServer) Disconnect(reason error) { func (s *mockServer) Disconnect(reason error) {
fmt.Printf("server %v disconnected due to %v\n", s.name, reason) fmt.Printf("server %v disconnected due to %v\n", s.name, reason)
s.fail(errors.Errorf("server %v was disconnected: %v", s.name, reason))
} }
func (s *mockServer) WipeChannel(*lnwallet.LightningChannel) error { func (s *mockServer) WipeChannel(*lnwallet.LightningChannel) error {

@ -34,9 +34,8 @@ func TestSwitchForward(t *testing.T) {
var packet *htlcPacket var packet *htlcPacket
serverErr := make(chan error, 4) alicePeer := newMockServer(t, "alice")
alicePeer := newMockServer("alice", serverErr) bobPeer := newMockServer(t, "bob")
bobPeer := newMockServer("bob", serverErr)
aliceChannelLink := newMockChannelLink(chanID1, aliceChanID, alicePeer) aliceChannelLink := newMockChannelLink(chanID1, aliceChanID, alicePeer)
bobChannelLink := newMockChannelLink(chanID2, bobChanID, bobPeer) bobChannelLink := newMockChannelLink(chanID2, bobChanID, bobPeer)
@ -113,9 +112,8 @@ func TestSwitchCancel(t *testing.T) {
var request *htlcPacket var request *htlcPacket
serverErr := make(chan error, 4) alicePeer := newMockServer(t, "alice")
alicePeer := newMockServer("alice", serverErr) bobPeer := newMockServer(t, "bob")
bobPeer := newMockServer("bob", serverErr)
aliceChannelLink := newMockChannelLink(chanID1, aliceChanID, alicePeer) aliceChannelLink := newMockChannelLink(chanID1, aliceChanID, alicePeer)
bobChannelLink := newMockChannelLink(chanID2, bobChanID, bobPeer) bobChannelLink := newMockChannelLink(chanID2, bobChanID, bobPeer)
@ -190,9 +188,8 @@ func TestSwitchAddSamePayment(t *testing.T) {
var request *htlcPacket var request *htlcPacket
serverErr := make(chan error, 4) alicePeer := newMockServer(t, "alice")
alicePeer := newMockServer("alice", serverErr) bobPeer := newMockServer(t, "bob")
bobPeer := newMockServer("bob", serverErr)
aliceChannelLink := newMockChannelLink(chanID1, aliceChanID, alicePeer) aliceChannelLink := newMockChannelLink(chanID1, aliceChanID, alicePeer)
bobChannelLink := newMockChannelLink(chanID2, bobChanID, bobPeer) bobChannelLink := newMockChannelLink(chanID2, bobChanID, bobPeer)
@ -290,8 +287,7 @@ func TestSwitchAddSamePayment(t *testing.T) {
func TestSwitchSendPayment(t *testing.T) { func TestSwitchSendPayment(t *testing.T) {
t.Parallel() t.Parallel()
serverErr := make(chan error, 4) alicePeer := newMockServer(t, "alice")
alicePeer := newMockServer("alice", serverErr)
aliceChannelLink := newMockChannelLink(chanID1, aliceChanID, alicePeer) aliceChannelLink := newMockChannelLink(chanID1, aliceChanID, alicePeer)
s := New(Config{}) s := New(Config{})

@ -673,13 +673,12 @@ func createClusterChannels(aliceToBob, bobToCarol btcutil.Amount) (
// //
func newThreeHopNetwork(t *testing.T, aliceChannel, firstBobChannel, func newThreeHopNetwork(t *testing.T, aliceChannel, firstBobChannel,
secondBobChannel, carolChannel *lnwallet.LightningChannel, secondBobChannel, carolChannel *lnwallet.LightningChannel,
serverErr chan error,
startingHeight uint32) *threeHopNetwork { startingHeight uint32) *threeHopNetwork {
// Create three peers/servers. // Create three peers/servers.
aliceServer := newMockServer("alice", serverErr) aliceServer := newMockServer(t, "alice")
bobServer := newMockServer("bob", serverErr) bobServer := newMockServer(t, "bob")
carolServer := newMockServer("carol", serverErr) carolServer := newMockServer(t, "carol")
// Create mock decoder instead of sphinx one in order to mock the // Create mock decoder instead of sphinx one in order to mock the
// route which htlc should follow. // route which htlc should follow.