diff --git a/lib/snikket.rb b/lib/snikket.rb index d12fef3c556faf443eb772bad980aeb868567b23..407159aeaaa698e9823a15a55736be5513a820c1 100644 --- a/lib/snikket.rb +++ b/lib/snikket.rb @@ -284,7 +284,9 @@ module Snikket def fetch url = bootstrap_uri - req(url).then { |res| + EMPromise.resolve(nil).then { + req(url) + }.then { |res| parse_invite(url, res) }.catch { nil } end diff --git a/test/test_snikket.rb b/test/test_snikket.rb index f80bee01394620fa2ddeb563ea4a815e46663d10..efa978fa89301d2a7aefa9bcd2022dcf53af259d 100644 --- a/test/test_snikket.rb +++ b/test/test_snikket.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "snikket" +require "openssl" class TestSnikket < Minitest::Test NS = "xmpp:snikket.org/hosting/v1" @@ -66,6 +67,28 @@ class TestSnikket < Minitest::Test ) end + def test_fetch_invite_returns_nil_when_http_head_raises_ssl_error + instance = Snikket::CustomerInstance.new( + instance_id: "si-1234", + bootstrap_token: "fZLy6iTh", + customer_id: "test", + domain: "example.com" + ) + + request = Minitest::Mock.new + request.expect(:ahead, nil) do |redirects:| + assert_equal 5, redirects + raise OpenSSL::SSL::SSLError, "certificate verify failed" + end + + EM::HttpRequest.stub(:new, request) do + assert_nil instance.fetch_invite.sync + end + + request.verify + end + em :test_fetch_invite_returns_nil_when_http_head_raises_ssl_error + def test_instance_result instance = Blather::XMPPNode.parse(<<~XML)