Skip to content

Commit 7a50a64

Browse files
committed
improve async tests by checking (waiting) for task completion success and using listenany so that multiple test suites can run in parallel with less likelyhood of collisions
1 parent 2e2e4f6 commit 7a50a64

File tree

3 files changed

+58
-37
lines changed

3 files changed

+58
-37
lines changed

test/parallel.jl

+21-19
Original file line numberDiff line numberDiff line change
@@ -140,28 +140,30 @@ workloads = hist(@parallel((a,b)->[a,b], for i=1:7; myid(); end), nprocs())[2]
140140
@test @parallel(+, for i=1:2; i; end) == 3
141141

142142
# Testing timedwait on multiple RemoteRefs
143-
rr1 = RemoteRef()
144-
rr2 = RemoteRef()
145-
rr3 = RemoteRef()
143+
@sync begin
144+
rr1 = RemoteRef()
145+
rr2 = RemoteRef()
146+
rr3 = RemoteRef()
146147

147-
@async begin sleep(0.5); put!(rr1, :ok) end
148-
@async begin sleep(1.0); put!(rr2, :ok) end
149-
@async begin sleep(2.0); put!(rr3, :ok) end
148+
@async begin sleep(0.5); put!(rr1, :ok) end
149+
@async begin sleep(1.0); put!(rr2, :ok) end
150+
@async begin sleep(2.0); put!(rr3, :ok) end
150151

151-
tic()
152-
timedwait(1.0) do
153-
all(map(isready, [rr1, rr2, rr3]))
154-
end
155-
et=toq()
156-
157-
# assuming that 0.5 seconds is a good enough buffer on a typical modern CPU
158-
try
159-
@test (et >= 1.0) && (et <= 1.5)
160-
@test !isready(rr3)
161-
catch
162-
warn("timedwait tests delayed. et=$et, isready(rr3)=$(isready(rr3))")
152+
tic()
153+
timedwait(1.0) do
154+
all(map(isready, [rr1, rr2, rr3]))
155+
end
156+
et=toq()
157+
# assuming that 0.5 seconds is a good enough buffer on a typical modern CPU
158+
try
159+
@test (et >= 1.0) && (et <= 1.5)
160+
@test !isready(rr3)
161+
catch
162+
warn("timedwait tests delayed. et=$et, isready(rr3)=$(isready(rr3))")
163+
end
164+
@test isready(rr1)
163165
end
164-
@test isready(rr1)
166+
165167

166168
# TODO: The below block should be always enabled but the error is printed by the event loop
167169

test/socket.jl

+29-13
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,26 @@
3131
@test repr(ip"2001:db8:0:0:1:0:0:1") == "ip\"2001:db8::1:0:0:1\""
3232
@test repr(ip"2001:0:0:1:0:0:0:1") == "ip\"2001:0:0:1::1\""
3333

34+
port = RemoteRef()
3435
c = Base.Condition()
35-
port = rand(2000:4000)
36-
@async begin
37-
s = listen(port)
36+
defaultport = rand(2000:4000)
37+
tsk = @async begin
38+
p, s = listenany(defaultport)
39+
put!(port, p)
3840
Base.notify(c)
3941
sock = accept(s)
4042
write(sock,"Hello World\n")
4143
close(s)
4244
close(sock)
4345
end
4446
wait(c)
45-
@test readall(connect(port)) == "Hello World\n"
47+
@test readall(connect(fetch(port))) == "Hello World\n"
48+
wait(tsk)
4649

47-
socketname = @windows ? "\\\\.\\pipe\\uv-test" : "testsocket"
50+
socketname = (@windows ? "\\\\.\\pipe\\uv-test" : "testsocket") * "-" * randstring(6)
4851
@unix_only isfile(socketname) && Base.FS.unlink(socketname)
4952
for T in (ASCIIString, UTF8String, UTF16String) # test for issue #9435
50-
@async begin
53+
tsk = @async begin
5154
s = listen(T(socketname))
5255
Base.notify(c)
5356
sock = accept(s)
@@ -57,21 +60,31 @@ for T in (ASCIIString, UTF8String, UTF16String) # test for issue #9435
5760
end
5861
wait(c)
5962
@test readall(connect(socketname)) == "Hello World\n"
63+
wait(tsk)
6064
end
6165

6266
@test_throws Base.UVError getaddrinfo(".invalid")
6367
@test_throws Base.UVError connect("localhost", 21452)
6468

65-
server = listen(port)
66-
@async @test_throws ErrorException accept(server)
67-
sleep(0.1)
69+
p, server = listenany(defaultport)
70+
r = RemoteRef()
71+
tsk = @async begin
72+
put!(r, :start)
73+
@test_throws Base.UVError accept(server)
74+
end
75+
@test fetch(r) === :start
6876
close(server)
77+
wait(tsk)
6978

70-
server = listen(port)
79+
port, server = listenany(defaultport)
7180
@async connect("localhost",port)
7281
s1 = accept(server)
7382
@test_throws ErrorException accept(server,s1)
83+
@test_throws Base.UVError listen(port)
84+
port2, server2 = listenany(port)
85+
@test port != port2
7486
close(server)
87+
close(server2)
7588

7689
@test_throws Base.UVError connect(".invalid",80)
7790

@@ -82,7 +95,7 @@ begin
8295
bind(b,ip"127.0.0.1",port+1)
8396

8497
c = Condition()
85-
@async begin
98+
tsk = @async begin
8699
@test bytestring(recv(a)) == "Hello World"
87100
# Issue 6505
88101
@async begin
@@ -93,14 +106,16 @@ begin
93106
end
94107
send(b,ip"127.0.0.1",port,"Hello World")
95108
wait(c)
109+
wait(tsk)
96110

97-
@async begin
111+
tsk = @async begin
98112
@test begin
99113
(addr,data) = recvfrom(a)
100114
addr == ip"127.0.0.1" && bytestring(data) == "Hello World"
101115
end
102116
end
103117
send(b, ip"127.0.0.1",port,"Hello World")
118+
wait(tsk)
104119

105120
@test_throws MethodError bind(UDPSocket(),port)
106121

@@ -113,11 +128,12 @@ begin
113128
bind(a, ip"::1", uint16(port))
114129
bind(b, ip"::1", uint16(port+1))
115130

116-
@async begin
131+
tsk = @async begin
117132
@test begin
118133
(addr, data) = recvfrom(a)
119134
addr == ip"::1" && bytestring(data) == "Hello World"
120135
end
121136
end
122137
send(b, ip"::1", port, "Hello World")
138+
wait(tsk)
123139
end

test/spawn.jl

+8-5
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,16 @@ rm(file)
7070

7171
# Stream Redirection
7272
@unix_only begin
73+
r = RemoteRef()
7374
@async begin
74-
server = listen(2326)
75+
port, server = listenany(2326)
76+
put!(r,port)
7577
client = accept(server)
7678
@test readall(client |> `cat`) == "hello world\n"
7779
close(server)
7880
end
7981
@async begin
80-
sock = connect(2326)
82+
sock = connect(fetch(r))
8183
run(`echo hello world` |> sock)
8284
close(sock)
8385
end
@@ -123,15 +125,16 @@ yield()
123125

124126
# Test marking of AsyncStream
125127

128+
r = RemoteRef()
126129
@async begin
127-
server = listen(2327)
130+
port, server = listenany(2327)
131+
put!(r, port)
128132
client = accept(server)
129133
write(client, "Hello, world!\n")
130134
write(client, "Goodbye, world...\n")
131135
close(server)
132136
end
133-
sleep(0.1)
134-
sock = connect(2327)
137+
sock = connect(fetch(r))
135138
mark(sock)
136139
@test ismarked(sock)
137140
@test readline(sock) == "Hello, world!\n"

0 commit comments

Comments
 (0)