Skip to content

Commit 3916539

Browse files
committed
make sure all server tests are in fixtures and await compilation end
if the test finishes while build is executing it will run mix tasks inside elixir_ls itself this makes tests flaky
1 parent 207fbaa commit 3916539

File tree

4 files changed

+958
-708
lines changed

4 files changed

+958
-708
lines changed

apps/language_server/test/dialyzer_test.exs

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,26 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
2222
end
2323

2424
setup do
25-
server = start_server()
25+
{:ok, server} = Server.start_link()
26+
start_server(server)
27+
Process.unlink(server)
2628
{:ok, _tracer} = start_supervised(Tracer)
2729

30+
on_exit(fn ->
31+
if Process.alive?(server) do
32+
state = :sys.get_state(server)
33+
refute state.build_running?
34+
35+
Process.monitor(server)
36+
Process.exit(server, :terminate)
37+
38+
receive do
39+
{:DOWN, _, _, ^server, _} ->
40+
:ok
41+
end
42+
end
43+
end)
44+
2845
{:ok, %{server: server}}
2946
end
3047

@@ -87,8 +104,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
87104
}),
88105
40000
89106

90-
# Stop while we're still capturing logs to avoid log leakage
91-
GenServer.stop(server)
107+
wait_until_compiled(server)
92108
end)
93109
end)
94110
end
@@ -140,8 +156,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
140156
}),
141157
3_000
142158

143-
# Stop while we're still capturing logs to avoid log leakage
144-
GenServer.stop(server)
159+
wait_until_compiled(server)
145160
end)
146161
end)
147162
end
@@ -188,6 +203,8 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
188203
Type:
189204
:error
190205
"""
206+
207+
wait_until_compiled(server)
191208
end)
192209
end)
193210
end
@@ -225,6 +242,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
225242

226243
assert error_message1 == "Function fun/0 has no local return."
227244
assert error_message2 == "The pattern can never match the type :error."
245+
wait_until_compiled(server)
228246
end)
229247
end)
230248
end
@@ -263,6 +281,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
263281
assert error_message1 == "Function 'fun'/0 has no local return"
264282

265283
# Note: Don't assert on error_messaage 2 because the message is not stable across OTP versions
284+
wait_until_compiled(server)
266285
end)
267286
end)
268287
end
@@ -300,6 +319,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
300319

301320
assert error_message1 == "Function check_error/0 has no local return."
302321
assert error_message2 == "The pattern can never match the type :error."
322+
wait_until_compiled(server)
303323
end)
304324
end)
305325
end
@@ -317,9 +337,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
317337
File.rm("lib/a.ex")
318338
Server.receive_packet(server, did_change_watched_files([%{"uri" => file_a, "type" => 3}]))
319339
assert_receive publish_diagnostics_notif(^file_a, []), 20000
320-
321-
# Stop while we're still capturing logs to avoid log leakage
322-
GenServer.stop(server)
340+
wait_until_compiled(server)
323341
end)
324342
end)
325343
end
@@ -388,6 +406,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
388406

389407
# we should not receive Protocol has already been consolidated warnings here
390408
refute_receive notification("textDocument/publishDiagnostics", _), 3000
409+
wait_until_compiled(server)
391410
end)
392411
end
393412

@@ -416,6 +435,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
416435
resp = assert_receive(%{"id" => 3}, 5000)
417436

418437
assert response(3, []) == resp
438+
wait_until_compiled(server)
419439
end)
420440
end)
421441
end
@@ -501,6 +521,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
501521
JsonRpc.receive_packet(response(id, %{"applied" => true}))
502522

503523
assert_receive(%{"id" => 4, "result" => nil}, 5000)
524+
wait_until_compiled(server)
504525
end)
505526
end)
506527
end

apps/language_server/test/providers/execute_command/mix_clean_test.exs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,24 @@ defmodule ElixirLS.LanguageServer.Providers.ExecuteCommand.MixCleanTest do
66

77
setup do
88
{:ok, _} = start_supervised(Tracer)
9-
server = start_server()
9+
{:ok, server} = Server.start_link()
10+
start_server(server)
11+
Process.unlink(server)
12+
13+
on_exit(fn ->
14+
if Process.alive?(server) do
15+
state = :sys.get_state(server)
16+
refute state.build_running?
17+
18+
Process.monitor(server)
19+
Process.exit(server, :terminate)
20+
21+
receive do
22+
{:DOWN, _, _, ^server, _} ->
23+
:ok
24+
end
25+
end
26+
end)
1027

1128
{:ok, %{server: server}}
1229
end

0 commit comments

Comments
 (0)