]> Sergey Matveev's repositories - btrtrc.git/blob - bencode/both_test.go
Drop support for go 1.20
[btrtrc.git] / bencode / both_test.go
1 package bencode
2
3 import (
4         "bytes"
5         "os"
6         "testing"
7
8         "github.com/stretchr/testify/assert"
9         "github.com/stretchr/testify/require"
10 )
11
12 func loadFile(name string, t *testing.T) []byte {
13         data, err := os.ReadFile(name)
14         require.NoError(t, err)
15         return data
16 }
17
18 func testFileInterface(t *testing.T, filename string) {
19         data1 := loadFile(filename, t)
20
21         var iface interface{}
22         err := Unmarshal(data1, &iface)
23         require.NoError(t, err)
24
25         data2, err := Marshal(iface)
26         require.NoError(t, err)
27
28         assert.EqualValues(t, data1, data2)
29 }
30
31 func TestBothInterface(t *testing.T) {
32         testFileInterface(t, "testdata/archlinux-2011.08.19-netinstall-i686.iso.torrent")
33         testFileInterface(t, "testdata/continuum.torrent")
34 }
35
36 type torrentFile struct {
37         Info struct {
38                 Name        string `bencode:"name"`
39                 Length      int64  `bencode:"length"`
40                 MD5Sum      string `bencode:"md5sum,omitempty"`
41                 PieceLength int64  `bencode:"piece length"`
42                 Pieces      string `bencode:"pieces"`
43                 Private     bool   `bencode:"private,omitempty"`
44         } `bencode:"info"`
45
46         Announce     string      `bencode:"announce"`
47         AnnounceList [][]string  `bencode:"announce-list,omitempty"`
48         CreationDate int64       `bencode:"creation date,omitempty"`
49         Comment      string      `bencode:"comment,omitempty"`
50         CreatedBy    string      `bencode:"created by,omitempty"`
51         URLList      interface{} `bencode:"url-list,omitempty"`
52 }
53
54 func testFile(t *testing.T, filename string) {
55         data1 := loadFile(filename, t)
56         var f torrentFile
57
58         err := Unmarshal(data1, &f)
59         if err != nil {
60                 t.Fatal(err)
61         }
62
63         data2, err := Marshal(&f)
64         if err != nil {
65                 t.Fatal(err)
66         }
67
68         if !bytes.Equal(data1, data2) {
69                 println(string(data2))
70                 t.Fatalf("equality expected")
71         }
72 }
73
74 func TestBoth(t *testing.T) {
75         testFile(t, "testdata/archlinux-2011.08.19-netinstall-i686.iso.torrent")
76 }