omf_ec 6.0.3 → 6.0.4.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/bin/omf_ec +21 -11
- data/lib/omf_ec/backward/default_events.rb +27 -14
- data/lib/omf_ec/backward/exp/testbed.rb +2 -2
- data/lib/omf_ec/backward/group.rb +2 -2
- data/lib/omf_ec/context/group_context.rb +10 -0
- data/lib/omf_ec/experiment.rb +24 -8
- data/lib/omf_ec/group.rb +13 -12
- data/lib/omf_ec/version.rb +1 -1
- data/lib/omf_ec.rb +10 -10
- data/omf_ec.gemspec +1 -1
- data/test/omf_ec/group_spec.rb +6 -4
- metadata +9 -28
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MjRmMzAxMmI4ZWZmOWI2NjY1NDhlN2ZkMmM1ZGM5MGM0Y2JmMjNkZA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OTYyYTQ5NzYxOTBiNWVjZDE2NmNmMDAwMmE1YzM0NjQ4MjUzOWYyMg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGJhYTg5OTJiMmM0YjFmMmExZjNkNjA0YjNkNGQ0ZjVhZjM5NjMyNzNjOWMz
|
10
|
+
ZmM0OThiZDhiODgxN2VlYzAwY2Y3ZTRmZTAwOTllYzgwYWNlMDU4MDY5MDE4
|
11
|
+
NjkzZmE0YmM5MDBkZmUwYTg1NGZlOTZkMmI1Y2MwOTQ0NjU3YmQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MDE2ZDQ0MWFkZjE3YmE0ZjFhMGE5YmNmYzNmOTAwZGY3OGIzOTI5M2E4MjJm
|
14
|
+
MzAxNTFkYTljNTczNGJjZDFjYWUyMjlmOGVjZDkxMjAzZDUyYWUzNDQzYzFk
|
15
|
+
OWUwOTJlNDliNDdhZGE3NGQ2YzUwZTE1YzRiZWQyNTg1MjZlNGY=
|
data/bin/omf_ec
CHANGED
@@ -40,6 +40,10 @@ arg_name "directory"
|
|
40
40
|
default_value "/tmp"
|
41
41
|
flag [:log_file_dir]
|
42
42
|
|
43
|
+
desc "Logging config file"
|
44
|
+
arg_name "file"
|
45
|
+
flag [:log_config]
|
46
|
+
|
43
47
|
# the path given here is relative to the user's home directory
|
44
48
|
config_file(".config/omf_ec.yml")
|
45
49
|
|
@@ -59,7 +63,7 @@ command :exec do |c|
|
|
59
63
|
|
60
64
|
c.action do |global_options, options, args|
|
61
65
|
help_now! "Missing experiment script" if args[0].nil?
|
62
|
-
help_now! "Experiment script not found" unless File.exist?(args[0])
|
66
|
+
help_now! "Experiment script not found" unless File.exist?(File.expand_path(args[0]))
|
63
67
|
|
64
68
|
# User-provided command line values for Experiment Properties cannot be
|
65
69
|
# set here as the propertties have not been defined yet by the experiment.
|
@@ -79,7 +83,7 @@ command :exec do |c|
|
|
79
83
|
end
|
80
84
|
|
81
85
|
# FIXME this loading script is way too simple
|
82
|
-
load_exp(args[0], global_options, options, properties)
|
86
|
+
load_exp(File.expand_path(args[0]), global_options, options, properties)
|
83
87
|
end
|
84
88
|
end
|
85
89
|
|
@@ -231,26 +235,28 @@ def setup_logging(global_options = {})
|
|
231
235
|
end
|
232
236
|
|
233
237
|
unless global_options[:debug]
|
234
|
-
Logging.consolidate 'OmfCommon', '
|
238
|
+
Logging.consolidate 'OmfCommon', 'OmfRc'
|
235
239
|
end
|
236
240
|
|
237
241
|
# FIXME this should go to common setup
|
238
|
-
if global_options[:log_file_dir] && File.exist?(global_options[:log_file_dir])
|
242
|
+
if global_options[:log_file_dir] && File.exist?(File.expand_path(global_options[:log_file_dir]))
|
239
243
|
Logging.logger.root.add_appenders(
|
240
244
|
Logging.appenders.file(
|
241
|
-
"#{global_options[:log_file_dir]}/#{OmfEc.experiment.id}.log",
|
245
|
+
"#{File.expand_path(global_options[:log_file_dir])}/#{OmfEc.experiment.id}.log",
|
242
246
|
:layout => Logging.layouts.pattern(:date_pattern => '%F %T %z',
|
243
247
|
:pattern => '[%d] %-5l %c: %m\n')))
|
244
248
|
end
|
249
|
+
|
250
|
+
OmfCommon.load_logging_config(global_options[:log_config])
|
245
251
|
end
|
246
252
|
|
247
253
|
def load_exp(exp_path, global_options = {} , options = {}, properties = {})
|
248
254
|
begin
|
249
|
-
if global_options[:cert] && File.exist?(global_options[:cert]) &&
|
250
|
-
global_options[:key] && File.exist?(global_options[:key])
|
255
|
+
if global_options[:cert] && File.exist?(File.expand_path(global_options[:cert])) &&
|
256
|
+
global_options[:key] && File.exist?(File.expand_path(global_options[:key]))
|
251
257
|
|
252
|
-
entity = OmfCommon::Auth::Certificate.create_from_x509(File.read(global_options[:cert]),
|
253
|
-
File.read(global_options[:key]))
|
258
|
+
entity = OmfCommon::Auth::Certificate.create_from_x509(File.read(File.expand_path(global_options[:cert])),
|
259
|
+
File.read(File.expand_path(global_options[:key])))
|
254
260
|
end
|
255
261
|
|
256
262
|
opts = {
|
@@ -271,18 +277,22 @@ def load_exp(exp_path, global_options = {} , options = {}, properties = {})
|
|
271
277
|
opts[:communication][:auth] = {} if entity
|
272
278
|
|
273
279
|
OmfCommon.init(:development, opts) do |el|
|
280
|
+
|
274
281
|
setup_logging(global_options)
|
275
282
|
|
276
283
|
OmfCommon.comm.on_connected do |comm|
|
284
|
+
info "OMF Experiment Controller #{OmfEc::VERSION}"
|
277
285
|
info "Connected using #{comm.conn_info}"
|
278
|
-
info "
|
286
|
+
info "Execute: #{exp_path}"
|
287
|
+
info "Properties: #{OmfEc.experiment.cmdline_properties}"
|
279
288
|
|
280
|
-
OmfCommon::Auth::CertificateStore.instance.register_default_certs(global_options[:root_cert_dir]) if global_options[:root_cert_dir]
|
289
|
+
OmfCommon::Auth::CertificateStore.instance.register_default_certs(File.expand_path(global_options[:root_cert_dir])) if global_options[:root_cert_dir]
|
281
290
|
OmfCommon::Auth::CertificateStore.instance.register(entity, OmfCommon.comm.local_address) if entity
|
282
291
|
|
283
292
|
begin
|
284
293
|
include OmfEc::Backward::DefaultEvents
|
285
294
|
load exp_path
|
295
|
+
OmfEc::Experiment.start
|
286
296
|
rescue => e
|
287
297
|
error e.message
|
288
298
|
error e.backtrace.join("\n")
|
@@ -11,19 +11,22 @@ module OmfEc
|
|
11
11
|
def included(base)
|
12
12
|
base.instance_eval do
|
13
13
|
|
14
|
-
def_event :
|
14
|
+
def_event :ALL_NODES_UP do |state|
|
15
15
|
all_groups? do |g|
|
16
|
-
plan = g.members.uniq.sort
|
17
|
-
actual = state.find_all { |v| v.joined?(g.
|
16
|
+
plan = g.members.values.uniq.sort
|
17
|
+
actual = state.find_all { |v| v.joined?(g.address) }.map { |v| v[:address] }.sort
|
18
18
|
|
19
|
-
debug "Planned: #{g.name}(#{g.
|
20
|
-
debug "Actual: #{g.name}(#{g.
|
19
|
+
debug "Planned: #{g.name}(#{g.address}): #{plan}"
|
20
|
+
debug "Actual: #{g.name}(#{g.address}): #{actual}"
|
21
21
|
|
22
|
-
plan
|
22
|
+
if plan.empty? && actual.empty?
|
23
|
+
warn "Group '#{g.name}' is empty"
|
24
|
+
end
|
25
|
+
plan.empty? ? true : plan == actual
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
26
|
-
on_event :
|
29
|
+
on_event :ALL_NODES_UP do
|
27
30
|
all_groups do |group|
|
28
31
|
# Deal with brilliant net.w0.ip syntax...
|
29
32
|
group.net_ifs && group.net_ifs.each do |nif|
|
@@ -49,26 +52,37 @@ module OmfEc
|
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
55
|
+
def_event :ALL_UP do |state|
|
56
|
+
all_groups? do |g|
|
57
|
+
app_plan = g.app_contexts.size * g.members.values.uniq.size
|
58
|
+
app_actual = state.count { |v| v.joined?(g.address("application")) }
|
59
|
+
if_plan = g.net_ifs.map { |v| v.conf[:if_name] }.uniq.size * g.members.values.uniq.size
|
60
|
+
if_actual = state.count { |v| v.joined?(g.address("wlan"), g.address("net")) }
|
61
|
+
|
62
|
+
if_plan == if_actual && app_plan == app_actual
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
52
66
|
def_event :ALL_INTERFACE_UP do |state|
|
53
67
|
all_groups? do |g|
|
54
|
-
plan = g.net_ifs.map { |v| v.conf[:if_name] }.uniq.size * g.members.uniq.size
|
55
|
-
actual = state.count { |v| v.joined?(
|
68
|
+
plan = g.net_ifs.map { |v| v.conf[:if_name] }.uniq.size * g.members.values.uniq.size
|
69
|
+
actual = state.count { |v| v.joined?(g.address("wlan"), g.address("net")) }
|
56
70
|
plan == actual
|
57
71
|
end
|
58
72
|
end
|
59
73
|
|
60
74
|
def_event :ALL_UP_AND_INSTALLED do |state|
|
61
75
|
all_groups? do |g|
|
62
|
-
plan = g.app_contexts.size * g.members.uniq.size
|
63
|
-
actual = state.count { |v| v.joined?(
|
76
|
+
plan = g.app_contexts.size * g.members.values.uniq.size
|
77
|
+
actual = state.count { |v| v.joined?(g.address("application")) }
|
64
78
|
plan == actual
|
65
79
|
end
|
66
80
|
end
|
67
81
|
|
68
82
|
def_event :ALL_APPS_DONE do |state|
|
69
83
|
all_groups? do |g|
|
70
|
-
plan = (g.execs.size + g.app_contexts.size) * g.members.uniq.size
|
71
|
-
actual = state.count { |v| v.joined?(
|
84
|
+
plan = (g.execs.size + g.app_contexts.size) * g.members.values.uniq.size
|
85
|
+
actual = state.count { |v| v.joined?(g.address("application")) && v[:event] == 'EXIT' }
|
72
86
|
plan == 0 ? false : plan == actual
|
73
87
|
end
|
74
88
|
end
|
@@ -76,7 +90,6 @@ module OmfEc
|
|
76
90
|
end
|
77
91
|
end
|
78
92
|
end
|
79
|
-
|
80
93
|
end
|
81
94
|
end
|
82
95
|
end
|
@@ -25,10 +25,10 @@ module OmfEc
|
|
25
25
|
e_uid = SecureRandom.uuid
|
26
26
|
e_name = "#{self.name}_application_#{name}_created_#{e_uid}"
|
27
27
|
|
28
|
-
resource_group_name =
|
28
|
+
resource_group_name = self.address("application")
|
29
29
|
|
30
30
|
def_event e_name do |state|
|
31
|
-
state.find_all { |v| v[:hrn] == name && v[:membership] && v[:membership].include?(resource_group_name)}.size >= self.members.uniq.size
|
31
|
+
state.find_all { |v| v[:hrn] == name && v[:membership] && v[:membership].include?(resource_group_name)}.size >= self.members.values.sort.uniq.size
|
32
32
|
end
|
33
33
|
|
34
34
|
on_event e_name do
|
@@ -65,6 +65,16 @@ module OmfEc::Context
|
|
65
65
|
topic = self.group.topic
|
66
66
|
end
|
67
67
|
|
68
|
+
if topic.nil?
|
69
|
+
if self.guard[:type]
|
70
|
+
warn "Group '#{self.group.name}' has NO resources of type '#{self.guard[:type]}' ready. Could not send message."
|
71
|
+
else
|
72
|
+
warn "Group topic '#{self.group.name}' NOT subscribed. Could not send message."
|
73
|
+
end
|
74
|
+
return
|
75
|
+
end
|
76
|
+
|
77
|
+
|
68
78
|
case self.operation
|
69
79
|
when :configure
|
70
80
|
topic.configure({ name => value }, { guard: self.guard })
|
data/lib/omf_ec/experiment.rb
CHANGED
@@ -79,7 +79,7 @@ module OmfEc
|
|
79
79
|
unless planned_groups.empty?
|
80
80
|
OmfEc.subscribe_and_monitor(name) do |res|
|
81
81
|
info "Config #{name} to join #{planned_groups.map(&:name).join(', ')}"
|
82
|
-
res.configure(membership: planned_groups.map(&:
|
82
|
+
res.configure(membership: planned_groups.map(&:address).join(', '))
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
@@ -91,7 +91,7 @@ module OmfEc
|
|
91
91
|
# Find all groups a given resource belongs to
|
92
92
|
#
|
93
93
|
def groups_by_res(res_addr)
|
94
|
-
groups.find_all { |g| g.members.include?(res_addr) }
|
94
|
+
groups.find_all { |g| g.members.values.include?(res_addr) }
|
95
95
|
end
|
96
96
|
|
97
97
|
def sub_group(name)
|
@@ -164,22 +164,38 @@ module OmfEc
|
|
164
164
|
class << self
|
165
165
|
# Disconnect communicator, try to delete any XMPP affiliations
|
166
166
|
def done
|
167
|
-
info "
|
168
|
-
|
169
|
-
|
170
|
-
info "Release applications and network interfaces"
|
167
|
+
info "Experiment: #{OmfEc.experiment.id} finished"
|
168
|
+
info "Release applications and network interfaces"
|
169
|
+
info "Exit in 15 seconds..."
|
171
170
|
|
171
|
+
OmfCommon.el.after(10) do
|
172
172
|
allGroups do |g|
|
173
|
-
g.resources[type: 'application'].release
|
173
|
+
g.resources[type: 'application'].release unless g.app_contexts.empty?
|
174
174
|
g.resources[type: 'net'].release unless g.net_ifs.find_all { |v| v.conf[:type] == 'net' }.empty?
|
175
175
|
g.resources[type: 'wlan'].release unless g.net_ifs.find_all { |v| v.conf[:type] == 'wlan' }.empty?
|
176
176
|
end
|
177
177
|
|
178
|
-
OmfCommon.
|
178
|
+
OmfCommon.el.after(5) do
|
179
179
|
OmfCommon.comm.disconnect
|
180
180
|
end
|
181
181
|
end
|
182
182
|
end
|
183
|
+
|
184
|
+
def start
|
185
|
+
info "Experiment: #{OmfEc.experiment.id} starts"
|
186
|
+
|
187
|
+
allGroups do |g|
|
188
|
+
g.members.each do |key, value|
|
189
|
+
OmfEc.subscribe_and_monitor(key) do |res|
|
190
|
+
info "Configure '#{key}' to join '#{g.name}'"
|
191
|
+
g.synchronize do
|
192
|
+
g.members[key] = res.address
|
193
|
+
end
|
194
|
+
res.configure(membership: g.address)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
183
199
|
end
|
184
200
|
end
|
185
201
|
end
|
data/lib/omf_ec/group.rb
CHANGED
@@ -30,7 +30,7 @@ module OmfEc
|
|
30
30
|
self.id = @opts[:unique] ? SecureRandom.uuid : self.name
|
31
31
|
# Add empty holders for members, network interfaces, and apps
|
32
32
|
self.net_ifs = []
|
33
|
-
self.members =
|
33
|
+
self.members = {}
|
34
34
|
self.app_contexts = []
|
35
35
|
self.execs = []
|
36
36
|
|
@@ -39,6 +39,11 @@ module OmfEc
|
|
39
39
|
OmfEc.subscribe_and_monitor(id, self, &block)
|
40
40
|
end
|
41
41
|
|
42
|
+
def address(suffix = nil)
|
43
|
+
t_id = suffix ? "#{self.id}_#{suffix.to_s}" : self.id
|
44
|
+
"#{OmfCommon.comm.conn_info[:proto]}://#{t_id}@#{OmfCommon.comm.conn_info[:domain]}"
|
45
|
+
end
|
46
|
+
|
42
47
|
def associate_topic(topic)
|
43
48
|
self.synchronize do
|
44
49
|
@topic = topic
|
@@ -59,24 +64,19 @@ module OmfEc
|
|
59
64
|
#
|
60
65
|
# Resources to be added could be a list of resources, groups, or the mixture of both.
|
61
66
|
def add_resource(*names)
|
62
|
-
|
67
|
+
synchronize do
|
63
68
|
# Recording membership first, used for ALL_UP event
|
64
69
|
names.each do |name|
|
65
|
-
g = OmfEc.experiment.group(name)
|
66
|
-
|
67
|
-
@members += g.members
|
68
|
-
self.add_resource(*g.members.uniq)
|
70
|
+
if (g = OmfEc.experiment.group(name))# resource to add is a group
|
71
|
+
@members.merge!(g.members)
|
69
72
|
else
|
70
|
-
|
71
|
-
@members << res.address
|
72
|
-
info "Config #{name} to join #{self.name}"
|
73
|
-
res.configure(membership: self.id)
|
74
|
-
end
|
73
|
+
@members[name] = nil
|
75
74
|
end
|
76
75
|
end
|
77
76
|
end
|
78
77
|
end
|
79
78
|
|
79
|
+
|
80
80
|
# Create a set of new resources and add them to the group
|
81
81
|
#
|
82
82
|
# @param [String] name
|
@@ -93,7 +93,8 @@ module OmfEc
|
|
93
93
|
end
|
94
94
|
|
95
95
|
# Naming convention of child resource group
|
96
|
-
resource_group_name = "#{self.id}_#{opts[:type].to_s}"
|
96
|
+
#resource_group_name = "#{self.id}_#{opts[:type].to_s}"
|
97
|
+
resource_group_name = self.address(opts[:type])
|
97
98
|
|
98
99
|
OmfEc.subscribe_and_monitor(resource_group_name) do |res_group|
|
99
100
|
associate_resource_topic(opts[:type].to_s, res_group)
|
data/lib/omf_ec/version.rb
CHANGED
data/lib/omf_ec.rb
CHANGED
@@ -38,25 +38,25 @@ module OmfEc
|
|
38
38
|
topic.on_inform do |msg|
|
39
39
|
case msg.itype
|
40
40
|
when 'CREATION.FAILED'
|
41
|
-
warn "RC reports creation.failed: '#{msg[:reason]}'"
|
42
|
-
debug msg
|
41
|
+
warn "RC reports creation.failed: '#{msg[:reason]}'", msg.src
|
42
|
+
debug msg, msg.src
|
43
43
|
when 'ERROR'
|
44
|
-
warn "RC reports error: '#{msg[:reason]}'"
|
45
|
-
debug msg
|
44
|
+
warn "RC reports error: '#{msg[:reason]}'", msg.src
|
45
|
+
debug msg, msg.src
|
46
46
|
when 'WARN'
|
47
|
-
warn "RC reports warning: '#{msg[:reason]}'"
|
48
|
-
debug msg
|
47
|
+
warn "RC reports warning: '#{msg[:reason]}'", msg.src
|
48
|
+
debug msg, msg.src
|
49
49
|
when 'CREATION.OK'
|
50
|
+
debug "Resource #{msg[:res_id]} #{msg.resource.address} created"
|
50
51
|
debug "Received CREATION.OK via #{topic.id}"
|
51
|
-
|
52
|
+
debug msg, msg.src
|
52
53
|
|
53
54
|
OmfEc.experiment.add_or_update_resource_state(msg.resource.address, msg.properties)
|
54
|
-
|
55
55
|
OmfEc.experiment.process_events
|
56
56
|
when 'STATUS'
|
57
57
|
props = []
|
58
58
|
msg.each_property { |k, v| props << "#{k}: #{v}" }
|
59
|
-
debug "#{topic.id} >>
|
59
|
+
debug "Received INFORM via #{topic.id} >> #{props.join(", ")}", msg.src
|
60
60
|
|
61
61
|
if msg[:status_type] == 'APP_EVENT'
|
62
62
|
info "APP_EVENT #{msg[:event]} from app #{msg[:app]} - msg: #{msg[:msg]}"
|
@@ -76,7 +76,7 @@ module OmfEc
|
|
76
76
|
if topic.error?
|
77
77
|
error "Failed to subscribe #{topic_id}"
|
78
78
|
else
|
79
|
-
|
79
|
+
debug "Subscribed to #{topic_id}"
|
80
80
|
context_obj.associate_topic(topic) if context_obj
|
81
81
|
block.call(context_obj || topic) if block
|
82
82
|
register_default_callback(topic)
|
data/omf_ec.gemspec
CHANGED
@@ -27,6 +27,6 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_development_dependency "pry"
|
28
28
|
s.add_development_dependency "mocha"
|
29
29
|
|
30
|
-
s.add_runtime_dependency "omf_common", "~> 6.0.
|
30
|
+
s.add_runtime_dependency "omf_common", "~> 6.0.4.pre.1"
|
31
31
|
s.add_runtime_dependency "gli", "~> 2.5.3"
|
32
32
|
end
|
data/test/omf_ec/group_spec.rb
CHANGED
@@ -9,10 +9,12 @@ require 'omf_ec/group'
|
|
9
9
|
describe OmfEc::Group do
|
10
10
|
before do
|
11
11
|
OmfEc.stubs(:subscribe_and_monitor)
|
12
|
+
OmfEc::Group.any_instance.stubs(:address).returns("xmpp://g@bob.com")
|
12
13
|
end
|
13
14
|
|
14
15
|
after do
|
15
16
|
OmfEc.unstub(:subscribe_and_monitor)
|
17
|
+
OmfEc::Group.any_instance.unstub(:address)
|
16
18
|
end
|
17
19
|
|
18
20
|
describe "when initialised" do
|
@@ -31,10 +33,10 @@ describe OmfEc::Group do
|
|
31
33
|
@g_b = OmfEc::Group.new('g_b', unique: false)
|
32
34
|
end
|
33
35
|
|
34
|
-
it "must init default context related
|
35
|
-
@group.net_ifs.must_equal
|
36
|
-
@group.members.must_equal
|
37
|
-
@group.app_contexts.must_equal
|
36
|
+
it "must init default context related variables" do
|
37
|
+
@group.net_ifs.must_equal([])
|
38
|
+
@group.members.must_equal({})
|
39
|
+
@group.app_contexts.must_equal([])
|
38
40
|
end
|
39
41
|
|
40
42
|
it "must be capable of adding existing resources to group" do
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omf_ec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
5
|
-
prerelease:
|
4
|
+
version: 6.0.4.pre.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- NICTA
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-08-29 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: minitest
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: em-minitest-spec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: simplecov
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: pry
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: mocha
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,23 +83,20 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: omf_common
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - ~>
|
100
88
|
- !ruby/object:Gem::Version
|
101
|
-
version: 6.0.
|
89
|
+
version: 6.0.4.pre.1
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - ~>
|
108
95
|
- !ruby/object:Gem::Version
|
109
|
-
version: 6.0.
|
96
|
+
version: 6.0.4.pre.1
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: gli
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
101
|
- - ~>
|
116
102
|
- !ruby/object:Gem::Version
|
@@ -118,7 +104,6 @@ dependencies:
|
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
108
|
- - ~>
|
124
109
|
- !ruby/object:Gem::Version
|
@@ -173,29 +158,25 @@ files:
|
|
173
158
|
homepage: http://omf.mytestbed.net
|
174
159
|
licenses:
|
175
160
|
- MIT
|
161
|
+
metadata: {}
|
176
162
|
post_install_message:
|
177
163
|
rdoc_options: []
|
178
164
|
require_paths:
|
179
165
|
- lib
|
180
166
|
required_ruby_version: !ruby/object:Gem::Requirement
|
181
|
-
none: false
|
182
167
|
requirements:
|
183
168
|
- - ! '>='
|
184
169
|
- !ruby/object:Gem::Version
|
185
170
|
version: 1.9.3
|
186
171
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
|
-
none: false
|
188
172
|
requirements:
|
189
|
-
- - ! '
|
173
|
+
- - ! '>'
|
190
174
|
- !ruby/object:Gem::Version
|
191
|
-
version:
|
192
|
-
segments:
|
193
|
-
- 0
|
194
|
-
hash: -4558190109347079441
|
175
|
+
version: 1.3.1
|
195
176
|
requirements: []
|
196
177
|
rubyforge_project: omf_ec
|
197
|
-
rubygems_version:
|
178
|
+
rubygems_version: 2.0.7
|
198
179
|
signing_key:
|
199
|
-
specification_version:
|
180
|
+
specification_version: 4
|
200
181
|
summary: OMF experiment controller
|
201
182
|
test_files: []
|