edoors-ruby 0.0.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/.gitignore +2 -0
- data/.travis.yml +7 -0
- data/Changelog +23 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +28 -0
- data/LICENSE +661 -0
- data/README.md +18 -0
- data/Rakefile +6 -0
- data/bin/edoors.rb +71 -0
- data/edoors-ruby.gemspec +28 -0
- data/examples/hello_world.json +38 -0
- data/examples/hello_world.rb +76 -0
- data/lib/edoors.rb +51 -0
- data/lib/edoors/board.rb +69 -0
- data/lib/edoors/door.rb +95 -0
- data/lib/edoors/iota.rb +67 -0
- data/lib/edoors/link.rb +70 -0
- data/lib/edoors/particle.rb +235 -0
- data/lib/edoors/room.rb +190 -0
- data/lib/edoors/spin.rb +168 -0
- data/lib/version.rb +28 -0
- data/spec/board_spec.rb +92 -0
- data/spec/door_spec.rb +95 -0
- data/spec/link_spec.rb +38 -0
- data/spec/particle_spec.rb +266 -0
- data/spec/room_spec.rb +315 -0
- data/spec/spec_helper.rb +38 -0
- data/spec/spin_spec.rb +132 -0
- data/spec/spot_spec.rb +26 -0
- data/test/test_iotas.rb +168 -0
- metadata +136 -0
data/spec/room_spec.rb
ADDED
@@ -0,0 +1,315 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# -*- coding: UTF-8 -*-
|
3
|
+
#
|
4
|
+
|
5
|
+
require 'spec_helper'
|
6
|
+
#
|
7
|
+
describe Edoors::Room do
|
8
|
+
#
|
9
|
+
before (:all) do
|
10
|
+
@spin = Edoors::Spin.new 'dom0'
|
11
|
+
end
|
12
|
+
#
|
13
|
+
before(:each) do
|
14
|
+
@spin.clear!
|
15
|
+
end
|
16
|
+
#
|
17
|
+
it "add_iota and add_link correctly" do
|
18
|
+
r0 = Edoors::Room.new 'room0', @spin
|
19
|
+
d0 = Edoors::Door.new 'door0', r0
|
20
|
+
lambda { Edoors::Door.new('door0', r0) }.should raise_error(Edoors::Exception)
|
21
|
+
lambda { r0.add_iota Edoors::Door.new('door1', r0) }.should raise_error(Edoors::Exception)
|
22
|
+
r0.add_link Edoors::Link.new 'door0', 'somewhere'
|
23
|
+
lambda { r0.add_link(Edoors::Link.new('nowhere', 'somewhere')) }.should raise_error(Edoors::Exception)
|
24
|
+
end
|
25
|
+
#
|
26
|
+
it "start! and stop! should work" do
|
27
|
+
r0 = Edoors::Room.new 'room0', @spin
|
28
|
+
d0 = Fake.new 'fake', r0
|
29
|
+
d0.start.should be_nil
|
30
|
+
d0.stop.should be_nil
|
31
|
+
r0.start!
|
32
|
+
d0.start.should be_true
|
33
|
+
d0.stop.should be_nil
|
34
|
+
r0.stop!
|
35
|
+
d0.start.should be_true
|
36
|
+
d0.stop.should be_true
|
37
|
+
end
|
38
|
+
#
|
39
|
+
it "parent, spin and search_down should be ok" do
|
40
|
+
r0 = Edoors::Room.new 'r0', @spin
|
41
|
+
r1 = Edoors::Room.new 'r1', r0
|
42
|
+
r2 = Edoors::Room.new 'r2', r1
|
43
|
+
r3 = Edoors::Room.new 'r3', @spin
|
44
|
+
r4 = Edoors::Room.new 'r4', r3
|
45
|
+
r2.parent.should be r1
|
46
|
+
r1.parent.should be r0
|
47
|
+
r0.parent.should be @spin
|
48
|
+
r0.spin.should be @spin
|
49
|
+
r1.spin.should be @spin
|
50
|
+
r2.spin.should be @spin
|
51
|
+
r3.spin.should be @spin
|
52
|
+
@spin.search_down('dom0/r0/r1/r2').should be r2
|
53
|
+
r0.search_down('dom0/r0/r1/r2').should be r2
|
54
|
+
r1.search_down('dom0/r0/r1/r2').should be r2
|
55
|
+
r2.search_down('dom0/r0/r1/r2').should be r2
|
56
|
+
r1.search_down('dom0/r0/r1/r9').should be nil
|
57
|
+
r3.search_down('dom0/r0/r1/r2').should be nil
|
58
|
+
r4.search_down('dom0/r0/r1/r2').should be nil
|
59
|
+
end
|
60
|
+
#
|
61
|
+
it "routing success (direct add_dst)" do
|
62
|
+
room0 = Edoors::Room.new 'room0', @spin
|
63
|
+
door0 = Edoors::Door.new 'door0', room0
|
64
|
+
p = @spin.require_p Edoors::Particle
|
65
|
+
p.init! Fake.new( 'fake', @spin)
|
66
|
+
p.add_dst 'get', 'door0'
|
67
|
+
room0.send_p p
|
68
|
+
p.action.should eql 'get'
|
69
|
+
p.dst.should be door0
|
70
|
+
end
|
71
|
+
#
|
72
|
+
it "routing success (direct send to self)" do
|
73
|
+
room0 = Edoors::Room.new 'room0', @spin
|
74
|
+
door0 = Edoors::Door.new 'door0', room0
|
75
|
+
p = @spin.require_p Edoors::Particle
|
76
|
+
p.init! Fake.new( 'fake', @spin)
|
77
|
+
door0.send_p p, 'get'
|
78
|
+
p.action.should eql 'get'
|
79
|
+
p.dst.should be door0
|
80
|
+
end
|
81
|
+
#
|
82
|
+
it "routing success (direct send to pointer)" do
|
83
|
+
room0 = Edoors::Room.new 'room0', @spin
|
84
|
+
door0 = Edoors::Door.new 'door0', room0
|
85
|
+
p = @spin.require_p Edoors::Particle
|
86
|
+
p.init! Fake.new( 'fake', @spin)
|
87
|
+
door0.send_p p, 'get', door0
|
88
|
+
p.action.should eql 'get'
|
89
|
+
p.dst.should be door0
|
90
|
+
end
|
91
|
+
#
|
92
|
+
it "routing success (direct send to path)" do
|
93
|
+
room0 = Edoors::Room.new 'room0', @spin
|
94
|
+
door0 = Edoors::Door.new 'door0', room0
|
95
|
+
p = @spin.require_p Edoors::Particle
|
96
|
+
p.init! Fake.new( 'fake', @spin)
|
97
|
+
door0.send_p p, 'get', door0.path
|
98
|
+
p.action.should eql 'get'
|
99
|
+
p.dst.should be door0
|
100
|
+
end
|
101
|
+
#
|
102
|
+
it "routing success through Spin@world" do
|
103
|
+
room0 = Edoors::Room.new 'room0', @spin
|
104
|
+
room1 = Edoors::Room.new 'room1', room0
|
105
|
+
door0 = Edoors::Door.new 'door0', room1
|
106
|
+
p = @spin.require_p Edoors::Particle
|
107
|
+
p.init! Fake.new('fake', @spin)
|
108
|
+
p.add_dst 'get', 'dom0/room0/room1/door0'
|
109
|
+
room0.send_p p
|
110
|
+
p.action.should eql 'get'
|
111
|
+
p.dst.should be door0
|
112
|
+
end
|
113
|
+
#
|
114
|
+
it "route error: no source" do
|
115
|
+
room = Edoors::Room.new 'room', @spin
|
116
|
+
p = @spin.require_p Edoors::Particle
|
117
|
+
p.add_dst 'get', 'room/door'
|
118
|
+
room.send_p p
|
119
|
+
p.action.should eql Edoors::ACT_ERROR
|
120
|
+
p[Edoors::FIELD_ERROR_MSG].should eql Edoors::ERROR_ROUTE_NS
|
121
|
+
p.dst.should be room.spin
|
122
|
+
end
|
123
|
+
#
|
124
|
+
it "route error: no destination no links" do
|
125
|
+
room = Edoors::Room.new 'room', @spin
|
126
|
+
p = @spin.require_p Edoors::Particle
|
127
|
+
p.init! Fake.new('fake', @spin)
|
128
|
+
room.send_p p
|
129
|
+
p.action.should eql Edoors::ACT_ERROR
|
130
|
+
p[Edoors::FIELD_ERROR_MSG].should eql Edoors::ERROR_ROUTE_NDNL
|
131
|
+
p.dst.should be p.src
|
132
|
+
end
|
133
|
+
#
|
134
|
+
it "route error: no rooom, wrong door -> right room wrong door" do
|
135
|
+
room0 = Edoors::Room.new 'room0', @spin
|
136
|
+
p = @spin.require_p Edoors::Particle
|
137
|
+
p.init! Fake.new('fake', @spin)
|
138
|
+
p.add_dst 'get', 'nodoor'
|
139
|
+
room0.send_p p
|
140
|
+
p.action.should eql Edoors::ACT_ERROR
|
141
|
+
p[Edoors::FIELD_ERROR_MSG].should eql Edoors::ERROR_ROUTE_RRWD
|
142
|
+
p.dst.should be p.src
|
143
|
+
end
|
144
|
+
#
|
145
|
+
it "route error: right rooom, wrong door -> right room wrong door" do
|
146
|
+
room0 = Edoors::Room.new 'room0', @spin
|
147
|
+
p = @spin.require_p Edoors::Particle
|
148
|
+
p.init! Fake.new('fake', @spin)
|
149
|
+
p.add_dst 'get', 'dom0/room0/nodoor'
|
150
|
+
room0.send_p p
|
151
|
+
p.action.should eql Edoors::ACT_ERROR
|
152
|
+
p[Edoors::FIELD_ERROR_MSG].should eql Edoors::ERROR_ROUTE_RRWD
|
153
|
+
p.dst.should be p.src
|
154
|
+
end
|
155
|
+
#
|
156
|
+
it "route error: right room, wrong door through Spin@world -> does not exists" do
|
157
|
+
room0 = Edoors::Room.new 'room0', @spin
|
158
|
+
room1 = Edoors::Room.new 'room1', room0
|
159
|
+
p = @spin.require_p Edoors::Particle
|
160
|
+
p.init! Fake.new('fake', room0)
|
161
|
+
p.add_dst 'get', 'dom0/room0/nodoor'
|
162
|
+
room1.send_p p
|
163
|
+
p.action.should eql Edoors::ACT_ERROR
|
164
|
+
p[Edoors::FIELD_ERROR_MSG].should eql Edoors::ERROR_ROUTE_DNE
|
165
|
+
p.dst.should be p.src
|
166
|
+
end
|
167
|
+
#
|
168
|
+
it "route error: wrong room, right door through Spin@world -> does not exists" do
|
169
|
+
room0 = Edoors::Room.new 'room0', @spin
|
170
|
+
room1 = Edoors::Room.new 'room1', room0
|
171
|
+
p = @spin.require_p Edoors::Particle
|
172
|
+
p.init! Fake.new('fake', @spin)
|
173
|
+
p.add_dst 'get', 'dom0/noroom/fake'
|
174
|
+
room1.send_p p
|
175
|
+
p.action.should eql Edoors::ACT_ERROR
|
176
|
+
p[Edoors::FIELD_ERROR_MSG].should eql Edoors::ERROR_ROUTE_DNE
|
177
|
+
p.dst.should be p.src
|
178
|
+
end
|
179
|
+
#
|
180
|
+
it "routing ~failure: no door name -> src" do
|
181
|
+
room0 = Edoors::Room.new 'room0', @spin
|
182
|
+
door0 = Edoors::Door.new 'door0', room0
|
183
|
+
p = @spin.require_p Edoors::Particle
|
184
|
+
p.init! door0
|
185
|
+
p.add_dst 'get'
|
186
|
+
room0.send_p p
|
187
|
+
p.action.should eql 'get'
|
188
|
+
p.dst.should be door0
|
189
|
+
end
|
190
|
+
#
|
191
|
+
it "routing success: unconditional link" do
|
192
|
+
room0 = Edoors::Room.new 'room0', @spin
|
193
|
+
door0 = Edoors::Door.new 'door0', room0
|
194
|
+
door1 = Edoors::Door.new 'door1', room0
|
195
|
+
room0.add_link Edoors::Link.new('door0', 'door1')
|
196
|
+
p = @spin.require_p Edoors::Particle
|
197
|
+
door0.send_p p
|
198
|
+
p.action.should be_nil
|
199
|
+
p.dst.should be door1
|
200
|
+
end
|
201
|
+
#
|
202
|
+
it "routing success: conditional link" do
|
203
|
+
room0 = Edoors::Room.new 'room0', @spin
|
204
|
+
door0 = Edoors::Door.new 'door0', room0
|
205
|
+
door1 = Edoors::Door.new 'door1', room0
|
206
|
+
room0.add_link Edoors::Link.new('door0', 'door1', 'fields', 'f0,f1', 'v0v1')
|
207
|
+
p = @spin.require_p Edoors::Particle
|
208
|
+
p['f0']='v0'
|
209
|
+
p['f1']='v1'
|
210
|
+
door0.send_p p
|
211
|
+
p.action.should be_nil
|
212
|
+
p.src.should be door0
|
213
|
+
p.dst.should be door1
|
214
|
+
end
|
215
|
+
#
|
216
|
+
it "routing success: more then one matching link" do
|
217
|
+
room0 = Edoors::Room.new 'room0', @spin
|
218
|
+
door0 = Edoors::Door.new 'door0', room0
|
219
|
+
class Out < Edoors::Door
|
220
|
+
attr_reader :count
|
221
|
+
def receive_p p
|
222
|
+
@count||=0
|
223
|
+
@count += 1
|
224
|
+
end
|
225
|
+
end
|
226
|
+
door1 = Out.new 'door1', room0
|
227
|
+
room0.add_link Edoors::Link.new('door0', 'door1')
|
228
|
+
room0.add_link Edoors::Link.new('door0', 'door1', 'fields', 'f0,f1', 'v0v1')
|
229
|
+
room0.add_link Edoors::Link.new('door0', 'door1', 'fields', 'f0,f1', 'v0v2')
|
230
|
+
p = @spin.require_p Edoors::Particle
|
231
|
+
p['f0']='v0'
|
232
|
+
p['f1']='v1'
|
233
|
+
door0.send_p p
|
234
|
+
@spin.spin!
|
235
|
+
door1.count.should eql 2
|
236
|
+
end
|
237
|
+
#
|
238
|
+
it "system route error: system no destination" do
|
239
|
+
room0 = Edoors::Room.new 'room0', @spin
|
240
|
+
p = @spin.require_p Edoors::Particle
|
241
|
+
room0.send_sys_p p
|
242
|
+
p.action.should eql Edoors::ACT_ERROR
|
243
|
+
p[Edoors::FIELD_ERROR_MSG].should eql Edoors::ERROR_ROUTE_SND
|
244
|
+
end
|
245
|
+
#
|
246
|
+
it "system routing success: action only" do
|
247
|
+
room0 = Edoors::Room.new 'room0', @spin
|
248
|
+
p = @spin.require_p Edoors::Particle
|
249
|
+
p.add_dst Edoors::SYS_ACT_ADD_LINK
|
250
|
+
room0.send_sys_p p
|
251
|
+
p.action.should eql Edoors::SYS_ACT_ADD_LINK
|
252
|
+
p.dst.should be room0.spin
|
253
|
+
end
|
254
|
+
#
|
255
|
+
it "system routing success (add_dst)" do
|
256
|
+
room0 = Edoors::Room.new 'room0', @spin
|
257
|
+
door0 = Edoors::Door.new 'door0', room0
|
258
|
+
p = @spin.require_p Edoors::Particle
|
259
|
+
p.add_dst Edoors::SYS_ACT_ADD_LINK, 'dom0/room0/door0'
|
260
|
+
room0.send_sys_p p
|
261
|
+
p.action.should eql Edoors::SYS_ACT_ADD_LINK
|
262
|
+
p.dst.should be door0
|
263
|
+
end
|
264
|
+
#
|
265
|
+
it "system routing success (send_sys_p)" do
|
266
|
+
room0 = Edoors::Room.new 'room0', @spin
|
267
|
+
door0 = Edoors::Door.new 'door0', room0
|
268
|
+
p = @spin.require_p Edoors::Particle
|
269
|
+
door0.send_sys_p p, Edoors::SYS_ACT_ADD_LINK
|
270
|
+
p.action.should eql Edoors::SYS_ACT_ADD_LINK
|
271
|
+
p.dst.should be door0
|
272
|
+
end
|
273
|
+
#
|
274
|
+
it "SYS_ACT_ADD_LINK" do
|
275
|
+
room0 = Edoors::Room.new 'room0', @spin
|
276
|
+
door0 = Edoors::Door.new 'door0', room0
|
277
|
+
door1 = Edoors::Door.new 'door1', room0
|
278
|
+
p0 = @spin.require_p Edoors::Particle
|
279
|
+
p0.set_data Edoors::LNK_SRC, 'door0'
|
280
|
+
p0.set_data Edoors::LNK_DSTS, 'door1'
|
281
|
+
p0.set_data Edoors::LNK_FIELDS, 'fields'
|
282
|
+
p0.set_data Edoors::LNK_CONDF, 'f0,f1'
|
283
|
+
p0.set_data Edoors::LNK_CONDV, 'v0v1'
|
284
|
+
p0.add_dst Edoors::SYS_ACT_ADD_LINK, room0.path
|
285
|
+
room0.send_sys_p p0
|
286
|
+
@spin.spin!
|
287
|
+
p = @spin.require_p Edoors::Particle
|
288
|
+
p['f0']='v0'
|
289
|
+
p['f1']='v1'
|
290
|
+
door0.send_p p
|
291
|
+
p.action.should be_nil
|
292
|
+
p.src.should be door0
|
293
|
+
p.dst.should be door1
|
294
|
+
end
|
295
|
+
#
|
296
|
+
it "room->json->room" do
|
297
|
+
r0 = Edoors::Room.new 'r0', @spin
|
298
|
+
r1 = Edoors::Room.new 'r1', r0
|
299
|
+
r2 = Edoors::Room.new 'r2', r1
|
300
|
+
r3 = Edoors::Room.new 'r3', r1
|
301
|
+
r4 = Edoors::Room.new 'r4', r3
|
302
|
+
d0 = Edoors::Door.new 'd0', r1
|
303
|
+
d1 = Edoors::Door.new 'd1', r1
|
304
|
+
d2 = Edoors::Door.new 'd2', r2
|
305
|
+
r1.add_link Edoors::Link.new('d0', 'd1', 'fields', 'f0,f1', 'v0v1')
|
306
|
+
r1.add_link Edoors::Link.new('d0', 'd2')
|
307
|
+
r1.add_link Edoors::Link.new('d1', 'd0')
|
308
|
+
r2.add_link Edoors::Link.new('d2', 'd1', 'fies', 'f5,f1', 'v9v1')
|
309
|
+
rx = Edoors::Room.json_create( JSON.load( JSON.generate(r0) ) )
|
310
|
+
JSON.generate(r0).should eql JSON.generate(rx)
|
311
|
+
end#
|
312
|
+
#
|
313
|
+
end
|
314
|
+
#
|
315
|
+
# EOF
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# -*- coding: UTF-8 -*-
|
3
|
+
#
|
4
|
+
begin
|
5
|
+
require 'simplecov'
|
6
|
+
SimpleCov.start do
|
7
|
+
add_filter 'spec'
|
8
|
+
end
|
9
|
+
rescue LoadError
|
10
|
+
end
|
11
|
+
#
|
12
|
+
require 'edoors'
|
13
|
+
#
|
14
|
+
class Fake < Edoors::Iota
|
15
|
+
attr_reader :p, :sp, :start, :stop
|
16
|
+
def process_p p
|
17
|
+
@p = p
|
18
|
+
end
|
19
|
+
def process_sys_p p
|
20
|
+
@sp = p
|
21
|
+
end
|
22
|
+
def send_p p
|
23
|
+
@p = p
|
24
|
+
end
|
25
|
+
def send_sys_p p
|
26
|
+
@sp = p
|
27
|
+
end
|
28
|
+
def add_iota p
|
29
|
+
end
|
30
|
+
def start!
|
31
|
+
@start=true
|
32
|
+
end
|
33
|
+
def stop!
|
34
|
+
@stop=true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
#
|
38
|
+
# EOF
|
data/spec/spin_spec.rb
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# -*- coding: UTF-8 -*-
|
3
|
+
#
|
4
|
+
|
5
|
+
require 'spec_helper'
|
6
|
+
#
|
7
|
+
describe Edoors::Spin do
|
8
|
+
#
|
9
|
+
class MyP < Edoors::Particle; end
|
10
|
+
#
|
11
|
+
it "Particles pool" do
|
12
|
+
spin = Edoors::Spin.new 'dom0'
|
13
|
+
p0 = spin.require_p Edoors::Particle
|
14
|
+
p1 = spin.require_p Edoors::Particle
|
15
|
+
(p0===p1).should be_false
|
16
|
+
spin.release_p p0
|
17
|
+
p2 = spin.require_p Edoors::Particle
|
18
|
+
(p0===p2).should be_true
|
19
|
+
end
|
20
|
+
#
|
21
|
+
it "different Particles classes in pool" do
|
22
|
+
spin = Edoors::Spin.new 'dom0'
|
23
|
+
p0 = spin.require_p Edoors::Particle
|
24
|
+
p1 = spin.require_p Edoors::Particle
|
25
|
+
(p0===p1).should be_false
|
26
|
+
spin.release_p p0
|
27
|
+
p2 = spin.require_p MyP
|
28
|
+
p3 = spin.require_p MyP
|
29
|
+
(p2===p3).should be_false
|
30
|
+
spin.release_p p2
|
31
|
+
p4 = spin.require_p MyP
|
32
|
+
(p2===p4).should be_true
|
33
|
+
end
|
34
|
+
#
|
35
|
+
it "release of merged particles" do
|
36
|
+
spin = Edoors::Spin.new 'dom0'
|
37
|
+
p0 = spin.require_p Edoors::Particle
|
38
|
+
p1 = spin.require_p Edoors::Particle
|
39
|
+
(p0===p1).should be_false
|
40
|
+
p0.merge! p1
|
41
|
+
spin.release_p p0
|
42
|
+
p2 = spin.require_p Edoors::Particle
|
43
|
+
(p2===p0).should be_true
|
44
|
+
p3 = spin.require_p Edoors::Particle
|
45
|
+
(p3===p1).should be_true
|
46
|
+
end
|
47
|
+
#
|
48
|
+
it "clear!" do
|
49
|
+
spin = Edoors::Spin.new 'dom0'
|
50
|
+
p0 = spin.require_p Edoors::Particle
|
51
|
+
p1 = spin.require_p Edoors::Particle
|
52
|
+
spin.send_p p0
|
53
|
+
spin.release_p p1
|
54
|
+
spin.clear!
|
55
|
+
p2 = spin.require_p Edoors::Particle
|
56
|
+
(p2==p0).should be_false
|
57
|
+
(p2==p1).should be_false
|
58
|
+
end
|
59
|
+
#
|
60
|
+
it "post_p post_sys_p spin!" do
|
61
|
+
spin = Edoors::Spin.new 'dom0'
|
62
|
+
f = Fake.new 'fake', spin
|
63
|
+
p0 = spin.require_p Edoors::Particle
|
64
|
+
p0.dst_routed! f
|
65
|
+
p1 = spin.require_p Edoors::Particle
|
66
|
+
p1.dst_routed! f
|
67
|
+
spin.post_p p0
|
68
|
+
spin.post_sys_p p1
|
69
|
+
spin.run = true
|
70
|
+
spin.spin!
|
71
|
+
f.p.should be p0
|
72
|
+
f.sp.should be p1
|
73
|
+
spin.stop!
|
74
|
+
end
|
75
|
+
#
|
76
|
+
it "process_sys" do
|
77
|
+
spin = Edoors::Spin.new 'dom0'
|
78
|
+
p0 = spin.require_p Edoors::Particle
|
79
|
+
p0.add_dst 'unknown'
|
80
|
+
spin.send_sys_p p0
|
81
|
+
spin.spin!
|
82
|
+
p1 = spin.require_p Edoors::Particle
|
83
|
+
p0.should be p0
|
84
|
+
end
|
85
|
+
#
|
86
|
+
it "option debug" do
|
87
|
+
spin = Edoors::Spin.new 'dom0'
|
88
|
+
spin.debug_routing.should be false
|
89
|
+
spin.debug_errors.should be false
|
90
|
+
spin = Edoors::Spin.new 'dom0', :debug_routing=>true, :debug_errors=>true
|
91
|
+
spin.debug_routing.should be true
|
92
|
+
spin.debug_errors.should be true
|
93
|
+
end
|
94
|
+
#
|
95
|
+
it "spin->json->spin" do
|
96
|
+
spin = Edoors::Spin.new 'dom0', :debug_routing=>true
|
97
|
+
r0 = Edoors::Room.new 'r0', spin
|
98
|
+
r1 = Edoors::Room.new 'r1', r0
|
99
|
+
r2 = Edoors::Room.new 'r2', r1
|
100
|
+
r3 = Edoors::Room.new 'r3', r1
|
101
|
+
r4 = Edoors::Room.new 'r4', r3
|
102
|
+
d0 = Edoors::Door.new 'd0', r1
|
103
|
+
d1 = Edoors::Door.new 'd1', r1
|
104
|
+
d2 = Edoors::Door.new 'd2', r2
|
105
|
+
p0 = spin.require_p Edoors::Particle
|
106
|
+
p1 = spin.require_p Edoors::Particle
|
107
|
+
p2 = spin.require_p Edoors::Particle
|
108
|
+
spin.post_p p0
|
109
|
+
spin.post_p p1
|
110
|
+
spin.post_sys_p p2
|
111
|
+
json = JSON.generate spin
|
112
|
+
dom0 = Edoors::Spin.json_create( JSON.load( json ) )
|
113
|
+
json.should eql JSON.generate(dom0)
|
114
|
+
end
|
115
|
+
#
|
116
|
+
it "hibernate! resume!" do
|
117
|
+
spin = Edoors::Spin.new 'dom0'
|
118
|
+
p0 = spin.require_p Edoors::Particle
|
119
|
+
p0.add_dst Edoors::SYS_ACT_HIBERNATE
|
120
|
+
Edoors::Room.new 'input', spin
|
121
|
+
Edoors::Room.new 'output', spin
|
122
|
+
spin.add_link Edoors::Link.new('input', 'output', nil, nil, nil)
|
123
|
+
spin.send_sys_p p0
|
124
|
+
spin.spin!
|
125
|
+
dom0 = Edoors::Spin.resume! spin.hibernate_path
|
126
|
+
dom0.name.should eql spin.name
|
127
|
+
File.unlink dom0.hibernate_path
|
128
|
+
end
|
129
|
+
#
|
130
|
+
end
|
131
|
+
#
|
132
|
+
#EOF
|