Merge pull request #487 from OWASP/fix/ubuntu-test-failures-issue-486

Fix test failures on Ubuntu and other platforms (issue #486)
This commit is contained in:
Ken Johnson
2026-01-04 17:39:50 -05:00
committed by GitHub
4 changed files with 26 additions and 59 deletions
+3
View File
@@ -57,5 +57,8 @@ module Railsgoat
I18n.config.enforce_available_locales = false I18n.config.enforce_available_locales = false
config.action_dispatch.return_only_media_type_on_content_type = false config.action_dispatch.return_only_media_type_on_content_type = false
# Opt in to Rails 8.1 behavior for to_time timezone preservation
config.active_support.to_time_preserves_timezone = :zone
end end
end end
+2 -1
View File
@@ -61,6 +61,7 @@ RSpec.configure do |config|
config.infer_spec_type_from_file_location! config.infer_spec_type_from_file_location!
end end
Capybara.javascript_driver = :selenium_headless # Driver is configured in spec/support/capybara_shared.rb
# to use :poltergeist (PhantomJS) which is more reliable across platforms
DatabaseCleaner.strategy = :truncation DatabaseCleaner.strategy = :truncation
+14 -56
View File
@@ -37,64 +37,22 @@ end
def login(user) def login(user)
visit "/" visit "/"
within(".signup") do fill_in "email", with: user.email
fill_in "email", with: user.email fill_in "password", with: user.clear_password
fill_in "password", with: user.clear_password click_button "Login"
end
within(".actions") do
click_on "Login"
end
end end
##Hack to fix PhantomJS errors on Mavericks - https://gist.github.com/ericboehs/7125105 # Configure Selenium with headless Chrome for JavaScript testing
module Capybara::Poltergeist # This works across macOS, Linux, and Windows without requiring Firefox
class Client Capybara.register_driver :selenium_chrome_headless do |app|
private options = Selenium::WebDriver::Chrome::Options.new
def redirect_stdout options.add_argument("--headless")
prev = STDOUT.dup options.add_argument("--disable-gpu")
prev.autoclose = false options.add_argument("--no-sandbox")
$stdout = @write_io options.add_argument("--disable-dev-shm-usage")
STDOUT.reopen(@write_io) options.add_argument("--window-size=1920,1080")
prev = STDERR.dup Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
prev.autoclose = false
$stderr = @write_io
STDERR.reopen(@write_io)
yield
ensure
STDOUT.reopen(prev)
$stdout = STDOUT
STDERR.reopen(prev)
$stderr = STDERR
end
end
end end
class WarningSuppressor Capybara.javascript_driver = :selenium_chrome_headless
IGNORE_PATTERNS = [
/QFont::setPixelSize: Pixel size <= 0/,
/CoreText performance note:/,
/WARNING: Method userSpaceScaleFactor/
]
def write(message)
if ignore?(message)
0
else
puts(message)
1
end
end
private
def ignore?(message)
IGNORE_PATTERNS.any? { |regexp| message =~ regexp }
end
end
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, phantomjs_logger: WarningSuppressor.new, timeout: 60)
end
Capybara.javascript_driver = :poltergeist
@@ -6,7 +6,6 @@ feature "improper password hashing" do
before do before do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed?
end end
scenario "with just md5\nTutorial: https://github.com/OWASP/railsgoat/wiki/A6-Sensitive-Data-Exposure-Insecure-Password-Storage" do scenario "with just md5\nTutorial: https://github.com/OWASP/railsgoat/wiki/A6-Sensitive-Data-Exposure-Insecure-Password-Storage" do
@@ -15,7 +14,13 @@ feature "improper password hashing" do
normal_user.password_confirmation = new_pass normal_user.password_confirmation = new_pass
normal_user.save! normal_user.save!
expect(normal_user.password).not_to eq(Digest::MD5.hexdigest(new_pass)) if verifying_fixed?
# Training mode: expect BCrypt (not MD5) - test should fail because vulnerability exists
expect(normal_user.password).not_to eq(Digest::MD5.hexdigest(new_pass))
else
# Maintainer mode: expect MD5 to verify vulnerability still exists - test should pass
expect(normal_user.password).to eq(Digest::MD5.hexdigest(new_pass))
end
end end
end end