Skip to content

Commit db45469

Browse files
committed
Expose AddrMaybeIdsByDistance
1 parent e462abf commit db45469

File tree

7 files changed

+89
-70
lines changed

7 files changed

+89
-70
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package containers
2+
3+
import (
4+
"github.com/anacrolix/dht/v2/int160"
5+
"github.com/anacrolix/dht/v2/types"
6+
"github.com/anacrolix/stm/stmutil"
7+
)
8+
9+
type addrMaybeId = types.AddrMaybeId
10+
11+
func NewAddrMaybeIdsByDistance(target int160.T) stmutil.Settish {
12+
return stmutil.NewSortedSet(func(l, r interface{}) bool {
13+
return l.(addrMaybeId).CloserThan(r.(addrMaybeId), target)
14+
})
15+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package containers
2+
3+
import (
4+
"testing"
5+
6+
"github.com/anacrolix/dht/v2/int160"
7+
"github.com/anacrolix/dht/v2/internal/testutil"
8+
"github.com/anacrolix/missinggo/v2/iter"
9+
"github.com/stretchr/testify/assert"
10+
)
11+
12+
func TestNodesByDistance(t *testing.T) {
13+
a := NewAddrMaybeIdsByDistance(int160.T{})
14+
push := func(i int) {
15+
a = a.Add(testutil.SampleAddrMaybeIds[i])
16+
}
17+
push(4)
18+
push(2)
19+
push(0)
20+
push(3)
21+
push(0)
22+
push(1)
23+
pop := func(is ...int) {
24+
first, ok := iter.First(a.Iter)
25+
assert.True(t, ok)
26+
assert.Contains(t, func() (ret []addrMaybeId) {
27+
for _, i := range is {
28+
ret = append(ret, testutil.SampleAddrMaybeIds[i])
29+
}
30+
return
31+
}(), first)
32+
a = a.Delete(first)
33+
}
34+
pop(1)
35+
pop(2)
36+
pop(3)
37+
pop(0, 4)
38+
pop(0, 4)
39+
//pop(0, 4)
40+
assert.EqualValues(t, 0, a.Len())
41+
}

internal/testutil/testutil.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package testutil
2+
3+
import (
4+
"github.com/anacrolix/dht/v2/int160"
5+
"github.com/anacrolix/dht/v2/krpc"
6+
"github.com/anacrolix/dht/v2/types"
7+
)
8+
9+
func Int160WithBitSet(bit int) *int160.T {
10+
var i int160.T
11+
i.SetBit(7+bit*8, true)
12+
return &i
13+
}
14+
15+
type addrMaybeId = types.AddrMaybeId
16+
17+
var SampleAddrMaybeIds = []addrMaybeId{
18+
addrMaybeId{},
19+
addrMaybeId{Id: new(int160.T)},
20+
addrMaybeId{Id: Int160WithBitSet(13)},
21+
addrMaybeId{Id: Int160WithBitSet(12)},
22+
addrMaybeId{Addr: krpc.NodeAddr{Port: 1}},
23+
addrMaybeId{
24+
Id: Int160WithBitSet(14),
25+
Addr: krpc.NodeAddr{Port: 1}},
26+
}

misc.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ package dht
33
import (
44
"net"
55

6-
"github.com/anacrolix/missinggo/v2/iter"
7-
"github.com/anacrolix/stm/stmutil"
8-
96
"github.com/anacrolix/dht/v2/int160"
7+
"github.com/anacrolix/dht/v2/krpc"
108
"github.com/anacrolix/dht/v2/types"
9+
"github.com/anacrolix/missinggo/v2/iter"
1110
)
1211

1312
func mustListen(addr string) net.PacketConn {
@@ -27,14 +26,8 @@ func addrResolver(addr string) func() ([]Addr, error) {
2726

2827
type addrMaybeId = types.AddrMaybeId
2928

30-
func nodesByDistance(target int160.T) stmutil.Settish {
31-
return stmutil.NewSortedSet(func(l, r interface{}) bool {
32-
return l.(addrMaybeId).CloserThan(r.(addrMaybeId), target)
33-
})
34-
}
35-
3629
func randomIdInBucket(rootId int160.T, bucketIndex int) int160.T {
37-
id := int160.FromByteArray(RandomNodeID())
30+
id := int160.FromByteArray(krpc.RandomNodeID())
3831
for i := range iter.N(bucketIndex) {
3932
id.SetBit(i, rootId.GetBit(i))
4033
}

misc_test.go

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1 @@
11
package dht
2-
3-
import (
4-
"testing"
5-
6-
"github.com/anacrolix/missinggo/v2/iter"
7-
"github.com/stretchr/testify/assert"
8-
9-
"github.com/anacrolix/dht/v2/int160"
10-
"github.com/anacrolix/dht/v2/krpc"
11-
)
12-
13-
func int160WithBitSet(bit int) *int160.T {
14-
var i int160.T
15-
i.SetBit(7+bit*8, true)
16-
return &i
17-
}
18-
19-
var sampleAddrMaybeIds = []addrMaybeId{
20-
addrMaybeId{},
21-
addrMaybeId{Id: new(int160.T)},
22-
addrMaybeId{Id: int160WithBitSet(13)},
23-
addrMaybeId{Id: int160WithBitSet(12)},
24-
addrMaybeId{Addr: krpc.NodeAddr{Port: 1}},
25-
addrMaybeId{
26-
Id: int160WithBitSet(14),
27-
Addr: krpc.NodeAddr{Port: 1}},
28-
}
29-
30-
func TestNodesByDistance(t *testing.T) {
31-
a := nodesByDistance(int160.T{})
32-
push := func(i int) {
33-
a = a.Add(sampleAddrMaybeIds[i])
34-
}
35-
push(4)
36-
push(2)
37-
push(0)
38-
push(3)
39-
push(0)
40-
push(1)
41-
pop := func(is ...int) {
42-
first, ok := iter.First(a.Iter)
43-
assert.True(t, ok)
44-
assert.Contains(t, func() (ret []addrMaybeId) {
45-
for _, i := range is {
46-
ret = append(ret, sampleAddrMaybeIds[i])
47-
}
48-
return
49-
}(), first)
50-
a = a.Delete(first)
51-
}
52-
pop(1)
53-
pop(2)
54-
pop(3)
55-
pop(0, 4)
56-
pop(0, 4)
57-
//pop(0, 4)
58-
assert.EqualValues(t, 0, a.Len())
59-
}

stm-traversal.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/anacrolix/stm"
88
"github.com/anacrolix/stm/stmutil"
99

10+
"github.com/anacrolix/dht/v2/containers"
1011
"github.com/anacrolix/dht/v2/int160"
1112
"github.com/anacrolix/dht/v2/krpc"
1213
"github.com/anacrolix/dht/v2/traversal"
@@ -47,7 +48,7 @@ func newTraversal(input NewTraversalInput) stmTraversal {
4748
t := stmTraversal{
4849
targetInfohash: targetInfohash,
4950
triedAddrs: stm.NewVar(stmutil.NewSet()),
50-
nodesPendingContact: stm.NewVar(nodesByDistance(targetInfohash)),
51+
nodesPendingContact: stm.NewVar(containers.NewAddrMaybeIdsByDistance(targetInfohash)),
5152
addrBestIds: stm.NewVar(stmutil.NewMap()),
5253
pending: stm.NewVar(0),
5354
}

stm-traversal_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/stretchr/testify/assert"
88

99
"github.com/anacrolix/dht/v2/int160"
10+
"github.com/anacrolix/dht/v2/internal/testutil"
1011
"github.com/anacrolix/dht/v2/krpc"
1112
)
1213

@@ -19,7 +20,7 @@ func TestTraversal(t *testing.T) {
1920
assert.False(t, stm.Atomically(func(tx *stm.Tx) interface{} { _, ok := traversal.popNextContact(tx); return ok }).(bool))
2021
assert.False(t, stm.WouldBlock(stm.VoidOperation(traversal.waitFinished)))
2122
stm.Atomically(stm.Compose(func() (ret []stm.Operation) {
22-
for _, v := range sampleAddrMaybeIds[2:6] {
23+
for _, v := range testutil.SampleAddrMaybeIds[2:6] {
2324
ret = append(ret, traversal.pendContact(v))
2425
}
2526
return

0 commit comments

Comments
 (0)