omf_rc 6.1.1 → 6.1.2.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/lib/omf_rc/omf_error.rb +17 -0
- data/lib/omf_rc/resource_proxy/abstract_resource.rb +30 -7
- data/lib/omf_rc/resource_proxy/wlan.rb +33 -3
- data/lib/omf_rc/resource_proxy_dsl.rb +29 -2
- data/lib/omf_rc/runner.rb +16 -22
- data/lib/omf_rc/util/ip.rb +10 -0
- data/lib/omf_rc/util/wpa.rb +1 -1
- metadata +44 -15
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MTliNjA1NmMxNWEzNzc0Mjc4NTBiZjAzZGMzZjQwZTQ4NTk0OWNjMg==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 58d8f4886473d854c19c6fc5bdee608b74f552a3
|
4
|
+
data.tar.gz: 7a7a1c8bc9efc0b6332a8d61b898081adeece4b5
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NTRjNTg4ZDlhZDhmZTQ4ZGRmN2I2YzQ5NzVkMDJhNGFhMjJlODExZTA4YmUw
|
11
|
-
NTkzYzViZjQzNGVhNzVjMTNjMDNiMWI1NTEzY2ZlMmRhZmM4MWM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MDk2NGU3M2JlYWI3ZTlhNmRmY2VlMGEwZThmYzJjY2FhNmYzMzViODczNjU0
|
14
|
-
MmY0OTI5ZGJlOWVlY2FiZDE2NDI2YmMxY2MyZTMxZTJiNzQxZDRjNTExZmMz
|
15
|
-
Yzc1NDdmNDg5MTU2YjMzZGEwNDU3ZWE2NTY5NDM3ODQ5YTQ3ZTQ=
|
6
|
+
metadata.gz: b1db665f420503a10073d7d580239ceaad24d80bba3b1abf18962554d34d39b6db1391489513c9f866f95321ca52c83499839c43b5b3af121ebc87c72d149d87
|
7
|
+
data.tar.gz: a7dde85adcbcae4a048ac43b87c5282a0776bac9ce37b349d3a041a545ca395dcf64b63b36d63d60ab8b9db24a6555599a28c7fc08a26ad89d4fc690a7666119
|
data/lib/omf_rc/omf_error.rb
CHANGED
@@ -24,3 +24,20 @@ class OmfRc::UnknownPropertyError < NoMethodError
|
|
24
24
|
super(msg)
|
25
25
|
end
|
26
26
|
end
|
27
|
+
|
28
|
+
# Customised errors for resource controller (Proposing)
|
29
|
+
#
|
30
|
+
class OmfRc::Error < StandardError; end
|
31
|
+
|
32
|
+
class OmfRc::Error
|
33
|
+
class UnknownProperty < OmfRc::Error; end
|
34
|
+
# Try to create a resource with type not known to resource controller
|
35
|
+
class UnknownResourceType < OmfRc::Error; end
|
36
|
+
# Try to access a child resource provided by identifier but can not be found
|
37
|
+
class UnknownChildResource < OmfRc::Error; end
|
38
|
+
# Ask a parent to create a child but failed due to parent's proxy definition
|
39
|
+
class InvalidResourceTypeToCreate < OmfRc::Error; end
|
40
|
+
# Try to access a property but access specified in proxy definition would not allow.
|
41
|
+
# e.g. configure when its init_only
|
42
|
+
class PropertyAccessDenied < OmfRc::Error; end
|
43
|
+
end
|
@@ -90,7 +90,7 @@ class OmfRc::ResourceProxy::AbstractResource
|
|
90
90
|
@@defaults[resource_type.to_sym] = defaults
|
91
91
|
end
|
92
92
|
|
93
|
-
attr_accessor :uid, :hrn, :type, :property, :certificate
|
93
|
+
attr_accessor :uid, :hrn, :type, :property, :certificate, :state
|
94
94
|
attr_reader :opts, :children, :membership, :creation_opts, :membership_topics, :topics
|
95
95
|
|
96
96
|
# Initialisation
|
@@ -367,7 +367,7 @@ class OmfRc::ResourceProxy::AbstractResource
|
|
367
367
|
#
|
368
368
|
# @!macro group_configure
|
369
369
|
|
370
|
-
# Make resource part of the group topic, it will
|
370
|
+
# Make resource part of the group topic, it will alter existing membership array
|
371
371
|
#
|
372
372
|
# @param [String|Array|Hash] args name of group topic/topics
|
373
373
|
#
|
@@ -381,12 +381,17 @@ class OmfRc::ResourceProxy::AbstractResource
|
|
381
381
|
#
|
382
382
|
# # Leave a single group or multiple groups
|
383
383
|
# { leave: ["group_1", "group_2"] } or { leave: "group_1" }
|
384
|
+
#
|
385
|
+
# # Leave all groups except a selection of specific ones
|
386
|
+
# { only: ["group_1", "group_2"] } or { only: "group_1" }
|
387
|
+
#
|
384
388
|
def configure_membership(*args)
|
385
389
|
case args[0]
|
386
390
|
when Symbol, String, Array
|
387
391
|
new_membership = [args[0]].flatten.compact
|
388
392
|
when Hash
|
389
393
|
leave_membership = [args[0][:leave]].flatten.compact
|
394
|
+
only_membership = [args[0][:only]].flatten.compact
|
390
395
|
end
|
391
396
|
|
392
397
|
new_membership && new_membership.each do |new_m|
|
@@ -422,6 +427,11 @@ class OmfRc::ResourceProxy::AbstractResource
|
|
422
427
|
end
|
423
428
|
end
|
424
429
|
|
430
|
+
unless only_membership.nil? || only_membership.empty?
|
431
|
+
configure_membership({ leave: @membership })
|
432
|
+
configure_membership(only_membership)
|
433
|
+
end
|
434
|
+
|
425
435
|
@membership
|
426
436
|
end
|
427
437
|
|
@@ -554,14 +564,27 @@ class OmfRc::ResourceProxy::AbstractResource
|
|
554
564
|
# @param [OmfRc::ResourceProxy::AbstractResource] obj resource object
|
555
565
|
# @param [OmfCommon::Message] response initialised FRCP INFORM message object
|
556
566
|
def handle_configure_message(message, obj, response)
|
557
|
-
message.
|
558
|
-
|
559
|
-
|
567
|
+
conf_properties = message.properties
|
568
|
+
conf_result = Hashie::Mash.new
|
569
|
+
|
570
|
+
call_hook(:pre_configure, obj, conf_properties, conf_result)
|
571
|
+
|
572
|
+
if obj.respond_to?(:configure_all)
|
573
|
+
obj.configure_all(conf_properties, conf_result)
|
574
|
+
else
|
575
|
+
conf_properties.each do |key, value|
|
576
|
+
method_name = "configure_#{key}"
|
577
|
+
conf_result[key] = obj.__send__(method_name, value)
|
578
|
+
end
|
579
|
+
end
|
580
|
+
|
581
|
+
call_hook(:post_configure, obj, conf_properties, conf_result)
|
560
582
|
|
583
|
+
conf_result.each do |key, value|
|
561
584
|
if namespaced_property?(key)
|
562
|
-
response[key, namespace] =
|
585
|
+
response[key, namespace] = value
|
563
586
|
else
|
564
|
-
response[key] =
|
587
|
+
response[key] = value
|
565
588
|
end
|
566
589
|
end
|
567
590
|
end
|
@@ -41,22 +41,52 @@ module OmfRc::ResourceProxy::Wlan
|
|
41
41
|
# @!macro prop
|
42
42
|
property :phy
|
43
43
|
|
44
|
+
property :timer
|
45
|
+
|
44
46
|
# @!endgroup
|
45
47
|
|
46
48
|
# @!macro group_hook
|
47
|
-
|
49
|
+
hook :before_ready do |device|
|
50
|
+
device.property.timer = OmfCommon.el.every(5) do |timer|
|
51
|
+
wlan_state = device.request_state
|
52
|
+
if wlan_state == 'UP'
|
53
|
+
device.inform(:status, { state: wlan_state })
|
54
|
+
timer.cancel
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
48
59
|
# Stop hostapd or wpa instances before releasing wifi device
|
49
60
|
# @!macro hook
|
50
61
|
# @!method before_release
|
51
62
|
hook :before_release do |device|
|
63
|
+
device.property.timer.cancel
|
64
|
+
|
52
65
|
case device.property.mode.to_sym
|
53
66
|
when :master
|
54
67
|
device.stop_hostapd
|
55
68
|
when :managed
|
56
69
|
device.stop_wpa
|
57
70
|
end
|
58
|
-
|
59
|
-
#device.remove_all_interfaces
|
71
|
+
device.interface_down
|
60
72
|
end
|
61
73
|
# @!endgroup
|
74
|
+
|
75
|
+
|
76
|
+
configure_all do |res, conf_props, conf_result|
|
77
|
+
# Make sure to set up wifi mode first
|
78
|
+
if (mode = conf_props.delete(:mode))
|
79
|
+
res.configure_mode(mode)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Then if everything goes well, configure the ip address
|
83
|
+
if (ip_addr = conf_props.delete(:ip_addr))
|
84
|
+
res.configure_ip_addr(ip_addr)
|
85
|
+
end
|
86
|
+
|
87
|
+
conf_result[:ip_addr] = res.request_ip_addr
|
88
|
+
conf_result[:state] = res.request_state
|
89
|
+
|
90
|
+
conf_props.each { |k, v| conf_result[k] = res.__send__("configure_#{k}", v) }
|
91
|
+
end
|
62
92
|
end
|
@@ -23,6 +23,10 @@ module OmfRc::ResourceProxyDSL
|
|
23
23
|
context.send(hook_name, *params) if context.respond_to? hook_name
|
24
24
|
end
|
25
25
|
|
26
|
+
def hook_defined?(hook_name, context)
|
27
|
+
context.respond_to? hook_name
|
28
|
+
end
|
29
|
+
|
26
30
|
# When this module included, methods defined under ClassMethods will be available in resource definition files
|
27
31
|
#
|
28
32
|
def self.included(base)
|
@@ -220,6 +224,29 @@ module OmfRc::ResourceProxyDSL
|
|
220
224
|
end
|
221
225
|
end
|
222
226
|
|
227
|
+
# Configure multiple properties when operations need to be completed in order, or the all operations are transactional
|
228
|
+
#
|
229
|
+
# @example
|
230
|
+
#
|
231
|
+
# configure_all do |resource, configure_properties, result|
|
232
|
+
# # Execute property one first, and make sure it is successful before attending property two
|
233
|
+
# if resource.some_operation(configure_properties[:property_one])
|
234
|
+
# if resource.other_operation(configure_properties[:property_two])
|
235
|
+
# result[:property_one] = 'GOOD'
|
236
|
+
# result[:property_two] = 'GREAT'
|
237
|
+
# else
|
238
|
+
# raise "Some errors"
|
239
|
+
# end
|
240
|
+
# else
|
241
|
+
# raise "Some errors"
|
242
|
+
# end
|
243
|
+
# end
|
244
|
+
def configure_all(®ister_block)
|
245
|
+
define_method("configure_all") do |*args, &block|
|
246
|
+
register_block.call(self, *args, block) if register_block
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
223
250
|
# Register a property that could be requested
|
224
251
|
#
|
225
252
|
# @param (see #configure)
|
@@ -365,10 +392,10 @@ module OmfRc::ResourceProxyDSL
|
|
365
392
|
#
|
366
393
|
# @example
|
367
394
|
# # Read-only property, i.e. could not be modified through FRCP protocol
|
368
|
-
# property :bob, default: 1, access: :
|
395
|
+
# property :bob, default: 1, access: :read_only
|
369
396
|
#
|
370
397
|
# # Read & Write property, i.e. could be modified through FRCP protocol
|
371
|
-
# property :bob, default: 1, access: :
|
398
|
+
# property :bob, default: 1, access: :configure
|
372
399
|
#
|
373
400
|
# # Read & could be modified ONLY through FRCP CREATE message
|
374
401
|
# property :bob, default: 1, access: :init_only
|
data/lib/omf_rc/runner.rb
CHANGED
@@ -8,12 +8,6 @@ module OmfRc
|
|
8
8
|
# in decreasing priority through the command line, configuration
|
9
9
|
# file and default settings (see @def_opts).
|
10
10
|
#
|
11
|
-
# For historic reasons and to make this implementation more interesting
|
12
|
-
# there are two different config file formats. A 'normal' one inherited from
|
13
|
-
# earlier version of OMF, and an 'advanced' one which is identical to the
|
14
|
-
# format accepted by OmfCommon.init(). To maintain some level of sanity,
|
15
|
-
# only one configuration file is accepted.
|
16
|
-
#
|
17
11
|
# Having said that, there is one exception and that relates to the 'oml'
|
18
12
|
# configuration which is stripped out first and handed to the OML4R library
|
19
13
|
# during command line parsing.
|
@@ -35,17 +29,12 @@ module OmfRc
|
|
35
29
|
environment: 'production',
|
36
30
|
resources: [ { type: :node, uid: @node_id }],
|
37
31
|
factories: {},
|
38
|
-
communication: { url: "
|
32
|
+
communication: { url: "amqp://localhost" },
|
33
|
+
logging: {},
|
39
34
|
add_default_factories: true,
|
40
35
|
)
|
41
36
|
|
42
|
-
@gopts = Mash.new
|
43
|
-
config_file: nil,
|
44
|
-
adv_config_file: nil,
|
45
|
-
logging_configfile: nil,
|
46
|
-
environment: nil
|
47
|
-
)
|
48
|
-
|
37
|
+
@gopts = Mash.new
|
49
38
|
@opts = Mash.new
|
50
39
|
|
51
40
|
@omlopts = {appName: @executable_name}
|
@@ -64,9 +53,14 @@ module OmfRc
|
|
64
53
|
|
65
54
|
Signal.trap("SIGINT") do
|
66
55
|
# TODO: Should release resources first
|
67
|
-
|
68
|
-
|
69
|
-
|
56
|
+
|
57
|
+
# Workaround to EM issue under ruby v2
|
58
|
+
# https://github.com/eventmachine/eventmachine/issues/418
|
59
|
+
el.after(0) do
|
60
|
+
info "Stopping ..."
|
61
|
+
OmfCommon.comm.disconnect
|
62
|
+
el.stop
|
63
|
+
end
|
70
64
|
end
|
71
65
|
|
72
66
|
# Load extensions
|
@@ -121,7 +115,7 @@ module OmfRc
|
|
121
115
|
end
|
122
116
|
|
123
117
|
def parse_config_files()
|
124
|
-
config_file = @gopts
|
118
|
+
config_file = @gopts.delete(:config_file)
|
125
119
|
|
126
120
|
if config_file.nil?
|
127
121
|
puts "You must specify a config file"
|
@@ -139,11 +133,15 @@ module OmfRc
|
|
139
133
|
when :uid
|
140
134
|
@opts[:resources][0][:type] = :node
|
141
135
|
@opts[:resources][0][:uid] = v
|
136
|
+
when :debug
|
137
|
+
@opts[:logging][:level] = 'debug' if v
|
142
138
|
else
|
143
139
|
@opts[k] = v
|
144
140
|
end
|
145
141
|
end
|
146
142
|
|
143
|
+
@opts.merge!(@gopts)
|
144
|
+
|
147
145
|
@omlopts.merge(@opts[:instrumentation] || {}) { |k, v1, v2| v1 } # merge in place as OML may hold @omlopts
|
148
146
|
end
|
149
147
|
end
|
@@ -159,10 +157,6 @@ module OmfRc
|
|
159
157
|
@gopts[:config_file] = file
|
160
158
|
end
|
161
159
|
|
162
|
-
op.on("-a ADVANCED_CONFIGFILE", "Advanced Configuration File") do |file|
|
163
|
-
@gopts[:adv_config_file] = file
|
164
|
-
end
|
165
|
-
|
166
160
|
op.on("--log_config CONFIGFILE", "Logging Configuration File") do |file|
|
167
161
|
@gopts[:logging_configfile] = file
|
168
162
|
end
|
data/lib/omf_rc/util/ip.rb
CHANGED
@@ -31,6 +31,12 @@ module OmfRc::Util::Ip
|
|
31
31
|
addr = CommandLine.new("ip", "addr show dev :device", :device => resource.property.if_name).run
|
32
32
|
addr && addr.chomp.match(/link\/ether ([\d[a-f][A-F]\:]+)/) && $1
|
33
33
|
end
|
34
|
+
|
35
|
+
request :state do |device|
|
36
|
+
link = CommandLine.new("ip", "link show :device", :device => device.property.if_name).run
|
37
|
+
link && link.chomp.match(/state (\w+) /) && $1
|
38
|
+
end
|
39
|
+
|
34
40
|
# @!endgroup
|
35
41
|
|
36
42
|
# @!macro group_configure
|
@@ -66,6 +72,10 @@ module OmfRc::Util::Ip
|
|
66
72
|
CommandLine.new("ip", "link set :dev up", :dev => resource.property.if_name).run
|
67
73
|
end
|
68
74
|
|
75
|
+
work :interface_down do |device|
|
76
|
+
CommandLine.new("ip", "link set :dev down", :dev => device.property.if_name).run
|
77
|
+
end
|
78
|
+
|
69
79
|
# Remove IP addresses associated with the interface
|
70
80
|
#
|
71
81
|
# @!macro work
|
data/lib/omf_rc/util/wpa.rb
CHANGED
@@ -39,7 +39,7 @@ module OmfRc::Util::Wpa
|
|
39
39
|
work :stop_wpa do |device|
|
40
40
|
begin
|
41
41
|
File.open(device.property.wpa_pid,'r') do |f|
|
42
|
-
|
42
|
+
info "Stopping wpa supplicant at PID: #{device.property.wpa_pid}"
|
43
43
|
CommandLine.new("kill", "-9 :pid", :pid => f.read.chomp).run
|
44
44
|
end
|
45
45
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omf_rc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.1.
|
4
|
+
version: 6.1.2.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NICTA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -42,28 +42,28 @@ dependencies:
|
|
42
42
|
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: simplecov
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 6.1.
|
75
|
+
version: 6.1.2.pre
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 6.1.
|
82
|
+
version: 6.1.2.pre
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: cocaine
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,14 +98,14 @@ dependencies:
|
|
98
98
|
name: mocha
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: Resource controller of OMF, a generic framework for controlling and managing
|
@@ -201,18 +201,47 @@ require_paths:
|
|
201
201
|
- lib
|
202
202
|
required_ruby_version: !ruby/object:Gem::Requirement
|
203
203
|
requirements:
|
204
|
-
- -
|
204
|
+
- - '>='
|
205
205
|
- !ruby/object:Gem::Version
|
206
206
|
version: 1.9.3
|
207
207
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
208
|
requirements:
|
209
|
-
- -
|
209
|
+
- - '>'
|
210
210
|
- !ruby/object:Gem::Version
|
211
|
-
version:
|
211
|
+
version: 1.3.1
|
212
212
|
requirements: []
|
213
213
|
rubyforge_project: omf_rc
|
214
|
-
rubygems_version: 2.
|
214
|
+
rubygems_version: 2.1.11
|
215
215
|
signing_key:
|
216
216
|
specification_version: 4
|
217
217
|
summary: OMF resource controller
|
218
|
-
test_files:
|
218
|
+
test_files:
|
219
|
+
- test/fixture/ip/addr_show
|
220
|
+
- test/fixture/iw/help
|
221
|
+
- test/fixture/iw/info
|
222
|
+
- test/fixture/iw/link
|
223
|
+
- test/fixture/lsmod
|
224
|
+
- test/fixture/omf_rc.simple.yml
|
225
|
+
- test/fixture/omf_rc.yml
|
226
|
+
- test/fixture/oml.hash
|
227
|
+
- test/fixture/oml.spec
|
228
|
+
- test/fixture/oml.xml
|
229
|
+
- test/fixture/sys/class/ieee80211/phy0/device/uevent
|
230
|
+
- test/fixture/sys/class/ieee80211/phy0/uevent
|
231
|
+
- test/fixture/sys/class/net/eth0/device/uevent
|
232
|
+
- test/fixture/sys/class/net/eth0/uevent
|
233
|
+
- test/fixture/sys/class/net/wlan0/device/uevent
|
234
|
+
- test/fixture/sys/class/net/wlan0/uevent
|
235
|
+
- test/omf_rc/deferred_process_spec.rb
|
236
|
+
- test/omf_rc/message_process_error_spec.rb
|
237
|
+
- test/omf_rc/resource_factory_spec.rb
|
238
|
+
- test/omf_rc/resource_proxy/abstract_resource_spec.rb
|
239
|
+
- test/omf_rc/resource_proxy/application_spec.rb
|
240
|
+
- test/omf_rc/resource_proxy/node_spec.rb
|
241
|
+
- test/omf_rc/resource_proxy_dsl_spec.rb
|
242
|
+
- test/omf_rc/runner_spec.rb
|
243
|
+
- test/omf_rc/util/common_tools_spec.rb
|
244
|
+
- test/omf_rc/util/ip_spec.rb
|
245
|
+
- test/omf_rc/util/iw_spec.rb
|
246
|
+
- test/omf_rc/util/mod_spec.rb
|
247
|
+
- test/test_helper.rb
|