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