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
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
+2 -1
View File
@@ -61,6 +61,7 @@ RSpec.configure do |config|
config.infer_spec_type_from_file_location!
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
+12 -54
View File
@@ -37,64 +37,22 @@ end
def login(user)
visit "/"
within(".signup") do
fill_in "email", with: user.email
fill_in "password", with: user.clear_password
end
within(".actions") do
click_on "Login"
end
click_button "Login"
end
##Hack to fix PhantomJS errors on Mavericks - https://gist.github.com/ericboehs/7125105
module Capybara::Poltergeist
class Client
private
def redirect_stdout
prev = STDOUT.dup
prev.autoclose = false
$stdout = @write_io
STDOUT.reopen(@write_io)
# Configure Selenium with headless Chrome for JavaScript testing
# This works across macOS, Linux, and Windows without requiring Firefox
Capybara.register_driver :selenium_chrome_headless do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--window-size=1920,1080")
prev = STDERR.dup
prev.autoclose = false
$stderr = @write_io
STDERR.reopen(@write_io)
yield
ensure
STDOUT.reopen(prev)
$stdout = STDOUT
STDERR.reopen(prev)
$stderr = STDERR
end
end
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
class WarningSuppressor
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
Capybara.javascript_driver = :selenium_chrome_headless
@@ -6,7 +6,6 @@ feature "improper password hashing" do
before do
UserFixture.reset_all_users
pending unless verifying_fixed?
end
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.save!
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