mirror of
https://github.com/discourse/discourse.git
synced 2025-02-06 19:38:24 +00:00
3193afe7ca
Since switching to Maxmind permalinks to download the databases in 7079698cdfb6f0cd73cdfd305b15350634fcd56a, we have received multiple reports about rebuilds failing as `maxminddb:refresh` runs during the rebuilds and failing to download the databases cases the rebuilds to fail. Downloading Maxmind databases should not sit in the critical rebuild path but since we are close to the Discourse 3.3 release, we have opted to just rescue all errors encountered when downloading the databases. In the near future after the Discourse 3.3 release, we will be looking at moving the downloading of maxmind databases out of the rebuild path.
88 lines
3.3 KiB
Ruby
88 lines
3.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe DiscourseIpInfo do
|
|
describe ".mmdb_download" do
|
|
before { Discourse::Utils.stubs(:execute_command) }
|
|
|
|
it "should download the MaxMind databases from MaxMind's download permalinks when `maxmind_license_key` and `maxmind_account_id` global setting has been set" do
|
|
global_setting :maxmind_license_key, "license_key"
|
|
global_setting :maxmind_account_id, "account_id"
|
|
|
|
stub_request(
|
|
:get,
|
|
"https://download.maxmind.com/geoip/databases/GeoLite2-City/download?suffix=tar.gz",
|
|
).with(basic_auth: %w[account_id license_key]).to_return(
|
|
status: 302,
|
|
body: "",
|
|
headers: {
|
|
location:
|
|
"https://mm-prod-geoip-databases.a2649acb697e2c09b632799562c076f2.r2.cloudflarestorage.com/some-path",
|
|
},
|
|
)
|
|
|
|
stub_request(
|
|
:get,
|
|
"https://mm-prod-geoip-databases.a2649acb697e2c09b632799562c076f2.r2.cloudflarestorage.com/some-path",
|
|
).with { |req| expect(req.headers.key?("Authorization")).to eq(false) }.to_return(status: 200)
|
|
|
|
described_class.mmdb_download("GeoLite2-City")
|
|
end
|
|
|
|
it "should download the MaxMind databases from MaxMind's undocumented download URL when `maxmind_license_key` global setting has been set but not `maxmind_account_id` for backwards compatibility reasons" do
|
|
global_setting :maxmind_license_key, "license_key"
|
|
|
|
stub_request(
|
|
:get,
|
|
"https://download.maxmind.com/app/geoip_download?license_key=license_key&edition_id=GeoLite2-City&suffix=tar.gz",
|
|
).to_return(status: 200, body: "", headers: {})
|
|
|
|
described_class.mmdb_download("GeoLite2-City")
|
|
end
|
|
|
|
it "should download the MaxMind databases from the right URL when `maxmind_mirror_url` global setting has been configured" do
|
|
global_setting :maxmind_mirror_url, "https://b.www.example.com/mirror"
|
|
|
|
stub_request(:get, "https://b.www.example.com/mirror/GeoLite2-City.tar.gz").to_return(
|
|
status: 200,
|
|
body: "",
|
|
)
|
|
|
|
described_class.mmdb_download("GeoLite2-City")
|
|
end
|
|
|
|
it "should download the MaxMind databases from the right URL when `maxmind_mirror_url` global setting has been configured and has a trailing slash" do
|
|
global_setting :maxmind_mirror_url, "https://b.www.example.com/mirror/"
|
|
|
|
stub_request(:get, "https://b.www.example.com/mirror/GeoLite2-City.tar.gz").to_return(
|
|
status: 200,
|
|
body: "",
|
|
)
|
|
|
|
described_class.mmdb_download("GeoLite2-City")
|
|
end
|
|
|
|
it "should not throw an error and instead log the exception when database file fails to download" do
|
|
original_logger = Rails.logger
|
|
Rails.logger = fake_logger = FakeLogger.new
|
|
|
|
global_setting :maxmind_license_key, "license_key"
|
|
global_setting :maxmind_account_id, "account_id"
|
|
|
|
stub_request(
|
|
:get,
|
|
"https://download.maxmind.com/geoip/databases/GeoLite2-City/download?suffix=tar.gz",
|
|
).with(basic_auth: %w[account_id license_key]).to_return(status: 500, body: nil, headers: {})
|
|
|
|
expect do described_class.mmdb_download("GeoLite2-City") end.not_to raise_error
|
|
|
|
expect(fake_logger.warnings.length).to eq(1)
|
|
|
|
expect(fake_logger.warnings.first).to include(
|
|
"MaxMind database GeoLite2-City download failed. 500 Error",
|
|
)
|
|
ensure
|
|
Rails.logger = original_logger
|
|
end
|
|
end
|
|
end
|