mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-16 05:05:17 +00:00
142 lines
2.8 KiB
Go
142 lines
2.8 KiB
Go
|
package gostream
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"context"
|
||
|
"io"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/libp2p/go-libp2p"
|
||
|
"github.com/libp2p/go-libp2p/core/host"
|
||
|
"github.com/libp2p/go-libp2p/core/peerstore"
|
||
|
"github.com/libp2p/go-libp2p/core/protocol"
|
||
|
"github.com/multiformats/go-multiaddr"
|
||
|
)
|
||
|
|
||
|
// newHost illustrates how to build a libp2p host with secio using
|
||
|
// a randomly generated key-pair
|
||
|
func newHost(t *testing.T, listen multiaddr.Multiaddr) host.Host {
|
||
|
h, err := libp2p.New(
|
||
|
libp2p.ListenAddrs(listen),
|
||
|
)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
return h
|
||
|
}
|
||
|
|
||
|
func TestServerClient(t *testing.T) {
|
||
|
m1, _ := multiaddr.NewMultiaddr("/ip4/127.0.0.1/tcp/10000")
|
||
|
m2, _ := multiaddr.NewMultiaddr("/ip4/127.0.0.1/tcp/10001")
|
||
|
srvHost := newHost(t, m1)
|
||
|
clientHost := newHost(t, m2)
|
||
|
defer srvHost.Close()
|
||
|
defer clientHost.Close()
|
||
|
|
||
|
srvHost.Peerstore().AddAddrs(clientHost.ID(), clientHost.Addrs(), peerstore.PermanentAddrTTL)
|
||
|
clientHost.Peerstore().AddAddrs(srvHost.ID(), srvHost.Addrs(), peerstore.PermanentAddrTTL)
|
||
|
|
||
|
var tag protocol.ID = "/testitytest"
|
||
|
ctx, cancel := context.WithCancel(context.Background())
|
||
|
defer cancel()
|
||
|
|
||
|
done := make(chan struct{})
|
||
|
go func() {
|
||
|
defer close(done)
|
||
|
listener, err := Listen(srvHost, tag)
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
return
|
||
|
}
|
||
|
defer listener.Close()
|
||
|
|
||
|
if listener.Addr().String() != srvHost.ID().String() {
|
||
|
t.Error("bad listener address")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
servConn, err := listener.Accept()
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
return
|
||
|
}
|
||
|
defer servConn.Close()
|
||
|
|
||
|
reader := bufio.NewReader(servConn)
|
||
|
for {
|
||
|
msg, err := reader.ReadString('\n')
|
||
|
if err == io.EOF {
|
||
|
break
|
||
|
}
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
return
|
||
|
}
|
||
|
if msg != "is libp2p awesome?\n" {
|
||
|
t.Errorf("Bad incoming message: %s", msg)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, err = servConn.Write([]byte("yes it is\n"))
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
clientConn, err := Dial(ctx, clientHost, srvHost.ID(), tag)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
if clientConn.LocalAddr().String() != clientHost.ID().String() {
|
||
|
t.Fatal("Bad LocalAddr")
|
||
|
}
|
||
|
|
||
|
if clientConn.RemoteAddr().String() != srvHost.ID().String() {
|
||
|
t.Fatal("Bad RemoteAddr")
|
||
|
}
|
||
|
|
||
|
if clientConn.LocalAddr().Network() != Network {
|
||
|
t.Fatal("Bad Network()")
|
||
|
}
|
||
|
|
||
|
err = clientConn.SetDeadline(time.Now().Add(time.Second))
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
err = clientConn.SetReadDeadline(time.Now().Add(time.Second))
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
err = clientConn.SetWriteDeadline(time.Now().Add(time.Second))
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
_, err = clientConn.Write([]byte("is libp2p awesome?\n"))
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
reader := bufio.NewReader(clientConn)
|
||
|
resp, err := reader.ReadString('\n')
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
if resp != "yes it is\n" {
|
||
|
t.Errorf("Bad response: %s", resp)
|
||
|
}
|
||
|
|
||
|
err = clientConn.Close()
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
<-done
|
||
|
}
|