omf_rc 6.0.0.pre.5 → 6.0.0.pre.6
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/Rakefile +0 -6
- data/bin/omf_rc +2 -2
- data/lib/omf_rc/resource_factory.rb +10 -4
- data/lib/omf_rc/resource_proxy/abstract_resource.rb +120 -79
- data/lib/omf_rc/resource_proxy/generic_application.rb +471 -0
- data/lib/omf_rc/resource_proxy/net.rb +7 -0
- data/lib/omf_rc/resource_proxy/node.rb +33 -7
- data/lib/omf_rc/resource_proxy/openflow_slice.rb +79 -0
- data/lib/omf_rc/resource_proxy/openflow_slice_factory.rb +71 -0
- data/lib/omf_rc/resource_proxy/wlan.rb +20 -0
- data/lib/omf_rc/resource_proxy_dsl.rb +142 -8
- data/lib/omf_rc/util/common_tools.rb +61 -0
- data/lib/omf_rc/util/hostapd.rb +52 -0
- data/lib/omf_rc/util/ip.rb +28 -0
- data/lib/omf_rc/util/iw.rb +119 -6
- data/lib/omf_rc/util/mock.rb +2 -1
- data/lib/omf_rc/util/openflow_tools.rb +103 -0
- data/lib/omf_rc/util/platform_tools.rb +164 -0
- data/lib/omf_rc/util/wpa.rb +42 -0
- data/lib/omf_rc/version.rb +1 -1
- data/omf_rc.gemspec +3 -1
- data/test/fixture/ip/addr_show +5 -0
- data/test/fixture/iw/info +4 -0
- data/test/fixture/sys/class/ieee80211/phy0/device/uevent +6 -0
- data/test/fixture/sys/class/ieee80211/phy0/uevent +0 -0
- data/test/fixture/sys/class/net/eth0/device/uevent +6 -0
- data/test/fixture/sys/class/net/eth0/uevent +2 -0
- data/test/fixture/sys/class/net/wlan0/device/uevent +6 -0
- data/test/fixture/sys/class/net/wlan0/uevent +3 -0
- data/test/omf_rc/message_process_error_spec.rb +11 -0
- data/test/omf_rc/resource_factory_spec.rb +8 -1
- data/test/omf_rc/resource_proxy/abstract_resource_spec.rb +57 -1
- data/test/omf_rc/resource_proxy/generic_application_spec.rb +347 -0
- data/test/omf_rc/resource_proxy/mock_spec.rb +15 -0
- data/test/omf_rc/resource_proxy/node_spec.rb +32 -1
- data/test/omf_rc/resource_proxy_dsl_spec.rb +81 -10
- data/test/omf_rc/util/common_tools_spec.rb +30 -0
- data/test/omf_rc/util/ip_spec.rb +51 -0
- data/test/omf_rc/util/iw_spec.rb +136 -25
- data/test/omf_rc/util/mock_spec.rb +26 -0
- data/test/omf_rc/util/mod_spec.rb +8 -11
- data/test/test_helper.rb +11 -0
- metadata +62 -6
- data/lib/omf_rc/resource_proxy/wifi.rb +0 -8
- data/test/mock_helper.rb +0 -15
@@ -0,0 +1,347 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'omf_rc/resource_proxy/generic_application'
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
describe OmfRc::ResourceProxy::GenericApplication do
|
7
|
+
|
8
|
+
before do
|
9
|
+
@app_test = OmfRc::ResourceFactory.new(:generic_application, { hrn: 'an_application' })
|
10
|
+
@app_test.comm = MiniTest::Mock.new
|
11
|
+
@app_test.comm.expect :publish, nil, [String,OmfCommon::Message]
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "when initialised" do
|
15
|
+
it "must respond to an 'on_app_event' call back" do
|
16
|
+
#OmfRc::ResourceProxy::GenericApplication.method_defined?(:on_app_event).must_equal true
|
17
|
+
@app_test.must_respond_to :on_app_event
|
18
|
+
end
|
19
|
+
|
20
|
+
it "must have its properties set to sensible initial values" do
|
21
|
+
@app_test.request_state.to_sym.must_equal :stop
|
22
|
+
@app_test.request_tarball_install_path.must_equal '/'
|
23
|
+
@app_test.request_force_tarball_install.must_equal 'false'
|
24
|
+
@app_test.request_installed.must_equal 'false'
|
25
|
+
@app_test.request_map_err_to_out.must_equal 'false'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "must be able to configure/request its basic properties" do
|
29
|
+
basic_prop = %w(binary_path pkg_tarball pkg_ubuntu pkg_fedora force_tarball_install map_err_to_out tarball_install_path)
|
30
|
+
basic_prop.each do |p|
|
31
|
+
@app_test.method("configure_#{p}".to_sym).call('foo')
|
32
|
+
@app_test.method("request_#{p}".to_sym).call.must_equal 'foo'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "must be able to tell which platform it is running on (either: unknown | ubuntu | fedora)" do
|
37
|
+
@app_test.request_platform.must_match /unknown|ubuntu|fedora/
|
38
|
+
end
|
39
|
+
|
40
|
+
it "must be able to configure its environments property" do
|
41
|
+
# First give it a valid environment property
|
42
|
+
test_environments = { 'foo' => 123, 'bar_bar' => 'bar_123' }
|
43
|
+
@app_test.method(:configure_environments).call(test_environments)
|
44
|
+
# Then give it an invalid one, which it should ignore
|
45
|
+
@app_test.method(:configure_environments).call(nil)
|
46
|
+
@app_test.property.environments.must_be_kind_of Hash
|
47
|
+
@app_test.property.environments['foo'].must_equal 123
|
48
|
+
@app_test.property.environments['bar_bar'].must_equal 'bar_123'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "when configuring its parameters property" do
|
53
|
+
it "must be able to set its parameters property" do
|
54
|
+
# First give it a valid parameter property
|
55
|
+
test_params = { :p1 => { :cmd => '--foo', :value => 'foo'} }
|
56
|
+
@app_test.method(:configure_parameters).call(test_params)
|
57
|
+
# Then give it a couple of invalid ones, which it should ignore
|
58
|
+
@app_test.stub :log_inform_error, nil do
|
59
|
+
@app_test.method(:configure_parameters).call(nil)
|
60
|
+
@app_test.method(:configure_parameters).call( { :p1 => nil } )
|
61
|
+
end
|
62
|
+
@app_test.property.parameters.must_be_kind_of Hash
|
63
|
+
@app_test.property.parameters[:p1].must_be_kind_of Hash
|
64
|
+
@app_test.property.parameters[:p1][:cmd].must_equal '--foo'
|
65
|
+
@app_test.property.parameters[:p1][:value].must_equal 'foo'
|
66
|
+
end
|
67
|
+
|
68
|
+
it "must be able to merge new parameters into existing ones" do
|
69
|
+
old_params = { :p1 => { :cmd => '--foo', :default => 'old_foo'} }
|
70
|
+
@app_test.property.parameters = old_params
|
71
|
+
new_params = { :p1 => { :default => 'new_foo', :value => 'val_foo'},
|
72
|
+
:p2 => { :cmd => 'bar', :default => 'bar_bar'} }
|
73
|
+
@app_test.method(:configure_parameters).call(new_params)
|
74
|
+
@app_test.property.parameters[:p1][:cmd].must_equal '--foo'
|
75
|
+
@app_test.property.parameters[:p1][:default].must_equal 'new_foo'
|
76
|
+
@app_test.property.parameters[:p1][:value].must_equal 'val_foo'
|
77
|
+
@app_test.property.parameters[:p2][:cmd].must_equal 'bar'
|
78
|
+
@app_test.property.parameters[:p2][:default].must_equal 'bar_bar'
|
79
|
+
end
|
80
|
+
|
81
|
+
it "must be able to sanitize its parameters property" do
|
82
|
+
test_params = { :p1 => { :mandatory => 'true', :dynamic => false},
|
83
|
+
:p2 => { :mandatory => true, :dynamic => 'false'},
|
84
|
+
:p3 => { :type => 'Boolean', :default => true, :value => 'false'},
|
85
|
+
:p4 => { :type => 'Boolean', :default => 'true', :value => false} }
|
86
|
+
@app_test.method(:configure_parameters).call(test_params)
|
87
|
+
@app_test.property.parameters[:p1][:mandatory].must_be_kind_of TrueClass
|
88
|
+
@app_test.property.parameters[:p1][:dynamic].must_be_kind_of FalseClass
|
89
|
+
@app_test.property.parameters[:p2][:mandatory].must_be_kind_of TrueClass
|
90
|
+
@app_test.property.parameters[:p2][:dynamic].must_be_kind_of FalseClass
|
91
|
+
@app_test.property.parameters[:p3][:default].must_be_kind_of TrueClass
|
92
|
+
@app_test.property.parameters[:p3][:value].must_be_kind_of FalseClass
|
93
|
+
@app_test.property.parameters[:p4][:default].must_be_kind_of TrueClass
|
94
|
+
@app_test.property.parameters[:p4][:value].must_be_kind_of FalseClass
|
95
|
+
end
|
96
|
+
|
97
|
+
it "must be able to validate the correct type of a defined parameter" do
|
98
|
+
test_params = { :p1 => { :type => 'String', :default => 'foo', :value => 'bar'},
|
99
|
+
:p2 => { :type => 'Numeric', :default => 123, :value => 456},
|
100
|
+
:p3 => { :type => 'Boolean', :default => true, :value => true},
|
101
|
+
:p4 => { :type => 'Boolean'},
|
102
|
+
:p5 => { :type => 'Boolean', :default => true},
|
103
|
+
:p6 => { :type => 'Boolean', :value => true},
|
104
|
+
:p7 => { :type => 'Numeric'},
|
105
|
+
:p8 => { :type => 'Numeric', :default => 123},
|
106
|
+
:p9 => { :type => 'Numeric', :value => 123} }
|
107
|
+
@app_test.method(:configure_parameters).call(test_params)
|
108
|
+
@app_test.property.parameters[:p1][:default].must_be_kind_of String
|
109
|
+
@app_test.property.parameters[:p1][:value].must_be_kind_of String
|
110
|
+
@app_test.property.parameters[:p2][:default].must_be_kind_of Numeric
|
111
|
+
@app_test.property.parameters[:p2][:value].must_be_kind_of Numeric
|
112
|
+
@app_test.property.parameters[:p3][:default].must_be_kind_of TrueClass
|
113
|
+
@app_test.property.parameters[:p3][:value].must_be_kind_of TrueClass
|
114
|
+
@app_test.property.parameters[:p4][:default].must_be_nil
|
115
|
+
@app_test.property.parameters[:p4][:value].must_be_nil
|
116
|
+
@app_test.property.parameters[:p5][:default].must_be_kind_of TrueClass
|
117
|
+
@app_test.property.parameters[:p6][:value].must_be_kind_of TrueClass
|
118
|
+
@app_test.property.parameters[:p7][:default].must_be_nil
|
119
|
+
@app_test.property.parameters[:p7][:value].must_be_nil
|
120
|
+
@app_test.property.parameters[:p8][:default].must_be_kind_of Numeric
|
121
|
+
@app_test.property.parameters[:p9][:value].must_be_kind_of Numeric
|
122
|
+
end
|
123
|
+
|
124
|
+
it "must be able to detect incorrect type setting for a defined parameter, and DO NOT update the parameter in that case" do
|
125
|
+
old_params = { :p1 => { :type => 'String', :value => 'foo'},
|
126
|
+
:p2 => { :type => 'Numeric', :default => 123, :value => 456 },
|
127
|
+
:p3 => { :type => 'Boolean', :default => true, :value => true} }
|
128
|
+
@app_test.property.parameters = old_params
|
129
|
+
new_params = { :p1 => { :type => 'String', :value => true},
|
130
|
+
:p2 => { :type => 'Numeric', :default => 456, :value => '456' },
|
131
|
+
:p3 => { :type => 'Boolean', :default => 123, :value => false} }
|
132
|
+
@app_test.stub :log_inform_error, nil do
|
133
|
+
@app_test.method(:configure_parameters).call(new_params)
|
134
|
+
end
|
135
|
+
@app_test.property.parameters[:p1][:value].must_equal 'foo'
|
136
|
+
@app_test.property.parameters[:p2][:default].must_equal 123
|
137
|
+
@app_test.property.parameters[:p2][:value].must_equal 456
|
138
|
+
@app_test.property.parameters[:p3][:default].must_be_kind_of TrueClass
|
139
|
+
@app_test.property.parameters[:p3][:value].must_be_kind_of TrueClass
|
140
|
+
end
|
141
|
+
|
142
|
+
it "must update any valid dynamic parameter with the given value" do
|
143
|
+
# set the parameter as dynamic
|
144
|
+
params1 = { :p1 => { :cmd => '--foo', :default => 'old_foo', :dynamic => true} }
|
145
|
+
@app_test.method(:configure_parameters).call(params1)
|
146
|
+
# then update it
|
147
|
+
params2 = { :p1 => { :value => 'bar'} }
|
148
|
+
@app_test.property.state = :run
|
149
|
+
class ExecApp
|
150
|
+
def initialize(app_id, res, cmd_line, err_out_map); end
|
151
|
+
def ExecApp.[](id); return ExecApp.new(nil,nil,nil,nil) end
|
152
|
+
def stdin(msg); msg.must_equal '--foo bar' end
|
153
|
+
end
|
154
|
+
@app_test.method(:configure_parameters).call(params2)
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "when receiving an event from a running application instance" do
|
160
|
+
it "must publish an INFORM message to relay that event" do
|
161
|
+
@app_test.on_app_event('STDOUT', 'app_instance_id', 'Some text here').must_be_nil
|
162
|
+
assert @app_test.comm.verify
|
163
|
+
end
|
164
|
+
|
165
|
+
it "must increments its event_sequence after publishig that INFORM message" do
|
166
|
+
i = @app_test.property.event_sequence
|
167
|
+
@app_test.on_app_event('STDOUT', 'app_instance_id', 'Some text here')
|
168
|
+
@app_test.property.event_sequence.must_equal i+1
|
169
|
+
end
|
170
|
+
|
171
|
+
it "must switch its state to 'stop' if the event is of a type 'DONE'" do
|
172
|
+
@app_test.on_app_event('DONE.OK', 'app_instance_id', 'Some text here')
|
173
|
+
@app_test.request_state.to_sym.must_equal :stop
|
174
|
+
end
|
175
|
+
|
176
|
+
it "must set installed property to true if the event is 'DONE.OK' and the app_id's suffix is '_INSTALL'" do
|
177
|
+
@app_test.on_app_event('DONE.OK', 'app_instance_id_INSTALL', 'Some text here')
|
178
|
+
@app_test.request_state.to_sym.must_equal :stop
|
179
|
+
@app_test.request_installed.must_equal "true"
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
describe "when configuring its state property to :install" do
|
184
|
+
it "must do nothing if its original state is not :stop" do
|
185
|
+
@app_test.property.state = :run
|
186
|
+
@app_test.method(:configure_state).call(:install)
|
187
|
+
@app_test.property.state.must_equal :run
|
188
|
+
end
|
189
|
+
|
190
|
+
it "must do nothing if its original state is :stop and it is already installed" do
|
191
|
+
@app_test.property.state = :stop
|
192
|
+
@app_test.property.installed = true
|
193
|
+
@app_test.method(:configure_state).call(:install)
|
194
|
+
@app_test.property.state.must_equal :stop
|
195
|
+
end
|
196
|
+
|
197
|
+
it "must use the tarball install method if it does not know its OS platform or if force_tarball_install is set" do
|
198
|
+
@app_test.property.pkg_tarball = 'foo'
|
199
|
+
@app_test.property.tarball_install_path = '/bar/'
|
200
|
+
@stub_tarball_tasks = Proc.new do |pkg,path|
|
201
|
+
pkg.must_equal 'foo'
|
202
|
+
path.must_equal '/bar/'
|
203
|
+
@did_call_install_tarball = true
|
204
|
+
end
|
205
|
+
def call_configure
|
206
|
+
@app_test.stub :install_tarball, @stub_tarball_tasks do
|
207
|
+
@app_test.method(:configure_state).call(:install).must_equal :install
|
208
|
+
@did_call_install_tarball.must_equal true
|
209
|
+
end
|
210
|
+
end
|
211
|
+
# Unknown Platform...
|
212
|
+
@did_call_install_tarball = false
|
213
|
+
@app_test.property.state = :stop
|
214
|
+
@app_test.property.installed = false
|
215
|
+
@app_test.property.platform = :unknown
|
216
|
+
call_configure
|
217
|
+
# Force Install Tarball...
|
218
|
+
@did_call_install_tarball = false
|
219
|
+
@app_test.property.state = :stop
|
220
|
+
@app_test.property.installed = false
|
221
|
+
@app_test.property.platform = :ubuntu
|
222
|
+
@app_test.property.force_tarball_install = true
|
223
|
+
call_configure
|
224
|
+
end
|
225
|
+
|
226
|
+
it "must use the ubuntu install method if its OS platform is ubuntu" do
|
227
|
+
@did_call_install_ubuntu = false
|
228
|
+
@app_test.property.state = :stop
|
229
|
+
@app_test.property.installed = false
|
230
|
+
@app_test.property.platform = :ubuntu
|
231
|
+
@app_test.property.pkg_ubuntu = 'foo'
|
232
|
+
@stub_ubuntu_tasks = Proc.new do |pkg|
|
233
|
+
pkg.must_equal 'foo'
|
234
|
+
@did_call_install_ubuntu = true
|
235
|
+
end
|
236
|
+
@app_test.stub :install_ubuntu, @stub_ubuntu_tasks do
|
237
|
+
@app_test.method(:configure_state).call(:install).must_equal :install
|
238
|
+
@did_call_install_ubuntu.must_equal true
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
it "must use the fedora install method if its OS platform is fedora" do
|
243
|
+
@did_call_install_fedora = false
|
244
|
+
@app_test.property.state = :stop
|
245
|
+
@app_test.property.installed = false
|
246
|
+
@app_test.property.platform = :fedora
|
247
|
+
@app_test.property.pkg_fedora = 'foo'
|
248
|
+
@stub_fedora_tasks = Proc.new do |pkg|
|
249
|
+
pkg.must_equal 'foo'
|
250
|
+
@did_call_install_fedora = true
|
251
|
+
end
|
252
|
+
@app_test.stub :install_fedora, @stub_fedora_tasks do
|
253
|
+
@app_test.method(:configure_state).call(:install).must_equal :install
|
254
|
+
@did_call_install_fedora.must_equal true
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
describe "when configuring its state property to :run" do
|
260
|
+
it "must do nothing if its original state is :install" do
|
261
|
+
@app_test.property.state = :install
|
262
|
+
@app_test.method(:configure_state).call(:run)
|
263
|
+
@app_test.property.state.must_equal :install
|
264
|
+
end
|
265
|
+
|
266
|
+
it "must get back to the :run state if its original state is :pause" do
|
267
|
+
@app_test.property.state = :pause
|
268
|
+
@app_test.method(:configure_state).call(:run)
|
269
|
+
@app_test.property.state.must_equal :run
|
270
|
+
end
|
271
|
+
|
272
|
+
it "must do nothing if its binary path is not set" do
|
273
|
+
@app_test.property.state = :stop
|
274
|
+
@app_test.method(:configure_state).call(:run)
|
275
|
+
@app_test.property.state.must_equal :stop
|
276
|
+
end
|
277
|
+
|
278
|
+
it "must start an app using ExecApp and a correct command line if its original state is :stop" do
|
279
|
+
class ExecApp
|
280
|
+
def initialize(app_id, res, cmd_line, err_out_map)
|
281
|
+
app_id.must_equal "an_application"
|
282
|
+
res.must_be_kind_of OmfRc::ResourceProxy::AbstractResource
|
283
|
+
cmd_line.must_equal "env -i FOO=123 BAR_BAR='bar_123' my_cmd 123 -param1 bar p3 hello "
|
284
|
+
err_out_map.must_equal false
|
285
|
+
end
|
286
|
+
end
|
287
|
+
@app_test.property.state = :stop
|
288
|
+
@app_test.property.binary_path = "my_cmd"
|
289
|
+
test_env = { 'foo' => 123, 'bar_bar' => 'bar_123' }
|
290
|
+
test_params = { :p1 => { :type => 'String', :mandatory => true, :cmd => '-param1', :default => 'foo', :value => 'bar', :order => 2},
|
291
|
+
:p2 => { :type => 'Numeric', :mandatory => true, :default => 123, :order => 1 },
|
292
|
+
:p3 => { :type => 'Boolean', :cmd => 'p3', :default => false, :value => true},
|
293
|
+
:p4 => { :type => 'String', :default => 'hi', :value => 'hello'},
|
294
|
+
:p5 => { :type => 'Numeric', :default => 456}, }
|
295
|
+
@app_test.method(:configure_environments).call(test_env)
|
296
|
+
@app_test.method(:configure_parameters).call(test_params)
|
297
|
+
@app_test.method(:configure_state).call(:run)
|
298
|
+
@app_test.property.state.must_equal :run
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
describe "when configuring its state property to :pause" do
|
303
|
+
it "must do nothing if its original state is :stop or :install" do
|
304
|
+
@app_test.property.state = :stop
|
305
|
+
@app_test.method(:configure_state).call(:pause)
|
306
|
+
@app_test.property.state.must_equal :stop
|
307
|
+
@app_test.property.state = :install
|
308
|
+
@app_test.method(:configure_state).call(:pause)
|
309
|
+
@app_test.property.state.must_equal :install
|
310
|
+
end
|
311
|
+
|
312
|
+
it "must do switch its state to :pause if its original state is :run or :pause" do
|
313
|
+
@app_test.property.state = :run
|
314
|
+
@app_test.method(:configure_state).call(:pause)
|
315
|
+
@app_test.property.state.must_equal :pause
|
316
|
+
@app_test.property.state = :pause
|
317
|
+
@app_test.method(:configure_state).call(:pause)
|
318
|
+
@app_test.property.state.must_equal :pause
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
describe "when configuring its state property to :stop" do
|
323
|
+
it "must do nothing if its original state is :stop or :install" do
|
324
|
+
@app_test.property.state = :stop
|
325
|
+
@app_test.method(:configure_state).call(:pause)
|
326
|
+
@app_test.property.state.must_equal :stop
|
327
|
+
@app_test.property.state = :install
|
328
|
+
@app_test.method(:configure_state).call(:pause)
|
329
|
+
@app_test.property.state.must_equal :install
|
330
|
+
end
|
331
|
+
|
332
|
+
it "must stop its running application if its original state is :run or :pause" do
|
333
|
+
@app_test.property.state = :run
|
334
|
+
class ExecApp
|
335
|
+
def initialize(app_id, res, cmd_line, err_out_map); end
|
336
|
+
def ExecApp.[](id); return ExecApp.new(nil,nil,nil,nil) end
|
337
|
+
def stdin(msg); msg.must_equal 'exit' end
|
338
|
+
def signal(sig); sig.must_equal 'TERM' end
|
339
|
+
def kill(sig); sig.must_equal 'KILL' end
|
340
|
+
end
|
341
|
+
@app_test.method(:configure_state).call(:stop)
|
342
|
+
@app_test.property.state.must_equal :stop
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
|
347
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'omf_rc/resource_proxy/mock'
|
3
|
+
|
4
|
+
describe OmfRc::ResourceProxy::Mock do
|
5
|
+
before do
|
6
|
+
@mock = OmfRc::ResourceFactory.new(:mock, hrn: 'mock_test')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "when included in the resource instance" do
|
10
|
+
it "must provide hooks" do
|
11
|
+
@mock.before_ready
|
12
|
+
@mock.before_release
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -2,9 +2,40 @@ require 'test_helper'
|
|
2
2
|
require 'omf_rc/resource_proxy/node'
|
3
3
|
|
4
4
|
describe OmfRc::ResourceProxy::Node do
|
5
|
+
before do
|
6
|
+
@node = OmfRc::ResourceFactory.new(:node, hrn: 'node_test')
|
7
|
+
end
|
8
|
+
|
5
9
|
describe "when included in the resource instance" do
|
6
10
|
it "must be able to tell registered proxies" do
|
7
|
-
|
11
|
+
@node.request_proxies.must_include :node
|
12
|
+
end
|
13
|
+
|
14
|
+
it "must provide a list of supported network devices" do
|
15
|
+
devices = [
|
16
|
+
{ name: 'eth0', driver: 'e1000e', category: 'net', proxy: 'net' },
|
17
|
+
{ name: 'phy0', driver: 'iwlwifi', category: 'net', subcategory: 'wlan', proxy: 'wlan' }
|
18
|
+
]
|
19
|
+
|
20
|
+
Dir.stub :chdir, proc { |*args, &block| block.call } do
|
21
|
+
glob_proc = proc do |pattern|
|
22
|
+
sys_dir = "#{File.dirname(__FILE__)}/../../fixture/sys/class"
|
23
|
+
case pattern
|
24
|
+
when "net"
|
25
|
+
["#{sys_dir}/net"]
|
26
|
+
when "ieee80211"
|
27
|
+
["#{sys_dir}/ieee80211"]
|
28
|
+
when "ieee80211/*"
|
29
|
+
["#{sys_dir}/ieee80211/phy0"]
|
30
|
+
when "net/eth*"
|
31
|
+
["#{sys_dir}/net/eth0"]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
Dir.stub :glob, glob_proc do
|
35
|
+
@node.request_devices.must_be_kind_of Array
|
36
|
+
@node.request_devices.must_equal devices
|
37
|
+
end
|
38
|
+
end
|
8
39
|
end
|
9
40
|
end
|
10
41
|
end
|
@@ -5,20 +5,57 @@ describe OmfRc::ResourceProxyDSL do
|
|
5
5
|
before do
|
6
6
|
module OmfRc::Util::MockUtility
|
7
7
|
include OmfRc::ResourceProxyDSL
|
8
|
+
|
8
9
|
configure :alpha
|
9
|
-
|
10
|
+
|
11
|
+
request :alpha do |resource|
|
12
|
+
resource.uid
|
13
|
+
end
|
14
|
+
|
15
|
+
work :bravo do |resource, *random_arguments, block|
|
16
|
+
if block
|
17
|
+
block.call("working on #{random_arguments.first}")
|
18
|
+
else
|
19
|
+
random_arguments.first
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
request :zulu do |resource, options|
|
24
|
+
"You called zulu with: #{options.keys.join('|')}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module OmfRc::ResourceProxy::MockRootProxy
|
29
|
+
include OmfRc::ResourceProxyDSL
|
30
|
+
|
31
|
+
register_proxy :mock_root_proxy
|
10
32
|
end
|
11
33
|
|
12
34
|
module OmfRc::ResourceProxy::MockProxy
|
13
35
|
include OmfRc::ResourceProxyDSL
|
14
36
|
|
15
|
-
register_proxy :mock_proxy
|
37
|
+
register_proxy :mock_proxy, :create_by => :mock_root_proxy
|
38
|
+
|
16
39
|
utility :mock_utility
|
17
40
|
|
18
41
|
hook :before_ready
|
19
42
|
hook :before_release
|
20
|
-
|
21
|
-
|
43
|
+
|
44
|
+
bravo("printing") do |v|
|
45
|
+
request :charlie do
|
46
|
+
v
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
request :delta do
|
51
|
+
bravo("printing")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
module OmfRc::ResourceProxy::UselessProxy
|
56
|
+
include OmfRc::ResourceProxyDSL
|
57
|
+
|
58
|
+
register_proxy :useless_proxy
|
22
59
|
end
|
23
60
|
end
|
24
61
|
|
@@ -28,12 +65,46 @@ describe OmfRc::ResourceProxyDSL do
|
|
28
65
|
end
|
29
66
|
|
30
67
|
it "must be able to define methods" do
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
68
|
+
%w(configure_alpha request_alpha bravo).each do |m|
|
69
|
+
OmfRc::Util::MockUtility.method_defined?(m.to_sym).must_equal true
|
70
|
+
end
|
71
|
+
|
72
|
+
%w(configure_alpha request_alpha before_ready before_release bravo).each do |m|
|
73
|
+
OmfRc::ResourceProxy::MockProxy.method_defined?(m.to_sym).must_equal true
|
74
|
+
end
|
75
|
+
|
76
|
+
mock_proxy = OmfRc::ResourceFactory.new(:mock_proxy)
|
77
|
+
mock_proxy.request_alpha.must_equal mock_proxy.uid
|
78
|
+
mock_proxy.request_delta.must_equal "printing"
|
79
|
+
mock_proxy.request_charlie.must_equal "working on printing"
|
80
|
+
mock_proxy.bravo("magic", "second parameter") do |v|
|
81
|
+
v.must_equal "working on magic"
|
82
|
+
end
|
83
|
+
mock_proxy.bravo("something", "something else").must_equal "something"
|
84
|
+
mock_proxy.request_zulu(country: 'uk').must_equal "You called zulu with: country"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "must be able to include utility" do
|
88
|
+
Class.new do
|
89
|
+
include OmfRc::ResourceProxyDSL
|
90
|
+
utility :mock_utility
|
91
|
+
end.new.must_respond_to :request_alpha
|
92
|
+
end
|
93
|
+
|
94
|
+
it "must log error if utility can't be found" do
|
95
|
+
Class.new do
|
96
|
+
include OmfRc::ResourceProxyDSL
|
97
|
+
utility :wont_be_found_utility
|
98
|
+
stub :require, true do
|
99
|
+
utility :wont_be_found_utility
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
it "must check new proxy's create_by option when ask a proxy create a new proxy" do
|
105
|
+
OmfRc::ResourceFactory.new(:mock_root_proxy).create(:mock_proxy)
|
106
|
+
OmfRc::ResourceFactory.new(:mock_root_proxy).create(:useless_proxy)
|
107
|
+
lambda { OmfRc::ResourceFactory.new(:useless_proxy).create(:mock_proxy) }.must_raise StandardError
|
37
108
|
end
|
38
109
|
end
|
39
110
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'omf_rc/util/common_tools'
|
3
|
+
|
4
|
+
describe OmfRc::Util::CommonTools do
|
5
|
+
|
6
|
+
describe "when included in the resource proxy" do
|
7
|
+
before do
|
8
|
+
module OmfRc::ResourceProxy::Test
|
9
|
+
include OmfRc::ResourceProxyDSL
|
10
|
+
register_proxy :test
|
11
|
+
utility :common_tools
|
12
|
+
end
|
13
|
+
# Mocking communicator
|
14
|
+
@client = Blather::Client.new
|
15
|
+
@stream = MiniTest::Mock.new
|
16
|
+
@stream.expect(:send, true, [Blather::Stanza])
|
17
|
+
@client.post_init @stream, Blather::JID.new('n@d/r')
|
18
|
+
end
|
19
|
+
|
20
|
+
it "must be able to log and inform error/warn messages" do
|
21
|
+
Blather::Client.stub :new, @client do
|
22
|
+
@test = OmfRc::ResourceFactory.new(:test)
|
23
|
+
@client.stub :write, true do
|
24
|
+
@test.log_inform_error "bob"
|
25
|
+
@test.log_inform_warn "bob"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'minitest/mock'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
require 'omf_rc/util/ip'
|
5
|
+
|
6
|
+
describe OmfRc::Util::Ip do
|
7
|
+
describe "when included in the resource instance" do
|
8
|
+
before do
|
9
|
+
module OmfRc::ResourceProxy::IpTest
|
10
|
+
include OmfRc::ResourceProxyDSL
|
11
|
+
register_proxy :ip_test
|
12
|
+
utility :ip
|
13
|
+
end
|
14
|
+
|
15
|
+
@wlan00 = OmfRc::ResourceFactory.new(:ip_test, hrn: 'wlan00')
|
16
|
+
@command = MiniTest::Mock.new
|
17
|
+
end
|
18
|
+
|
19
|
+
it "must provide features defined in proxy" do
|
20
|
+
%w(request_ip_addr request_mac_addr configure_ip_addr).each do |m|
|
21
|
+
OmfRc::Util::Ip.method_defined?(m).must_equal true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it "could request ip address of the device" do
|
26
|
+
Cocaine::CommandLine.stub(:new, @command) do
|
27
|
+
@command.expect(:run, fixture("ip/addr_show"))
|
28
|
+
@wlan00.request_ip_addr.must_equal "192.168.1.124/24"
|
29
|
+
@command.verify
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it "could request mac address of the device" do
|
34
|
+
Cocaine::CommandLine.stub(:new, @command) do
|
35
|
+
@command.expect(:run, fixture("ip/addr_show"))
|
36
|
+
@wlan00.request_mac_addr.must_equal "00:00:00:29:00:00"
|
37
|
+
@command.verify
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it "could configure the device's prorperty" do
|
42
|
+
lambda { @wlan00.configure_ip_addr("192.168.1.124/24") }.must_raise Cocaine::ExitStatusError
|
43
|
+
Cocaine::CommandLine.stub(:new, @command) do
|
44
|
+
@command.expect(:run, "")
|
45
|
+
@command.expect(:run, fixture("ip/addr_show"))
|
46
|
+
@wlan00.configure_ip_addr("192.168.1.124/24")
|
47
|
+
@command.verify
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|