write tests for Sender and HydraWrapper
This commit is contained in:
parent
2d4f9a60d5
commit
b39582f754
3 changed files with 164 additions and 0 deletions
|
|
@ -0,0 +1,79 @@
|
||||||
|
module DiasporaFederation
|
||||||
|
describe Federation::Sender::HydraWrapper do
|
||||||
|
let(:sender_id) { FactoryGirl.generate(:diaspora_id) }
|
||||||
|
let(:obj_str) { "status_message@guid" }
|
||||||
|
let(:xml) { "<xml>post</xml>" }
|
||||||
|
let(:url) { "http://example.org/receive/public" }
|
||||||
|
let(:url2) { "http://example.com/receive/public" }
|
||||||
|
|
||||||
|
let(:hydra) { Typhoeus::Hydra.new }
|
||||||
|
let(:hydra_wrapper) { Federation::Sender::HydraWrapper.new(sender_id, obj_str) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(Typhoeus::Hydra).to receive(:new).and_return(hydra)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#insert_job" do
|
||||||
|
it "queues a request to hydra" do
|
||||||
|
expect(hydra).to receive(:queue).with(kind_of(Typhoeus::Request))
|
||||||
|
expect(Typhoeus::Request).to receive(:new)
|
||||||
|
.with(url, Federation::Sender::HydraWrapper.hydra_opts.merge(body: {xml: xml}))
|
||||||
|
.and_call_original
|
||||||
|
|
||||||
|
hydra_wrapper.insert_job(url, xml)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "queues multiple requests to hydra" do
|
||||||
|
expect(hydra).to receive(:queue).twice.with(kind_of(Typhoeus::Request))
|
||||||
|
|
||||||
|
hydra_wrapper.insert_job(url, xml)
|
||||||
|
hydra_wrapper.insert_job(url2, xml)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#send" do
|
||||||
|
let(:response) {
|
||||||
|
Typhoeus::Response.new(
|
||||||
|
code: 200,
|
||||||
|
body: "",
|
||||||
|
time: 0.2,
|
||||||
|
effective_url: url.sub("http://", "https://"),
|
||||||
|
return_code: :ok
|
||||||
|
)
|
||||||
|
}
|
||||||
|
let(:error_response) {
|
||||||
|
Typhoeus::Response.new(
|
||||||
|
code: 0,
|
||||||
|
body: "",
|
||||||
|
time: 0.2,
|
||||||
|
effective_url: url2,
|
||||||
|
return_code: :couldnt_resolve_host
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
before do
|
||||||
|
Typhoeus.stub(url).and_return(response)
|
||||||
|
Typhoeus.stub(url2).and_return(error_response)
|
||||||
|
hydra_wrapper.insert_job(url, xml)
|
||||||
|
hydra_wrapper.insert_job(url2, xml)
|
||||||
|
end
|
||||||
|
before :all do
|
||||||
|
WebMock::HttpLibAdapters::TyphoeusAdapter.disable!
|
||||||
|
end
|
||||||
|
after :all do
|
||||||
|
WebMock::HttpLibAdapters::TyphoeusAdapter.enable!
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns all failed urls" do
|
||||||
|
expect(hydra_wrapper.send).to eq([url2])
|
||||||
|
end
|
||||||
|
|
||||||
|
it "calls the update_pod callback for all responses with effective_url and success-status" do
|
||||||
|
expect(DiasporaFederation.callbacks).to receive(:trigger).with(:update_pod, "https://example.org/", true)
|
||||||
|
expect(DiasporaFederation.callbacks).to receive(:trigger).with(:update_pod, "http://example.com/", false)
|
||||||
|
|
||||||
|
hydra_wrapper.send
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
62
spec/lib/diaspora_federation/federation/sender_spec.rb
Normal file
62
spec/lib/diaspora_federation/federation/sender_spec.rb
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
module DiasporaFederation
|
||||||
|
describe Federation::Sender do
|
||||||
|
let(:sender_id) { FactoryGirl.generate(:diaspora_id) }
|
||||||
|
let(:obj_str) { "status_message@guid" }
|
||||||
|
let(:hydra_wrapper) { double }
|
||||||
|
|
||||||
|
before do
|
||||||
|
expect(Federation::Sender::HydraWrapper).to receive(:new).with(sender_id, obj_str).and_return(hydra_wrapper)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe ".public" do
|
||||||
|
let(:xml) { "<xml>post</xml>" }
|
||||||
|
let(:urls) { ["https://example.org/receive/public", "https://example.com/receive/public"] }
|
||||||
|
|
||||||
|
before do
|
||||||
|
expect(hydra_wrapper).to receive(:insert_job).with(urls.at(0), xml)
|
||||||
|
expect(hydra_wrapper).to receive(:insert_job).with(urls.at(1), xml)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns empty array if send was successful" do
|
||||||
|
expect(hydra_wrapper).to receive(:send).and_return([])
|
||||||
|
|
||||||
|
expect(Federation::Sender.public(sender_id, obj_str, urls, xml)).to eq([])
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns failing urls array if send was not successful" do
|
||||||
|
failing_urls = ["https://example.com/receive/public"]
|
||||||
|
expect(hydra_wrapper).to receive(:send).and_return(failing_urls)
|
||||||
|
|
||||||
|
expect(Federation::Sender.public(sender_id, obj_str, urls, xml)).to eq(failing_urls)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe ".private" do
|
||||||
|
let(:targets) {
|
||||||
|
{
|
||||||
|
"https://example.org/receive/user/guid" => "<xml>post</xml>",
|
||||||
|
"https://example.com/receive/user/guid" => "<xml>post2</xml>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
before do
|
||||||
|
targets.each do |url, xml|
|
||||||
|
expect(hydra_wrapper).to receive(:insert_job).with(url, xml)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns empty array if send was successful" do
|
||||||
|
expect(hydra_wrapper).to receive(:send).and_return([])
|
||||||
|
|
||||||
|
expect(Federation::Sender.private(sender_id, obj_str, targets)).to eq({})
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns failing urls array if send was not successful" do
|
||||||
|
expect(hydra_wrapper).to receive(:send).and_return(["https://example.com/receive/user/guid"])
|
||||||
|
|
||||||
|
expect(Federation::Sender.private(sender_id, obj_str, targets))
|
||||||
|
.to eq("https://example.com/receive/user/guid" => "<xml>post2</xml>")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -45,6 +45,29 @@ module DiasporaFederation
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "http configs" do
|
||||||
|
it "should fail if the http_concurrency is not a number" do
|
||||||
|
DiasporaFederation.http_concurrency = nil
|
||||||
|
expect { DiasporaFederation.validate_config }.to raise_error ConfigurationError,
|
||||||
|
"http_concurrency: please configure a number"
|
||||||
|
DiasporaFederation.http_concurrency = 20
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should fail if the http_timeout is not a number" do
|
||||||
|
DiasporaFederation.http_timeout = nil
|
||||||
|
expect { DiasporaFederation.validate_config }.to raise_error ConfigurationError,
|
||||||
|
"http_timeout: please configure a number"
|
||||||
|
DiasporaFederation.http_timeout = 30
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should fail if the http_verbose is not a boolean" do
|
||||||
|
DiasporaFederation.http_verbose = nil
|
||||||
|
expect { DiasporaFederation.validate_config }.to raise_error ConfigurationError,
|
||||||
|
"http_verbose: please configure a boolean"
|
||||||
|
DiasporaFederation.http_verbose = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "should validate the callbacks" do
|
it "should validate the callbacks" do
|
||||||
expect(DiasporaFederation.callbacks).to receive(:definition_complete?).and_return(false)
|
expect(DiasporaFederation.callbacks).to receive(:definition_complete?).and_return(false)
|
||||||
expect { DiasporaFederation.validate_config }.to raise_error ConfigurationError, "Missing handlers for "
|
expect { DiasporaFederation.validate_config }.to raise_error ConfigurationError, "Missing handlers for "
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue