X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f4ca9ad94a6bb006d1f3c7ba207837f1736d1247..0e5198142fdba0ce2af6eb2852d45dff46ffb2e2:/apps/workbench/test/integration_helper.rb diff --git a/apps/workbench/test/integration_helper.rb b/apps/workbench/test/integration_helper.rb index 785912d324..3d92585135 100644 --- a/apps/workbench/test/integration_helper.rb +++ b/apps/workbench/test/integration_helper.rb @@ -5,10 +5,20 @@ require 'uri' require 'yaml' def available_port for_what - Addrinfo.tcp("0.0.0.0", 0).listen do |srv| - port = srv.connect_address.ip_port - STDERR.puts "Using port #{port} for #{for_what}" - return port + begin + Addrinfo.tcp("0.0.0.0", 0).listen do |srv| + port = srv.connect_address.ip_port + # Selenium needs an additional locking port, check if it's available + # and retry if necessary. + if for_what == 'selenium' + locking_port = port - 1 + Addrinfo.tcp("0.0.0.0", locking_port).listen.close + end + STDERR.puts "Using port #{port} for #{for_what}" + return port + end + rescue Errno::EADDRINUSE, Errno::EACCES + retry end end @@ -34,6 +44,11 @@ Capybara.register_driver :poltergeist_debug do |app| Capybara::Poltergeist::Driver.new app, poltergeist_opts.merge(inspector: true) end +Capybara.register_driver :poltergeist_with_fake_websocket do |app| + js = File.expand_path '../support/fake_websocket.js', __FILE__ + Capybara::Poltergeist::Driver.new app, poltergeist_opts.merge(extensions: [js]) +end + Capybara.register_driver :poltergeist_without_file_api do |app| js = File.expand_path '../support/remove_file_api.js', __FILE__ Capybara::Poltergeist::Driver.new app, poltergeist_opts.merge(extensions: [js]) @@ -56,16 +71,24 @@ Capybara.register_driver :selenium_with_download do |app| end module WaitForAjax + # FIXME: Huge side effect here + # The following line changes the global default Capybara wait time, affecting + # every test which follows this one. This should be removed and the failing tests + # should have their individual wait times increased, if appropriate, using + # the using_wait_time(N) construct to temporarily change the wait time. + # Note: the below is especially bad because there are places that increase wait + # times using a multiplier e.g. using_wait_time(3 * Capybara.default_max_wait_time) Capybara.default_max_wait_time = 10 def wait_for_ajax - Timeout.timeout(Capybara.default_max_wait_time) do - loop until finished_all_ajax_requests? + timeout = 10 + count = 0 + while page.evaluate_script("jQuery.active").to_i > 0 + count += 1 + raise "AJAX request took more than #{timeout} seconds" if count > timeout * 10 + sleep(0.1) end end - def finished_all_ajax_requests? - page.evaluate_script('jQuery.active').zero? - end end module AssertDomEvent