mirror of
https://github.com/fluencelabs/go-libp2p-kad-dht
synced 2025-04-25 14:52:14 +00:00
add a unit test for provides functionality
This commit is contained in:
parent
7399682a29
commit
5bd8258ea1
14
dht.go
14
dht.go
@ -92,6 +92,8 @@ func (dht *IpfsDHT) Start() {
|
|||||||
// Connect to a new peer at the given address
|
// Connect to a new peer at the given address
|
||||||
// TODO: move this into swarm
|
// TODO: move this into swarm
|
||||||
func (dht *IpfsDHT) Connect(addr *ma.Multiaddr) (*peer.Peer, error) {
|
func (dht *IpfsDHT) Connect(addr *ma.Multiaddr) (*peer.Peer, error) {
|
||||||
|
maddrstr,_ := addr.String()
|
||||||
|
u.DOut("Connect to new peer: %s", maddrstr)
|
||||||
if addr == nil {
|
if addr == nil {
|
||||||
panic("addr was nil!")
|
panic("addr was nil!")
|
||||||
}
|
}
|
||||||
@ -484,3 +486,15 @@ out:
|
|||||||
mes := swarm.NewMessage(p, resp.ToProtobuf())
|
mes := swarm.NewMessage(p, resp.ToProtobuf())
|
||||||
dht.network.Chan.Outgoing <-mes
|
dht.network.Chan.Outgoing <-mes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dht *IpfsDHT) GetLocal(key u.Key) ([]byte, error) {
|
||||||
|
v,err := dht.datastore.Get(ds.NewKey(string(key)))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return v.([]byte), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dht *IpfsDHT) PutLocal(key u.Key, value []byte) error {
|
||||||
|
return dht.datastore.Put(ds.NewKey(string(key)), value)
|
||||||
|
}
|
||||||
|
70
dht_test.go
70
dht_test.go
@ -7,6 +7,7 @@ import (
|
|||||||
u "github.com/jbenet/go-ipfs/util"
|
u "github.com/jbenet/go-ipfs/util"
|
||||||
|
|
||||||
"time"
|
"time"
|
||||||
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestPing(t *testing.T) {
|
func TestPing(t *testing.T) {
|
||||||
@ -107,3 +108,72 @@ func TestValueGetSet(t *testing.T) {
|
|||||||
t.Fatalf("Expected 'world' got %s", string(val))
|
t.Fatalf("Expected 'world' got %s", string(val))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProvides(t *testing.T) {
|
||||||
|
u.Debug = false
|
||||||
|
var addrs []*ma.Multiaddr
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var peers []*peer.Peer
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
p := new(peer.Peer)
|
||||||
|
p.AddAddress(addrs[i])
|
||||||
|
p.ID = peer.ID([]byte(fmt.Sprintf("peer_%d", i)))
|
||||||
|
peers = append(peers, p)
|
||||||
|
}
|
||||||
|
|
||||||
|
var dhts []*IpfsDHT
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
d,err := NewDHT(peers[i])
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
dhts = append(dhts, d)
|
||||||
|
d.Start()
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := dhts[0].Connect(addrs[1])
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = dhts[1].Connect(addrs[2])
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = dhts[1].Connect(addrs[3])
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dhts[3].PutLocal(u.Key("hello"), []byte("world"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dhts[3].Provide(u.Key("hello"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(time.Millisecond * 60)
|
||||||
|
|
||||||
|
provs,err := dhts[0].FindProviders(u.Key("hello"), time.Second)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(provs) != 1 {
|
||||||
|
t.Fatal("Didnt get back providers")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user