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
+}