2014-08-01 13:21:51 -07:00
|
|
|
package dht
|
|
|
|
|
2014-09-19 07:51:03 -07:00
|
|
|
import (
|
2014-09-19 14:31:10 -07:00
|
|
|
"bytes"
|
2014-09-19 07:51:03 -07:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
|
|
|
|
|
2014-10-21 15:10:58 -07:00
|
|
|
ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
|
2014-09-19 07:51:03 -07:00
|
|
|
ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
|
|
|
|
|
|
|
|
ci "github.com/jbenet/go-ipfs/crypto"
|
|
|
|
inet "github.com/jbenet/go-ipfs/net"
|
|
|
|
mux "github.com/jbenet/go-ipfs/net/mux"
|
|
|
|
netservice "github.com/jbenet/go-ipfs/net/service"
|
|
|
|
peer "github.com/jbenet/go-ipfs/peer"
|
|
|
|
u "github.com/jbenet/go-ipfs/util"
|
|
|
|
|
|
|
|
"fmt"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
2014-10-20 03:26:44 -07:00
|
|
|
func setupDHT(ctx context.Context, t *testing.T, p peer.Peer) *IpfsDHT {
|
2014-09-19 07:51:03 -07:00
|
|
|
peerstore := peer.NewPeerstore()
|
|
|
|
|
2014-10-25 04:44:20 -07:00
|
|
|
dhts := netservice.NewService(ctx, nil) // nil handler for now, need to patch it
|
2014-09-26 02:09:48 -07:00
|
|
|
net, err := inet.NewIpfsNetwork(ctx, p, peerstore, &mux.ProtocolMap{
|
2014-09-19 07:51:03 -07:00
|
|
|
mux.ProtocolID_Routing: dhts,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
d := NewDHT(ctx, p, peerstore, net, dhts, ds.NewMapDatastore())
|
2014-10-10 20:48:20 -07:00
|
|
|
dhts.SetHandler(d)
|
2014-09-19 07:51:03 -07:00
|
|
|
return d
|
|
|
|
}
|
|
|
|
|
2014-10-20 03:26:44 -07:00
|
|
|
func setupDHTS(ctx context.Context, n int, t *testing.T) ([]ma.Multiaddr, []peer.Peer, []*IpfsDHT) {
|
2014-10-06 04:13:39 -07:00
|
|
|
var addrs []ma.Multiaddr
|
2014-09-19 14:31:10 -07:00
|
|
|
for i := 0; i < n; i++ {
|
2014-09-19 07:51:03 -07:00
|
|
|
a, err := ma.NewMultiaddr(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", 5000+i))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
addrs = append(addrs, a)
|
|
|
|
}
|
|
|
|
|
2014-10-20 03:26:44 -07:00
|
|
|
var peers []peer.Peer
|
2014-09-19 14:31:10 -07:00
|
|
|
for i := 0; i < n; i++ {
|
2014-09-19 07:51:03 -07:00
|
|
|
p := makePeer(addrs[i])
|
|
|
|
peers = append(peers, p)
|
|
|
|
}
|
|
|
|
|
2014-09-19 14:31:10 -07:00
|
|
|
dhts := make([]*IpfsDHT, n)
|
|
|
|
for i := 0; i < n; i++ {
|
2014-10-18 04:19:12 -07:00
|
|
|
dhts[i] = setupDHT(ctx, t, peers[i])
|
2014-09-19 07:51:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
return addrs, peers, dhts
|
|
|
|
}
|
|
|
|
|
2014-10-20 03:26:44 -07:00
|
|
|
func makePeer(addr ma.Multiaddr) peer.Peer {
|
2014-09-19 07:51:03 -07:00
|
|
|
sk, pk, err := ci.GenerateKeyPair(ci.RSA, 512)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2014-10-20 03:26:44 -07:00
|
|
|
p, err := peer.WithKeyPair(sk, pk)
|
2014-09-19 07:51:03 -07:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2014-10-20 03:26:44 -07:00
|
|
|
p.AddAddress(addr)
|
2014-09-19 07:51:03 -07:00
|
|
|
return p
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestPing(t *testing.T) {
|
2014-09-19 18:11:05 -07:00
|
|
|
// t.Skip("skipping test to debug another")
|
2014-10-18 04:19:12 -07:00
|
|
|
ctx := context.Background()
|
2014-09-19 18:11:05 -07:00
|
|
|
u.Debug = false
|
2014-09-19 07:51:03 -07:00
|
|
|
addrA, err := ma.NewMultiaddr("/ip4/127.0.0.1/tcp/2222")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
addrB, err := ma.NewMultiaddr("/ip4/127.0.0.1/tcp/5678")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
peerA := makePeer(addrA)
|
|
|
|
peerB := makePeer(addrB)
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
dhtA := setupDHT(ctx, t, peerA)
|
|
|
|
dhtB := setupDHT(ctx, t, peerB)
|
2014-09-19 07:51:03 -07:00
|
|
|
|
2014-10-25 07:12:01 -07:00
|
|
|
defer dhtA.Close()
|
|
|
|
defer dhtB.Close()
|
2014-10-22 05:31:49 -07:00
|
|
|
defer dhtA.dialer.(inet.Network).Close()
|
|
|
|
defer dhtB.dialer.(inet.Network).Close()
|
2014-09-19 07:51:03 -07:00
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhtA.Connect(ctx, peerB)
|
2014-09-19 07:51:03 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
//Test that we can ping the node
|
2014-10-19 02:05:29 -07:00
|
|
|
ctxT, _ := context.WithTimeout(ctx, 100*time.Millisecond)
|
2014-10-18 04:19:12 -07:00
|
|
|
err = dhtA.Ping(ctxT, peerB)
|
2014-09-19 07:51:03 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2014-09-22 22:34:30 -07:00
|
|
|
|
2014-10-19 02:05:29 -07:00
|
|
|
ctxT, _ = context.WithTimeout(ctx, 100*time.Millisecond)
|
2014-10-18 04:19:12 -07:00
|
|
|
err = dhtB.Ping(ctxT, peerA)
|
2014-09-22 22:34:30 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2014-09-19 07:51:03 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestValueGetSet(t *testing.T) {
|
2014-09-19 18:11:05 -07:00
|
|
|
// t.Skip("skipping test to debug another")
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctx := context.Background()
|
2014-09-19 18:11:05 -07:00
|
|
|
u.Debug = false
|
2014-10-19 06:29:18 -07:00
|
|
|
addrA, err := ma.NewMultiaddr("/ip4/127.0.0.1/tcp/11235")
|
2014-09-19 07:51:03 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2014-10-19 06:29:18 -07:00
|
|
|
addrB, err := ma.NewMultiaddr("/ip4/127.0.0.1/tcp/15679")
|
2014-09-19 07:51:03 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
peerA := makePeer(addrA)
|
|
|
|
peerB := makePeer(addrB)
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
dhtA := setupDHT(ctx, t, peerA)
|
|
|
|
dhtB := setupDHT(ctx, t, peerB)
|
2014-09-19 07:51:03 -07:00
|
|
|
|
2014-10-25 07:12:01 -07:00
|
|
|
defer dhtA.Close()
|
|
|
|
defer dhtB.Close()
|
2014-10-22 05:31:49 -07:00
|
|
|
defer dhtA.dialer.(inet.Network).Close()
|
|
|
|
defer dhtB.dialer.(inet.Network).Close()
|
2014-09-19 07:51:03 -07:00
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhtA.Connect(ctx, peerB)
|
2014-09-19 07:51:03 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctxT, _ := context.WithTimeout(ctx, time.Second)
|
2014-09-21 18:04:43 -07:00
|
|
|
dhtA.PutValue(ctxT, "hello", []byte("world"))
|
2014-09-19 07:51:03 -07:00
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctxT, _ = context.WithTimeout(ctx, time.Second*2)
|
2014-09-21 18:04:43 -07:00
|
|
|
val, err := dhtA.GetValue(ctxT, "hello")
|
2014-09-19 07:51:03 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(val) != "world" {
|
|
|
|
t.Fatalf("Expected 'world' got '%s'", string(val))
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctxT, _ = context.WithTimeout(ctx, time.Second*2)
|
2014-09-22 22:34:30 -07:00
|
|
|
val, err = dhtB.GetValue(ctxT, "hello")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(val) != "world" {
|
|
|
|
t.Fatalf("Expected 'world' got '%s'", string(val))
|
|
|
|
}
|
2014-09-19 07:51:03 -07:00
|
|
|
}
|
|
|
|
|
2014-09-19 18:11:05 -07:00
|
|
|
func TestProvides(t *testing.T) {
|
|
|
|
// t.Skip("skipping test to debug another")
|
2014-10-18 04:19:12 -07:00
|
|
|
ctx := context.Background()
|
2014-09-19 18:11:05 -07:00
|
|
|
|
|
|
|
u.Debug = false
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, peers, dhts := setupDHTS(ctx, 4, t)
|
2014-09-19 18:11:05 -07:00
|
|
|
defer func() {
|
|
|
|
for i := 0; i < 4; i++ {
|
2014-10-25 07:12:01 -07:00
|
|
|
dhts[i].Close()
|
2014-10-22 05:31:49 -07:00
|
|
|
defer dhts[i].dialer.(inet.Network).Close()
|
2014-09-19 18:11:05 -07:00
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err := dhts[0].Connect(ctx, peers[1])
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhts[1].Connect(ctx, peers[2])
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhts[1].Connect(ctx, peers[3])
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
err = dhts[3].putLocal(u.Key("hello"), []byte("world"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
bits, err := dhts[3].getLocal(u.Key("hello"))
|
|
|
|
if err != nil && bytes.Equal(bits, []byte("world")) {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
err = dhts[3].Provide(ctx, u.Key("hello"))
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
time.Sleep(time.Millisecond * 60)
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctxT, _ := context.WithTimeout(ctx, time.Second)
|
2014-10-11 10:43:54 -07:00
|
|
|
provchan := dhts[0].FindProvidersAsync(ctxT, u.Key("hello"), 1)
|
2014-09-19 18:11:05 -07:00
|
|
|
|
2014-10-11 10:43:54 -07:00
|
|
|
after := time.After(time.Second)
|
|
|
|
select {
|
|
|
|
case prov := <-provchan:
|
|
|
|
if prov == nil {
|
|
|
|
t.Fatal("Got back nil provider")
|
|
|
|
}
|
|
|
|
case <-after:
|
|
|
|
t.Fatal("Did not get a provider back.")
|
2014-09-19 18:11:05 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-09-21 18:04:43 -07:00
|
|
|
func TestProvidesAsync(t *testing.T) {
|
|
|
|
// t.Skip("skipping test to debug another")
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctx := context.Background()
|
2014-09-21 18:04:43 -07:00
|
|
|
u.Debug = false
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, peers, dhts := setupDHTS(ctx, 4, t)
|
2014-09-21 18:04:43 -07:00
|
|
|
defer func() {
|
|
|
|
for i := 0; i < 4; i++ {
|
2014-10-25 07:12:01 -07:00
|
|
|
dhts[i].Close()
|
2014-10-22 05:31:49 -07:00
|
|
|
defer dhts[i].dialer.(inet.Network).Close()
|
2014-09-21 18:04:43 -07:00
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err := dhts[0].Connect(ctx, peers[1])
|
2014-09-21 18:04:43 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhts[1].Connect(ctx, peers[2])
|
2014-09-21 18:04:43 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhts[1].Connect(ctx, peers[3])
|
2014-09-21 18:04:43 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
err = dhts[3].putLocal(u.Key("hello"), []byte("world"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
bits, err := dhts[3].getLocal(u.Key("hello"))
|
|
|
|
if err != nil && bytes.Equal(bits, []byte("world")) {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
err = dhts[3].Provide(ctx, u.Key("hello"))
|
2014-09-21 18:04:43 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
time.Sleep(time.Millisecond * 60)
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctxT, _ := context.WithTimeout(ctx, time.Millisecond*300)
|
|
|
|
provs := dhts[0].FindProvidersAsync(ctxT, u.Key("hello"), 5)
|
2014-09-21 18:04:43 -07:00
|
|
|
select {
|
2014-10-24 18:32:28 -07:00
|
|
|
case p, ok := <-provs:
|
|
|
|
if !ok {
|
|
|
|
t.Fatal("Provider channel was closed...")
|
|
|
|
}
|
|
|
|
if p == nil {
|
|
|
|
t.Fatal("Got back nil provider!")
|
|
|
|
}
|
2014-10-20 03:26:44 -07:00
|
|
|
if !p.ID().Equal(dhts[3].self.ID()) {
|
2014-10-07 21:29:03 -07:00
|
|
|
t.Fatalf("got a provider, but not the right one. %s", p)
|
2014-09-21 18:04:43 -07:00
|
|
|
}
|
2014-10-18 04:19:12 -07:00
|
|
|
case <-ctxT.Done():
|
2014-09-21 18:04:43 -07:00
|
|
|
t.Fatal("Didnt get back providers")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-09-19 18:11:05 -07:00
|
|
|
func TestLayeredGet(t *testing.T) {
|
|
|
|
// t.Skip("skipping test to debug another")
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctx := context.Background()
|
2014-09-19 18:11:05 -07:00
|
|
|
u.Debug = false
|
2014-10-18 04:19:12 -07:00
|
|
|
_, peers, dhts := setupDHTS(ctx, 4, t)
|
2014-09-19 18:11:05 -07:00
|
|
|
defer func() {
|
|
|
|
for i := 0; i < 4; i++ {
|
2014-10-25 07:12:01 -07:00
|
|
|
dhts[i].Close()
|
2014-10-22 05:31:49 -07:00
|
|
|
defer dhts[i].dialer.(inet.Network).Close()
|
2014-09-19 18:11:05 -07:00
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err := dhts[0].Connect(ctx, peers[1])
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to connect: %s", err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhts[1].Connect(ctx, peers[2])
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhts[1].Connect(ctx, peers[3])
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
err = dhts[3].putLocal(u.Key("hello"), []byte("world"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
err = dhts[3].Provide(ctx, u.Key("hello"))
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
time.Sleep(time.Millisecond * 60)
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctxT, _ := context.WithTimeout(ctx, time.Second)
|
2014-09-21 18:04:43 -07:00
|
|
|
val, err := dhts[0].GetValue(ctxT, u.Key("hello"))
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(val) != "world" {
|
|
|
|
t.Fatal("Got incorrect value.")
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFindPeer(t *testing.T) {
|
|
|
|
// t.Skip("skipping test to debug another")
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctx := context.Background()
|
2014-09-19 18:11:05 -07:00
|
|
|
u.Debug = false
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, peers, dhts := setupDHTS(ctx, 4, t)
|
2014-09-19 18:11:05 -07:00
|
|
|
defer func() {
|
|
|
|
for i := 0; i < 4; i++ {
|
2014-10-25 07:12:01 -07:00
|
|
|
dhts[i].Close()
|
2014-10-22 05:31:49 -07:00
|
|
|
dhts[i].dialer.(inet.Network).Close()
|
2014-09-19 18:11:05 -07:00
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err := dhts[0].Connect(ctx, peers[1])
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhts[1].Connect(ctx, peers[2])
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
_, err = dhts[1].Connect(ctx, peers[3])
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-18 04:19:12 -07:00
|
|
|
ctxT, _ := context.WithTimeout(ctx, time.Second)
|
2014-10-20 03:26:44 -07:00
|
|
|
p, err := dhts[0].FindPeer(ctxT, peers[2].ID())
|
2014-09-19 18:11:05 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if p == nil {
|
|
|
|
t.Fatal("Failed to find peer.")
|
|
|
|
}
|
|
|
|
|
2014-10-20 03:26:44 -07:00
|
|
|
if !p.ID().Equal(peers[2].ID()) {
|
2014-09-19 18:11:05 -07:00
|
|
|
t.Fatal("Didnt find expected peer.")
|
|
|
|
}
|
|
|
|
}
|
2014-10-14 13:40:55 -07:00
|
|
|
|
|
|
|
func TestConnectCollision(t *testing.T) {
|
|
|
|
// t.Skip("skipping test to debug another")
|
|
|
|
|
2014-10-19 06:29:18 -07:00
|
|
|
runTimes := 10
|
2014-10-14 13:40:55 -07:00
|
|
|
|
2014-10-19 02:05:29 -07:00
|
|
|
for rtime := 0; rtime < runTimes; rtime++ {
|
|
|
|
log.Notice("Running Time: ", rtime)
|
2014-10-14 13:40:55 -07:00
|
|
|
|
2014-10-19 02:05:29 -07:00
|
|
|
ctx := context.Background()
|
|
|
|
u.Debug = false
|
2014-10-19 06:29:18 -07:00
|
|
|
addrA, err := ma.NewMultiaddr("/ip4/127.0.0.1/tcp/11235")
|
2014-10-14 13:40:55 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
2014-10-19 06:29:18 -07:00
|
|
|
addrB, err := ma.NewMultiaddr("/ip4/127.0.0.1/tcp/15679")
|
2014-10-14 13:40:55 -07:00
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-10-19 02:05:29 -07:00
|
|
|
peerA := makePeer(addrA)
|
|
|
|
peerB := makePeer(addrB)
|
|
|
|
|
|
|
|
dhtA := setupDHT(ctx, t, peerA)
|
|
|
|
dhtB := setupDHT(ctx, t, peerB)
|
|
|
|
|
|
|
|
done := make(chan struct{})
|
|
|
|
go func() {
|
|
|
|
_, err = dhtA.Connect(ctx, peerB)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
done <- struct{}{}
|
|
|
|
}()
|
|
|
|
go func() {
|
|
|
|
_, err = dhtB.Connect(ctx, peerA)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
done <- struct{}{}
|
|
|
|
}()
|
|
|
|
|
|
|
|
timeout := time.After(time.Second)
|
|
|
|
select {
|
|
|
|
case <-done:
|
|
|
|
case <-timeout:
|
|
|
|
t.Fatal("Timeout received!")
|
|
|
|
}
|
|
|
|
select {
|
|
|
|
case <-done:
|
|
|
|
case <-timeout:
|
|
|
|
t.Fatal("Timeout received!")
|
|
|
|
}
|
|
|
|
|
2014-10-25 07:12:01 -07:00
|
|
|
dhtA.Close()
|
|
|
|
dhtB.Close()
|
2014-10-22 05:31:49 -07:00
|
|
|
dhtA.dialer.(inet.Network).Close()
|
|
|
|
dhtB.dialer.(inet.Network).Close()
|
2014-10-19 06:29:18 -07:00
|
|
|
|
|
|
|
<-time.After(200 * time.Millisecond)
|
2014-10-14 17:46:11 -07:00
|
|
|
}
|
2014-10-14 13:40:55 -07:00
|
|
|
}
|