Files
krpc/client_test.go
2022-04-23 17:40:37 +08:00

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