2
0

Track delivery failures to FASP (#35628)

This commit is contained in:
David Roetzel
2025-08-04 09:43:34 +02:00
committed by GitHub
parent bf46cffd9e
commit 05cdd3f6eb
4 changed files with 39 additions and 0 deletions

View File

@@ -32,8 +32,12 @@ class Fasp::Request
.send(verb, url, body:)
validate!(response)
@provider.delivery_failure_tracker.track_success!
response.parse if response.body.present?
rescue *::Mastodon::HTTP_CONNECTION_ERRORS
@provider.delivery_failure_tracker.track_failure!
raise
end
def request_headers(_verb, _url, body = '')

View File

@@ -118,6 +118,10 @@ class Fasp::Provider < ApplicationRecord
save!
end
def delivery_failure_tracker
@delivery_failure_tracker ||= DeliveryFailureTracker.new(base_url, resolution: :minutes)
end
private
def create_keypair

View File

@@ -27,6 +27,14 @@ RSpec.describe Fasp::Request do
'Signature-Input' => /.+/,
})
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
context 'when the response is not signed' do
@@ -55,6 +63,21 @@ RSpec.describe Fasp::Request do
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
describe '#get' do

View File

@@ -206,4 +206,12 @@ RSpec.describe Fasp::Provider do
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