Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

multi+server.go: add initial permissions for some peers #9458

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
4 changes: 4 additions & 0 deletions itest/list_on_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -670,6 +670,10 @@ var allTestCases = []*lntest.TestCase{
Name: "fee replacement",
TestFunc: testFeeReplacement,
},
{
Name: "access perm",
TestFunc: testAccessPerm,
},
}

// appendPrefixed is used to add a prefix to each test name in the subtests
Expand Down
93 changes: 93 additions & 0 deletions itest/lnd_access_perm_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package itest

import (
"strconv"

"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lntest"
)

// testAccessPerm tests that the number of restricted slots is upheld when
// connecting to the server from a restrictedd peer.
func testAccessPerm(ht *lntest.HarnessTest) {
args := []string{
"--minbackoff=1m",
"--maxbackoff=1m",
"--num-restricted-slots=5",
}

alice := ht.NewNodeWithCoins("Alice", args)
bob := ht.NewNodeWithCoins("Bob", args)
ht.ConnectNodes(alice, bob)

// Open a confirmed channel to Bob. Bob will have protected access.
chanPoint1 := ht.OpenChannel(
alice, bob, lntest.OpenChannelParams{
Amt: chanAmt,
},
)
defer ht.CloseChannel(alice, chanPoint1)

// Open and close channel to Carol. Carol will have protected access.
carol := ht.NewNodeWithCoins("Carol", args)
ht.ConnectNodes(alice, carol)

chanPoint2 := ht.OpenChannel(
alice, carol, lntest.OpenChannelParams{
Amt: chanAmt,
},
)

ht.CloseChannel(alice, chanPoint2)

// Make a pending channel with Dave.
dave := ht.NewNodeWithCoins("Dave", args)
ht.ConnectNodes(alice, dave)

ht.OpenChannelAssertStream(
dave, alice, lntest.OpenChannelParams{
Amt: chanAmt,
},
)

// Disconnect Bob, Carol, and Dave.
ht.DisconnectNodes(alice, bob)
ht.AssertNotConnected(alice, bob)

ht.DisconnectNodes(alice, carol)
ht.AssertNotConnected(alice, carol)

ht.DisconnectNodes(alice, dave)
ht.AssertNotConnected(alice, dave)

// Connect 5 times to Alice. All of these connections should be
// successful.
for i := 0; i < 5; i++ {
peer := ht.NewNode("Peer"+strconv.Itoa(i), args)
ht.ConnectNodes(peer, alice)
ht.AssertConnected(peer, alice)
}

// Connect an additional time to Alice. This should fail.
failedPeer := ht.NewNode("FailedPeer", args)
req := &lnrpc.ConnectPeerRequest{
Addr: &lnrpc.LightningAddress{
Pubkey: alice.RPC.GetInfo().IdentityPubkey,
Host: alice.Cfg.P2PAddr(),
},
}
failedPeer.RPC.ConnectPeer(req)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: there's also ConnectPeerAssertErr which would be better here.

ht.AssertNotConnected(failedPeer, alice)

// Connect nodes and assert access status.
ht.ConnectNodes(alice, bob)
ht.AssertConnected(alice, bob)

ht.ConnectNodes(alice, carol)
ht.AssertConnected(alice, carol)

ht.ConnectNodes(alice, dave)
ht.AssertConnected(alice, dave)

ht.MineBlocksAndAssertNumTxes(1, 1)
}