omf_ec 6.0.1 → 6.0.2.pre.1

Sign up to get free protection for your applications and to get access to all the features.
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