mirror of
https://github.com/warppipe/swift-torrent.git
synced 2026-05-28 15:27:20 +00:00
6c8c581517
Full BEP-3 peer wire protocol, BEP-5 DHT, BEP-15 UDP trackers, magnet link support, bencode serialization, rarest-first piece selection, and async session management using SwiftNIO and swift-crypto. Includes 64 passing unit tests. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
43 lines
1.6 KiB
Swift
43 lines
1.6 KiB
Swift
import XCTest
|
|
@testable import SwiftTorrent
|
|
|
|
final class TrackerTests: XCTestCase {
|
|
func testParseCompactPeers() throws {
|
|
// Create a mock bencoded tracker response with compact peers
|
|
let encoder = BencodeEncoder()
|
|
|
|
// 6 bytes: 192.168.1.1:6881
|
|
var peerData = Data()
|
|
peerData.append(contentsOf: [192, 168, 1, 1])
|
|
peerData.append(contentsOf: UInt16(6881).bigEndianBytes)
|
|
// 6 bytes: 10.0.0.1:8080
|
|
peerData.append(contentsOf: [10, 0, 0, 1])
|
|
peerData.append(contentsOf: UInt16(8080).bigEndianBytes)
|
|
|
|
let response: BencodeValue = .dictionary([
|
|
(key: Data("complete".utf8), value: .integer(10)),
|
|
(key: Data("incomplete".utf8), value: .integer(5)),
|
|
(key: Data("interval".utf8), value: .integer(1800)),
|
|
(key: Data("peers".utf8), value: .string(peerData)),
|
|
])
|
|
|
|
let data = encoder.encode(response)
|
|
let decoded = try BencodeDecoder().decode(data)
|
|
|
|
// Verify structure
|
|
XCTAssertEqual(decoded["interval"]?.integerValue, 1800)
|
|
XCTAssertEqual(decoded["complete"]?.integerValue, 10)
|
|
XCTAssertEqual(decoded["peers"]?.stringValue?.count, 12)
|
|
}
|
|
|
|
func testTrackerErrorResponse() throws {
|
|
let encoder = BencodeEncoder()
|
|
let response: BencodeValue = .dictionary([
|
|
(key: Data("failure reason".utf8), value: .string(Data("Torrent not found".utf8))),
|
|
])
|
|
let data = encoder.encode(response)
|
|
let decoded = try BencodeDecoder().decode(data)
|
|
XCTAssertEqual(decoded["failure reason"]?.utf8String, "Torrent not found")
|
|
}
|
|
}
|