Track delivery failures to FASP (#35628)
This commit is contained in:
@@ -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 = '')
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user