]> Sergey Matveev's repositories - btrtrc.git/blob - issue35_test.go
ca3d6f9974f83de6d846869ce2979336a65132f0
[btrtrc.git] / issue35_test.go
1 package torrent
2
3 import (
4         "errors"
5         "fmt"
6         "io"
7         "os"
8         "path/filepath"
9         "runtime"
10         "testing"
11
12         "github.com/anacrolix/torrent/dht"
13         "github.com/anacrolix/torrent/metainfo"
14 )
15
16 var numclients int = 0
17
18 func cfdir() string {
19         numclients++
20         return filepath.Join(os.TempDir(), "wtp-test/", fmt.Sprintf("%d/", numclients))
21 }
22
23 func addirs(cf *Config) *Config {
24         d := cfdir()
25         os.MkdirAll(d, 0700)
26         cf.DataDir = filepath.Join(d, "/data")
27         os.MkdirAll(cf.DataDir, 0700)
28         cf.ConfigDir = filepath.Join(d, "/config")
29         os.MkdirAll(cf.ConfigDir, 0700)
30         return cf
31 }
32
33 func issue35TestingConfig() *Config {
34         return &Config{
35                 ListenAddr:           "localhost:0",
36                 NoDHT:                false,
37                 DisableTrackers:      true,
38                 DisableUTP:           false,
39                 DisableMetainfoCache: true,
40                 DisableIPv6:          true,
41                 NoUpload:             false,
42                 Seed:                 true,
43                 DataDir:              filepath.Join(os.TempDir(), "torrent-test/data"),
44                 ConfigDir:            filepath.Join(os.TempDir(), "torrent-test/config"),
45                 DHTConfig: dht.ServerConfig{
46                         Passive:            false,
47                         BootstrapNodes:     []string{},
48                         NoSecurity:         false,
49                         NoDefaultBootstrap: true,
50                 },
51                 Debug: true,
52         }
53 }
54
55 func writeranddata(path string) error {
56         var w int64
57         var to_write int64 = 1024 * 1024 //1MB
58         f, err := os.Create(path)
59         defer f.Close()
60         if err != nil {
61                 return err
62         }
63         rnd, err := os.Open("/dev/urandom")
64         defer rnd.Close()
65         if err != nil {
66                 return err
67         }
68         w, err = io.CopyN(f, rnd, to_write)
69         if err != nil {
70                 return err
71         }
72         if w != to_write {
73                 return errors.New("Short read on /dev/random")
74         }
75         return nil
76 }
77
78 func TestInfohash(t *testing.T) {
79         os.RemoveAll(filepath.Join(os.TempDir(), "torrent-test"))
80         os.MkdirAll(filepath.Join(os.TempDir(), "torrent-test"), 0700)
81         var cl_one *Client
82         var cf_one *Config
83         var err error
84         if err != nil {
85                 t.Fatal(err)
86         }
87         cf_one = issue35TestingConfig()
88         cf_one.ListenAddr = "localhost:43433"
89         cf_one = addirs(cf_one)
90         cl_one, err = NewClient(cf_one)
91         if err != nil {
92                 t.Fatal(err)
93         }
94         tfp := filepath.Join(cf_one.DataDir, "testdata")
95         writeranddata(tfp)
96         b := metainfo.Builder{}
97         b.AddFile(tfp)
98         b.AddDhtNodes([]string{"1.2.3.4:5555"})
99         ba, err := b.Submit()
100         if err != nil {
101                 t.Fatal(err)
102         }
103         ttfp := filepath.Join(cf_one.ConfigDir, "/../torrent")
104         ttf, err := os.Create(ttfp)
105         if err != nil {
106                 t.Fatal(err)
107         }
108         ec, _ := ba.Start(ttf, runtime.NumCPU())
109         err = <-ec
110         if err != nil {
111                 t.Fatal(err)
112         }
113         ttf.Close()
114
115         tor, err := cl_one.AddTorrentFromFile(ttfp)
116         if err != nil {
117                 t.Fatal(err)
118         }
119         <-tor.GotInfo()
120         tor.DownloadAll()
121         if cl_one.WaitAll() == false {
122                 t.Fatal(errors.New("One did not download torrent"))
123         }
124 }