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") }