DEV: Use FakeLogger in RequestTracker specs (#16640)

`TestLogger` was responsible for some flaky specs runs:

```
Error during failsafe response: undefined method `debug' for #<TestLogger:0x0000556c4b942cf0 @warnings=1>
Did you mean?  debugger
```

This commit also cleans up other uses of `FakeLogger`
This commit is contained in:
Jarek Radosz
2022-05-05 03:53:54 +02:00
committed by GitHub
parent 749e496a2c
commit 3f0e767106
10 changed files with 30 additions and 56 deletions

View File

@@ -1,6 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
RSpec.describe Jobs::MigrateBadgeImageToUploads do describe Jobs::MigrateBadgeImageToUploads do
let(:image_url) { "https://omg.aws.somestack/test.png" } let(:image_url) { "https://omg.aws.somestack/test.png" }
let(:badge) { Fabricate(:badge) } let(:badge) { Fabricate(:badge) }
@@ -35,8 +35,8 @@ RSpec.describe Jobs::MigrateBadgeImageToUploads do
it 'should skip badges with invalid flair URLs' do it 'should skip badges with invalid flair URLs' do
DB.exec("UPDATE badges SET image = 'abc' WHERE id = ?", badge.id) DB.exec("UPDATE badges SET image = 'abc' WHERE id = ?", badge.id)
described_class.new.execute_onceoff({}) described_class.new.execute_onceoff({})
expect(Rails.logger.warnings.count).to eq(0) expect(@fake_logger.warnings.count).to eq(0)
expect(Rails.logger.errors.count).to eq(0) expect(@fake_logger.errors.count).to eq(0)
end end
# this case has a couple of hacks that are needed to test this behavior, so if it # this case has a couple of hacks that are needed to test this behavior, so if it
@@ -58,6 +58,6 @@ RSpec.describe Jobs::MigrateBadgeImageToUploads do
expect(badge.image_upload).to eq(nil) expect(badge.image_upload).to eq(nil)
expect(badge.image_url).to eq(nil) expect(badge.image_url).to eq(nil)
expect(Badge.where(id: badge.id).select(:image).first[:image]).to eq(image_url) expect(Badge.where(id: badge.id).select(:image).first[:image]).to eq(image_url)
expect(Rails.logger.warnings.count).to eq(3) expect(@fake_logger.warnings.count).to eq(3)
end end
end end

View File

@@ -1,6 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
RSpec.describe Jobs::MigrateGroupFlairImages do describe Jobs::MigrateGroupFlairImages do
let(:image_url) { "https://omg.aws.somestack/test.png" } let(:image_url) { "https://omg.aws.somestack/test.png" }
let(:group) { Fabricate(:group) } let(:group) { Fabricate(:group) }
@@ -35,6 +35,6 @@ RSpec.describe Jobs::MigrateGroupFlairImages do
it 'should skip groups with invalid flair URLs' do it 'should skip groups with invalid flair URLs' do
DB.exec("UPDATE groups SET flair_url = 'abc' WHERE id = #{group.id}") DB.exec("UPDATE groups SET flair_url = 'abc' WHERE id = #{group.id}")
described_class.new.execute_onceoff({}) described_class.new.execute_onceoff({})
expect(Rails.logger.warnings.count).to eq(0) expect(@fake_logger.warnings.count).to eq(0)
end end
end end

View File

@@ -91,11 +91,11 @@ describe DiscourseHub do
DiscourseHub.collection_action(:get, '/test') DiscourseHub.collection_action(:get, '/test')
expect(Rails.logger.warnings).to eq([ expect(@fake_logger.warnings).to eq([
DiscourseHub.response_status_log_message('/test', 500), DiscourseHub.response_status_log_message('/test', 500),
]) ])
expect(Rails.logger.errors).to eq([ expect(@fake_logger.errors).to eq([
DiscourseHub.response_body_log_message("") DiscourseHub.response_body_log_message("")
]) ])
end end

View File

@@ -383,19 +383,19 @@ describe Discourse do
expect(old_method_caller(k)).to include("discourse_spec") expect(old_method_caller(k)).to include("discourse_spec")
expect(old_method_caller(k)).to include(k) expect(old_method_caller(k)).to include(k)
expect(Rails.logger.warnings).to eq([old_method_caller(k)]) expect(@fake_logger.warnings).to eq([old_method_caller(k)])
end end
it 'can report the deprecated version' do it 'can report the deprecated version' do
Discourse.deprecate(SecureRandom.hex, since: "2.1.0.beta1") Discourse.deprecate(SecureRandom.hex, since: "2.1.0.beta1")
expect(Rails.logger.warnings[0]).to include("(deprecated since Discourse 2.1.0.beta1)") expect(@fake_logger.warnings[0]).to include("(deprecated since Discourse 2.1.0.beta1)")
end end
it 'can report the drop version' do it 'can report the drop version' do
Discourse.deprecate(SecureRandom.hex, drop_from: "2.3.0") Discourse.deprecate(SecureRandom.hex, drop_from: "2.3.0")
expect(Rails.logger.warnings[0]).to include("(removal in Discourse 2.3.0)") expect(@fake_logger.warnings[0]).to include("(removal in Discourse 2.3.0)")
end end
it 'can raise deprecation error' do it 'can raise deprecation error' do

View File

@@ -49,7 +49,6 @@ describe Email::Processor do
end end
describe "rate limits" do describe "rate limits" do
let(:mail) { "From: #{from}\nTo: bar@foo.com\nSubject: FOO BAR\n\nFoo foo bar bar?" } let(:mail) { "From: #{from}\nTo: bar@foo.com\nSubject: FOO BAR\n\nFoo foo bar bar?" }
let(:limit_exceeded) { RateLimiter::LimitExceeded.new(10) } let(:limit_exceeded) { RateLimiter::LimitExceeded.new(10) }
@@ -68,11 +67,9 @@ describe Email::Processor do
expect { Email::Processor.process!(mail, retry_on_rate_limit: false) }.to raise_error(limit_exceeded) expect { Email::Processor.process!(mail, retry_on_rate_limit: false) }.to raise_error(limit_exceeded)
end end
end end
end end
context "known error" do context "known error" do
let(:mail) { "From: #{from}\nTo: bar@foo.com" } let(:mail) { "From: #{from}\nTo: bar@foo.com" }
let(:mail2) { "From: #{from}\nTo: foo@foo.com" } let(:mail2) { "From: #{from}\nTo: foo@foo.com" }
let(:mail3) { "From: #{from}\nTo: foobar@foo.com" } let(:mail3) { "From: #{from}\nTo: foobar@foo.com" }
@@ -101,7 +98,6 @@ describe Email::Processor do
end end
context "unrecognized error" do context "unrecognized error" do
let(:mail) { "Date: Fri, 15 Jan 2016 00:12:43 +0100\nFrom: #{from}\nTo: bar@foo.com\nSubject: FOO BAR\n\nFoo foo bar bar?" } let(:mail) { "Date: Fri, 15 Jan 2016 00:12:43 +0100\nFrom: #{from}\nTo: bar@foo.com\nSubject: FOO BAR\n\nFoo foo bar bar?" }
let(:mail2) { "Date: Fri, 15 Jan 2016 00:12:43 +0100\nFrom: #{from}\nTo: foo@foo.com\nSubject: BAR BAR\n\nBar bar bar bar?" } let(:mail2) { "Date: Fri, 15 Jan 2016 00:12:43 +0100\nFrom: #{from}\nTo: foo@foo.com\nSubject: BAR BAR\n\nBar bar bar bar?" }
@@ -115,7 +111,7 @@ describe Email::Processor do
Email::Processor.process!(mail) Email::Processor.process!(mail)
errors = Rails.logger.errors errors = @fake_logger.errors
expect(errors.size).to eq(1) expect(errors.size).to eq(1)
expect(errors.first).to include("boom") expect(errors.first).to include("boom")
@@ -142,11 +138,9 @@ describe Email::Processor do
Email::Processor.process!(mail2) Email::Processor.process!(mail2)
}.to change { EmailLog.count }.by(1) }.to change { EmailLog.count }.by(1)
end end
end end
context "from reply to email address" do context "from reply to email address" do
let(:mail) { "Date: Fri, 15 Jan 2016 00:12:43 +0100\nFrom: reply@bar.com\nTo: reply@bar.com\nSubject: FOO BAR\n\nFoo foo bar bar?" } let(:mail) { "Date: Fri, 15 Jan 2016 00:12:43 +0100\nFrom: reply@bar.com\nTo: reply@bar.com\nSubject: FOO BAR\n\nFoo foo bar bar?" }
it "ignores the email" do it "ignores the email" do
@@ -156,7 +150,6 @@ describe Email::Processor do
Email::Processor.process!(mail) Email::Processor.process!(mail)
}.to change { EmailLog.count }.by(0) }.to change { EmailLog.count }.by(0)
end end
end end
context "mailinglist mirror" do context "mailinglist mirror" do

View File

@@ -24,7 +24,6 @@ describe Middleware::RequestTracker do
end end
context "full request" do context "full request" do
it "can handle rogue user agents" do it "can handle rogue user agents" do
agent = (+"Evil Googlebot String \xc3\x28").force_encoding("Windows-1252") agent = (+"Evil Googlebot String \xc3\x28").force_encoding("Windows-1252")
@@ -35,12 +34,11 @@ describe Middleware::RequestTracker do
expect(WebCrawlerRequest.where(user_agent: agent.encode('utf-8')).count).to eq(1) expect(WebCrawlerRequest.where(user_agent: agent.encode('utf-8')).count).to eq(1)
end end
end end
context "log_request" do context "log_request" do
before do before do
freeze_time Time.now freeze_time
ApplicationRequest.clear_cache! ApplicationRequest.clear_cache!
end end
@@ -128,7 +126,7 @@ describe Middleware::RequestTracker do
expect(ApplicationRequest.page_view_anon.first.count).to eq(1) expect(ApplicationRequest.page_view_anon.first.count).to eq(1)
end end
context "ignore_anonymous_pageviews" do context "ignore anonymous page views" do
let(:anon_data) do let(:anon_data) do
Middleware::RequestTracker.get_data(env( Middleware::RequestTracker.get_data(env(
"HTTP_USER_AGENT" => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36" "HTTP_USER_AGENT" => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36"
@@ -183,26 +181,13 @@ describe Middleware::RequestTracker do
end end
context "rate limiting" do context "rate limiting" do
class TestLogger
attr_accessor :warnings
def initialize
@warnings = 0
end
def warn(*args)
@warnings += 1
end
end
before do before do
RateLimiter.enable RateLimiter.enable
RateLimiter.clear_all_global! RateLimiter.clear_all_global!
RateLimiter.clear_all! RateLimiter.clear_all!
@old_logger = Rails.logger @orig_logger = Rails.logger
Rails.logger = TestLogger.new Rails.logger = @fake_logger = FakeLogger.new
# rate limiter tests depend on checks for retry-after # rate limiter tests depend on checks for retry-after
# they can be sensitive to clock skew during test runs # they can be sensitive to clock skew during test runs
@@ -210,7 +195,7 @@ describe Middleware::RequestTracker do
end end
after do after do
Rails.logger = @old_logger Rails.logger = @orig_logger
end end
let :middleware do let :middleware do
@@ -244,7 +229,7 @@ describe Middleware::RequestTracker do
status, _ = middleware.call(env1) status, _ = middleware.call(env1)
status, _ = middleware.call(env1) status, _ = middleware.call(env1)
expect(Rails.logger.warnings).to eq(warn_count) expect(@fake_logger.warnings.count { |w| w.include?("Global IP rate limit exceeded") }).to eq(warn_count)
expect(status).to eq(429) expect(status).to eq(429)
warn_count += 1 warn_count += 1
end end
@@ -322,7 +307,7 @@ describe Middleware::RequestTracker do
status, _ = middleware.call(env1) status, _ = middleware.call(env1)
status, _ = middleware.call(env1) status, _ = middleware.call(env1)
expect(Rails.logger.warnings).to eq(0) expect(@fake_logger.warnings.count { |w| w.include?("Global IP rate limit exceeded") }).to eq(0)
expect(status).to eq(200) expect(status).to eq(200)
end end
end end
@@ -334,7 +319,7 @@ describe Middleware::RequestTracker do
status, _ = middleware.call(env) status, _ = middleware.call(env)
status, headers = middleware.call(env) status, headers = middleware.call(env)
expect(Rails.logger.warnings).to eq(1) expect(@fake_logger.warnings.count { |w| w.include?("Global IP rate limit exceeded") }).to eq(1)
expect(status).to eq(429) expect(status).to eq(429)
expect(headers["Retry-After"]).to eq("10") expect(headers["Retry-After"]).to eq("10")
end end
@@ -346,7 +331,7 @@ describe Middleware::RequestTracker do
status, _ = middleware.call(env) status, _ = middleware.call(env)
status, _ = middleware.call(env) status, _ = middleware.call(env)
expect(Rails.logger.warnings).to eq(1) expect(@fake_logger.warnings.count { |w| w.include?("Global IP rate limit exceeded") }).to eq(1)
expect(status).to eq(200) expect(status).to eq(200)
end end
@@ -577,7 +562,7 @@ describe Middleware::RequestTracker do
end end
end end
let :logger do let(:logger) do
->(env, data) do ->(env, data) do
@env = env @env = env
@data = data @data = data
@@ -620,7 +605,6 @@ describe Middleware::RequestTracker do
end end
it "can correctly log detailed data" do it "can correctly log detailed data" do
global_setting :enable_performance_http_headers, true global_setting :enable_performance_http_headers, true
# ensure pg is warmed up with the select 1 query # ensure pg is warmed up with the select 1 query

View File

@@ -209,7 +209,7 @@ describe Report do
end end
context "with #{request_type}" do context "with #{request_type}" do
before(:each) do before do
freeze_time DateTime.parse('2017-03-01 12:00') freeze_time DateTime.parse('2017-03-01 12:00')
application_requests = [ application_requests = [
{ date: 35.days.ago.to_time, req_type: ApplicationRequest.req_types[request_type.to_s], count: 35 }, { date: 35.days.ago.to_time, req_type: ApplicationRequest.req_types[request_type.to_s], count: 35 },
@@ -893,7 +893,7 @@ describe Report do
expect(report).to be_nil expect(report).to be_nil
expect(Rails.logger.errors).to eq([ expect(@fake_logger.errors).to eq([
'Couldnt create report `signups`: <ReportInitError x>' 'Couldnt create report `signups`: <ReportInitError x>'
]) ])
end end

View File

@@ -614,7 +614,7 @@ HTML
it 'warns when the theme has modified the setting type but data cannot be converted' do it 'warns when the theme has modified the setting type but data cannot be converted' do
begin begin
@orig_logger = Rails.logger @orig_logger = Rails.logger
Rails.logger = FakeLogger.new Rails.logger = @fake_logger = FakeLogger.new
theme.set_field(target: :settings, name: :yaml, value: "valid_json_schema_setting:\n default: \"\"\n type: \"list\"") theme.set_field(target: :settings, name: :yaml, value: "valid_json_schema_setting:\n default: \"\"\n type: \"list\"")
theme.save! theme.save!
@@ -628,7 +628,7 @@ HTML
theme.convert_settings theme.convert_settings
expect(setting.value).to eq("red,globe") expect(setting.value).to eq("red,globe")
expect(Rails.logger.warnings[0]).to include("Theme setting type has changed but cannot be converted.") expect(@fake_logger.warnings[0]).to include("Theme setting type has changed but cannot be converted.")
ensure ensure
Rails.logger = @orig_logger Rails.logger = @orig_logger
end end

View File

@@ -375,7 +375,6 @@ RSpec.describe ApplicationController do
end end
describe 'no logspam' do describe 'no logspam' do
before do before do
@orig_logger = Rails.logger @orig_logger = Rails.logger
Rails.logger = @fake_logger = FakeLogger.new Rails.logger = @fake_logger = FakeLogger.new
@@ -386,7 +385,6 @@ RSpec.describe ApplicationController do
end end
it 'should handle 404 to a css file' do it 'should handle 404 to a css file' do
Discourse.cache.delete("page_not_found_topics:#{I18n.locale}") Discourse.cache.delete("page_not_found_topics:#{I18n.locale}")
topic1 = Fabricate(:topic) topic1 = Fabricate(:topic)
@@ -400,10 +398,9 @@ RSpec.describe ApplicationController do
expect(response.body).to include(topic1.title) expect(response.body).to include(topic1.title)
expect(response.body).to_not include(topic2.title) expect(response.body).to_not include(topic2.title)
expect(Rails.logger.fatals.length).to eq(0) expect(@fake_logger.fatals.length).to eq(0)
expect(Rails.logger.errors.length).to eq(0) expect(@fake_logger.errors.length).to eq(0)
expect(Rails.logger.warnings.length).to eq(0) expect(@fake_logger.warnings.length).to eq(0)
end end
end end

View File

@@ -50,7 +50,7 @@ describe CspReportsController do
it 'logs the violation report' do it 'logs the violation report' do
send_report send_report
expect(Rails.logger.warnings).to include("CSP Violation: 'http://suspicio.us/assets.js' \n\nconsole.log('unsafe')") expect(@fake_logger.warnings).to include("CSP Violation: 'http://suspicio.us/assets.js' \n\nconsole.log('unsafe')")
end end
end end
end end