Track delivery failures to FASP (#35628)
This commit is contained in:
@@ -32,8 +32,12 @@ class Fasp::Request
|
|||||||
.send(verb, url, body:)
|
.send(verb, url, body:)
|
||||||
|
|
||||||
validate!(response)
|
validate!(response)
|
||||||
|
@provider.delivery_failure_tracker.track_success!
|
||||||
|
|
||||||
response.parse if response.body.present?
|
response.parse if response.body.present?
|
||||||
|
rescue *::Mastodon::HTTP_CONNECTION_ERRORS
|
||||||
|
@provider.delivery_failure_tracker.track_failure!
|
||||||
|
raise
|
||||||
end
|
end
|
||||||
|
|
||||||
def request_headers(_verb, _url, body = '')
|
def request_headers(_verb, _url, body = '')
|
||||||
|
|||||||
@@ -118,6 +118,10 @@ class Fasp::Provider < ApplicationRecord
|
|||||||
save!
|
save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delivery_failure_tracker
|
||||||
|
@delivery_failure_tracker ||= DeliveryFailureTracker.new(base_url, resolution: :minutes)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def create_keypair
|
def create_keypair
|
||||||
|
|||||||
@@ -27,6 +27,14 @@ RSpec.describe Fasp::Request do
|
|||||||
'Signature-Input' => /.+/,
|
'Signature-Input' => /.+/,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'tracks that a successful connection was made' do
|
||||||
|
provider.delivery_failure_tracker.track_failure!
|
||||||
|
|
||||||
|
expect do
|
||||||
|
subject.send(method, '/test_path')
|
||||||
|
end.to change(provider.delivery_failure_tracker, :failures).from(1).to(0)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the response is not signed' do
|
context 'when the response is not signed' do
|
||||||
@@ -55,6 +63,21 @@ RSpec.describe Fasp::Request do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when the request raises an error' do
|
||||||
|
before do
|
||||||
|
stub_request(method, 'https://reqprov.example.com/fasp/test_path')
|
||||||
|
.to_raise(HTTP::ConnectionError)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "records the failure using the provider's delivery failure tracker" do
|
||||||
|
expect do
|
||||||
|
subject.send(method, '/test_path')
|
||||||
|
end.to raise_error(HTTP::ConnectionError)
|
||||||
|
|
||||||
|
expect(provider.delivery_failure_tracker.failures).to eq 1
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#get' do
|
describe '#get' do
|
||||||
|
|||||||
@@ -206,4 +206,12 @@ RSpec.describe Fasp::Provider do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#delivery_failure_tracker' do
|
||||||
|
subject { Fabricate(:fasp_provider) }
|
||||||
|
|
||||||
|
it 'returns a `DeliverFailureTracker` instance' do
|
||||||
|
expect(subject.delivery_failure_tracker).to be_a(DeliveryFailureTracker)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user