mirror of
https://github.com/netbirdio/netbird.git
synced 2025-03-01 08:21:16 +01:00
Add data transfer test
This commit is contained in:
parent
e10bc658f5
commit
8c7215a9f5
@ -2,8 +2,11 @@ package client
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/rand"
|
||||||
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -108,6 +111,122 @@ func TestClient(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDataTransfer(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
testData, err := seedRandomData()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to seed random data: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
srv := server.NewServer(serverURL, false, av)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
listenCfg := server.ListenerConfig{Address: serverListenAddr}
|
||||||
|
err := srv.Listen(listenCfg)
|
||||||
|
if err != nil {
|
||||||
|
errChan <- err
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
err := srv.Close()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to close server: %s", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
// wait for server to start
|
||||||
|
if err := waitForServerToStart(errChan); err != nil {
|
||||||
|
t.Fatalf("failed to start server: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
peerPairs := 50
|
||||||
|
clientsSender := make([]*Client, peerPairs)
|
||||||
|
for i := 0; i < cap(clientsSender); i++ {
|
||||||
|
c := NewClient(ctx, serverURL, hmacTokenStore, "sender-"+fmt.Sprint(i))
|
||||||
|
err := c.Connect()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to connect to server: %s", err)
|
||||||
|
}
|
||||||
|
clientsSender[i] = c
|
||||||
|
}
|
||||||
|
|
||||||
|
clientsReceiver := make([]*Client, peerPairs)
|
||||||
|
for i := 0; i < cap(clientsSender); i++ {
|
||||||
|
c := NewClient(ctx, serverURL, hmacTokenStore, "receiver-"+fmt.Sprint(i))
|
||||||
|
err := c.Connect()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to connect to server: %s", err)
|
||||||
|
}
|
||||||
|
clientsReceiver[i] = c
|
||||||
|
}
|
||||||
|
|
||||||
|
connsSender := make([]net.Conn, 0, peerPairs)
|
||||||
|
connsReceiver := make([]net.Conn, 0, peerPairs)
|
||||||
|
for i := 0; i < len(clientsSender); i++ {
|
||||||
|
conn, err := clientsSender[i].OpenConn("receiver-" + fmt.Sprint(i))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to bind channel: %s", err)
|
||||||
|
}
|
||||||
|
connsSender = append(connsSender, conn)
|
||||||
|
|
||||||
|
conn, err = clientsReceiver[i].OpenConn("sender-" + fmt.Sprint(i))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to bind channel: %s", err)
|
||||||
|
}
|
||||||
|
connsReceiver = append(connsReceiver, conn)
|
||||||
|
}
|
||||||
|
|
||||||
|
wg := sync.WaitGroup{}
|
||||||
|
for i := 0; i < len(connsSender); i++ {
|
||||||
|
wg.Add(2)
|
||||||
|
go func(i int) {
|
||||||
|
pieceSize := 1024
|
||||||
|
testDataLen := len(testData)
|
||||||
|
|
||||||
|
for j := 0; j < testDataLen; j += pieceSize {
|
||||||
|
end := j + pieceSize
|
||||||
|
if end > testDataLen {
|
||||||
|
end = testDataLen
|
||||||
|
}
|
||||||
|
_, err := connsSender[i].Write(testData[j:end])
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to write to channel: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wg.Done()
|
||||||
|
}(i)
|
||||||
|
|
||||||
|
go func(i int) {
|
||||||
|
for receivedSize := 0; receivedSize < len(testData); {
|
||||||
|
buf := make([]byte, 8192)
|
||||||
|
n, err := connsReceiver[i].Read(buf)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to read from channel: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
receivedSize += n
|
||||||
|
}
|
||||||
|
wg.Done()
|
||||||
|
}(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
wg.Wait()
|
||||||
|
|
||||||
|
for i := 0; i < len(connsSender); i++ {
|
||||||
|
err := connsSender[i].Close()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to close connection: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = connsReceiver[i].Close()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to close connection: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRegistration(t *testing.T) {
|
func TestRegistration(t *testing.T) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
srvCfg := server.ListenerConfig{Address: serverListenAddr}
|
srvCfg := server.ListenerConfig{Address: serverListenAddr}
|
||||||
@ -601,3 +720,12 @@ func waitForServerToStart(errChan chan error) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func seedRandomData() ([]byte, error) {
|
||||||
|
token := make([]byte, 1024*1024*10)
|
||||||
|
_, err := rand.Read(token)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return token, nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user