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