X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/964ab3dd90ff1508efc0c77378cde2b3a4da1029..25b000e2eefa9d2cfd454bb9a27518a882bb21a1:/services/api/test/websocket_runner.rb diff --git a/services/api/test/websocket_runner.rb b/services/api/test/websocket_runner.rb index df72e246a6..be32a0f299 100644 --- a/services/api/test/websocket_runner.rb +++ b/services/api/test/websocket_runner.rb @@ -1,13 +1,18 @@ require 'bundler' +require 'socket' $ARV_API_SERVER_DIR = File.expand_path('../..', __FILE__) -SERVER_PID_PATH = 'tmp/pids/passenger.3002.pid' + +s = TCPServer.new('0.0.0.0', 0) +WEBSOCKET_PORT = s.addr[1] +s.close +SERVER_PID_PATH = "tmp/pids/passenger.#{WEBSOCKET_PORT}.pid" class WebsocketTestRunner < MiniTest::Unit def _system(*cmd) Bundler.with_clean_env do if not system({'ARVADOS_WEBSOCKETS' => 'ws-only', 'RAILS_ENV' => 'test'}, *cmd) - raise RuntimeError, "#{cmd[0]} returned exit code #{$?.exitstatus}" + raise RuntimeError, "Command failed with exit status #{$?}: #{cmd.inspect}" end end end @@ -15,7 +20,7 @@ class WebsocketTestRunner < MiniTest::Unit def _run(args=[]) server_pid = Dir.chdir($ARV_API_SERVER_DIR) do |apidir| # Only passenger seems to be able to run the websockets server successfully. - _system('passenger', 'start', '-d', '-p3002') + _system('passenger', 'start', '-d', "-p#{WEBSOCKET_PORT}") timeout = Time.now.tv_sec + 10 begin sleep 0.2 @@ -34,7 +39,13 @@ class WebsocketTestRunner < MiniTest::Unit begin super(args) ensure - Process.kill('TERM', server_pid) + Dir.chdir($ARV_API_SERVER_DIR) do + _system('passenger', 'stop', "-p#{WEBSOCKET_PORT}") + end + # DatabaseCleaner leaves the database empty. Prefer to leave it full. + dc = DatabaseController.new + dc.define_singleton_method :render do |*args| end + dc.reset end end end