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"),
]
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.



35
36
37
38
39
40
41
# File 'lib/deep_test/options.rb', line 35

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



27
28
29
30
31
32
33
# File 'lib/deep_test/options.rb', line 27

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)


43
44
45
# File 'lib/deep_test/options.rb', line 43

def gathering_metrics?
  !@metrics_file.nil?
end

#mirror_path(base) ⇒ Object



76
77
78
79
80
# File 'lib/deep_test/options.rb', line 76

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



47
48
49
50
51
52
# File 'lib/deep_test/options.rb', line 47

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

#new_workersObject



82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/deep_test/options.rb', line 82

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



54
55
56
# File 'lib/deep_test/options.rb', line 54

def origin_hostname
  (Socket.gethostname == @origin_hostname) ? 'localhost' : @origin_hostname
end

#serverObject



96
97
98
# File 'lib/deep_test/options.rb', line 96

def server
  Server.remote_reference(origin_hostname, server_port)
end

#to_command_lineObject



67
68
69
70
71
72
73
74
# File 'lib/deep_test/options.rb', line 67

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



19
20
21
# File 'lib/deep_test/options.rb', line 19

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

#ui_instanceObject



63
64
65
# File 'lib/deep_test/options.rb', line 63

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

#worker_listener=(value) ⇒ Object



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

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