@cryptotaxi247 / kubo / commits / 1ab9588cb

p2p/test: bogus key pair for faster tests

Juan Batiz-Benet committed Jan 5, 2015 at 05:21 UTC 1ab9588cba4c87ba6ff238c59cbcabdb2101ff80
5 files changed +181 -14
blockservice/mock.go
+1 -1
@@ -12,7 +12,7 @@ import (
12 // Mocks returns |n| connected mock Blockservices
13 func Mocks(t *testing.T, n int) []*BlockService {
14 net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(0))
15 - sg := bitswap.NewSessionGenerator(net)
15 + sg := bitswap.NewTestSessionGenerator(net)
16
17 instances := sg.Instances(n)
18
exchange/bitswap/bitswap_test.go
+9 -9
@@ -11,10 +11,10 @@ import (
11 blocks "github.com/jbenet/go-ipfs/blocks"
12 blocksutil "github.com/jbenet/go-ipfs/blocks/blocksutil"
13 tn "github.com/jbenet/go-ipfs/exchange/bitswap/testnet"
14 + p2ptestutil "github.com/jbenet/go-ipfs/p2p/test/util"
15 mockrouting "github.com/jbenet/go-ipfs/routing/mock"
16 u "github.com/jbenet/go-ipfs/util"
17 delay "github.com/jbenet/go-ipfs/util/delay"
17 - "github.com/jbenet/go-ipfs/util/testutil"
18 )
19
20 // FIXME the tests are really sensitive to the network delay. fix them to work
@@ -25,7 +25,7 @@ func TestClose(t *testing.T) {
25 // TODO
26 t.Skip("TODO Bitswap's Close implementation is a WIP")
27 vnet := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(kNetworkDelay))
28 - sesgen := NewSessionGenerator(vnet)
28 + sesgen := NewTestSessionGenerator(vnet)
29 defer sesgen.Close()
30 bgen := blocksutil.NewBlockGenerator()
31
@@ -39,7 +39,7 @@ func TestClose(t *testing.T) {
39 func TestGetBlockTimeout(t *testing.T) {
40
41 net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(kNetworkDelay))
42 - g := NewSessionGenerator(net)
42 + g := NewTestSessionGenerator(net)
43 defer g.Close()
44
45 self := g.Next()
@@ -57,11 +57,11 @@ func TestProviderForKeyButNetworkCannotFind(t *testing.T) { // TODO revisit this
57
58 rs := mockrouting.NewServer()
59 net := tn.VirtualNetwork(rs, delay.Fixed(kNetworkDelay))
60 - g := NewSessionGenerator(net)
60 + g := NewTestSessionGenerator(net)
61 defer g.Close()
62
63 block := blocks.NewBlock([]byte("block"))
64 - pinfo := testutil.RandIdentityOrFatal(t)
64 + pinfo := p2ptestutil.RandTestBogusIdentityOrFatal(t)
65 rs.Client(pinfo).Provide(context.Background(), block.Key()) // but not on network
66
67 solo := g.Next()
@@ -81,7 +81,7 @@ func TestGetBlockFromPeerAfterPeerAnnounces(t *testing.T) {
81
82 net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(kNetworkDelay))
83 block := blocks.NewBlock([]byte("block"))
84 - g := NewSessionGenerator(net)
84 + g := NewTestSessionGenerator(net)
85 defer g.Close()
86
87 hasBlock := g.Next()
@@ -134,7 +134,7 @@ func PerformDistributionTest(t *testing.T, numInstances, numBlocks int) {
134 t.SkipNow()
135 }
136 net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(kNetworkDelay))
137 - sg := NewSessionGenerator(net)
137 + sg := NewTestSessionGenerator(net)
138 defer sg.Close()
139 bg := blocksutil.NewBlockGenerator()
140
@@ -198,7 +198,7 @@ func TestSendToWantingPeer(t *testing.T) {
198 }
199
200 net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(kNetworkDelay))
201 - sg := NewSessionGenerator(net)
201 + sg := NewTestSessionGenerator(net)
202 defer sg.Close()
203 bg := blocksutil.NewBlockGenerator()
204
@@ -243,7 +243,7 @@ func TestSendToWantingPeer(t *testing.T) {
243
244 func TestBasicBitswap(t *testing.T) {
245 net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(kNetworkDelay))
246 - sg := NewSessionGenerator(net)
246 + sg := NewTestSessionGenerator(net)
247 bg := blocksutil.NewBlockGenerator()
248
249 t.Log("Test a few nodes trying to get one file with a lot of blocks")
exchange/bitswap/testutils.go
+4 -2
@@ -10,12 +10,14 @@ import (
10 exchange "github.com/jbenet/go-ipfs/exchange"
11 tn "github.com/jbenet/go-ipfs/exchange/bitswap/testnet"
12 peer "github.com/jbenet/go-ipfs/p2p/peer"
13 + p2ptestutil "github.com/jbenet/go-ipfs/p2p/test/util"
14 datastore2 "github.com/jbenet/go-ipfs/util/datastore2"
15 delay "github.com/jbenet/go-ipfs/util/delay"
16 testutil "github.com/jbenet/go-ipfs/util/testutil"
17 )
18
18 -func NewSessionGenerator(
19 +// WARNING: this uses RandTestBogusIdentity DO NOT USE for NON TESTS!
20 +func NewTestSessionGenerator(
21 net tn.Network) SessionGenerator {
22 ctx, cancel := context.WithCancel(context.TODO())
23 return SessionGenerator{
@@ -41,7 +43,7 @@ func (g *SessionGenerator) Close() error {
43
44 func (g *SessionGenerator) Next() Instance {
45 g.seq++
44 - p, err := testutil.RandIdentity()
46 + p, err := p2ptestutil.RandTestBogusIdentity()
47 if err != nil {
48 panic("FIXME") // TODO change signature
49 }
p2p/net/mock/mock_net.go
+2 -2
@@ -4,13 +4,13 @@ import (
4 "fmt"
5 "sort"
6 "sync"
7 - "time"
7
8 ic "github.com/jbenet/go-ipfs/p2p/crypto"
9 host "github.com/jbenet/go-ipfs/p2p/host"
10 bhost "github.com/jbenet/go-ipfs/p2p/host/basic"
11 inet "github.com/jbenet/go-ipfs/p2p/net"
12 peer "github.com/jbenet/go-ipfs/p2p/peer"
13 + p2putil "github.com/jbenet/go-ipfs/p2p/test/util"
14 testutil "github.com/jbenet/go-ipfs/util/testutil"
15
16 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
@@ -45,7 +45,7 @@ func New(ctx context.Context) Mocknet {
45 }
46
47 func (mn *mocknet) GenPeer() (host.Host, error) {
48 - sk, _, err := testutil.SeededTestKeyPair(time.Now().UnixNano())
48 + sk, err := p2putil.RandTestBogusPrivateKey()
49 if err != nil {
50 return nil, err
51 }
p2p/test/util/key.go new
+165
@@ -0,0 +1,165 @@
1 +package testutil
2 +
3 +import (
4 + "bytes"
5 + "io"
6 + "testing"
7 +
8 + u "github.com/jbenet/go-ipfs/util"
9 + eventlog "github.com/jbenet/go-ipfs/util/eventlog"
10 + testutil "github.com/jbenet/go-ipfs/util/testutil"
11 +
12 + ic "github.com/jbenet/go-ipfs/p2p/crypto"
13 + peer "github.com/jbenet/go-ipfs/p2p/peer"
14 +
15 + ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
16 +)
17 +
18 +var log = eventlog.Logger("boguskey")
19 +
20 +// TestBogusPrivateKey is a key used for testing (to avoid expensive keygen)
21 +type TestBogusPrivateKey []byte
22 +
23 +// TestBogusPublicKey is a key used for testing (to avoid expensive keygen)
24 +type TestBogusPublicKey []byte
25 +
26 +func (pk TestBogusPublicKey) Verify(data, sig []byte) (bool, error) {
27 + log.Criticalf("TestBogusPublicKey.Verify -- this better be a test!")
28 + return bytes.Equal(data, reverse(sig)), nil
29 +}
30 +
31 +func (pk TestBogusPublicKey) Bytes() ([]byte, error) {
32 + return []byte(pk), nil
33 +}
34 +
35 +func (pk TestBogusPublicKey) Encrypt(b []byte) ([]byte, error) {
36 + log.Criticalf("TestBogusPublicKey.Encrypt -- this better be a test!")
37 + return reverse(b), nil
38 +}
39 +
40 +// Equals checks whether this key is equal to another
41 +func (pk TestBogusPublicKey) Equals(k ic.Key) bool {
42 + return ic.KeyEqual(pk, k)
43 +}
44 +
45 +func (pk TestBogusPublicKey) Hash() ([]byte, error) {
46 + return ic.KeyHash(pk)
47 +}
48 +
49 +func (sk TestBogusPrivateKey) GenSecret() []byte {
50 + return []byte(sk)
51 +}
52 +
53 +func (sk TestBogusPrivateKey) Sign(message []byte) ([]byte, error) {
54 + log.Criticalf("TestBogusPrivateKey.Sign -- this better be a test!")
55 + return reverse(message), nil
56 +}
57 +
58 +func (sk TestBogusPrivateKey) GetPublic() ic.PubKey {
59 + return TestBogusPublicKey(sk)
60 +}
61 +
62 +func (sk TestBogusPrivateKey) Decrypt(b []byte) ([]byte, error) {
63 + log.Criticalf("TestBogusPrivateKey.Decrypt -- this better be a test!")
64 + return reverse(b), nil
65 +}
66 +
67 +func (sk TestBogusPrivateKey) Bytes() ([]byte, error) {
68 + return []byte(sk), nil
69 +}
70 +
71 +// Equals checks whether this key is equal to another
72 +func (sk TestBogusPrivateKey) Equals(k ic.Key) bool {
73 + return ic.KeyEqual(sk, k)
74 +}
75 +
76 +func (sk TestBogusPrivateKey) Hash() ([]byte, error) {
77 + return ic.KeyHash(sk)
78 +}
79 +
80 +func RandTestBogusPrivateKey() (TestBogusPrivateKey, error) {
81 + r := u.NewTimeSeededRand()
82 + k := make([]byte, 5)
83 + if _, err := io.ReadFull(r, k); err != nil {
84 + return nil, err
85 + }
86 + return TestBogusPrivateKey(k), nil
87 +}
88 +
89 +func RandTestBogusPublicKey() (TestBogusPublicKey, error) {
90 + k, err := RandTestBogusPrivateKey()
91 + return TestBogusPublicKey(k), err
92 +}
93 +
94 +func RandTestBogusPrivateKeyOrFatal(t *testing.T) TestBogusPrivateKey {
95 + k, err := RandTestBogusPrivateKey()
96 + if err != nil {
97 + t.Fatal(err)
98 + }
99 + return k
100 +}
101 +
102 +func RandTestBogusPublicKeyOrFatal(t *testing.T) TestBogusPublicKey {
103 + k, err := RandTestBogusPublicKey()
104 + if err != nil {
105 + t.Fatal(err)
106 + }
107 + return k
108 +}
109 +
110 +func RandTestBogusIdentity() (testutil.Identity, error) {
111 + k, err := RandTestBogusPrivateKey()
112 + if err != nil {
113 + return nil, err
114 + }
115 +
116 + id, err := peer.IDFromPrivateKey(k)
117 + if err != nil {
118 + return nil, err
119 + }
120 +
121 + return &identity{
122 + k: k,
123 + id: id,
124 + a: testutil.RandLocalTCPAddress(),
125 + }, nil
126 +}
127 +
128 +func RandTestBogusIdentityOrFatal(t *testing.T) testutil.Identity {
129 + k, err := RandTestBogusIdentity()
130 + if err != nil {
131 + t.Fatal(err)
132 + }
133 + return k
134 +}
135 +
136 +// identity is a temporary shim to delay binding of PeerNetParams.
137 +type identity struct {
138 + k TestBogusPrivateKey
139 + id peer.ID
140 + a ma.Multiaddr
141 +}
142 +
143 +func (p *identity) ID() peer.ID {
144 + return p.id
145 +}
146 +
147 +func (p *identity) Address() ma.Multiaddr {
148 + return p.a
149 +}
150 +
151 +func (p *identity) PrivateKey() ic.PrivKey {
152 + return p.k
153 +}
154 +
155 +func (p *identity) PublicKey() ic.PubKey {
156 + return p.k.GetPublic()
157 +}
158 +
159 +func reverse(a []byte) []byte {
160 + b := make([]byte, len(a))
161 + for i := 0; i < len(a); i++ {
162 + b[i] = a[len(a)-1-i]
163 + }
164 + return b
165 +}