go-libp2p-kad-dht/handlers_test.go

117 lines
2.3 KiB
Go
Raw Normal View History

2018-01-11 10:01:51 -08:00
package dht
import (
"bytes"
2019-06-29 10:56:38 +02:00
"context"
"fmt"
"math/rand"
2018-01-11 10:01:51 -08:00
"testing"
2019-06-29 10:56:38 +02:00
"time"
2018-01-11 10:01:51 -08:00
proto "github.com/gogo/protobuf/proto"
2019-06-29 10:56:38 +02:00
"github.com/libp2p/go-libp2p"
crypto "github.com/libp2p/go-libp2p-core/crypto"
peer "github.com/libp2p/go-libp2p-core/peer"
pb "github.com/libp2p/go-libp2p-kad-dht/pb"
2018-01-11 10:01:51 -08:00
recpb "github.com/libp2p/go-libp2p-record/pb"
2019-06-29 10:56:38 +02:00
ma "github.com/multiformats/go-multiaddr"
2018-01-11 10:01:51 -08:00
)
func TestCleanRecordSigned(t *testing.T) {
actual := new(recpb.Record)
actual.TimeReceived = "time"
2018-01-11 10:01:51 -08:00
actual.Value = []byte("value")
actual.Key = []byte("key")
2018-01-11 10:01:51 -08:00
cleanRecord(actual)
actualBytes, err := proto.Marshal(actual)
if err != nil {
t.Fatal(err)
}
expected := new(recpb.Record)
expected.Value = []byte("value")
expected.Key = []byte("key")
2018-01-11 10:01:51 -08:00
expectedBytes, err := proto.Marshal(expected)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(actualBytes, expectedBytes) {
t.Error("failed to clean record")
}
}
func TestCleanRecord(t *testing.T) {
actual := new(recpb.Record)
actual.TimeReceived = "time"
actual.Key = []byte("key")
2018-01-11 10:01:51 -08:00
actual.Value = []byte("value")
cleanRecord(actual)
actualBytes, err := proto.Marshal(actual)
if err != nil {
t.Fatal(err)
}
expected := new(recpb.Record)
expected.Key = []byte("key")
2018-01-11 10:01:51 -08:00
expected.Value = []byte("value")
expectedBytes, err := proto.Marshal(expected)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(actualBytes, expectedBytes) {
t.Error("failed to clean record")
}
}
2019-06-29 10:56:38 +02:00
func BenchmarkHandleFindPeer(b *testing.B) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
h, err := libp2p.New(ctx)
if err != nil {
b.Fatal(err)
}
d, err := New(ctx, h)
if err != nil {
b.Fatal(err)
}
rng := rand.New(rand.NewSource(150))
var peers []peer.ID
for i := 0; i < 1000; i++ {
_, pubk, _ := crypto.GenerateEd25519Key(rng)
id, err := peer.IDFromPublicKey(pubk)
if err != nil {
panic(err)
}
d.routingTable.Update(id)
peers = append(peers, id)
a, err := ma.NewMultiaddr(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", 2000+i))
if err != nil {
panic(err)
}
d.host.Peerstore().AddAddr(id, a, time.Minute*50)
}
var reqs []*pb.Message
for i := 0; i < b.N; i++ {
reqs = append(reqs, &pb.Message{
Key: []byte("asdasdasd"),
})
}
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
d.handleFindPeer(ctx, peers[0], reqs[i])
}
}