Skip to content

Commit 22278ca

Browse files
author
Bryan C. Mills
committed
net: convert TestTCPServer to use subtests
My fix in CL 202618 inadvertently violated an invariant in the inner loop of TestTCPServer (namely, that len(trchs) == i). That causes a panic when one or more of the channels is omitted due to a flake. Instead of trying to fix up the test, let's just factor out a subtest and skip the whole thing if the transceiver's Dial flakes out. Updates #32919 Change-Id: Ib6f274a44194311c8c5a2faf19f586cc9eccfd4d Reviewed-on: https://go-review.googlesource.com/c/go/+/202561 Run-TryBot: Bryan C. Mills <[email protected]> Reviewed-by: Brad Fitzpatrick <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent 51504f0 commit 22278ca

File tree

1 file changed

+60
-60
lines changed

1 file changed

+60
-60
lines changed

src/net/server_test.go

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -56,79 +56,79 @@ func TestTCPServer(t *testing.T) {
5656
const N = 3
5757

5858
for i, tt := range tcpServerTests {
59-
if !testableListenArgs(tt.snet, tt.saddr, tt.taddr) {
60-
t.Logf("skipping %s test", tt.snet+" "+tt.saddr+"<-"+tt.taddr)
61-
continue
62-
}
63-
64-
ln, err := Listen(tt.snet, tt.saddr)
65-
if err != nil {
66-
if perr := parseDialError(err); perr != nil {
67-
t.Error(perr)
59+
t.Run(tt.snet+" "+tt.saddr+"<-"+tt.taddr, func(t *testing.T) {
60+
if !testableListenArgs(tt.snet, tt.saddr, tt.taddr) {
61+
t.Skip("not testable")
6862
}
69-
t.Fatal(err)
70-
}
7163

72-
var lss []*localServer
73-
var tpchs []chan error
74-
defer func() {
75-
for _, ls := range lss {
76-
ls.teardown()
77-
}
78-
}()
79-
for i := 0; i < N; i++ {
80-
ls, err := (&streamListener{Listener: ln}).newLocalServer()
64+
ln, err := Listen(tt.snet, tt.saddr)
8165
if err != nil {
66+
if perr := parseDialError(err); perr != nil {
67+
t.Error(perr)
68+
}
8269
t.Fatal(err)
8370
}
84-
lss = append(lss, ls)
85-
tpchs = append(tpchs, make(chan error, 1))
86-
}
87-
for i := 0; i < N; i++ {
88-
ch := tpchs[i]
89-
handler := func(ls *localServer, ln Listener) { transponder(ln, ch) }
90-
if err := lss[i].buildup(handler); err != nil {
91-
t.Fatal(err)
92-
}
93-
}
9471

95-
var trchs []chan error
96-
for i := 0; i < N; i++ {
97-
_, port, err := SplitHostPort(lss[i].Listener.Addr().String())
98-
if err != nil {
99-
t.Fatal(err)
72+
var lss []*localServer
73+
var tpchs []chan error
74+
defer func() {
75+
for _, ls := range lss {
76+
ls.teardown()
77+
}
78+
}()
79+
for i := 0; i < N; i++ {
80+
ls, err := (&streamListener{Listener: ln}).newLocalServer()
81+
if err != nil {
82+
t.Fatal(err)
83+
}
84+
lss = append(lss, ls)
85+
tpchs = append(tpchs, make(chan error, 1))
10086
}
101-
d := Dialer{Timeout: someTimeout}
102-
c, err := d.Dial(tt.tnet, JoinHostPort(tt.taddr, port))
103-
if err != nil {
104-
if perr := parseDialError(err); perr != nil {
105-
t.Error(perr)
87+
for i := 0; i < N; i++ {
88+
ch := tpchs[i]
89+
handler := func(ls *localServer, ln Listener) { transponder(ln, ch) }
90+
if err := lss[i].buildup(handler); err != nil {
91+
t.Fatal(err)
10692
}
107-
if tt.taddr == "::1" && os.Getenv("GO_BUILDER_NAME") == "darwin-amd64-10_12" && os.IsTimeout(err) {
108-
// A suspected kernel bug in macOS 10.12 occasionally results in
109-
// "i/o timeout" errors when dialing address ::1. The errors have not
110-
// been observed on newer versions of the OS, so we don't plan to work
111-
// around them. See https://golang.org/issue/32919.
112-
t.Logf("ignoring error on known-flaky macOS 10.12 builder: %v", err)
113-
continue
93+
}
94+
95+
var trchs []chan error
96+
for i := 0; i < N; i++ {
97+
_, port, err := SplitHostPort(lss[i].Listener.Addr().String())
98+
if err != nil {
99+
t.Fatal(err)
114100
}
115-
t.Fatal(err)
101+
d := Dialer{Timeout: someTimeout}
102+
c, err := d.Dial(tt.tnet, JoinHostPort(tt.taddr, port))
103+
if err != nil {
104+
if perr := parseDialError(err); perr != nil {
105+
t.Error(perr)
106+
}
107+
if tt.taddr == "::1" && os.Getenv("GO_BUILDER_NAME") == "darwin-amd64-10_12" && os.IsTimeout(err) {
108+
// A suspected kernel bug in macOS 10.12 occasionally results in
109+
// "i/o timeout" errors when dialing address ::1. The errors have not
110+
// been observed on newer versions of the OS, so we don't plan to work
111+
// around them. See https://golang.org/issue/32919.
112+
t.Skipf("skipping due to error on known-flaky macOS 10.12 builder: %v", err)
113+
}
114+
t.Fatal(err)
115+
}
116+
defer c.Close()
117+
trchs = append(trchs, make(chan error, 1))
118+
go transceiver(c, []byte("TCP SERVER TEST"), trchs[i])
116119
}
117-
defer c.Close()
118-
trchs = append(trchs, make(chan error, 1))
119-
go transceiver(c, []byte("TCP SERVER TEST"), trchs[i])
120-
}
121120

122-
for _, ch := range trchs {
123-
for err := range ch {
124-
t.Errorf("#%d: %v", i, err)
121+
for _, ch := range trchs {
122+
for err := range ch {
123+
t.Errorf("#%d: %v", i, err)
124+
}
125125
}
126-
}
127-
for _, ch := range tpchs {
128-
for err := range ch {
129-
t.Errorf("#%d: %v", i, err)
126+
for _, ch := range tpchs {
127+
for err := range ch {
128+
t.Errorf("#%d: %v", i, err)
129+
}
130130
}
131-
}
131+
})
132132
}
133133
}
134134

0 commit comments

Comments
 (0)