iotas 0.0.4 → 0.0.5

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