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