diff --git a/test/helper.rb b/test/helper.rb index da44d2c3..162fbdaf 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -30,7 +30,10 @@ def flush_connections class FunctionalTest < Minitest::Test def setup require_relative "support/docker_wrapper" - DockerWrapper.start unless DockerWrapper.running? + return if DockerWrapper.running? + + DockerWrapper.start + DockerWrapper.wait_for_ssh_server end end diff --git a/test/support/docker_wrapper.rb b/test/support/docker_wrapper.rb index 428503cb..5d6d8393 100644 --- a/test/support/docker_wrapper.rb +++ b/test/support/docker_wrapper.rb @@ -1,14 +1,18 @@ +require "socket" + Minitest.after_run do DockerWrapper.stop if DockerWrapper.running? end module DockerWrapper + SSH_SERVER_PORT = 2122 + class << self def host SSHKit::Host.new( user: "deployer", hostname: "localhost", - port: "2122", + port: SSH_SERVER_PORT, password: "topsecret", ssh_options: host_verify_options ) @@ -27,6 +31,14 @@ def stop run_compose_command("down") end + def wait_for_ssh_server(retries=3) + Socket.tcp("localhost", SSH_SERVER_PORT, connect_timeout: 1).close + rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT + retries -= 1 + sleep(2) && retry if retries.positive? + raise + end + private def run_compose_command(command, echo=true)