radiance/pkg/gossip/ping_test.go

54 lines
1.1 KiB
Go
Raw Normal View History

package gossip
import (
"context"
"crypto/ed25519"
"crypto/rand"
"net"
"net/netip"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/sync/errgroup"
)
func TestPingServer(t *testing.T) {
conn, err := net.ListenUDP("udp", net.UDPAddrFromAddrPort(netip.MustParseAddrPort("[::1]:0")))
require.NoError(t, err)
defer conn.Close()
lo := conn.LocalAddr().(*net.UDPAddr).AddrPort()
_, identity, err := ed25519.GenerateKey(rand.Reader)
require.NoError(t, err)
handler := &Handler{
PingClient: NewPingClient(identity, conn),
PingServer: NewPingServer(identity, conn),
}
client := NewClient(handler, conn)
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
group, ctx := errgroup.WithContext(ctx)
group.Go(func() error {
return client.Run(ctx)
})
group.Go(func() error {
defer cancel()
pinger := handler.PingClient
for i := 0; i < 100; i++ {
pong, responder, err := pinger.Ping(ctx, lo)
require.NoError(t, err)
assert.Equal(t, lo, responder)
assert.True(t, pong.Verify())
}
return nil
})
err = group.Wait()
assert.NoError(t, err)
}