mirror of
https://github.com/netbirdio/netbird.git
synced 2025-06-01 15:45:54 +02:00
98 lines
2.0 KiB
Go
98 lines
2.0 KiB
Go
package signal_test
|
|
|
|
import (
|
|
"context"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
log "github.com/sirupsen/logrus"
|
|
"github.com/wiretrustee/wiretrustee/signal"
|
|
sigProto "github.com/wiretrustee/wiretrustee/signal/proto"
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
"google.golang.org/grpc"
|
|
"net"
|
|
)
|
|
|
|
var _ = Describe("Client", func() {
|
|
|
|
var (
|
|
addr string
|
|
listener net.Listener
|
|
server *grpc.Server
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
server, listener = startSignal()
|
|
addr = listener.Addr().String()
|
|
|
|
})
|
|
|
|
AfterEach(func() {
|
|
server.Stop()
|
|
listener.Close()
|
|
})
|
|
|
|
Describe("Connecting to the Signal stream channel", func() {
|
|
Context("with a signal client", func() {
|
|
It("should be successful", func() {
|
|
|
|
key, _ := wgtypes.GenerateKey()
|
|
client := createSignalClient(addr, key)
|
|
client.Receive(func(msg *sigProto.Message) error {
|
|
return nil
|
|
})
|
|
client.WaitConnected()
|
|
|
|
Expect(client).NotTo(BeNil())
|
|
})
|
|
})
|
|
|
|
Context("with a raw client and no ID header", func() {
|
|
It("should fail", func() {
|
|
|
|
client := createRawSignalClient(addr)
|
|
stream, err := client.ConnectStream(context.Background())
|
|
|
|
Expect(stream).To(BeNil())
|
|
Expect(err).NotTo(BeNil())
|
|
})
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
func createSignalClient(addr string, key wgtypes.Key) *signal.Client {
|
|
client, err := signal.NewClient(context.Background(), addr, key)
|
|
if err != nil {
|
|
Fail("failed creating signal client")
|
|
}
|
|
return client
|
|
}
|
|
|
|
func createRawSignalClient(addr string) sigProto.SignalExchangeClient {
|
|
ctx := context.Background()
|
|
conn, err := grpc.DialContext(ctx, addr, grpc.WithInsecure())
|
|
if err != nil {
|
|
Fail("failed creating raw signal client")
|
|
}
|
|
defer conn.Close()
|
|
|
|
return sigProto.NewSignalExchangeClient(conn)
|
|
}
|
|
|
|
func startSignal() (*grpc.Server, net.Listener) {
|
|
lis, err := net.Listen("tcp", ":0")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
s := grpc.NewServer()
|
|
sigProto.RegisterSignalExchangeServer(s, signal.NewServer())
|
|
go func() {
|
|
if err := s.Serve(lis); err != nil {
|
|
log.Fatalf("failed to serve: %v", err)
|
|
}
|
|
}()
|
|
|
|
return s, lis
|
|
}
|