Skip to content

Commit 56520a8

Browse files
authored
Merge pull request #102 from Shopify/vs/fail_gracefully_on_connect_and_timeout
Fail gracefully on connect and timeout errors
2 parents 889235d + d0f794a commit 56520a8

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

lib/ruby_lsp/ruby_lsp_rails/rails_client.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ def model(name)
4848
return unless response.code == "200"
4949

5050
JSON.parse(response.body.chomp, symbolize_names: true)
51-
rescue Errno::ECONNREFUSED, ServerAddressUnknown
51+
rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL, Net::ReadTimeout, ServerAddressUnknown
5252
nil
5353
end
5454

5555
sig { void }
5656
def check_if_server_is_running!
5757
request("activate", 0.2)
58-
rescue Errno::ECONNREFUSED, ServerAddressUnknown
58+
rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL, ServerAddressUnknown
5959
warn(SERVER_NOT_RUNNING_MESSAGE)
6060
rescue Net::ReadTimeout
6161
# If the server is running, but the initial request is taking too long, we don't want to block the

test/ruby_lsp_rails/rails_client_test.rb

+21-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@ class RailsClientTest < ActiveSupport::TestCase
2222
assert_equal(expected_response, RailsClient.instance.model("User"))
2323
end
2424

25+
test "model returns nil when failing to open TCP connections" do
26+
Net::HTTP.any_instance.expects(:get).raises(Errno::EADDRNOTAVAIL)
27+
28+
assert_nil(RailsClient.instance.model("User"))
29+
end
30+
31+
test "model returns nil when requests timeout" do
32+
Net::HTTP.any_instance.expects(:get).raises(Net::ReadTimeout)
33+
34+
assert_nil(RailsClient.instance.model("User"))
35+
end
36+
2537
test "instantiation finds the right directory when bundle gemfile points to .ruby-lsp" do
2638
previous_bundle_gemfile = ENV["BUNDLE_GEMFILE"]
2739
project_root = Pathname.new(previous_bundle_gemfile).dirname
@@ -37,13 +49,21 @@ class RailsClientTest < ActiveSupport::TestCase
3749
ENV["BUNDLE_GEMFILE"] = previous_bundle_gemfile
3850
end
3951

40-
test "check_if_server_is_running! raises if no server is found" do
52+
test "check_if_server_is_running! warns if no server is found" do
4153
Net::HTTP.any_instance.expects(:get).raises(Errno::ECONNREFUSED)
4254

4355
assert_output("", RailsClient::SERVER_NOT_RUNNING_MESSAGE + "\n") do
4456
RailsClient.instance.check_if_server_is_running!
4557
end
4658
end
59+
60+
test "check_if_server_is_running! warns if connection fails" do
61+
Net::HTTP.any_instance.expects(:get).raises(Errno::EADDRNOTAVAIL)
62+
63+
assert_output("", RailsClient::SERVER_NOT_RUNNING_MESSAGE + "\n") do
64+
RailsClient.instance.check_if_server_is_running!
65+
end
66+
end
4767
end
4868
end
4969
end

0 commit comments

Comments
 (0)