Skip to content

Commit e003cb5

Browse files
committed
accessman: make sure to decrement PendingOpenCount
1 parent 856ec46 commit e003cb5

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

accessman.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,8 @@ func (a *accessMan) newOpenChan(remotePub *btcec.PublicKey) error {
440440
}
441441

442442
peerCount.HasOpenOrClosedChan = true
443+
peerCount.PendingOpenCount -= 1
444+
443445
a.peerCounts[peerMapKey] = peerCount
444446

445447
newStatus := peerSlotStatus{

accessman_test.go

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,25 @@ func TestAccessManRestrictedSlots(t *testing.T) {
6464
peerKey3 := peerPriv3.PubKey()
6565
peerKeySer3 := string(peerKey3.SerializeCompressed())
6666

67+
var (
68+
peer1PendingCount = 0
69+
peer2PendingCount = 1
70+
peer3PendingCount = 1
71+
)
72+
6773
initPerms := func() (map[string]channeldb.ChanCount, error) {
6874
return map[string]channeldb.ChanCount{
6975
peerKeySer1: {
7076
HasOpenOrClosedChan: true,
77+
PendingOpenCount: uint64(peer1PendingCount),
7178
},
7279
peerKeySer2: {
7380
HasOpenOrClosedChan: true,
74-
PendingOpenCount: 1,
81+
PendingOpenCount: uint64(peer2PendingCount),
7582
},
7683
peerKeySer3: {
7784
HasOpenOrClosedChan: false,
78-
PendingOpenCount: 1,
85+
PendingOpenCount: uint64(peer3PendingCount),
7986
},
8087
}, nil
8188
}
@@ -101,17 +108,17 @@ func TestAccessManRestrictedSlots(t *testing.T) {
101108
peerCount1, ok := a.peerCounts[peerKeySer1]
102109
require.True(t, ok)
103110
require.True(t, peerCount1.HasOpenOrClosedChan)
104-
require.Equal(t, 0, int(peerCount1.PendingOpenCount))
111+
require.Equal(t, peer1PendingCount, int(peerCount1.PendingOpenCount))
105112

106113
peerCount2, ok := a.peerCounts[peerKeySer2]
107114
require.True(t, ok)
108115
require.True(t, peerCount2.HasOpenOrClosedChan)
109-
require.Equal(t, 1, int(peerCount2.PendingOpenCount))
116+
require.Equal(t, peer2PendingCount, int(peerCount2.PendingOpenCount))
110117

111118
peerCount3, ok := a.peerCounts[peerKeySer3]
112119
require.True(t, ok)
113120
require.False(t, peerCount3.HasOpenOrClosedChan)
114-
require.Equal(t, 1, int(peerCount3.PendingOpenCount))
121+
require.Equal(t, peer3PendingCount, int(peerCount3.PendingOpenCount))
115122

116123
// We'll now start to connect the peers. We'll add a new fourth peer
117124
// that will take up the restricted slot. The first three peers should
@@ -135,11 +142,26 @@ func TestAccessManRestrictedSlots(t *testing.T) {
135142
require.NoError(t, err)
136143
assertAccessState(t, a, peerKey4, peerStatusTemporary)
137144

145+
// Assert that accessman's internal state is updated with peer4. We
146+
// expect this new peer to have 1 pending open count.
147+
peerCount4, ok := a.peerCounts[string(peerKey4.SerializeCompressed())]
148+
require.True(t, ok)
149+
require.False(t, peerCount4.HasOpenOrClosedChan)
150+
require.Equal(t, 1, int(peerCount4.PendingOpenCount))
151+
138152
// Check that an open channel promotes the temporary peer.
139153
err = a.newOpenChan(peerKey3)
140154
require.NoError(t, err)
141155
assertAccessState(t, a, peerKey3, peerStatusProtected)
142156

157+
// Assert that accessman's internal state is updated with peer3. We
158+
// expect this existing peer to decrement its pending open count and the
159+
// flag `HasOpenOrClosedChan` should be true.
160+
peerCount3, ok = a.peerCounts[peerKeySer3]
161+
require.True(t, ok)
162+
require.True(t, peerCount3.HasOpenOrClosedChan)
163+
require.Equal(t, peer3PendingCount-1, int(peerCount3.PendingOpenCount))
164+
143165
// We should be able to accommodate a new peer.
144166
peerPriv5, err := btcec.NewPrivateKey()
145167
require.NoError(t, err)
@@ -151,6 +173,10 @@ func TestAccessManRestrictedSlots(t *testing.T) {
151173
// peer.
152174
err = a.newPendingCloseChan(peerKey4)
153175
require.ErrorIs(t, err, ErrNoMoreRestrictedAccessSlots)
176+
177+
// Assert that peer4 is removed.
178+
_, ok = a.peerCounts[string(peerKey4.SerializeCompressed())]
179+
require.False(t, ok)
154180
}
155181

156182
// TestAssignPeerPerms asserts that the peer's access status is correctly

0 commit comments

Comments
 (0)