Files
gopeed/internal/protocol/ed2k/stats_test.go
2026-09-05 19:53:41 +08:00

73 lines
2.1 KiB
Go

package ed2k
import (
"testing"
ped2k "github.com/GopeedLab/gopeed/pkg/protocol/ed2k"
"github.com/monkeyWie/goed2k"
"github.com/monkeyWie/goed2k/protocol"
)
func TestStatsSeparatesSnapshotAndRuntimeWithoutHandle(t *testing.T) {
frame := (&Fetcher{}).Stats()
if frame.Snapshot != nil {
t.Fatalf("snapshot = %T, want nil without a valid handle", frame.Snapshot)
}
runtime, ok := frame.Runtime.(*ped2k.StatsRuntime)
if !ok {
t.Fatalf("runtime type = %T", frame.Runtime)
}
if runtime.Peers == nil || len(runtime.Peers) != 0 {
t.Fatalf("unexpected runtime peers: %+v", runtime.Peers)
}
}
func TestBuildED2KPieceMapPreservesIndexes(t *testing.T) {
snapshots := []goed2k.PieceSnapshot{
{Index: 0, State: goed2k.PieceSnapshotFinished},
{Index: 1, State: goed2k.PieceSnapshotMissing},
{Index: 2, State: goed2k.PieceSnapshotDownloading},
{Index: 3, State: goed2k.PieceSnapshotFinished},
}
pieceMap := buildED2KPieceMap(snapshots)
if pieceMap == nil {
t.Fatal("buildED2KPieceMap returned nil")
}
want := []bool{true, false, false, true}
for index, expected := range want {
got, err := pieceMap.Get(index)
if err != nil || got != expected {
t.Fatalf("piece %d = %v, %v; want %v", index, got, err, expected)
}
}
if pieceMap.CompletedPieces() != 2 {
t.Fatalf("CompletedPieces() = %d, want 2", pieceMap.CompletedPieces())
}
}
func TestBuildED2KPeers(t *testing.T) {
remotePieces := protocol.NewBitField(4)
remotePieces.SetBit(0)
remotePieces.SetBit(2)
endpoint, err := protocol.EndpointFromString("127.0.0.1", 4662)
if err != nil {
t.Fatalf("EndpointFromString: %v", err)
}
peers := buildED2KPeers([]goed2k.PeerInfo{{
PayloadDownloadSpeed: 2048,
PayloadUploadSpeed: 1024,
RemotePieces: remotePieces,
Endpoint: endpoint,
ModName: "aMule",
StrModVersion: "2.3.3",
SourceFlag: int(goed2k.PeerServer | goed2k.PeerDHT),
}})
if len(peers) != 1 {
t.Fatalf("len(peers) = %d, want 1", len(peers))
}
peer := peers[0]
if peer.Client != "aMule 2.3.3" || peer.PieceCount != 2 || peer.Source != "server|kad" || peer.Transport != "tcp" {
t.Fatalf("unexpected peer: %+v", peer)
}
}