From 84e1c169c049257a3300b6da7a09416670a58643 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Wed, 16 Jul 2014 13:53:42 -0400 Subject: [PATCH] Add tests for torrent purging --- http/announce_test.go | 48 +++++++++++++++++++++++++++++++++++++++++++ http/http_test.go | 11 +++++++--- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/http/announce_test.go b/http/announce_test.go index 41c814a..3295c3a 100644 --- a/http/announce_test.go +++ b/http/announce_test.go @@ -5,9 +5,12 @@ package http import ( + "net/http" "net/http/httptest" + "net/url" "reflect" "testing" + "time" "github.com/chihaya/bencode" "github.com/chihaya/chihaya/config" @@ -52,6 +55,51 @@ func TestPublicAnnounce(t *testing.T) { checkAnnounce(peer, expected, srv, t) } +func TestTorrentPurging(t *testing.T) { + config := config.DefaultConfig + config.Tracker.Params = map[string]string{ + "purge_inactive": "200ms", + "purge_interval": "100ms", + } + + srv, err := setupTracker(&config) + if err != nil { + t.Fatal(err) + } + defer srv.Close() + + torrentApiPath := srv.URL + "/torrents/" + url.QueryEscape(infoHash) + + // Add one seeder. + peer := makePeerParams("peer1", true) + announce(peer, srv) + + _, status, err := fetchPath(torrentApiPath) + if err != nil { + t.Fatal(err) + } + + if status != http.StatusOK { + t.Fatal("expected torrent to exist (got %s)", http.StatusText(status)) + } + + // Remove seeder. + peer = makePeerParams("peer1", true) + peer["event"] = "stopped" + announce(peer, srv) + + time.Sleep(1000 * time.Millisecond) + + _, status, err = fetchPath(torrentApiPath) + if err != nil { + t.Fatal(err) + } + + if status != http.StatusNotFound { + t.Fatalf("expected torrent to have been purged (got %s)", http.StatusText(status)) + } +} + func makePeerParams(id string, seed bool) params { left := "1" if seed { diff --git a/http/http_test.go b/http/http_test.go index f3b3769..267da85 100644 --- a/http/http_test.go +++ b/http/http_test.go @@ -40,14 +40,19 @@ func announce(p params, srv *httptest.Server) ([]byte, error) { values.Add(k, v) } - response, err := http.Get(srv.URL + "/announce?" + values.Encode()) + body, _, err := fetchPath(srv.URL + "/announce?" + values.Encode()) + return body, err +} + +func fetchPath(path string) ([]byte, int, error) { + response, err := http.Get(path) if err != nil { - return nil, err + return nil, 0, err } body, err := ioutil.ReadAll(response.Body) response.Body.Close() - return body, err + return body, response.StatusCode, err } type peerList bencode.List