mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-18 00:06:38 +00:00
92 lines
2.4 KiB
Go
92 lines
2.4 KiB
Go
package loadtest
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"go.opentelemetry.io/otel"
|
|
"google.golang.org/grpc"
|
|
|
|
"github.com/netbirdio/netbird/shared/signal/proto"
|
|
"github.com/netbirdio/netbird/signal/server"
|
|
)
|
|
|
|
func TestSignalLoadTest_SinglePair(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
grpcServer, serverAddr := startTestSignalServer(t, ctx)
|
|
defer grpcServer.Stop()
|
|
|
|
sender, err := NewClient(serverAddr, "sender-peer-id")
|
|
require.NoError(t, err)
|
|
defer sender.Close()
|
|
|
|
receiver, err := NewClient(serverAddr, "receiver-peer-id")
|
|
require.NoError(t, err)
|
|
defer receiver.Close()
|
|
|
|
err = sender.Connect()
|
|
require.NoError(t, err, "Sender should connect successfully")
|
|
|
|
err = receiver.Connect()
|
|
require.NoError(t, err, "Receiver should connect successfully")
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
testMessage := []byte("test message payload")
|
|
|
|
t.Log("Sending message from sender to receiver")
|
|
err = sender.SendMessage("receiver-peer-id", testMessage)
|
|
require.NoError(t, err, "Sender should send message successfully")
|
|
|
|
t.Log("Waiting for receiver to receive message")
|
|
|
|
receiveDone := make(chan struct{})
|
|
var msg *proto.EncryptedMessage
|
|
var receiveErr error
|
|
|
|
go func() {
|
|
msg, receiveErr = receiver.ReceiveMessage()
|
|
close(receiveDone)
|
|
}()
|
|
|
|
select {
|
|
case <-receiveDone:
|
|
require.NoError(t, receiveErr, "Receiver should receive message")
|
|
require.NotNil(t, msg, "Received message should not be nil")
|
|
require.Greater(t, len(msg.Body), 0, "Encrypted message body size should be greater than 0")
|
|
require.Equal(t, "sender-peer-id", msg.Key)
|
|
require.Equal(t, "receiver-peer-id", msg.RemoteKey)
|
|
t.Log("Message received successfully")
|
|
case <-time.After(5 * time.Second):
|
|
t.Fatal("Timeout waiting for message")
|
|
}
|
|
}
|
|
|
|
func startTestSignalServer(t *testing.T, ctx context.Context) (*grpc.Server, string) {
|
|
listener, err := net.Listen("tcp", "127.0.0.1:0")
|
|
require.NoError(t, err)
|
|
|
|
grpcServer := grpc.NewServer()
|
|
|
|
signalServer, err := server.NewServer(ctx, otel.Meter("test"))
|
|
require.NoError(t, err)
|
|
|
|
proto.RegisterSignalExchangeServer(grpcServer, signalServer)
|
|
|
|
go func() {
|
|
if err := grpcServer.Serve(listener); err != nil {
|
|
t.Logf("Server stopped: %v", err)
|
|
}
|
|
}()
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
return grpcServer, fmt.Sprintf("http://%s", listener.Addr().String())
|
|
}
|