package bencode import ( "encoding/hex" "io/ioutil" "testing" "time" "dim13.org/btr/meta" ) func TestMarshal(t *testing.T) { v := meta.Torrent{ Announce: "test", AnnounceList: []string{"test1", "test2", "test3"}, CreationDate: time.Now(), Info: meta.Info{ Length: 1000, Files: []meta.File{ {Path: []string{"A"}}, {Path: []string{"B"}}, }, }, } out, err := Marshal(v) if err != nil { t.Error(err) } t.Logf("%q\n", string(out)) } func TestParseString(t *testing.T) { in := "4:testZZZ" s, l := parseString([]byte(in)) if s != "test" || l != 6 { t.Error("expected test, got", s) } } func TestParseInt(t *testing.T) { in := "i12345e999" i, l := parseInt([]byte(in)) if i != 12345 || l != 7 { t.Error("expected 12345, got", i) } } var testCase = []struct { Torrent string InfoHash string }{ { Torrent: "../examples/OpenBSD_5.9_amd64_install59.iso-2016-03-29-0449.torrent", InfoHash: "e840038dea1998c39614dcd28594501df02bd32d", }, { Torrent: "../examples/OpenBSD_songs_ogg-2016-03-25-0127.torrent", InfoHash: "1aa5af9f6f533961a65169bdeeb801e611724d32", }, { Torrent: "../examples/debian-8.5.0-amd64-netinst.iso.torrent", InfoHash: "47b9ad52c009f3bd562ffc6da40e5c55d3fb47f3", }, } func TestUnmarshal(t *testing.T) { for _, tc := range testCase { var tor meta.Torrent body, err := ioutil.ReadFile(tc.Torrent) if err != nil { t.Error(err) } err = Unmarshal(body, &tor) if err != nil { t.Error(err) } h := hex.EncodeToString(tor.InfoHash) if h != tc.InfoHash { t.Error("got", h, "expected", tc.InfoHash) } } }