2021-02-09 11:53:33 +00:00
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
|
2021-01-25 12:23:03 +00:00
|
|
|
package network_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"crypto/rand"
|
|
|
|
"net"
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/go-kit/kit/log"
|
2021-02-04 15:54:30 +00:00
|
|
|
"github.com/ssb-ngi-pointer/gossb-rooms/internal/maybemod/keys"
|
|
|
|
"github.com/ssb-ngi-pointer/gossb-rooms/internal/network"
|
2021-01-25 12:23:03 +00:00
|
|
|
|
|
|
|
"go.cryptoscope.co/muxrpc/v2"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestIsServer(t *testing.T) {
|
|
|
|
r := require.New(t)
|
|
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
var appkey = make([]byte, 32)
|
|
|
|
rand.Read(appkey)
|
|
|
|
|
|
|
|
logger := log.NewLogfmtLogger(os.Stderr)
|
|
|
|
|
|
|
|
kpClient, err := keys.NewKeyPair(nil)
|
|
|
|
r.NoError(err)
|
|
|
|
|
|
|
|
kpServ, err := keys.NewKeyPair(nil)
|
|
|
|
r.NoError(err)
|
|
|
|
|
|
|
|
client, err := network.New(network.Options{
|
|
|
|
Logger: logger,
|
|
|
|
AppKey: appkey,
|
|
|
|
KeyPair: kpClient,
|
|
|
|
|
|
|
|
MakeHandler: makeServerHandler(t, true),
|
|
|
|
})
|
|
|
|
r.NoError(err)
|
|
|
|
|
|
|
|
server, err := network.New(network.Options{
|
|
|
|
Logger: logger,
|
|
|
|
AppKey: appkey,
|
|
|
|
KeyPair: kpServ,
|
|
|
|
|
|
|
|
ListenAddr: &net.TCPAddr{Port: 0}, // any random port
|
|
|
|
|
|
|
|
MakeHandler: makeServerHandler(t, false),
|
|
|
|
})
|
|
|
|
r.NoError(err)
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
err = server.Serve(ctx)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
|
|
|
err = client.Connect(ctx, server.GetListenAddr())
|
|
|
|
r.NoError(err)
|
|
|
|
|
|
|
|
client.Close()
|
|
|
|
server.Close()
|
|
|
|
}
|
|
|
|
|
|
|
|
type testHandler struct {
|
|
|
|
t *testing.T
|
|
|
|
wantServer bool
|
|
|
|
}
|
|
|
|
|
|
|
|
func (th testHandler) HandleConnect(ctx context.Context, e muxrpc.Endpoint) {
|
|
|
|
require.Equal(th.t, th.wantServer, muxrpc.IsServer(e), "server assertion failed")
|
|
|
|
}
|
|
|
|
|
2021-01-27 10:46:22 +00:00
|
|
|
func (th testHandler) HandleCall(ctx context.Context, req *muxrpc.Request) {}
|
2021-01-25 12:23:03 +00:00
|
|
|
|
|
|
|
func makeServerHandler(t *testing.T, wantServer bool) func(net.Conn) (muxrpc.Handler, error) {
|
|
|
|
return func(_ net.Conn) (muxrpc.Handler, error) {
|
|
|
|
return testHandler{t, wantServer}, nil
|
|
|
|
}
|
|
|
|
}
|