Skip to content

Commit 8fe5368

Browse files
committed
squash bugs, udptracker tests passing
1 parent 2845c6f commit 8fe5368

File tree

7 files changed

+50
-35
lines changed

7 files changed

+50
-35
lines changed

storage/types.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import "net/netip"
55
type IPVersion uint8
66

77
const (
8-
IPv4 IPVersion = iota
9-
IPv6 = iota
8+
IPv4 IPVersion = 1 << iota
9+
IPv6
1010
)
1111

1212
type (

tracker/http/announce_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"os"
1111
"testing"
1212

13-
"github.com/crimist/trakx/pools"
1413
_ "github.com/crimist/trakx/storage/inmemory"
1514
)
1615

@@ -21,8 +20,6 @@ func TestAnnounce(t *testing.T) {
2120
os.Setenv("GODEBUG", "randseednop=0")
2221
rand.Seed(1)
2322

24-
pools.Initialize(int(testTrackerConfig.MaximumNumwant))
25-
2623
var cases = []struct {
2724
name string
2825
ipv6 bool

tracker/http/httptracker_test.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"testing"
99
"time"
1010

11+
"github.com/crimist/trakx/pools"
1112
"github.com/crimist/trakx/stats"
1213
"github.com/crimist/trakx/storage/inmemory"
1314
"github.com/crimist/trakx/tracker"
@@ -62,6 +63,8 @@ func TestMain(m *testing.M) {
6263
findOpenPort()
6364
zap.L().Debug("Found open port for HTTP tracker", zap.Int("port", testNetworkPort))
6465

66+
pools.Initialize(int(testTrackerConfig.MaximumNumwant))
67+
6568
peerDB, err := inmemory.NewInMemory(inmemory.Config{})
6669
if err != nil {
6770
zap.L().Fatal("TCP tracker received shutdown")
@@ -83,11 +86,11 @@ func TestMain(m *testing.M) {
8386
}
8487

8588
func dialMockTracker(address string) (*net.TCPConn, error) {
86-
resolvedAddr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", address, testNetworkPort))
87-
if err != nil {
88-
return nil, errors.Wrap(err, "failed to resolve TCP address")
89+
addr := &net.TCPAddr{
90+
IP: net.ParseIP(address),
91+
Port: testNetworkPort,
8992
}
90-
conn, err := net.DialTCP("tcp", nil, resolvedAddr)
93+
conn, err := net.DialTCP("tcp", nil, addr)
9194
if err != nil {
9295
return nil, errors.Wrap(err, "failed to dial TCP address")
9396
}

tracker/udp/announce.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,9 @@ func (tracker *Tracker) announce(udpAddr *net.UDPAddr, addrPort netip.AddrPort,
5050
interval += uint(rand.Int31n(int32(tracker.config.IntervalVariance)))
5151
}
5252

53-
seeds, leeches := tracker.peerDB.TorrentStats(announceRequest.InfoHash)
54-
5553
if announceRequest.Event == udpprotocol.EventStopped {
5654
tracker.peerDB.PeerRemove(announceRequest.InfoHash, announceRequest.PeerID)
55+
seeds, leeches := tracker.peerDB.TorrentStats(announceRequest.InfoHash)
5756

5857
marshalledResp := udpprotocol.AnnounceResponse{
5958
Action: udpprotocol.ActionAnnounce,
@@ -80,6 +79,7 @@ func (tracker *Tracker) announce(udpAddr *net.UDPAddr, addrPort netip.AddrPort,
8079
}
8180

8281
tracker.peerDB.PeerAdd(announceRequest.InfoHash, announceRequest.PeerID, addrPort.Addr(), announceRequest.Port, peerComplete)
82+
seeds, leeches := tracker.peerDB.TorrentStats(announceRequest.InfoHash)
8383

8484
var ipversion storage.IPVersion
8585
if addrPort.Addr().Is4() {
@@ -90,7 +90,7 @@ func (tracker *Tracker) announce(udpAddr *net.UDPAddr, addrPort netip.AddrPort,
9090

9191
peers4, peers6 := tracker.peerDB.TorrentPeersCompact(announceRequest.InfoHash, uint(announceRequest.NumWant), ipversion)
9292

93-
marshalledResp := udpprotocol.AnnounceResponse{
93+
response := udpprotocol.AnnounceResponse{
9494
Action: udpprotocol.ActionAnnounce,
9595
TransactionID: announceRequest.TransactionID,
9696
Interval: int32(interval),
@@ -99,15 +99,16 @@ func (tracker *Tracker) announce(udpAddr *net.UDPAddr, addrPort netip.AddrPort,
9999
}
100100

101101
if ipversion == storage.IPv4 {
102-
marshalledResp.Peers = peers4
102+
response.Peers = peers4
103103
} else {
104-
marshalledResp.Peers = peers6
104+
response.Peers = peers6
105105
}
106106

107-
respBytes, err := marshalledResp.Marshal()
107+
respBytes, err := response.Marshal()
108108
if peers4 != nil {
109109
pools.Peerlists4.Put(peers4)
110-
} else {
110+
}
111+
if peers6 != nil {
111112
pools.Peerlists6.Put(peers6)
112113
}
113114

tracker/udp/announce_test.go

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ func announceSuccess(t *testing.T, conn *net.UDPConn, announceReq udpprotocol.An
2020
}
2121

2222
data = make([]byte, 1024)
23-
conn.Read(data)
23+
n, err := conn.Read(data)
24+
if err != nil {
25+
t.Fatal("Error reading from UDP server", err.Error())
26+
}
27+
data = data[:n]
28+
2429
announceResp, err := udpprotocol.NewAnnounceResponse(data)
2530
if err != nil {
2631
t.Fatal("Error unmarshalling connect response:", err.Error())
@@ -50,7 +55,12 @@ func announceError(t *testing.T, conn *net.UDPConn, announceReq udpprotocol.Anno
5055
}
5156

5257
data = make([]byte, 1024)
53-
conn.Read(data)
58+
n, err := conn.Read(data)
59+
if err != nil {
60+
t.Fatal("Error reading from UDP server", err.Error())
61+
}
62+
data = data[:n]
63+
5464
errorResp, err := udpprotocol.NewErrorResponse(data)
5565
if err != nil {
5666
t.Fatal("Error unmarshalling connect response:", err.Error())
@@ -93,8 +103,8 @@ func TestAnnounceStarted(t *testing.T) {
93103
if announceResp.Seeds != 0 {
94104
t.Errorf("Expected seeds = %v; got %v", 0, announceResp.Seeds)
95105
}
96-
if len(announceResp.Peers) != 1 {
97-
t.Errorf("Expected len(peers) = %v; got %v", 1, len(announceResp.Peers))
106+
if len(announceResp.Peers) != 6 {
107+
t.Errorf("Expected len(peers) = %v; got %v", 6, len(announceResp.Peers))
98108
}
99109
if !bytes.Equal(announceResp.Peers[4:6], []byte{0xAA, 0xBB}) {
100110
t.Errorf("Expected peer port = %#v; got %#v", []byte{0xAA, 0xBB}, announceResp.Peers[4:6])
@@ -105,7 +115,7 @@ func TestAnnounceStarted(t *testing.T) {
105115
}
106116

107117
func TestAnnounceStarted6(t *testing.T) {
108-
conn, err := dialMockTracker(testNetAddress4)
118+
conn, err := dialMockTracker(testNetAddress6)
109119
if err != nil {
110120
t.Fatal("failed to dial mock tracker", err)
111121
}
@@ -138,8 +148,8 @@ func TestAnnounceStarted6(t *testing.T) {
138148
if announceResp.Seeds != 0 {
139149
t.Errorf("Expected seeds = %v; got %v", 0, announceResp.Seeds)
140150
}
141-
if len(announceResp.Peers) != 1 {
142-
t.Errorf("Expected len(peers) = %v; got %v", 1, len(announceResp.Peers))
151+
if len(announceResp.Peers) != 18 {
152+
t.Errorf("Expected len(peers) = %v; got %v", 18, len(announceResp.Peers))
143153
}
144154
if !bytes.Equal(announceResp.Peers[16:18], []byte{0xAA, 0xBB}) {
145155
t.Errorf("Expected peer port = %#v; got %#v", []byte{0xAA, 0xBB}, announceResp.Peers[16:18])
@@ -178,14 +188,14 @@ func TestAnnounceCompleteEvent(t *testing.T) {
178188
Port: 0xAABB,
179189
})
180190

181-
if announceResp.Leeches != 1 {
182-
t.Errorf("Expected leeches = %v; got %v", 1, announceResp.Leeches)
191+
if announceResp.Leeches != 0 {
192+
t.Errorf("Expected leeches = %v; got %v", 0, announceResp.Leeches)
183193
}
184194
if announceResp.Seeds != 1 {
185195
t.Errorf("Expected seeds = %v; got %v", 1, announceResp.Seeds)
186196
}
187-
if len(announceResp.Peers) != 1 {
188-
t.Errorf("Expected len(peers) = %v; got %v", 1, len(announceResp.Peers))
197+
if len(announceResp.Peers) != 6 {
198+
t.Errorf("Expected len(peers) = %v; got %v", 6, len(announceResp.Peers))
189199
}
190200
if !bytes.Equal(announceResp.Peers[4:6], []byte{0xAA, 0xBB}) {
191201
t.Errorf("Expected peer port = %#v; got %#v", []byte{0xAA, 0xBB}, announceResp.Peers[4:6])
@@ -230,8 +240,8 @@ func TestAnnounceCompleteLeft(t *testing.T) {
230240
if announceResp.Seeds != 1 {
231241
t.Errorf("Expected seeds = %v; got %v", 1, announceResp.Seeds)
232242
}
233-
if len(announceResp.Peers) != 1 {
234-
t.Errorf("Expected len(peers) = %v; got %v", 1, len(announceResp.Peers))
243+
if len(announceResp.Peers) != 6 {
244+
t.Errorf("Expected len(peers) = %v; got %v", 6, len(announceResp.Peers))
235245
}
236246
if !bytes.Equal(announceResp.Peers[4:6], []byte{0xAA, 0xBB}) {
237247
t.Errorf("Expected peer port = %#v; got %#v", []byte{0xAA, 0xBB}, announceResp.Peers[4:6])
@@ -262,7 +272,7 @@ func TestAnnounceStopped(t *testing.T) {
262272
Downloaded: 1000,
263273
Left: 0,
264274
Uploaded: 1000,
265-
Event: udpprotocol.EventStarted,
275+
Event: udpprotocol.EventStopped,
266276
IP: 0,
267277
Key: 0x1337,
268278
NumWant: 50,

tracker/udp/udptracker.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ func (tracker *Tracker) Serve(ip net.IP, port int, routines int) error {
7373
data := make([]byte, maximumRequestSize)
7474

7575
for {
76+
data = data[:cap(data)]
7677
size, remoteAddr, err := tracker.socket.ReadFromUDP(data)
7778
if err != nil {
7879
if errors.Unwrap(err).Error() == errSocketClosed {

tracker/udp/udptracker_test.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"testing"
99
"time"
1010

11+
"github.com/crimist/trakx/pools"
1112
"github.com/crimist/trakx/storage"
1213
"github.com/crimist/trakx/storage/inmemory"
1314
"github.com/crimist/trakx/tracker"
@@ -62,6 +63,8 @@ func TestMain(m *testing.M) {
6263
findOpenPort()
6364
zap.L().Debug("Found open port for UDP tracker", zap.Int("port", testNetworkPort))
6465

66+
pools.Initialize(int(testTrackerConfig.MaximumNumwant))
67+
6568
peerDB, err := inmemory.NewInMemory(inmemory.Config{})
6669
if err != nil {
6770
zap.L().Fatal("UDP tracker received shutdown")
@@ -82,11 +85,11 @@ func TestMain(m *testing.M) {
8285
}
8386

8487
func dialMockTracker(address string) (*net.UDPConn, error) {
85-
resolvedAddr, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", address, testNetworkPort))
86-
if err != nil {
87-
return nil, errors.Wrap(err, "failed to resolve UDP address")
88+
addr := &net.UDPAddr{
89+
IP: net.ParseIP(address),
90+
Port: testNetworkPort,
8891
}
89-
conn, err := net.DialUDP("udp", nil, resolvedAddr)
92+
conn, err := net.DialUDP("udp", nil, addr)
9093
if err != nil {
9194
return nil, errors.Wrap(err, "failed to dial UDP address")
9295
}
@@ -122,7 +125,7 @@ func TestUnregisteredConnection(t *testing.T) {
122125
})
123126

124127
if !bytes.Equal(errorResp.ErrorString, []byte(fatalUnregisteredConnection)) {
125-
t.Errorf("Expected error = %v; got %v", fatalUnregisteredConnection, errorResp.ErrorString)
128+
t.Errorf("Expected error = %s; got %s", string(fatalUnregisteredConnection), string(errorResp.ErrorString))
126129
}
127130
}
128131

0 commit comments

Comments
 (0)