Sha256: b51fe1509c4925b99e9f636986af2e5ff8befe7fac1054597d7c3105965a3c92

Contents?: true

Size: 1.66 KB

Versions: 3

Compression:

Stored size: 1.66 KB

Contents

module Foodtaster
  class RSpecRun
    attr_reader :client

    def initialize
      @client = nil
      @server_process = nil
      @stopped = false
    end

    def start
      setup_signal_handlers
      start_server_and_connect_client

      if (@server_process.nil? || @server_process.alive?) && @client
        # prepare_required_vms
      else
        if @server_process
          Foodtaster.logger.fatal "Failed to start Foodtaster DRb Server:\n\n#{@server_process.output}"
        else
          Foodtaster.logger.fatal "Failed to connect to Foodtaster DRb Server"
        end

        exit 1
      end
    end

    def stop
      return if @stopped

      @stopped = true
      puts "" # newline after rspec output
      Vm.shutdown_running_vms if Foodtaster.config.shutdown_vms
      terminate_server
    end

    def client
      @client
    end

    class << self
      @instance = nil

      def current
        @instance ||= self.new
      end
    end

    private

    def setup_signal_handlers
      terminator = proc {
        self.stop
        exit 1
      }

      trap("INT", &terminator)
      trap("TERM", &terminator)

      at_exit do
        self.stop
      end
    end

    def start_server_and_connect_client
      drb_port = Foodtaster.config.drb_port

      start_server(drb_port) if Foodtaster.config.start_server
      connect_client(drb_port)
    end

    def start_server(drb_port)
      @server_process = Foodtaster::ServerProcess.new(drb_port)
    end

    def terminate_server
      @server_process && @server_process.terminate
    end

    def connect_client(drb_port)
      @client = Foodtaster::Client.connect(drb_port, @server_process)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
foodtaster-0.0.8 lib/foodtaster/rspec_run.rb
foodtaster-0.0.7 lib/foodtaster/rspec_run.rb
foodtaster-0.0.6 lib/foodtaster/rspec_run.rb