omf_rc 6.0.3 → 6.0.4.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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MGNiZjU5MGViODBjNTc1MDU0MDE3Y2ZmMzY0ZTA0YjQwMWY2MThkMA==
5
+ data.tar.gz: !binary |-
6
+ ZTFiYTZiYzQ0MzZiNjM1NDI1YTlhOTQ0MGZlZTEwYWUwMDlmNjU2MA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MzFhMDI5ZTk5Zjg0YzY3NjI5YzIzMDNiMDYyNDFiYjc4YjIyNzkyNjk4NWNh
10
+ MjYwM2NmMzc3MzJmMTU5NDFkMzA0MTE0N2VhMTM4NjViZTMzY2JlZTE3OWMz
11
+ Y2ExOGE4ZmI5ZjI4YmYyYjgwOTY0M2UxZjNmOTdlN2YyMGE2OGM=
12
+ data.tar.gz: !binary |-
13
+ MGQ1OTExNjE5NjYwZjUxNTU4Njc2ZWNlOWVmODViZThlNThiMTNlN2YzOTZj
14
+ MWE2MjZmMDJmZjZjMDVhMzEwNGU3ZGVkNDEwMTM3Mzk5NzliZGRkNTU0OGE5
15
+ ODAzZGZhMmE4YjZhY2UxNzBhYjUwZWJkNzJhZjdkZWJmZmQzM2E=
data/bin/omf_rc CHANGED
@@ -28,6 +28,10 @@ begin
28
28
  options[:advanced_configfile] = file
29
29
  end
30
30
 
31
+ opts.on("--log_config CONFIGFILE", "Logging Configuration File") do |file|
32
+ options[:logging_configfile] = file
33
+ end
34
+
31
35
  opts.on("-u URI", "Communication URI (xmpp://user:password@domain)") do |uri|
32
36
  options[:uri] = uri
33
37
  end
@@ -87,23 +91,6 @@ unless common_options[:communication] && common_options[:communication][:url]
87
91
  exit(1)
88
92
  end
89
93
 
90
- if options[:add_default_factories] != false
91
- OmfRc::ResourceFactory.load_default_resource_proxies
92
- end
93
-
94
- if options[:factories]
95
- options[:factories].each do |f|
96
- if (req = f[:require])
97
- begin
98
- info "Try to load resource module '#{req}'"
99
- require(req)
100
- rescue LoadError => e
101
- error e.message
102
- end
103
- end
104
- end
105
- end
106
-
107
94
  if options[:auth]
108
95
  if File.exist?(options[:auth][:entity_cert]) && File.exist?(options[:auth][:entity_key])
109
96
  entity = OmfCommon::Auth::Certificate.create_from_x509(File.read(options[:auth][:entity_cert]),
@@ -114,6 +101,27 @@ end
114
101
  common_options[:communication][:auth] = {} if entity
115
102
 
116
103
  OmfCommon.init(options[:environment].to_sym, common_options) do |el|
104
+ # Load a customised logging set up if provided
105
+ OmfCommon.load_logging_config(options[:logging_configfile])
106
+
107
+ # Load extensions
108
+ if options[:add_default_factories] != false
109
+ OmfRc::ResourceFactory.load_default_resource_proxies
110
+ end
111
+
112
+ if options[:factories]
113
+ options[:factories].each do |f|
114
+ if (req = f[:require])
115
+ begin
116
+ info "Try to load resource module '#{req}'"
117
+ require(req)
118
+ rescue LoadError => e
119
+ error e.message
120
+ end
121
+ end
122
+ end
123
+ end
124
+
117
125
  info "Starting OMF Resource Controller version '#{gem_version}'"
118
126
 
119
127
  OmfCommon.comm.on_connected do |comm|
@@ -126,9 +134,12 @@ OmfCommon.init(options[:environment].to_sym, common_options) do |el|
126
134
 
127
135
  options[:resources].each do |res_opts|
128
136
  rtype = res_opts.delete(:type)
137
+ res_creation_opts = res_opts.delete(:creation_opts)
138
+ res_creation_opts ||= res_opts.delete(:create_opts)
139
+ res_creation_opts ||= {}
129
140
  res_opts[:certificate] = entity if entity
130
141
  begin
131
- OmfRc::ResourceFactory.create(rtype, res_opts)
142
+ OmfRc::ResourceFactory.create(rtype, res_opts, res_creation_opts)
132
143
  rescue => e
133
144
  error "#{e.message}\n#{e.backtrace.join("\n")}"
134
145
  end
@@ -137,3 +148,4 @@ OmfCommon.init(options[:environment].to_sym, common_options) do |el|
137
148
  end
138
149
  end
139
150
  info "Stopping OMF Resource Controller version '#{gem_version}'"
151
+
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2013 National ICT Australia Limited (NICTA).
4
+ # This software may be used and distributed solely under the terms of the MIT license (License).
5
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
6
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
7
+
8
+ # This script is intended to be run by the PLE Node Manager:
9
+ # 1) after initial slice creation
10
+ # 2) after slice renewal
11
+ # to fetch the client, root and intermediate certificates for the OMF RC
12
+
13
+ require 'yaml'
14
+
15
+ curl="curl -s -m30"
16
+
17
+ puts "Running OMF PLE trigger script"
18
+
19
+ raise "Please use Ruby 1.9.3 or higher" if RUBY_VERSION < "1.9.3"
20
+ raise "You must run this script as root" unless Process.uid==0
21
+ raise "You must switch to gemset 'omf' and install the 'omf_rc' gem" unless system("which install_omf_rc > /dev/null")
22
+
23
+ def check_cert(file, text)
24
+ raise "Failed to #{text} (#{file})" unless File.exists?(file) and File.size?(file) > 0
25
+ end
26
+
27
+ config_file = "/etc/omf_rc/config.yml"
28
+ init_script = "/etc/init.d/omf_rc"
29
+ csr = "/tmp/request.csr"
30
+ cert_server = "http://srv.mytestbed.net:4567/ple/"
31
+
32
+ # parse config file
33
+ raise "could not find #{config_file}" unless File.exists?(config_file)
34
+ config = YAML.load_file(config_file)
35
+ host = config[:hostname]
36
+ slice = config[:slicename]
37
+ raise "could not determine host name" unless host
38
+ raise "could not determine slice name" unless slice
39
+ root_cert_dir = config[:auth][:root_cert_dir]
40
+ entity_cert = config[:auth][:entity_cert]
41
+ entity_key = config[:auth][:entity_key]
42
+ raise ":root_cert_dir missing in config file" unless root_cert_dir
43
+ raise ":entity_cert missing in config file" unless entity_cert
44
+ raise "cannot find private key at #{entity_key}" unless File.exists?(entity_key)
45
+ Dir.mkdir(root_cert_dir) unless File.directory?(root_cert_dir)
46
+
47
+ # stop the RC
48
+ system "#{init_script} stop" if File.exists?(init_script)
49
+ system "sleep 2; pkill -f /bin/omf_rc"
50
+
51
+ # create CSR
52
+ puts "Generating CSR"
53
+ system "openssl req -subj /CN=#{slice}%#{host} -new -key #{entity_key} -out #{csr}"
54
+ check_cert(csr, "generate CSR")
55
+
56
+ # fetch client cert
57
+ puts "Fetching client cert"
58
+ system "#{curl} -F \"csr=@#{csr}\" -F \"slice=#{slice}\" -F \"resource=#{host}\" #{cert_server}resource/cert -o #{entity_cert}"
59
+ check_cert(entity_cert, "fetch client cert")
60
+
61
+ # fetch root cert
62
+ puts "Fetching root cert"
63
+ root_cert = "#{root_cert_dir}/root.crt"
64
+ system "#{curl} #{cert_server}root/cert -o #{root_cert}"
65
+ check_cert(root_cert, "fetch root cert")
66
+
67
+ # fetch intermediate cert
68
+ puts "Fetching intermediate cert"
69
+ intermediate_cert = "#{root_cert_dir}/intermediate.crt"
70
+ system "#{curl} #{cert_server}intermediate/cert -o #{intermediate_cert}"
71
+ check_cert(intermediate_cert, "fetch intermediate cert")
72
+
73
+ # install the init script if it doesn't exist yet
74
+ puts "Installing OMF init script"
75
+ system "install_omf_rc -i" unless File.exists?(init_script)
76
+
77
+ # start the RC
78
+ system "#{init_script} start"
79
+
80
+ puts "OMF PLE trigger script operation finished"
@@ -15,6 +15,8 @@ class OmfRc::MessageProcessError < StandardError
15
15
  end
16
16
  end
17
17
 
18
+ class OmfRc::TopicNotSubscribedError < StandardError; end
19
+
18
20
  # No method error that caused by configure/request unknown property
19
21
  #
20
22
  class OmfRc::UnknownPropertyError < NoMethodError
@@ -26,21 +26,10 @@ class OmfRc::ResourceFactory
26
26
  unless @@proxy_list.include?(type)
27
27
  raise ArgumentError, "Resource type not found: #{type.to_s}" unless @@proxy_list.include?(type)
28
28
  end
29
- # Get relevant module identified by type
30
- emodule = @@proxy_list[type].proxy_module || "OmfRc::ResourceProxy::#{type.camelize}".constantize
31
- # Create a new instance of abstract resource
32
- resource = OmfRc::ResourceProxy::AbstractResource.new(type, opts, creation_opts, &creation_callback)
33
- # Extend newly created resource with proxy module
34
- resource.extend(emodule)
35
-
36
- # Initiate property hash
37
- resource.methods.each do |m|
38
- resource.__send__(m) if m =~ /default_property_(.+)/
29
+ # Create a new instance of abstract resource and return it
30
+ OmfRc::ResourceProxy::AbstractResource.new(type, opts, creation_opts) do |res|
31
+ creation_callback.call(res) if creation_callback
39
32
  end
40
- # Execute resource before_ready hook if any
41
- call_hook(:before_ready, resource)
42
-
43
- resource
44
33
  end
45
34
 
46
35
  alias :new :create
@@ -79,8 +79,8 @@ class OmfRc::ResourceProxy::AbstractResource
79
79
  create_children_resources: true
80
80
  }
81
81
 
82
- attr_accessor :uid, :hrn, :type, :comm, :property, :certificate
83
- attr_reader :opts, :children, :membership, :creation_opts, :membership_topics
82
+ attr_accessor :uid, :hrn, :type, :property, :certificate
83
+ attr_reader :opts, :children, :membership, :creation_opts, :membership_topics, :topics
84
84
 
85
85
  # Initialisation
86
86
  #
@@ -89,7 +89,6 @@ class OmfRc::ResourceProxy::AbstractResource
89
89
  # @param [Hash] opts options to be initialised
90
90
  # @option opts [String] :uid Unique identifier
91
91
  # @option opts [String] :hrn Human readable name
92
- # @option opts [Hash] :property A hash for keeping internal state
93
92
  # @option opts [Hash] :instrument A hash for keeping instrumentation-related state
94
93
  # @option opts [OmfCommon::Auth::Certificate] :certificate The certificate for this resource
95
94
  #
@@ -104,15 +103,15 @@ class OmfRc::ResourceProxy::AbstractResource
104
103
  @creation_opts = Hashie::Mash.new(DEFAULT_CREATION_OPTS.merge(creation_opts))
105
104
 
106
105
  @type = type
107
- @uid = (@opts.uid || SecureRandom.uuid).to_s
108
- @hrn = @opts.hrn && @opts.hrn.to_s
106
+ @uid = (@opts.delete(:uid) || SecureRandom.uuid).to_s
107
+ @hrn = @opts.delete(:hrn)
108
+ @hrn = @hrn.to_s if @hrn
109
109
 
110
- @children ||= []
110
+ @children = []
111
111
  @membership = []
112
112
  @topics = []
113
- @membership_topics ||= {}
114
-
115
- @property = Hashie::Mash.new(@opts.property)
113
+ @membership_topics = {}
114
+ @property = Hashie::Mash.new
116
115
 
117
116
  OmfCommon.comm.subscribe(@uid) do |t|
118
117
  @topics << t
@@ -121,40 +120,66 @@ class OmfRc::ResourceProxy::AbstractResource
121
120
  warn "Could not create topic '#{uid}', will shutdown, trying to clean up old topics. Please start it again once it has been shutdown."
122
121
  OmfCommon.comm.disconnect()
123
122
  else
124
- if (@certificate = @opts.certificate)
125
- OmfCommon::Auth::CertificateStore.instance.register(@certificate, t.address)
126
- else
127
- if (pcert = @opts.parent_certificate)
128
- @certificate = pcert.create_for(resource_address, @type, t.address)
123
+ begin
124
+ # Setup authentication related properties
125
+ if (@certificate = @opts.delete(:certificate))
126
+ OmfCommon::Auth::CertificateStore.instance.register(@certificate, t.address)
127
+ else
128
+ if (pcert = @opts.delete(:parent_certificate))
129
+ @certificate = pcert.create_for(resource_address, @type, t.address)
130
+ end
129
131
  end
130
- end
131
-
132
- creation_callback.call(self) if creation_callback
133
-
134
- copts = { src: self.resource_address }
135
- copts[:cert] = @certificate.to_pem_compact if @certificate
136
-
137
- cprops = @property.reject { |k| [:parent_certificate, :parent].include?(k.to_sym) }
138
- cprops[:res_id] = self.resource_address
139
132
 
140
- t.inform(:creation_ok, cprops, copts)
133
+ # Extend resource with Resource Module, can be obtained from Factory
134
+ emodule = OmfRc::ResourceFactory.proxy_list[@type].proxy_module || "OmfRc::ResourceProxy::#{@type.camelize}".constantize
135
+ self.extend(emodule)
136
+ # Initiate property hash with default property values
137
+ self.methods.each do |m|
138
+ self.__send__(m) if m =~ /default_property_(.+)/
139
+ end
140
+ # Bootstrap initial configure, this should handle membership too
141
+ init_configure(self, @opts)
142
+ # Execute resource before_ready hook if any
143
+ call_hook :before_ready, self
144
+
145
+ # Prepare init :creation_ok message
146
+ copts = { src: self.resource_address }
147
+ copts[:cert] = @certificate.to_pem_compact if @certificate
148
+ cprops = @property
149
+ cprops[:res_id] = self.resource_address
150
+ add_prop_status_to_response(self, @opts.keys, cprops)
151
+
152
+ # Then send inform message to itself, with all resource options' current values.
153
+ t.inform(:creation_ok, cprops, copts) unless creation_opts[:suppress_create_message]
154
+
155
+ t.on_message(@uid) do |imsg|
156
+ process_omf_message(imsg, t)
157
+ end
141
158
 
142
- t.on_message(@uid) do |imsg|
143
- process_omf_message(imsg, t)
159
+ creation_callback.call(self) if creation_callback
160
+ rescue => e
161
+ error "Encountered exception: #{e.message}, returning ERROR message"
162
+ debug e.backtrace.join("\n")
163
+ t.inform(:creation_failed,
164
+ { reason: e.message },
165
+ { src: self.resource_address })
144
166
  end
145
167
  end
146
168
  end
147
- configure_membership(@opts.membership) if @opts.membership
169
+ end
170
+
171
+ # Return resource' pubsub topic it has subscribed.
172
+ def resource_topic
173
+ if @topics.empty?
174
+ raise TopicNotSubscribedError, "Resource '#{@uid}' has not subscribed to any topics"
175
+ end
176
+ @topics[0]
148
177
  end
149
178
 
150
179
  # Return the public 'routable' address for this resource or nil if not known yet.
151
180
  #
152
- def resource_address()
153
- if t = @topics[0]
154
- t.address
155
- else
156
- nil # TODO: should we raise Excaption
157
- end
181
+ def resource_address
182
+ resource_topic.address
158
183
  end
159
184
 
160
185
  # Get binding of current object, used for ERB eval
@@ -183,9 +208,6 @@ class OmfRc::ResourceProxy::AbstractResource
183
208
 
184
209
  new_resource = OmfRc::ResourceFactory.create(type.to_sym, opts, creation_opts, &creation_callback)
185
210
 
186
- new_props = opts.reject { |k| [:type, :name, :uid, :hrn, :property, :instrument].include?(k.to_sym) }
187
- init_configure(new_resource, new_props)
188
-
189
211
  call_hook(:after_create, self, new_resource)
190
212
 
191
213
  self.synchronize do
@@ -442,13 +464,8 @@ class OmfRc::ResourceProxy::AbstractResource
442
464
  response[:res_id] = new_obj.resource_address
443
465
  response[:uid] = new_obj.uid
444
466
 
445
- msg_props.each do |key, value|
446
- if new_obj.respond_to? "request_#{key}"
447
- response[key] = new_obj.__send__("request_#{key}")
448
- elsif new_obj.respond_to? key
449
- response[key] = new_obj.__send__(key)
450
- end
451
- end
467
+ # Getting property status, for preparing inform msg
468
+ add_prop_status_to_response(new_obj, msg_props.keys, response)
452
469
 
453
470
  if (cred = new_obj.certificate)
454
471
  response[:cert] = cred.to_pem_compact
@@ -531,13 +548,7 @@ class OmfRc::ResourceProxy::AbstractResource
531
548
  warn "INFORM message delayed as resource's address is not known yet"
532
549
  return
533
550
  end
534
- if topic == :ALL
535
- inform(itype, inform_data)
536
- membership_topics.each {|m| inform(itype, inform_data, m[1])}
537
- return
538
- end
539
551
 
540
- topic ||= @topics.first
541
552
  if inform_data.is_a? Hash
542
553
  inform_data = Hashie::Mash.new(inform_data) if inform_data.class == Hash
543
554
  #idata = inform_data.dup
@@ -552,12 +563,11 @@ class OmfRc::ResourceProxy::AbstractResource
552
563
 
553
564
  message.itype = itype
554
565
  unless itype == :released
555
- #message[:uid] ||= self.uid
556
- #message[:type] ||= self.type
557
566
  message[:hrn] ||= self.hrn if self.hrn
558
567
  end
559
568
 
560
- topic.publish(message)
569
+ # Just send to all topics, including group membership
570
+ (membership_topics.map { |mt| mt[1] } + @topics).each { |t| t.publish(message) }
561
571
 
562
572
  OmfRc::ResourceProxy::MPPublished.inject(Time.now.to_f,
563
573
  self.uid, replyto, inform_message.mid) if OmfCommon::Measure.enabled?
@@ -569,12 +579,17 @@ class OmfRc::ResourceProxy::AbstractResource
569
579
 
570
580
  def inform_error(reason)
571
581
  error reason
572
- inform :error, {reason: reason}
582
+ inform :error, { reason: reason }
583
+ end
584
+
585
+ def inform_creation_failed(reason)
586
+ error reason
587
+ inform :creation_failed, { reason: reason }
573
588
  end
574
589
 
575
590
  def inform_warn(reason)
576
591
  warn reason
577
- inform :warn, {reason: reason}
592
+ inform :warn, { reason: reason }
578
593
  end
579
594
 
580
595
  # Return a hash describing a reference to this object
@@ -591,11 +606,12 @@ class OmfRc::ResourceProxy::AbstractResource
591
606
  # @param [String] name of the topic
592
607
  # @return [Array<OmfRc::ResourceProxy::AbstractResource>]
593
608
  def objects_by_topic(name)
594
- if name == uid || membership.include?(name)
609
+ if name == uid || membership.any? { |m| m.include?(name) }
595
610
  objs = [self]
596
611
  else
597
- objs = children.find_all { |v| v.uid == name || v.membership.include?(name)}
612
+ objs = children.find_all { |v| v.uid == name || v.membership.any? { |m| m.include?(name) } }
598
613
  end
614
+ objs
599
615
  end
600
616
 
601
617
  # Retrieve replyto address
@@ -644,4 +660,20 @@ class OmfRc::ResourceProxy::AbstractResource
644
660
 
645
661
  call_hook(:after_initial_configured, res_ctx)
646
662
  end
663
+
664
+ # Getting property status, adding them to inform message
665
+ #
666
+ # @param [OmfRc::ResourceProxy::AbstractResource] res_ctx resource object it applies to
667
+ # @param [Array] msg_props a set of property names coming via configure/create message
668
+ def add_prop_status_to_response(res_ctx, msg_props, response)
669
+ msg_props.each do |p|
670
+ # Property can either be defined as 'request' API call
671
+ # or just an internal variable, e.g. uid, hrn, etc.
672
+ if res_ctx.respond_to? "request_#{p}"
673
+ response[p] = res_ctx.__send__("request_#{p}")
674
+ elsif res_ctx.respond_to? p
675
+ response[p] = res_ctx.__send__(p)
676
+ end
677
+ end
678
+ end
647
679
  end
@@ -475,7 +475,7 @@ module OmfRc::ResourceProxy::Application
475
475
  # @return [String] the full command line
476
476
  # @!macro work
477
477
  work('build_command_line') do |res|
478
- cmd_line = "env -i " # Start with a 'clean' environments
478
+ cmd_line = "env -i " # Start with a 'clean' environment
479
479
  res.property.environments.each do |e,v|
480
480
  val = v.kind_of?(String) ? "'#{v}'" : v
481
481
  cmd_line += "#{e.to_s.upcase}=#{val} "
@@ -41,11 +41,10 @@ module OmfRc::Util::CommonTools
41
41
  #
42
42
  %w(error warn).each do |type|
43
43
  work("log_inform_#{type}") do |res, msg|
44
- logger.send(type, msg)
45
- OmfCommon.comm.publish(
46
- res.uid,
47
- OmfCommon::Message.create(:inform, { reason: msg }, { itype: type.upcase })
48
- )
44
+ res.send(type, msg, res.uid)
45
+ res.topics.first.inform(type.to_sym,
46
+ { reason: msg },
47
+ { src: res.resource_address })
49
48
  end
50
49
  end
51
50
 
@@ -45,7 +45,7 @@ module OmfRc::Util::Ip
45
45
  # @!method configure_ip_addr
46
46
  configure :ip_addr do |resource, value|
47
47
  if value.nil? || value.split('/')[1].nil?
48
- raise ArgumentError, "You need to provide an IP address with netmask. E.g. 0.0.0.0/24. Got #{value}."
48
+ raise ArgumentError, "You need to provide a netmask with the IP address, e.g. #{value}/24. Got #{value}."
49
49
  end
50
50
  # Remove all ip addrs associated with the device
51
51
  resource.flush_ip_addrs
@@ -4,5 +4,5 @@
4
4
  # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
5
 
6
6
  module OmfRc
7
- VERSION = "6.0.3"
7
+ VERSION = "6.0.4.pre.1"
8
8
  end
data/omf_rc.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
25
25
  s.add_development_dependency "em-minitest-spec", "~> 1.1.1"
26
26
  s.add_development_dependency "pry"
27
27
  s.add_development_dependency "simplecov"
28
- s.add_runtime_dependency "omf_common", "~> 6.0.2"
28
+ s.add_runtime_dependency "omf_common", "~> 6.0.4.pre.1"
29
29
  s.add_runtime_dependency "cocaine", "~> 0.3.0"
30
30
  s.add_runtime_dependency "mocha"
31
31
  end
@@ -14,6 +14,7 @@ module OmfRc::ResourceProxy
14
14
  include OmfRc::ResourceProxyDSL
15
15
  register_proxy :parent
16
16
 
17
+ property :p0
17
18
  request :test_exception do
18
19
  raise StandardError
19
20
  end
@@ -33,45 +34,13 @@ end
33
34
 
34
35
  describe AbstractResource do
35
36
  before do
36
- # Things we need to mock
37
- # * communicator
38
- # * topic
39
- # * calling communicator callbacks
40
- @comm = mock
41
- @topics = {
42
- parent: OmfCommon::Comm::Topic.create(:parent),
43
- child: OmfCommon::Comm::Topic.create(:child)
44
- }
45
- [:inform, :publish, :unsubscribe].each do |m_name|
46
- OmfCommon::Comm::Topic.any_instance.stubs(m_name)
47
- end
48
-
49
- # Return child topic by default unless specified
50
- @comm.stubs(:create_topic).returns(@topics[:child])
51
-
52
- [:parent, :child].each do |t_name|
53
- @topics[t_name].stubs(:address).returns("xmpp://localhost/#{t_name.to_s}")
54
- @comm.stubs(:create_topic).with("xmpp://localhost/#{t_name}").returns(@topics[t_name])
55
- end
56
-
57
- @comm.class_eval do
58
- define_method(:subscribe) do |*args, &block|
59
- block.call(self.create_topic("xmpp://localhost/#{args[0]}"))
60
- end
61
- end
62
-
63
- OmfCommon.stubs(:comm).returns(@comm)
37
+ mock_comm_in_res_proxy
38
+ mock_topics_in_res_proxy(resources: [:parent, :child], default: :child)
64
39
  @parent = OmfRc::ResourceFactory.create(:parent, { uid: :parent, hrn: 'default_node' }, { create_children_resources: true })
65
40
  end
66
41
 
67
42
  after do
68
- @comm.class_eval do
69
- undef_method(:subscribe)
70
- end
71
- OmfCommon.unstub(:comm)
72
- [:inform, :publish, :unsubscribe].each do |m_name|
73
- OmfCommon::Comm::Topic.any_instance.unstub(m_name)
74
- end
43
+ unmock_comm_in_res_proxy
75
44
  @parent = nil
76
45
  end
77
46
 
@@ -80,6 +49,12 @@ describe AbstractResource do
80
49
  OmfRc::ResourceFactory.create(:parent).uid.must_match /.{8}-.{4}-.{4}-.{4}-.{12}/
81
50
  end
82
51
 
52
+ it "must be able to initialise properties" do
53
+ p = OmfRc::ResourceFactory.create(:parent, { p0: 'bob', uid: 'unique' })
54
+ p.request_p0.must_equal 'bob'
55
+ p.request_uid.must_equal 'unique'
56
+ end
57
+
83
58
  it "must be able to keep state inside 'property' instnace variable" do
84
59
  @parent.property.bob = "test"
85
60
  @parent.property.bob.must_equal "test"
@@ -90,9 +65,9 @@ describe AbstractResource do
90
65
  end
91
66
 
92
67
  it "must returned all the properties can be requested & configured" do
93
- @parent.request_available_properties.configure.must_equal [:membership]
68
+ @parent.request_available_properties.configure.must_equal [:p0, :membership]
94
69
  @parent.request_available_properties.request.must_equal(
95
- [:test_exception, :supported_children_type, :uid, :type, :hrn, :name, :membership, :child_resources]
70
+ [:p0, :test_exception, :supported_children_type, :uid, :type, :hrn, :name, :membership, :child_resources]
96
71
  )
97
72
  end
98
73
 
@@ -134,66 +109,29 @@ describe AbstractResource do
134
109
  end
135
110
 
136
111
  describe "when interacted with communication layer" do
137
- #include EM::MiniTest::Spec
138
-
139
- before do
140
- #@client = Blather::Client.new
141
- #@stream = MiniTest::Mock.new
142
- #@stream.expect(:send, true, [Blather::Stanza])
143
- #@client.post_init @stream, Blather::JID.new('n@d/r')
144
- #@xmpp = OmfCommon::Comm::XMPP::Communicator.new
145
- end
146
-
147
112
  it "must be able to send inform message" do
148
- skip
149
- # FIXME
150
- @xmpp.stub :publish, proc { |replyto, message| message.valid?.must_equal true} do
151
- @parent.inform(:creation_ok, res_id: 'bob', cid: 'id', replyto: 'topic')
152
- @parent.inform(:released, res_id: 'bob', cid: 'id', replyto: 'topic')
153
- @parent.inform(:status, status: { key: 'value' }, cid: 'id', replyto: 'topic')
154
- @parent.inform(:creation_ok, res_id: 'bob', cid: 'id', replyto: 'topic')
155
- @parent.inform(:warn, 'going to fail')
156
- @parent.inform(:error, 'failed')
157
- @parent.inform(:warn, Exception.new('going to fail'))
158
- @parent.inform(:error, Exception.new('failed'))
159
- @parent.inform(:creation_failed, Exception.new('failed'))
160
- end
161
-
162
- lambda { @parent.inform(:creation_failed, 'bob') }.must_raise ArgumentError
163
- lambda { @parent.inform(:creation_ok, 'topic') }.must_raise ArgumentError
164
- lambda { @parent.inform(:status, 'topic') }.must_raise ArgumentError
165
- end
166
-
167
- it "must be able to connect & disconnect" do
168
- skip
169
- Blather::Client.stub :new, @client do
170
- Blather::Stream::Client.stub(:start, @client) do
171
- @parent = OmfRc::ResourceFactory.create(:node, { hrn: 'default_node', user: 'bob', password: 'pw', server: 'example.com'}, @xmpp)
172
- @client.stub(:connected?, true) do
173
- @parent.connect
174
- @parent.comm.conn_info.must_equal({proto: :xmpp, user: 'bob', doamin: 'example.com'})
175
- end
176
- end
177
- end
113
+ @parent.inform(:creation_ok, res_id: 'bob')
114
+ @parent.inform(:released, res_id: 'bob')
115
+
116
+ @parent.inform_status(key: 'value')
117
+ @parent.inform_warn('going to fail')
118
+ @parent.inform_error('failed')
119
+ @parent.inform_creation_failed('failed')
178
120
  end
179
121
  end
180
122
 
181
- describe "when request/configure property not pre-defined in proxy" do
182
- it "must try property hash" do
183
- skip
123
+ describe "when request/configure property not pre-defined in proxy (adhoc)" do
124
+ it "must try property hash for internal usage" do
184
125
  @parent.property[:bob] = "bob"
185
- @parent.property[:false] = false
186
-
187
- @parent.methods.must_include :request_bob
188
- @parent.methods.must_include :configure_bob
189
-
190
- @parent.request_bob.must_equal "bob"
191
- @parent.request_false.must_equal false
126
+ @parent.property[:boolean] = false
127
+ @parent.property.bob.must_equal "bob"
128
+ @parent.property.boolean.must_equal false
129
+ end
192
130
 
193
- @parent.configure_bob("not_bob")
194
- @parent.request_bob.must_equal "not_bob"
195
- proc { @parent.request_bobs_cousin }.must_raise OmfRc::UnknownPropertyError
196
- proc { @parent.bobs_cousin }.must_raise NoMethodError
131
+ it "wont create request/configure method for such property" do
132
+ @parent.methods.wont_include :request_bob
133
+ @parent.methods.wont_include :configure_bob
134
+ proc { @parent.request_bob }.must_raise NoMethodError
197
135
  end
198
136
  end
199
137
 
@@ -209,7 +147,7 @@ describe AbstractResource do
209
147
  @parent.process_omf_message(@request_msg, @topics[:parent])
210
148
  end
211
149
 
212
- it "must resuce exception if occured" do
150
+ it "must rescue exception if occurred" do
213
151
  @parent.process_omf_message(OmfCommon::Message.create(:request, { test_exception: nil }), @topics[:parent])
214
152
  end
215
153
 
@@ -8,12 +8,14 @@ require 'omf_rc/resource_proxy/node'
8
8
 
9
9
  describe OmfRc::ResourceProxy::Node do
10
10
  before do
11
- @xmpp = MiniTest::Mock.new
12
- @xmpp.expect(:subscribe, true, [String])
11
+ mock_comm_in_res_proxy
12
+ mock_topics_in_res_proxy(resources: [:n0, :app_test], default: :n0)
13
+ @node = OmfRc::ResourceFactory.create(:node, { uid: :n0, hrn: 'node_test'})
14
+ end
13
15
 
14
- OmfCommon.stub :comm, @xmpp do
15
- @node = OmfRc::ResourceFactory.create(:node, hrn: 'node_test')
16
- end
16
+ after do
17
+ unmock_comm_in_res_proxy
18
+ @node = nil
17
19
  end
18
20
 
19
21
  describe "when included in the resource instance" do
@@ -46,32 +48,26 @@ describe OmfRc::ResourceProxy::Node do
46
48
  end
47
49
 
48
50
  it "must provide a list of created applications" do
49
- OmfCommon.stub :comm, @xmpp do
50
- @xmpp.expect(:subscribe, true, [String])
51
- @node.create(:application, { :uid => 'app_test', :hrn => 'app_test' })
51
+ @node.create(:application, { uid: 'app_test', hrn: 'app_test' })
52
52
 
53
- @node.request_applications.must_equal [
54
- { name: 'app_test', type: :application, uid: 'app_test' }
55
- ]
56
- end
53
+ @node.request_applications.must_equal [
54
+ { name: 'app_test', type: :application, uid: 'app_test' }
55
+ ]
57
56
  end
58
57
 
59
58
  it "must provide a list of created interfaces" do
60
- OmfCommon.stub :comm, @xmpp do
61
- devices = [
62
- { name: 'eth0', driver: 'e1000e', category: 'net', proxy: 'net' },
63
- { name: 'phy0', driver: 'iwlwifi', category: 'net', subcategory: 'wlan', proxy: 'wlan' }
64
- ]
65
- @node.stub :request_devices, devices do
66
- 2.times { @xmpp.expect(:subscribe, true, [String]) }
67
- @node.create(:wlan, { :uid => 'wlan0', :if_name => 'wlan0' })
68
- @node.create(:net, { :uid => 'eth0', :if_name => 'eth0' })
59
+ devices = [
60
+ { name: 'eth0', driver: 'e1000e', category: 'net', proxy: 'net' },
61
+ { name: 'phy0', driver: 'iwlwifi', category: 'net', subcategory: 'wlan', proxy: 'wlan' }
62
+ ]
63
+ @node.stub :request_devices, devices do
64
+ @node.create(:wlan, { :uid => 'wlan0', :if_name => 'wlan0' })
65
+ @node.create(:net, { :uid => 'eth0', :if_name => 'eth0' })
69
66
 
70
- @node.request_interfaces.must_equal [
71
- { name: 'eth0', type: :net, uid: 'eth0' },
72
- { name: 'wlan0', type: :wlan, uid: 'wlan0' }
73
- ]
74
- end
67
+ @node.request_interfaces.must_equal [
68
+ { name: 'eth0', type: :net, uid: 'eth0' },
69
+ { name: 'wlan0', type: :wlan, uid: 'wlan0' }
70
+ ]
75
71
  end
76
72
  end
77
73
  end
@@ -8,8 +8,8 @@ require 'omf_rc/resource_proxy_dsl'
8
8
 
9
9
  describe OmfRc::ResourceProxyDSL do
10
10
  before do
11
- @xmpp = MiniTest::Mock.new
12
- @xmpp.expect(:subscribe, true, [String])
11
+ mock_comm_in_res_proxy
12
+ mock_topics_in_res_proxy(resources: [:mp0, :mrp0, :up0])
13
13
 
14
14
  module OmfRc::Util::MockUtility
15
15
  include OmfRc::ResourceProxyDSL
@@ -71,31 +71,33 @@ describe OmfRc::ResourceProxyDSL do
71
71
  end
72
72
  end
73
73
 
74
+ after do
75
+ unmock_comm_in_res_proxy
76
+ end
77
+
74
78
  describe "when included by modules to define resource proxy functionalities" do
75
79
  it "must be able to register the modules" do
76
80
  OmfRc::ResourceFactory.proxy_list.must_include :mock_proxy
77
81
  end
78
82
 
79
83
  it "must be able to define methods" do
80
- OmfCommon.stub :comm, @xmpp do
81
- %w(configure_alpha request_alpha bravo).each do |m|
82
- OmfRc::Util::MockUtility.method_defined?(m.to_sym).must_equal true
83
- end
84
+ %w(configure_alpha request_alpha bravo).each do |m|
85
+ OmfRc::Util::MockUtility.method_defined?(m.to_sym).must_equal true
86
+ end
84
87
 
85
- %w(configure_alpha request_alpha before_ready before_release bravo).each do |m|
86
- OmfRc::ResourceProxy::MockProxy.method_defined?(m.to_sym).must_equal true
87
- end
88
+ %w(configure_alpha request_alpha before_ready before_release bravo).each do |m|
89
+ OmfRc::ResourceProxy::MockProxy.method_defined?(m.to_sym).must_equal true
90
+ end
88
91
 
89
- mock_proxy = OmfRc::ResourceFactory.create(:mock_proxy)
90
- mock_proxy.request_alpha.must_equal mock_proxy.uid
91
- mock_proxy.request_delta.must_equal "printing"
92
- mock_proxy.request_charlie.must_equal "working on printing"
93
- mock_proxy.bravo("magic", "second parameter") do |v|
94
- v.must_equal "working on magic"
95
- end
96
- mock_proxy.bravo("something", "something else").must_equal "something"
97
- mock_proxy.request_zulu(country: 'uk').must_equal "You called zulu with: country"
92
+ mock_proxy = OmfRc::ResourceFactory.create(:mock_proxy, uid: :mp0)
93
+ mock_proxy.request_alpha.must_equal mock_proxy.uid
94
+ mock_proxy.request_delta.must_equal "printing"
95
+ mock_proxy.request_charlie.must_equal "working on printing"
96
+ mock_proxy.bravo("magic", "second parameter") do |v|
97
+ v.must_equal "working on magic"
98
98
  end
99
+ mock_proxy.bravo("something", "something else").must_equal "something"
100
+ mock_proxy.request_zulu(country: 'uk').must_equal "You called zulu with: country"
99
101
  end
100
102
 
101
103
  it "must be able to include utility" do
@@ -116,39 +118,30 @@ describe OmfRc::ResourceProxyDSL do
116
118
  end
117
119
 
118
120
  it "must check new proxy's create_by option when ask a proxy create a new proxy" do
119
- OmfCommon.stub :comm, @xmpp do
120
- @xmpp.expect(:subscribe, true, [String])
121
- OmfRc::ResourceFactory.create(:mock_root_proxy).create(:mock_proxy)
122
- 2.times { @xmpp.expect(:subscribe, true, [String]) }
123
- OmfRc::ResourceFactory.create(:mock_root_proxy).create(:useless_proxy)
124
- 2.times { @xmpp.expect(:subscribe, true, [String]) }
125
- lambda { OmfRc::ResourceFactory.create(:useless_proxy).create(:mock_proxy) }.must_raise StandardError
126
- end
121
+ OmfRc::ResourceFactory.create(:mock_root_proxy, uid: :mrp0).create(:mock_proxy, uid: :mp0)
122
+ OmfRc::ResourceFactory.create(:mock_root_proxy, uid: :mrp0).create(:useless_proxy, uid: :up0)
123
+ lambda { OmfRc::ResourceFactory.create(:useless_proxy, uid: :mrp0).create(:mock_proxy, uid: :mp0) }.must_raise StandardError
127
124
  end
128
125
 
129
126
  it "must be able to define property with default vlaue" do
130
- OmfCommon.stub :comm, @xmpp do
131
- mock_proxy = OmfRc::ResourceFactory.create(:mock_proxy)
132
- mock_proxy.property.mock_prop.must_equal 1
133
- mock_proxy.request_mock_prop.must_equal 1
134
- mock_proxy.configure_mock_prop(2)
135
- mock_proxy.request_mock_prop.must_equal 2
136
- end
127
+ mock_proxy = OmfRc::ResourceFactory.create(:mock_proxy, uid: :mp0)
128
+ mock_proxy.property.mock_prop.must_equal 1
129
+ mock_proxy.request_mock_prop.must_equal 1
130
+ mock_proxy.configure_mock_prop(2)
131
+ mock_proxy.request_mock_prop.must_equal 2
137
132
  end
138
133
 
139
134
 
140
135
  it "must define associate methods when access option given to property definition" do
141
- OmfCommon.stub :comm, @xmpp do
142
- mock_proxy = OmfRc::ResourceFactory.create(:mock_proxy)
143
- # Ready only
144
- mock_proxy.request_read_only_prop.must_equal 1
145
- lambda { mock_proxy.init_read_only_prop }.must_raise NoMethodError
146
- lambda { mock_proxy.configure_read_only_prop }.must_raise NoMethodError
147
- # Init only
148
- mock_proxy.request_init_only_prop.must_equal 1
149
- lambda { mock_proxy.init_init_only_prop }.must_raise NoMethodError
150
- lambda { mock_proxy.configure_init_only_prop }.must_raise NoMethodError
151
- end
136
+ mock_proxy = OmfRc::ResourceFactory.create(:mock_proxy, uid: :mp0)
137
+ # Ready only
138
+ mock_proxy.request_read_only_prop.must_equal 1
139
+ lambda { mock_proxy.init_read_only_prop }.must_raise NoMethodError
140
+ lambda { mock_proxy.configure_read_only_prop }.must_raise NoMethodError
141
+ # Init only
142
+ mock_proxy.request_init_only_prop.must_equal 1
143
+ lambda { mock_proxy.init_init_only_prop }.must_raise NoMethodError
144
+ lambda { mock_proxy.configure_init_only_prop }.must_raise NoMethodError
152
145
  end
153
146
  end
154
147
  end
@@ -7,7 +7,7 @@ require 'test_helper'
7
7
  require 'omf_rc/util/common_tools'
8
8
 
9
9
  describe OmfRc::Util::CommonTools do
10
-
10
+
11
11
  describe "when included in the resource proxy" do
12
12
  before do
13
13
  module OmfRc::ResourceProxy::Test
@@ -15,18 +15,19 @@ describe OmfRc::Util::CommonTools do
15
15
  register_proxy :test
16
16
  utility :common_tools
17
17
  end
18
+ mock_comm_in_res_proxy
19
+ mock_topics_in_res_proxy(resources: [:t0])
20
+ @test = OmfRc::ResourceFactory.create(:test, uid: :t0)
21
+ end
18
22
 
19
- @xmpp = MiniTest::Mock.new
20
- @xmpp.expect(:subscribe, true, [String])
23
+ after do
24
+ unmock_comm_in_res_proxy
25
+ @test = nil
21
26
  end
22
27
 
23
28
  it "must be able to log and inform error/warn messages" do
24
- OmfCommon.stub :comm, @xmpp do
25
- @test = OmfRc::ResourceFactory.create(:test)
26
- 2.times { @xmpp.expect(:publish, true, [String, OmfCommon::Message]) }
27
- @test.log_inform_error "bob"
28
- @test.log_inform_warn "bob"
29
- end
29
+ @test.log_inform_error "bob"
30
+ @test.log_inform_warn "bob"
30
31
  end
31
32
  end
32
33
  end
@@ -17,14 +17,16 @@ describe OmfRc::Util::Ip do
17
17
  utility :ip
18
18
  end
19
19
 
20
- @xmpp = MiniTest::Mock.new
21
- @xmpp.expect(:subscribe, true, [String])
22
-
23
20
  @command = MiniTest::Mock.new
24
21
 
25
- OmfCommon.stub :comm, @xmpp do
26
- @wlan00 = OmfRc::ResourceFactory.create(:ip_test, hrn: 'wlan00')
27
- end
22
+ mock_comm_in_res_proxy
23
+ mock_topics_in_res_proxy(resources: [:w00])
24
+ @wlan00 = OmfRc::ResourceFactory.create(:ip_test, uid: :w00, hrn: 'wlan00')
25
+ end
26
+
27
+ after do
28
+ unmock_comm_in_res_proxy
29
+ @wlan00 = nil
28
30
  end
29
31
 
30
32
  it "must provide features defined in proxy" do
@@ -29,12 +29,14 @@ Cocaine::CommandLine.stub(:new, @command) do
29
29
  property :phy
30
30
  end
31
31
 
32
- @xmpp = MiniTest::Mock.new
33
- @xmpp.expect(:subscribe, true, [String])
32
+ mock_comm_in_res_proxy
33
+ mock_topics_in_res_proxy(resources: [:w00])
34
+ @wlan00 = OmfRc::ResourceFactory.create(:iw_test, uid: :w00, hrn: 'wlan00', phy: 'phy00', if_name: 'wlan1')
35
+ end
34
36
 
35
- OmfCommon.stub :comm, @xmpp do
36
- @wlan00 = OmfRc::ResourceFactory.create(:iw_test, hrn: 'wlan00', property: { phy: 'phy00', if_name: 'wlan1' })
37
- end
37
+ after do
38
+ unmock_comm_in_res_proxy
39
+ @wlan00 = nil
38
40
  end
39
41
 
40
42
  it "must provide features defined in proxy" do
@@ -15,30 +15,32 @@ describe OmfRc::Util::Mod do
15
15
  utility :mod
16
16
  end
17
17
  @command = MiniTest::Mock.new
18
- @xmpp = MiniTest::Mock.new
19
- @xmpp.expect(:subscribe, true, [String])
18
+
19
+ mock_comm_in_res_proxy
20
+ mock_topics_in_res_proxy(resources: [:mt0])
21
+ @mod_test = OmfRc::ResourceFactory.create(:mod_test, uid: :mt0)
22
+ end
23
+
24
+ after do
25
+ unmock_comm_in_res_proxy
26
+ @mod_test = nil
20
27
  end
21
28
 
22
29
  it "will find out a list of modules" do
23
- OmfCommon.stub :comm, @xmpp do
24
- Cocaine::CommandLine.stub(:new, @command) do
25
- @command.expect(:run, fixture("lsmod"))
26
- OmfRc::ResourceFactory.create(:mod_test).request_modules.must_include "kvm"
27
- @command.expect(:run, fixture("lsmod"))
28
- @xmpp.expect(:subscribe, true, [String])
29
- OmfRc::ResourceFactory.create(:mod_test).request_modules.wont_include "Module"
30
- @command.verify
31
- end
30
+ Cocaine::CommandLine.stub(:new, @command) do
31
+ @command.expect(:run, fixture("lsmod"))
32
+ @mod_test.request_modules.must_include "kvm"
33
+ @command.expect(:run, fixture("lsmod"))
34
+ @mod_test.request_modules.wont_include "Module"
35
+ @command.verify
32
36
  end
33
37
  end
34
38
 
35
39
  it "could load a module" do
36
- OmfCommon.stub :comm, @xmpp do
37
- Cocaine::CommandLine.stub(:new, @command) do
38
- @command.expect(:run, true)
39
- OmfRc::ResourceFactory.create(:mod_test).configure_load_module(name: 'magic_module').must_equal "magic_module loaded"
40
- @command.verify
41
- end
40
+ Cocaine::CommandLine.stub(:new, @command) do
41
+ @command.expect(:run, true)
42
+ @mod_test.configure_load_module(name: 'magic_module').must_equal "magic_module loaded"
43
+ @command.verify
42
44
  end
43
45
  end
44
46
  end
data/test/test_helper.rb CHANGED
@@ -25,5 +25,48 @@ def fixture(name)
25
25
  File.read("#{FIXTURE_DIR}/#{name.to_s}")
26
26
  end
27
27
 
28
+ def mock_comm_in_res_proxy
29
+ @comm = mock
30
+
31
+ [:inform, :publish, :unsubscribe].each do |m_name|
32
+ OmfCommon::Comm::Topic.any_instance.stubs(m_name)
33
+ end
34
+
35
+ @comm.class_eval do
36
+ define_method(:subscribe) do |*args, &block|
37
+ block.call(self.create_topic("xmpp://localhost/#{args[0]}"))
38
+ end
39
+ end
40
+
41
+ OmfCommon.stubs(:comm).returns(@comm)
42
+ end
43
+
44
+ def mock_topics_in_res_proxy(options)
45
+ @topics = {}.tap do |hash|
46
+ options[:resources].each do |r|
47
+ hash[r] = OmfCommon::Comm::Topic.create(:parent)
48
+ end
49
+ end
50
+
51
+ if (default_r = options[:default]) && options[:resources].include?(default_r)
52
+ # Return default topic unless specified
53
+ @comm.stubs(:create_topic).returns(@topics[default_r])
54
+ end
55
+ options[:resources].each do |t_name|
56
+ @topics[t_name].stubs(:address).returns("xmpp://localhost/#{t_name.to_s}")
57
+ @comm.stubs(:create_topic).with("xmpp://localhost/#{t_name}").returns(@topics[t_name])
58
+ end
59
+ end
60
+
61
+ def unmock_comm_in_res_proxy
62
+ @comm.class_eval do
63
+ undef_method(:subscribe)
64
+ end
65
+ OmfCommon.unstub(:comm)
66
+ [:inform, :publish, :unsubscribe].each do |m_name|
67
+ OmfCommon::Comm::Topic.any_instance.unstub(m_name)
68
+ end
69
+ end
70
+
28
71
  OmfCommon::Message.init(type: :xml)
29
72
 
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omf_rc
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.3
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-06-26 00:00:00.000000000 Z
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: pry
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: simplecov
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,23 +69,20 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: omf_common
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
85
- version: 6.0.2
75
+ version: 6.0.4.pre.1
86
76
  type: :runtime
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
93
- version: 6.0.2
82
+ version: 6.0.4.pre.1
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: cocaine
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
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
@@ -110,7 +97,6 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: mocha
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
@@ -130,6 +115,7 @@ email:
130
115
  executables:
131
116
  - install_omf_rc
132
117
  - omf_rc
118
+ - plc_trigger_omf_rc
133
119
  extensions: []
134
120
  extra_rdoc_files: []
135
121
  files:
@@ -138,6 +124,7 @@ files:
138
124
  - Rakefile
139
125
  - bin/install_omf_rc
140
126
  - bin/omf_rc
127
+ - bin/plc_trigger_omf_rc
141
128
  - config/config.yml
142
129
  - config/config_with_authentication.yml.example
143
130
  - config/config_with_extensions.yml.example
@@ -200,29 +187,25 @@ files:
200
187
  homepage: http://omf.mytestbed.net
201
188
  licenses:
202
189
  - MIT
190
+ metadata: {}
203
191
  post_install_message:
204
192
  rdoc_options: []
205
193
  require_paths:
206
194
  - lib
207
195
  required_ruby_version: !ruby/object:Gem::Requirement
208
- none: false
209
196
  requirements:
210
197
  - - ! '>='
211
198
  - !ruby/object:Gem::Version
212
199
  version: 1.9.3
213
200
  required_rubygems_version: !ruby/object:Gem::Requirement
214
- none: false
215
201
  requirements:
216
- - - ! '>='
202
+ - - ! '>'
217
203
  - !ruby/object:Gem::Version
218
- version: '0'
219
- segments:
220
- - 0
221
- hash: 4426195785601747847
204
+ version: 1.3.1
222
205
  requirements: []
223
206
  rubyforge_project: omf_rc
224
- rubygems_version: 1.8.25
207
+ rubygems_version: 2.0.7
225
208
  signing_key:
226
- specification_version: 3
209
+ specification_version: 4
227
210
  summary: OMF resource controller
228
211
  test_files: []