@cryptotaxi247 / kubo / commits / 1891c8915

feat: test the three-legged cat

Brian Tiger Chow committed Dec 25, 2014 at 04:04 UTC 1891c8915d2a2a602612ae8d51e5e9b6174058e7
1 file changed +77
epictest/three_legged_cat_test.go new
+77
@@ -0,0 +1,77 @@
1 +package epictest
2 +
3 +import (
4 + "bytes"
5 + "io"
6 + "math"
7 + "testing"
8 +
9 + context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
10 + mocknet "github.com/jbenet/go-ipfs/net/mock"
11 + errors "github.com/jbenet/go-ipfs/util/debugerror"
12 +)
13 +
14 +func TestThreeLeggedCat(t *testing.T) {
15 + conf := Config{
16 + NetworkLatency: 0,
17 + RoutingLatency: 0,
18 + BlockstoreLatency: 0,
19 + }
20 + if err := RunThreeLeggedCat(RandomBytes(1*KB), conf); err != nil {
21 + t.Fatal(err)
22 + }
23 +}
24 +
25 +func RunThreeLeggedCat(data []byte, conf Config) error {
26 + ctx, cancel := context.WithCancel(context.Background())
27 + defer cancel()
28 + const numPeers = 3
29 +
30 + // create network
31 + mn, err := mocknet.FullMeshLinked(ctx, numPeers)
32 + if err != nil {
33 + return errors.Wrap(err)
34 + }
35 + mn.SetLinkDefaults(mocknet.LinkOptions{
36 + Latency: conf.NetworkLatency,
37 + // TODO add to conf. This is tricky because we want 0 values to be functional.
38 + Bandwidth: math.MaxInt32,
39 + })
40 +
41 + if len(mn.Peers()) < numPeers {
42 + return errors.New("test initialization error")
43 + }
44 + adder, err := makeCore(ctx, MocknetTestRepo(mn.Peers()[0], mn.Net(mn.Peers()[0]), conf))
45 + if err != nil {
46 + return err
47 + }
48 + catter, err := makeCore(ctx, MocknetTestRepo(mn.Peers()[1], mn.Net(mn.Peers()[1]), conf))
49 + if err != nil {
50 + return err
51 + }
52 + bootstrap, err := makeCore(ctx, MocknetTestRepo(mn.Peers()[2], mn.Net(mn.Peers()[2]), conf))
53 + if err != nil {
54 + return err
55 + }
56 +
57 + adder.Bootstrap(ctx, bootstrap.ID())
58 + catter.Bootstrap(ctx, bootstrap.ID())
59 +
60 + keyAdded, err := adder.Add(bytes.NewReader(data))
61 + if err != nil {
62 + return err
63 + }
64 +
65 + readerCatted, err := catter.Cat(keyAdded)
66 + if err != nil {
67 + return err
68 + }
69 +
70 + // verify
71 + var bufout bytes.Buffer
72 + io.Copy(&bufout, readerCatted)
73 + if 0 != bytes.Compare(bufout.Bytes(), data) {
74 + return errors.New("catted data does not match added data")
75 + }
76 + return nil
77 +}