Skip to content

Commit a1221d3

Browse files
committed
solve flaky test
1 parent 9ac0ec8 commit a1221d3

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

xds/internal/resolver/helpers_test.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,16 +109,31 @@ func buildResolverForTarget(t *testing.T, target resolver.Target, bootstrapConte
109109
}
110110
}
111111

112-
stateCh := make(chan resolver.State, 1)
112+
stateCh := make(chan resolver.State, 10)
113113
updateStateF := func(s resolver.State) error {
114-
stateCh <- s
114+
select {
115+
case stateCh <- s:
116+
default:
117+
// If channel is full, drop the oldest update to prevent blocking
118+
select {
119+
case <-stateCh:
120+
stateCh <- s
121+
default:
122+
}
123+
}
115124
return nil
116125
}
117-
errCh := make(chan error, 1)
126+
errCh := make(chan error, 10)
118127
reportErrorF := func(err error) {
119128
select {
120129
case errCh <- err:
121130
default:
131+
// If channel is full, drop the oldest error to prevent blocking
132+
select {
133+
case <-errCh:
134+
errCh <- err
135+
default:
136+
}
122137
}
123138
}
124139
tcc := &testutils.ResolverClientConn{Logger: t, UpdateStateF: updateStateF, ReportErrorF: reportErrorF}
@@ -128,7 +143,20 @@ func buildResolverForTarget(t *testing.T, target resolver.Target, bootstrapConte
128143
if err != nil {
129144
t.Fatalf("Failed to build xDS resolver for target %q: %v", target, err)
130145
}
131-
t.Cleanup(r.Close)
146+
t.Cleanup(func() {
147+
// Drain channels before closing to prevent blocking
148+
go func() {
149+
for range stateCh {
150+
}
151+
}()
152+
go func() {
153+
for range errCh {
154+
}
155+
}()
156+
r.Close()
157+
close(stateCh)
158+
close(errCh)
159+
})
132160
return stateCh, errCh, r
133161
}
134162

0 commit comments

Comments
 (0)