1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- RSpec.configure do |config|
- config.around(:each, type: :system) do |example|
- server_required = example.metadata.fetch(:websocket, true)
- if server_required
- port = ENV['WS_PORT'] || 6042
- ensure_port_available!(port)
- ws_thread = Thread.new do
- WebsocketServer.run(
- p: port,
- b: '0.0.0.0',
- s: true,
- v: false,
- d: false,
- tls_options: {
- private_key_file: "#{Dir.home}/.localhost/localhost.key",
- cert_chain_file: "#{Dir.home}/.localhost/localhost.crt",
- }
- )
- end
- end
- example.run
- rescue => e
-
-
- example.example.set_exception(e)
- ensure
- stop_websocket_server(ws_thread) if server_required
- end
- def stop_websocket_server(ws_thread)
-
- EventMachine.stop_event_loop if ws_thread.status
-
- sleep 0.01 while ws_thread.status
- rescue => e
- Rails.logger.error "Error occurred during web socket server shutdown: #{e}"
- $stderr.puts "Error occurred during web socket server shutdown: #{e}"
-
- end
- def ensure_port_available!(port)
- %w[0.0.0.0 127.0.0.1].each do |host|
- TCPServer.new(host, port).close
- end
- rescue Errno::EADDRINUSE
- raise "Couldn't start WebSocket server. Maybe another websocket server process is already running?"
- end
- end
|