radiance/pkg/gossip/ping_test.go

66 lines
1.4 KiB
Go

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 := NewDriver(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)
}
func BenchmarkPing_SignHashVerify(b *testing.B) {
_, identity, err := ed25519.GenerateKey(rand.Reader)
require.NoError(b, err)
for i := 0; i < b.N; i++ {
ping := NewPingRandom(identity)
assert.True(b, ping.Verify())
pong := NewPing(HashPingToken(ping.Token), identity)
assert.True(b, pong.Verify())
}
}