omf_ec 6.0.1 → 6.0.2.pre.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in omf_ec.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem 'rake'
8
+ end
data/bin/omf_ec CHANGED
@@ -23,9 +23,17 @@ flag [:u, :uri]
23
23
  desc "Debug XMPP traffic mode (include XMPP debug logging messages under debug mode)."
24
24
  switch [:x, :xmpp]
25
25
 
26
- desc "Private key file"
26
+ desc "Root certificate file"
27
+ arg_name "cert", :optional
28
+ flag [:root_cert]
29
+
30
+ desc "Your certificate"
31
+ arg_name "cert", :optional
32
+ flag [:cert]
33
+
34
+ desc "Your private key"
27
35
  arg_name "key", :optional
28
- flag [:private_key]
36
+ flag [:key]
29
37
 
30
38
  desc "Log file directory"
31
39
  arg_name "directory"
@@ -52,8 +60,8 @@ command :exec do |c|
52
60
  help_now! "Missing experiment script" if args[0].nil?
53
61
  help_now! "Experiment script not found" unless File.exist?(args[0])
54
62
 
55
- # User-provided command line values for Experiment Properties cannot be
56
- # set here as the propertties have not been defined yet by the experiment.
63
+ # User-provided command line values for Experiment Properties cannot be
64
+ # set here as the propertties have not been defined yet by the experiment.
57
65
  # Thus just pass them to the experiment, which will be responsible
58
66
  # for setting them later
59
67
  properties = {}
@@ -239,11 +247,22 @@ end
239
247
 
240
248
  def load_exp(exp_path, global_options = {} , options = {}, properties = {})
241
249
  begin
250
+ if global_options[:root_cert] && File.exist?(global_options[:root_cert])
251
+ root = OmfCommon::Auth::Certificate.create_from_x509(File.read(global_options[:root_cert]))
252
+ end
253
+
254
+ if global_options[:cert] && File.exist?(global_options[:cert]) &&
255
+ global_options[:key] && File.exist?(global_options[:key])
256
+
257
+ entity = OmfCommon::Auth::Certificate.create_from_x509(File.read(global_options[:cert]),
258
+ File.read(global_options[:key]))
259
+ end
260
+
242
261
  opts = {
243
262
  communication: { url: global_options[:uri] },
244
263
  eventloop: { type: :em },
245
264
  logging: {
246
- level: global_options[:debug] ? 'debug' : 'info',
265
+ level: { default: global_options[:debug] ? 'debug' : 'info' },
247
266
  appenders: {
248
267
  stdout: {
249
268
  date_pattern: '%H:%M:%S',
@@ -254,13 +273,18 @@ def load_exp(exp_path, global_options = {} , options = {}, properties = {})
254
273
  }
255
274
  }
256
275
 
276
+ opts[:communication][:auth] = { certs: [ root.to_pem_compact ] } if root
277
+
257
278
  OmfCommon.init(:development, opts) do |el|
258
279
  setup_logging(global_options)
259
280
 
260
281
  OmfCommon.comm.on_connected do |comm|
261
- info "Connected"
282
+ info "Connected using #{comm.conn_info}"
262
283
  info "Start experiment: #{OmfEc.experiment.id}"
263
284
 
285
+ OmfCommon::Auth::CertificateStore.instance.register(root) if root
286
+ OmfCommon::Auth::CertificateStore.instance.register(entity, OmfCommon.comm.local_address) if entity
287
+
264
288
  begin
265
289
  include OmfEc::Backward::DefaultEvents
266
290
  load exp_path
@@ -269,7 +293,6 @@ def load_exp(exp_path, global_options = {} , options = {}, properties = {})
269
293
  error e.backtrace.join("\n")
270
294
  end
271
295
 
272
- #comm.on_interrupted { Experiment.done }
273
296
  comm.on_interrupted { comm.disconnect }
274
297
  end
275
298
  end
data/lib/omf_ec.rb CHANGED
@@ -29,41 +29,36 @@ module OmfEc
29
29
  end
30
30
 
31
31
  def register_default_callback(topic)
32
- topic.on_creation_failed do |msg|
33
- warn "RC reports creation.failed: '#{msg[:reason]}'"
34
- debug msg
35
- end
36
-
37
- topic.on_error do |msg|
38
- warn "RC reports error: '#{msg[:reason]}'"
39
- debug msg
40
- end
41
-
42
- topic.on_warn do |msg|
43
- warn "RC reports warning: '#{msg[:reason]}'"
44
- debug msg
45
- end
32
+ topic.on_inform do |msg|
33
+ case msg.itype
34
+ when 'CREATION.FAILED'
35
+ warn "RC reports creation.failed: '#{msg[:reason]}'"
36
+ debug msg
37
+ when 'ERROR'
38
+ warn "RC reports error: '#{msg[:reason]}'"
39
+ debug msg
40
+ when 'WARN'
41
+ warn "RC reports warning: '#{msg[:reason]}'"
42
+ debug msg
43
+ when 'CREATION.OK'
44
+ debug "Received CREATION.OK via #{topic.id}"
45
+ info "Resource #{msg[:res_id]} #{msg.resource.address} created"
46
46
 
47
- topic.on_creation_ok do |msg|
48
- debug "Received CREATION.OK via #{topic.id}"
49
- info "Resource #{msg[:res_id]} created"
47
+ OmfEc.experiment.add_or_update_resource_state(msg.resource.address, msg.properties)
50
48
 
51
- OmfEc.experiment.add_or_update_resource_state(msg[:uid], msg.properties)
49
+ OmfEc.experiment.process_events
50
+ when 'STATUS'
51
+ props = []
52
+ msg.each_property { |k, v| props << "#{k}: #{v}" }
53
+ debug "#{topic.id} >> inform: #{props.join(", ")}"
52
54
 
53
- OmfEc.experiment.process_events
54
- end
55
-
56
- topic.on_status do |msg|
57
- props = []
58
- msg.each_property { |k, v| props << "#{k}: #{v}" }
59
- debug "#{topic.id} >> inform: #{props.join(", ")}"
55
+ if msg[:status_type] == 'APP_EVENT'
56
+ info "APP_EVENT #{msg[:event]} from app #{msg[:app]} - msg: #{msg[:msg]}"
57
+ end
60
58
 
61
- if msg[:status_type] == 'APP_EVENT'
62
- info "APP_EVENT #{msg[:event]} from app #{msg[:app]} - msg: #{msg[:msg]}"
59
+ OmfEc.experiment.add_or_update_resource_state(msg.src, msg.properties)
60
+ OmfEc.experiment.process_events
63
61
  end
64
-
65
- OmfEc.experiment.add_or_update_resource_state(msg[:uid], msg.properties)
66
- OmfEc.experiment.process_events
67
62
  end
68
63
  end
69
64
 
@@ -8,7 +8,7 @@ module OmfEc
8
8
 
9
9
  # TODO: eventually this call would mirror all the properties of the App Proxy
10
10
  # right now we just have name, binary_path, parameters
11
- attr_accessor :name, :properties
11
+ attr_accessor :name, :properties
12
12
 
13
13
  # @param [String] name name of the application to define
14
14
  def initialize(name)
@@ -17,23 +17,23 @@ module OmfEc
17
17
  end
18
18
 
19
19
  # Add new parameter(s) to this Application Definition
20
- #
20
+ #
21
21
  # @param [Hash] params a hash with the parameters to add
22
22
  #
23
23
  def define_parameter(params)
24
- @properties[:parameters] = Hashie::Mash.new unless @properties.key?(:parameters)
24
+ @properties[:parameters] = Hashie::Mash.new unless @properties.key?(:parameters)
25
25
  if params.kind_of? Hash
26
26
  @properties[:parameters].merge!(params)
27
27
  else
28
28
  error "Cannot define parameter for app '#{self.name}'! Parameter "+
29
29
  "not passed as a Hash ('#{params.inspect}')"
30
- end
30
+ end
31
31
  end
32
32
 
33
33
  def define_measurement_point(mp)
34
34
  @properties[:oml] = Hashie::Mash.new unless @properties.key?(:oml)
35
35
  if mp.kind_of? Hash
36
- @properties[:oml][:available_mps] = Array.new unless @properties[:oml].key?(:available_mps)
36
+ @properties[:oml][:available_mps] = Array.new unless @properties[:oml].key?(:available_mps)
37
37
  @properties[:oml][:available_mps] << mp
38
38
  else
39
39
  error "Cannot define Measurement Point for app '#{self.name}'! MP "+
@@ -41,12 +41,24 @@ module OmfEc
41
41
  end
42
42
  end
43
43
 
44
+ warn_removed :version
45
+
46
+ def path=(arg)
47
+ @properties[:binary_path] = arg
48
+ warn_deprecation :path=, :binary_path=
49
+ end
50
+
51
+ def shortDescription=(arg)
52
+ @properties[:description] = arg
53
+ warn_deprecation :shortDescription=, :description=
54
+ end
55
+
44
56
  def method_missing(method_name, *args)
45
57
  k = method_name.to_sym
46
58
  return @properties[k] if @properties.key?(k)
47
59
  m = method_name.to_s.match(/(.*?)([=]?)$/)
48
60
  if m[2] == '='
49
- @properties[m[1].to_sym] = args.first
61
+ @properties[m[1].to_sym] = args.first
50
62
  else
51
63
  super
52
64
  end
@@ -11,7 +11,7 @@ module OmfEc
11
11
  plan = g.members.uniq.sort
12
12
  actual = state.find_all do |v|
13
13
  v[:membership] && v[:membership].include?(g.id)
14
- end.map { |v| v[:uid] }.sort
14
+ end.map { |v| v[:address] }.sort
15
15
 
16
16
  debug "Planned: #{g.name}(#{g.id}): #{plan}"
17
17
  debug "Actual: #{g.name}(#{g.id}): #{actual}"
@@ -20,7 +20,7 @@ module OmfEc::Context
20
20
  @group = group
21
21
  self
22
22
  else
23
- raise RuntimeError, "Cannot create context for unknwon application '#{name}'"
23
+ raise RuntimeError, "Cannot create context for unknown application '#{name}'"
24
24
  end
25
25
  end
26
26
 
data/lib/omf_ec/dsl.rb CHANGED
@@ -9,7 +9,7 @@ module OmfEc
9
9
  # raised when the OMF EC is processing an OEDL experiment scripts
10
10
  #
11
11
  # The base exception is OEDLException
12
- class OEDLException < Exception; end
12
+ class OEDLException < StandardError; end
13
13
 
14
14
  class OEDLArgumentException < OEDLException
15
15
  attr_reader :cmd, :arg
@@ -34,8 +34,8 @@ module OmfEc
34
34
  ExperimentProperty.create(name, value, description)
35
35
  end
36
36
 
37
- def resource_state(id)
38
- @state.find { |v| v[:uid].to_s == id.to_s }
37
+ def resource_state(address)
38
+ @state.find { |v| v[:address].to_s == address.to_s }
39
39
  end
40
40
 
41
41
  alias_method :resource, :resource_state
@@ -64,8 +64,8 @@ module OmfEc
64
64
  end
65
65
  end
66
66
  else
67
- info "Newly discovered resource >> #{opts[:uid]}"
68
- @state << Hashie::Mash.new({ uid: name }.merge(opts))
67
+ info "Newly discovered resource >> #{name}"
68
+ @state << Hashie::Mash.new({ address: name }).merge(opts)
69
69
  end
70
70
  end
71
71
  end
@@ -111,7 +111,7 @@ module OmfEc
111
111
 
112
112
  def add_event(name, trigger)
113
113
  self.synchronize do
114
- raise RuntimeError, "Event '#{name}' has been defined" if event(name)
114
+ raise RuntimeError, "Event '#{name}' has already been defined" if event(name)
115
115
  @events << { name: name, trigger: trigger }
116
116
  end
117
117
  end
data/lib/omf_ec/group.rb CHANGED
@@ -61,8 +61,8 @@ module OmfEc
61
61
  @members += g.members
62
62
  self.add_resource(*g.members.uniq)
63
63
  else
64
- @members << name.to_s
65
64
  OmfEc.subscribe_and_monitor(name) do |res|
65
+ @members << res.address
66
66
  info "Config #{name} to join #{self.name}"
67
67
  res.configure(membership: self.id)
68
68
  end
@@ -82,7 +82,7 @@ module OmfEc
82
82
  # Make a deep copy of opts in case it contains structures of structures
83
83
  begin
84
84
  opts = Marshal.load ( Marshal.dump(opts.merge(hrn: name)))
85
- rescue Exception => e
85
+ rescue => e
86
86
  raise "#{e.message} - Could not deep copy opts: '#{opts.inspect}'"
87
87
  end
88
88
 
@@ -1,3 +1,3 @@
1
1
  module OmfEc
2
- VERSION = "6.0.1"
2
+ VERSION = "6.0.2.pre.1"
3
3
  end
data/omf_ec.gemspec CHANGED
@@ -22,6 +22,9 @@ Gem::Specification.new do |s|
22
22
 
23
23
  # specify any dependencies here; for example:
24
24
  s.add_development_dependency "minitest", "~> 3.2"
25
+ s.add_development_dependency "em-minitest-spec", "~> 1.1.1"
26
+ s.add_development_dependency "simplecov"
27
+ s.add_development_dependency "pry"
25
28
  s.add_runtime_dependency "omf_common", "~> 6.0.0"
26
29
  s.add_runtime_dependency "gli", "~> 2.5.3"
27
30
  end
@@ -13,7 +13,7 @@ describe OmfEc::ExperimentProperty do
13
13
  begin
14
14
  OmfEc::ExperimentProperty.create(name)
15
15
  created_properties = created_properties + 1
16
- rescue Exception => ex
16
+ rescue => ex
17
17
  ex.must_be_kind_of OEDLCommandException
18
18
  end
19
19
  end
@@ -35,7 +35,7 @@ describe OmfEc::Experiment do
35
35
 
36
36
  it "must be able to add resource to state" do
37
37
  @experiment.add_or_update_resource_state('bob', type: :test)
38
- @experiment.resource_state('bob')[:uid].must_equal 'bob'
38
+ @experiment.resource_state('bob')[:address].must_equal 'bob'
39
39
  @experiment.resource_state('bob')[:type].must_equal :test
40
40
  end
41
41
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omf_ec
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.1
5
- prerelease:
4
+ version: 6.0.2.pre.1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - NICTA
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-22 00:00:00.000000000 Z
12
+ date: 2013-04-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest
@@ -27,6 +27,54 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '3.2'
30
+ - !ruby/object:Gem::Dependency
31
+ name: em-minitest-spec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.1.1
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: simplecov
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: pry
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
30
78
  - !ruby/object:Gem::Dependency
31
79
  name: omf_common
32
80
  requirement: !ruby/object:Gem::Requirement
@@ -122,14 +170,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
170
  required_rubygems_version: !ruby/object:Gem::Requirement
123
171
  none: false
124
172
  requirements:
125
- - - ! '>='
173
+ - - ! '>'
126
174
  - !ruby/object:Gem::Version
127
- version: '0'
175
+ version: 1.3.1
128
176
  requirements: []
129
177
  rubyforge_project: omf_ec
130
178
  rubygems_version: 1.8.25
131
179
  signing_key:
132
180
  specification_version: 3
133
181
  summary: OMF experiment controller
134
- test_files: []
135
- has_rdoc:
182
+ test_files:
183
+ - test/omf_ec/context_spec.rb
184
+ - test/omf_ec/dsl_spec.rb
185
+ - test/omf_ec/experiment_property_spec.rb
186
+ - test/omf_ec/experiment_spec.rb
187
+ - test/omf_ec/group_spec.rb
188
+ - test/test_helper.rb