Skip to content

Commit 224f807

Browse files
committed
net: add missing deadline test for RawConn
Updates #19435. Change-Id: Ife4a31972b05094a86c60a48fcacdfe52d133ee4 Reviewed-on: https://go-review.googlesource.com/107395 Run-TryBot: Mikio Hara <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]>
1 parent 58cdecb commit 224f807

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

src/net/rawconn_test.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"bytes"
99
"runtime"
1010
"testing"
11+
"time"
1112
)
1213

1314
func TestRawConnReadWrite(t *testing.T) {
@@ -93,6 +94,81 @@ func TestRawConnReadWrite(t *testing.T) {
9394
t.Fatalf("got %q; want %q", b[:n], data)
9495
}
9596
})
97+
t.Run("Deadline", func(t *testing.T) {
98+
switch runtime.GOOS {
99+
case "windows":
100+
t.Skipf("not supported on %s", runtime.GOOS)
101+
}
102+
103+
ln, err := newLocalListener("tcp")
104+
if err != nil {
105+
t.Fatal(err)
106+
}
107+
defer ln.Close()
108+
109+
c, err := Dial(ln.Addr().Network(), ln.Addr().String())
110+
if err != nil {
111+
t.Fatal(err)
112+
}
113+
defer c.Close()
114+
115+
cc, err := c.(*TCPConn).SyscallConn()
116+
if err != nil {
117+
t.Fatal(err)
118+
}
119+
var b [1]byte
120+
121+
c.SetDeadline(noDeadline)
122+
if err := c.SetDeadline(time.Now().Add(-1)); err != nil {
123+
t.Fatal(err)
124+
}
125+
if err = writeRawConn(cc, b[:]); err == nil {
126+
t.Fatal("Write should fail")
127+
}
128+
if perr := parseWriteError(err); perr != nil {
129+
t.Error(perr)
130+
}
131+
if nerr, ok := err.(Error); !ok || !nerr.Timeout() {
132+
t.Errorf("got %v; want timeout", err)
133+
}
134+
if _, err = readRawConn(cc, b[:]); err == nil {
135+
t.Fatal("Read should fail")
136+
}
137+
if perr := parseReadError(err); perr != nil {
138+
t.Error(perr)
139+
}
140+
if nerr, ok := err.(Error); !ok || !nerr.Timeout() {
141+
t.Errorf("got %v; want timeout", err)
142+
}
143+
144+
c.SetReadDeadline(noDeadline)
145+
if err := c.SetReadDeadline(time.Now().Add(-1)); err != nil {
146+
t.Fatal(err)
147+
}
148+
if _, err = readRawConn(cc, b[:]); err == nil {
149+
t.Fatal("Read should fail")
150+
}
151+
if perr := parseReadError(err); perr != nil {
152+
t.Error(perr)
153+
}
154+
if nerr, ok := err.(Error); !ok || !nerr.Timeout() {
155+
t.Errorf("got %v; want timeout", err)
156+
}
157+
158+
c.SetWriteDeadline(noDeadline)
159+
if err := c.SetWriteDeadline(time.Now().Add(-1)); err != nil {
160+
t.Fatal(err)
161+
}
162+
if err = writeRawConn(cc, b[:]); err == nil {
163+
t.Fatal("Write should fail")
164+
}
165+
if perr := parseWriteError(err); perr != nil {
166+
t.Error(perr)
167+
}
168+
if nerr, ok := err.(Error); !ok || !nerr.Timeout() {
169+
t.Errorf("got %v; want timeout", err)
170+
}
171+
})
96172
}
97173

98174
func TestRawConnControl(t *testing.T) {

0 commit comments

Comments
 (0)