Skip to content

Commit c1c071e

Browse files
authored
wasi: fix flaky tests (#2068)
Signed-off-by: Edoardo Vacchi <[email protected]>
1 parent f80ef11 commit c1c071e

File tree

3 files changed

+37
-18
lines changed

3 files changed

+37
-18
lines changed

imports/wasi_snapshot_preview1/testdata/zig-cc/wasi.c

+5
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,11 @@ void main_nonblock(char* fpath) {
171171
ssize_t newLen = 0;
172172
while (newLen == 0) {
173173
newLen = read(fd, buf, sizeof(buf));
174+
// If an empty string is read, newLen might be 1,
175+
// causing the loop to terminate.
176+
if (strlen(buf) == 0) {
177+
newLen = 0;
178+
}
174179
if (errno == EAGAIN || newLen == 0) {
175180
printf(".");
176181
nanosleep(&tim , &tim2) ;
Binary file not shown.

internal/sysfs/poll_windows_test.go

+32-18
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ func TestPoll_Windows(t *testing.T) {
3434
t.Run("peekNamedPipe should report the correct state of incoming data in the pipe", func(t *testing.T) {
3535
r, w, err := os.Pipe()
3636
require.NoError(t, err)
37+
defer r.Close()
38+
defer w.Close()
3739
rh := syscall.Handle(r.Fd())
38-
wh := syscall.Handle(w.Fd())
3940

4041
// Ensure the pipe has no data.
4142
n, err := peekNamedPipe(rh)
@@ -45,8 +46,8 @@ func TestPoll_Windows(t *testing.T) {
4546
// Write to the channel.
4647
msg, err := syscall.ByteSliceFromString("test\n")
4748
require.NoError(t, err)
48-
_, err = syscall.Write(wh, msg)
49-
require.NoError(t, err)
49+
_, err = write(w, msg)
50+
require.EqualErrno(t, 0, err)
5051

5152
// Ensure the pipe has data.
5253
n, err = peekNamedPipe(rh)
@@ -132,7 +133,10 @@ func TestPoll_Windows(t *testing.T) {
132133
})
133134

134135
t.Run("poll should return immediately when duration is zero (no data)", func(t *testing.T) {
135-
r, _, err := os.Pipe()
136+
r, w, err := os.Pipe()
137+
defer r.Close()
138+
defer w.Close()
139+
136140
require.NoError(t, err)
137141
fds := []pollFd{{fd: r.Fd(), events: _POLLIN}}
138142
n, err := _poll(fds, 0)
@@ -143,14 +147,15 @@ func TestPoll_Windows(t *testing.T) {
143147
t.Run("poll should return immediately when duration is zero (data)", func(t *testing.T) {
144148
r, w, err := os.Pipe()
145149
require.NoError(t, err)
150+
defer r.Close()
151+
defer w.Close()
146152
fds := []pollFd{{fd: r.Fd(), events: _POLLIN}}
147-
wh := syscall.Handle(w.Fd())
148153

149154
// Write to the channel immediately.
150155
msg, err := syscall.ByteSliceFromString("test\n")
151156
require.NoError(t, err)
152-
_, err = syscall.Write(wh, msg)
153-
require.NoError(t, err)
157+
_, err = write(w, msg)
158+
require.EqualErrno(t, 0, err)
154159

155160
// Verify that the write is reported.
156161
n, err := _poll(fds, 0)
@@ -159,8 +164,10 @@ func TestPoll_Windows(t *testing.T) {
159164
})
160165

161166
t.Run("poll should wait forever when duration is nil (no writes)", func(t *testing.T) {
162-
r, _, err := os.Pipe()
167+
r, w, err := os.Pipe()
163168
require.NoError(t, err)
169+
defer r.Close()
170+
defer w.Close()
164171

165172
ch := make(chan result, 1)
166173
go pollToChannel(r.Fd(), -1, ch)
@@ -173,7 +180,8 @@ func TestPoll_Windows(t *testing.T) {
173180
t.Run("poll should wait forever when duration is nil", func(t *testing.T) {
174181
r, w, err := os.Pipe()
175182
require.NoError(t, err)
176-
wh := syscall.Handle(w.Fd())
183+
defer r.Close()
184+
defer w.Close()
177185

178186
ch := make(chan result, 1)
179187
go pollToChannel(r.Fd(), -1, ch)
@@ -185,8 +193,8 @@ func TestPoll_Windows(t *testing.T) {
185193
// Write a message to the pipe.
186194
msg, err := syscall.ByteSliceFromString("test\n")
187195
require.NoError(t, err)
188-
_, err = syscall.Write(wh, msg)
189-
require.NoError(t, err)
196+
_, err = write(w, msg)
197+
require.EqualErrno(t, 0, err)
190198

191199
// Ensure that the write occurs (panic after an arbitrary timeout).
192200
select {
@@ -201,7 +209,8 @@ func TestPoll_Windows(t *testing.T) {
201209
t.Run("poll should wait for the given duration", func(t *testing.T) {
202210
r, w, err := os.Pipe()
203211
require.NoError(t, err)
204-
wh := syscall.Handle(w.Fd())
212+
defer r.Close()
213+
defer w.Close()
205214

206215
ch := make(chan result, 1)
207216
go pollToChannel(r.Fd(), 500, ch)
@@ -213,8 +222,8 @@ func TestPoll_Windows(t *testing.T) {
213222
// Write a message to the pipe.
214223
msg, err := syscall.ByteSliceFromString("test\n")
215224
require.NoError(t, err)
216-
_, err = syscall.Write(wh, msg)
217-
require.NoError(t, err)
225+
_, err = write(w, msg)
226+
require.EqualErrno(t, 0, err)
218227

219228
// Ensure that the write occurs before the timer expires.
220229
select {
@@ -227,8 +236,10 @@ func TestPoll_Windows(t *testing.T) {
227236
})
228237

229238
t.Run("poll should timeout after the given duration", func(t *testing.T) {
230-
r, _, err := os.Pipe()
239+
r, w, err := os.Pipe()
231240
require.NoError(t, err)
241+
defer r.Close()
242+
defer w.Close()
232243

233244
ch := make(chan result, 1)
234245
go pollToChannel(r.Fd(), 200, ch)
@@ -242,7 +253,8 @@ func TestPoll_Windows(t *testing.T) {
242253
t.Run("poll should return when a write occurs before the given duration", func(t *testing.T) {
243254
r, w, err := os.Pipe()
244255
require.NoError(t, err)
245-
wh := syscall.Handle(w.Fd())
256+
defer r.Close()
257+
defer w.Close()
246258

247259
ch := make(chan result, 1)
248260
go pollToChannel(r.Fd(), 800, ch)
@@ -252,8 +264,8 @@ func TestPoll_Windows(t *testing.T) {
252264

253265
msg, err := syscall.ByteSliceFromString("test\n")
254266
require.NoError(t, err)
255-
_, err = syscall.Write(wh, msg)
256-
require.NoError(t, err)
267+
_, err = write(w, msg)
268+
require.EqualErrno(t, 0, err)
257269

258270
res := <-ch
259271
require.Zero(t, res.err)
@@ -262,7 +274,9 @@ func TestPoll_Windows(t *testing.T) {
262274

263275
t.Run("poll should return when a regular file is given", func(t *testing.T) {
264276
f, err := os.CreateTemp(t.TempDir(), "ex")
277+
require.NoError(t, err)
265278
defer f.Close()
279+
266280
require.NoError(t, err)
267281
fds := []pollFd{{fd: f.Fd(), events: _POLLIN}}
268282
n, errno := _poll(fds, 0)

0 commit comments

Comments
 (0)