class WSDirector::CLI

Command line interface for WsDirector

Public Class Methods

new() click to toggle source
# File lib/wsdirector/cli.rb, line 12
def initialize
end

Public Instance Methods

run() click to toggle source
# File lib/wsdirector/cli.rb, line 15
def run
  parse_args!

  begin
    require "colorize" if WSDirector.config.colorize?
  rescue LoadError
    WSDirector.config.colorize = false
    warn "Install colorize to use colored output"
  end

  scenario = WSDirector::ScenarioReader.parse(
    WSDirector.config.scenario_path
  )

  if WSDirector::Runner.new(scenario).start
    exit 0
  else
    exit 1
  end
rescue Error => e
  warn e.message
  exit 1
end

Private Instance Methods

parse_args!() click to toggle source
# File lib/wsdirector/cli.rb, line 41
def parse_args!
  # rubocop: disable Metrics/LineLength
  parser = OptionParser.new do |opts|
    opts.banner = "Usage: wsdirector scenario_path ws_url [options]"

    opts.on("-s SCALE", "--scale=SCALE", Integer, "Scale factor") do |v|
      WSDirector.config.scale = v
    end

    opts.on("-t TIMEOUT", "--timeout=TIMEOUT", Integer, "Synchronization (wait_all) timeout") do |v|
      WSDirector.config.sync_timeout = v
    end

    opts.on("-c", "--[no-]color", "Colorize output") do |v|
      WSDirector.config.colorize = v
    end

    opts.on("-v", "--version", "Print versin") do
      $stdout.puts WSDirector::VERSION
      exit 0
    end
  end
  # rubocop: enable Metrics/LineLength

  parser.parse!

  WSDirector.config.scenario_path = ARGV[0]
  WSDirector.config.ws_url = ARGV[1]

  raise(Error, "Scenario path is missing") if WSDirector.config.scenario_path.nil?

  raise(Error, "File doesn't exist #{WSDirector.config.scenario_path}") unless
    File.file?(WSDirector.config.scenario_path)

  raise(Error, "Websocket server url is missing") if WSDirector.config.ws_url.nil?
end