Skip to content

Commit 0451068

Browse files
WeiminShanggopherbot
authored andcommitted
ipv4,ipv6: retry ENOBUFS in TestPacketConnReadWriteUnicastUDP
This ports CL 402059 to the non-concurrent UDP and ICMP variants of the test. (It isn't obvious to me whether the ENOBUFS retry loop is strictly needed for the ICMP variants, but I'm getting kind of tired of porting this CL to different tests and would rather minimize the number of times it has to be done again. 😩) Fixes golang/go#53402. Change-Id: I8dc385fbce121c364efafd988ccf08eebe3fef28 Reviewed-on: https://go-review.googlesource.com/c/net/+/416556 Auto-Submit: Bryan Mills <[email protected]> Run-TryBot: Bryan Mills <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]>
1 parent d7bfdfb commit 0451068

File tree

2 files changed

+68
-16
lines changed

2 files changed

+68
-16
lines changed

ipv4/unicast_test.go

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,24 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
5353
if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
5454
t.Fatal(err)
5555
}
56-
if n, err := p.WriteTo(wb, nil, dst); err != nil {
57-
t.Fatal(err)
58-
} else if n != len(wb) {
59-
t.Fatalf("got %v; want %v", n, len(wb))
56+
57+
backoff := time.Millisecond
58+
for {
59+
n, err := p.WriteTo(wb, nil, dst)
60+
if err != nil {
61+
if n == 0 && isENOBUFS(err) {
62+
time.Sleep(backoff)
63+
backoff *= 2
64+
continue
65+
}
66+
t.Fatal(err)
67+
}
68+
if n != len(wb) {
69+
t.Fatalf("got %d; want %d", n, len(wb))
70+
}
71+
break
6072
}
73+
6174
rb := make([]byte, 128)
6275
if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
6376
t.Fatal(err)
@@ -124,11 +137,24 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
124137
if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
125138
t.Fatal(err)
126139
}
127-
if n, err := p.WriteTo(wb, nil, dst); err != nil {
128-
t.Fatal(err)
129-
} else if n != len(wb) {
130-
t.Fatalf("got %v; want %v", n, len(wb))
140+
141+
backoff := time.Millisecond
142+
for {
143+
n, err := p.WriteTo(wb, nil, dst)
144+
if err != nil {
145+
if n == 0 && isENOBUFS(err) {
146+
time.Sleep(backoff)
147+
backoff *= 2
148+
continue
149+
}
150+
t.Fatal(err)
151+
}
152+
if n != len(wb) {
153+
t.Fatalf("got %d; want %d", n, len(wb))
154+
}
155+
break
131156
}
157+
132158
rb := make([]byte, 128)
133159
loop:
134160
if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {

ipv6/unicast_test.go

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,24 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
5959
if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
6060
t.Fatal(err)
6161
}
62-
if n, err := p.WriteTo(wb, &cm, dst); err != nil {
63-
t.Fatal(err)
64-
} else if n != len(wb) {
65-
t.Fatalf("got %v; want %v", n, len(wb))
62+
63+
backoff := time.Millisecond
64+
for {
65+
n, err := p.WriteTo(wb, &cm, dst)
66+
if err != nil {
67+
if n == 0 && isENOBUFS(err) {
68+
time.Sleep(backoff)
69+
backoff *= 2
70+
continue
71+
}
72+
t.Fatal(err)
73+
}
74+
if n != len(wb) {
75+
t.Fatalf("got %d; want %d", n, len(wb))
76+
}
77+
break
6678
}
79+
6780
rb := make([]byte, 128)
6881
if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
6982
t.Fatal(err)
@@ -159,11 +172,24 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
159172
if err := p.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
160173
t.Fatal(err)
161174
}
162-
if n, err := p.WriteTo(wb, &cm, dst); err != nil {
163-
t.Fatal(err)
164-
} else if n != len(wb) {
165-
t.Fatalf("got %v; want %v", n, len(wb))
175+
176+
backoff := time.Millisecond
177+
for {
178+
n, err := p.WriteTo(wb, &cm, dst)
179+
if err != nil {
180+
if n == 0 && isENOBUFS(err) {
181+
time.Sleep(backoff)
182+
backoff *= 2
183+
continue
184+
}
185+
t.Fatal(err)
186+
}
187+
if n != len(wb) {
188+
t.Fatalf("got %d; want %d", n, len(wb))
189+
}
190+
break
166191
}
192+
167193
rb := make([]byte, 128)
168194
if err := p.SetReadDeadline(time.Now().Add(100 * time.Millisecond)); err != nil {
169195
t.Fatal(err)

0 commit comments

Comments
 (0)