62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package krpc
|
|
|
|
import (
|
|
"net"
|
|
"os"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestClient_dialTimeout(t *testing.T) {
|
|
t.Parallel()
|
|
l, _ := net.Listen("tcp", ":0")
|
|
|
|
f := func(conn net.Conn, opts ...Option) (client *Client, err error) {
|
|
_ = conn.Close()
|
|
time.Sleep(time.Millisecond * 500)
|
|
return nil, nil
|
|
}
|
|
|
|
tests := map[string]time.Duration{
|
|
"timeout": time.Millisecond * 100,
|
|
"unlimited": 0,
|
|
}
|
|
for name, timeout := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
_, err := dialTimeout(f, "tcp", l.Addr().String(),
|
|
WithConnectTimeout(timeout))
|
|
if strings.Contains(name, "timeout") {
|
|
_assert(err != nil &&
|
|
strings.Contains(err.Error(), "timeout"),
|
|
"expect a timeout error",
|
|
)
|
|
} else {
|
|
_assert(err == nil, "0 means no limit")
|
|
}
|
|
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestXDial(t *testing.T) {
|
|
if runtime.GOOS == "linux" {
|
|
ch := make(chan struct{})
|
|
addr := "/tmp/krpc.sock"
|
|
|
|
go func() {
|
|
_ = os.Remove(addr)
|
|
l, err := net.Listen("unix", addr)
|
|
if err != nil {
|
|
t.Fatal("failed to listen unix socket")
|
|
}
|
|
ch <- struct{}{}
|
|
Accept(l)
|
|
}()
|
|
<-ch
|
|
_, err := XDial("unix://"+addr)
|
|
_assert(err == nil, "failed to connect unix socket")
|
|
}
|
|
}
|