package worker import ( "context" "testing" "git.vakhrushev.me/av/jellybit/internal/qbt" "git.vakhrushev.me/av/jellybit/internal/store" ) // TestPollBuildsLiveSnapshot: после Poll снимок несёт телеметрию качающейся и // сидирующей задач (с верным Seeding), доступную по любому из трёх хэшей; // неизвестный/пустой infohash → ok=false. func TestPollBuildsLiveSnapshot(t *testing.T) { qb := &fakeQbt{torrents: []qbt.Torrent{ // Качается (Category пуст → discover не усыновляет, store не мешает). {Hash: "aaa", State: "downloading", Progress: 0.5, Dlspeed: 1000, Eta: 120}, // Сидирует, торрент v2 (три ключа). { Hash: "bbb", InfohashV1: "bbb1", InfohashV2: "BBB2", State: "uploading", Progress: 1.0, Ratio: 2.5, NumSeeds: 3, NumLeechs: 1, Uploaded: 999, Upspeed: 50, }, }} w := newTestWorker(&fakeStore{downloads: map[int64]*store.Download{}}, qb) if err := w.Poll(context.Background()); err != nil { t.Fatalf("Poll: %v", err) } dl, ok := w.Live("aaa") if !ok { t.Fatal("нет телеметрии качающейся задачи") } if dl.Seeding { t.Error("качающаяся задача помечена Seeding") } if dl.Progress != 0.5 || dl.DlSpeed != 1000 || dl.ETA != 120 { t.Errorf("телеметрия качания неверна: %+v", dl) } // Сидирующая задача находится по любому из трёх хэшей (lowercase). for _, h := range []string{"bbb", "bbb1", "BBB2", "bbb2"} { sd, ok := w.Live(h) if !ok { t.Fatalf("нет телеметрии раздачи по ключу %q", h) } if !sd.Seeding { t.Errorf("ключ %q: Seeding=false для uploading", h) } if sd.Ratio != 2.5 || sd.Seeds != 3 || sd.Peers != 1 || sd.Uploaded != 999 || sd.UpSpeed != 50 { t.Errorf("ключ %q: статистика раздачи неверна: %+v", h, sd) } } if _, ok := w.Live("unknownhash"); ok { t.Error("неизвестный infohash вернул ok=true") } if _, ok := w.Live(""); ok { t.Error("пустой infohash вернул ok=true") } }