You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.3 KiB
Go

package client
import (
"testing"
"time"
"github.com/noahlann/nnet/pkg/client"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestTCPClientRequestNotConnected(t *testing.T) {
cfg := &client.Config{
Addr: "tcp://127.0.0.1:0",
}
c := NewTCPClient(cfg)
defer c.Close()
_, err := c.Request([]byte("ping"), 50*time.Millisecond)
assert.Error(t, err, "Expected error when requesting without connection")
}
func TestTCPClientCloseIdempotent(t *testing.T) {
c := NewTCPClient(nil)
require.NotNil(t, c)
err := c.Close()
require.NoError(t, err)
assert.False(t, c.IsConnected())
}
func TestTCPClientSendAfterClose(t *testing.T) {
c := NewTCPClient(nil)
require.NotNil(t, c)
_ = c.Close()
err := c.Send([]byte("x"))
assert.Error(t, err, "Expected error when sending after close")
}
func TestTCPClientConnectInvalidAddrRespectsTimeout(t *testing.T) {
// Using an unroutable address and very short timeout to ensure quick failure
cfg := &client.Config{
Addr: "tcp://127.0.0.1:1", // likely closed
ConnectTimeout: 50 * time.Millisecond,
}
c := NewTCPClient(cfg)
defer c.Close()
start := time.Now()
err := c.Connect()
require.Error(t, err)
elapsed := time.Since(start)
assert.LessOrEqual(t, elapsed, 500*time.Millisecond, "connect should fail quickly honoring timeout")
}