Class: DeepTest::Options

Inherits:
Object
  • Object
show all
Defined in:
lib/deep_test/options.rb

Defined Under Namespace

Classes: InvalidOptionError

Constant Summary collapse

VALID_OPTIONS =
[
  Option.new(:distributed_server, Option::String, nil),
  Option.new(:number_of_workers,  Option::Integer, 2),
  Option.new(:metrics_file,       Option::String, nil),
  Option.new(:pattern,            Option::String, nil),
  Option.new(:server_port,        Option::Integer, 6969),
  Option.new(:sync_options,       Option::Hash, {}),
  Option.new(:timeout_in_seconds, Option::Integer, 30),
  Option.new(:ui,                 Option::String, "DeepTest::UI::Console"),
  Option.new(:worker_listener,    Option::String, "DeepTest::NullWorkerListener"),
  Option.new(:libs,               Option::Array, []),
  Option.new(:requires,           Option::Array, []),
  Option.new(:test_collector,     Option::Symbol, :objectspace),
]
UI_INSTANCES =

Don’t store UI instances in the options instance, which will need to be dumped over DRb. UI instances may not be dumpable and we don’t want to have to start yet another DRb Server

{}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash) ⇒ Options

Returns a new instance of Options.



38
39
40
41
42
43
44
# File 'lib/deep_test/options.rb', line 38

def initialize(hash)
  @origin_hostname = Socket.gethostname
  check_option_keys(hash)
  VALID_OPTIONS.each do |option|
    send("#{option.name}=", hash[option.name] || option.default)
  end
end

Class Method Details

.from_command_line(command_line) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/deep_test/options.rb', line 30

def self.from_command_line(command_line)
  hash = {}
  VALID_OPTIONS.each do |option|
    hash[option.name] = option.from_command_line(command_line)
  end
  new(hash)
end

Instance Method Details

#gathering_metrics?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/deep_test/options.rb', line 46

def gathering_metrics?
  !@metrics_file.nil?
end

#mirror_path(base) ⇒ Object



79
80
81
82
83
# File 'lib/deep_test/options.rb', line 79

def mirror_path(base)
  raise "No source directory specified in sync_options" unless sync_options[:source]
  relative_mirror_path = origin_hostname + sync_options[:source].gsub('/','_')
  "#{base}/#{relative_mirror_path}"
end

#new_listener_listObject



50
51
52
53
54
55
# File 'lib/deep_test/options.rb', line 50

def new_listener_list
  listeners = worker_listener.split(',').map do |listener|
    eval(listener).new
  end
  ListenerList.new(listeners)
end

#new_workersObject



85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/deep_test/options.rb', line 85

def new_workers
  if distributed_server.nil?
    LocalWorkers.new self
  else
    begin
      server = Distributed::TestServer.connect(self)
      Distributed::RemoteWorkerClient.new(self, server, LocalWorkers.new(self))
    rescue => e
      ui_instance.distributed_failover_to_local("connect", e)
      LocalWorkers.new self
    end
  end
end

#origin_hostnameObject



57
58
59
# File 'lib/deep_test/options.rb', line 57

def origin_hostname
  @origin_hostname
end

#serverObject



99
100
101
# File 'lib/deep_test/options.rb', line 99

def server
  Server.remote_reference(origin_hostname, server_port)
end

#to_command_lineObject



70
71
72
73
74
75
76
77
# File 'lib/deep_test/options.rb', line 70

def to_command_line
  command_line = []
  VALID_OPTIONS.each do |option|
    value = send(option.name)
    command_line << option.to_command_line(value)
  end
  command_line.compact.join(' ')
end

#ui=(value) ⇒ Object



22
23
24
# File 'lib/deep_test/options.rb', line 22

def ui=(value)
  @ui = value.to_s
end

#ui_instanceObject



66
67
68
# File 'lib/deep_test/options.rb', line 66

def ui_instance
  UI_INSTANCES[self] ||= eval(ui).new(self)
end

#worker_listener=(value) ⇒ Object



26
27
28
# File 'lib/deep_test/options.rb', line 26

def worker_listener=(value)
  @worker_listener = value.to_s
end