openwferu 0.9.9 → 0.9.10

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.
Files changed (55) hide show
  1. data/examples/kotoba.rb +22 -0
  2. data/lib/openwfe/engine/engine.rb +46 -10
  3. data/lib/openwfe/expool/expressionpool.rb +84 -71
  4. data/lib/openwfe/expool/history.rb +6 -2
  5. data/lib/openwfe/expool/journal.rb +9 -3
  6. data/lib/openwfe/expool/journal_replay.rb +8 -5
  7. data/lib/openwfe/expressions/fe_participant.rb +32 -1
  8. data/lib/openwfe/filterdef.rb +1 -1
  9. data/lib/openwfe/omixins.rb +70 -0
  10. data/lib/openwfe/participants/participantmap.rb +14 -1
  11. data/lib/openwfe/rest/definitions.rb +2 -1
  12. data/lib/openwfe/rest/xmlcodec.rb +56 -27
  13. data/lib/openwfe/util/kotoba.rb +2 -2
  14. data/lib/openwfe/util/workqueue.rb +177 -0
  15. data/lib/openwfe/utils.rb +52 -13
  16. data/lib/openwfe/version.rb +1 -1
  17. data/lib/openwfe/worklist/storeparticipant.rb +7 -4
  18. data/test/fei_test.rb +12 -1
  19. data/test/flowtestbase.rb +21 -8
  20. data/test/ft_0b_sequence.rb +6 -4
  21. data/test/ft_10_loop.rb +10 -5
  22. data/test/ft_10b_loop2.rb +5 -2
  23. data/test/ft_11_ppd.rb +12 -5
  24. data/test/ft_1_unset.rb +22 -13
  25. data/test/ft_23c_wait.rb +10 -6
  26. data/test/ft_25_cancel.rb +11 -5
  27. data/test/ft_27_getflowpos.rb +21 -4
  28. data/test/ft_28_fileparticipant.rb +1 -1
  29. data/test/ft_2c_concurrence.rb +8 -4
  30. data/test/ft_30_socketlistener.rb +8 -0
  31. data/test/ft_32_journal.rb +11 -2
  32. data/test/ft_34_cancelwfid.rb +4 -0
  33. data/test/ft_36_subprocids.rb +2 -1
  34. data/test/ft_37_pnames.rb +1 -1
  35. data/test/ft_38_tag.rb +5 -5
  36. data/test/ft_39_reserve.rb +1 -41
  37. data/test/ft_39b_reserve.rb +70 -0
  38. data/test/ft_40_defined.rb +2 -1
  39. data/test/ft_42_environments.rb +1 -2
  40. data/test/ft_45_citerator.rb +16 -4
  41. data/test/ft_46_pparams.rb +3 -0
  42. data/test/ft_49_condition.rb +2 -1
  43. data/test/ft_50_xml_attribute.rb +72 -3
  44. data/test/ft_51_stack.rb +58 -0
  45. data/test/ft_52_obs_participant.rb +127 -0
  46. data/test/ft_7b_lose.rb +5 -4
  47. data/test/ft_tests.rb +3 -0
  48. data/test/hparticipant_test.rb +21 -18
  49. data/test/misc_test.rb +9 -0
  50. data/test/param_test.rb +6 -0
  51. data/test/rake_test.rb +1 -0
  52. data/test/scheduler_test.rb +21 -0
  53. data/test/sec_test.rb +14 -27
  54. data/test/timeout_test.rb +6 -2
  55. metadata +8 -2
@@ -0,0 +1,70 @@
1
+
2
+ #
3
+ # Testing OpenWFEru
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+
8
+ require 'flowtestbase'
9
+ require 'openwfe/def'
10
+
11
+ include OpenWFE
12
+
13
+
14
+
15
+ class FlowTest39b < Test::Unit::TestCase
16
+ include FlowTestBase
17
+
18
+ #def setup
19
+ #end
20
+
21
+ #def teardown
22
+ #end
23
+
24
+ #
25
+ # Test 0
26
+ #
27
+
28
+ class TestReserve39b0 < ProcessDefinition
29
+ #
30
+ # doesn't prove it enough though...
31
+ #
32
+ concurrence do
33
+ reserve :mutex => :toto, :frequency => "500" do
34
+ sequence do
35
+ test_alpha
36
+ test_bravo
37
+ end
38
+ end
39
+ reserve :mutex => :toto, :frequency => "500" do
40
+ sequence do
41
+ test_charly
42
+ test_delta
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ def test_2
49
+
50
+ dotest(
51
+ TestReserve39b0,
52
+ [
53
+ """
54
+ test-charly
55
+ test-delta
56
+ test-alpha
57
+ test-bravo
58
+ """.strip,
59
+ """
60
+ test-alpha
61
+ test-bravo
62
+ test-charly
63
+ test-delta
64
+ """.strip
65
+ ],
66
+ 3)
67
+ end
68
+
69
+ end
70
+
@@ -65,7 +65,8 @@ false
65
65
  true
66
66
  false
67
67
  true
68
- """.strip)
68
+ """.strip,
69
+ true)
69
70
  end
70
71
 
71
72
  end
@@ -43,8 +43,7 @@ class FlowTest42 < Test::Unit::TestCase
43
43
  def test_0
44
44
  dotest(
45
45
  TestCase42a0,
46
- "v:c",
47
- true)
46
+ "v:c")
48
47
  end
49
48
 
50
49
 
@@ -38,11 +38,17 @@ class FlowTest45 < Test::Unit::TestCase
38
38
  def test_0
39
39
  dotest(
40
40
  TestCase45a0,
41
- """
41
+ [ """
42
42
  .0 - 1
43
43
  .1 - 2
44
44
  done.
45
- """.strip)
45
+ """.strip,
46
+ """
47
+ .1 - 2
48
+ .0 - 1
49
+ done.
50
+ """.strip
51
+ ])
46
52
  end
47
53
 
48
54
 
@@ -63,11 +69,17 @@ done.
63
69
  def test_1
64
70
  dotest(
65
71
  TestCase45a1,
66
- """
72
+ [ """
67
73
  .0 - 1
68
74
  .1 - 2
69
75
  done.
70
- """.strip)
76
+ """.strip,
77
+ """
78
+ .1 - 2
79
+ .0 - 1
80
+ done.
81
+ """.strip
82
+ ])
71
83
  end
72
84
 
73
85
  #
@@ -43,6 +43,7 @@ class FlowTest46 < Test::Unit::TestCase
43
43
  def test_0
44
44
 
45
45
  @engine.register_participant :nemo do |workitem|
46
+ @tracer.puts workitem.params['ref']
46
47
  @tracer.puts workitem.params['description']
47
48
  @tracer.puts workitem.params['task']
48
49
  end
@@ -50,9 +51,11 @@ class FlowTest46 < Test::Unit::TestCase
50
51
  dotest(
51
52
  TestPTask46a0,
52
53
  """
54
+ nemo
53
55
  clean the desk
54
56
 
55
57
 
58
+ nemo
56
59
 
57
60
  force
58
61
  """.strip)
@@ -58,7 +58,8 @@ class FlowTest49 < Test::Unit::TestCase
58
58
  4 true
59
59
  5
60
60
  6
61
- """.strip)
61
+ """.strip,
62
+ true)
62
63
  end
63
64
 
64
65
  end
@@ -8,8 +8,8 @@
8
8
 
9
9
  require 'flowtestbase'
10
10
  require 'openwfe/def'
11
-
12
- include OpenWFE
11
+ require 'openwfe/rest/xmlcodec'
12
+ require 'rutest_utils'
13
13
 
14
14
 
15
15
  class FlowTest50 < Test::Unit::TestCase
@@ -37,6 +37,9 @@ xmlns:sps="http://www.opengis.net/sps" xmlns="">
37
37
  <PATH>52</PATH>
38
38
  <ROW>186</ROW>
39
39
  <COST>2600.85</COST>
40
+ <![CDATA[
41
+ <blah/>boum
42
+ ]]>
40
43
  <sps:LatestResponseTime>
41
44
  <gml:TimeInstant>
42
45
  <gml:timePosition>2007-04-16T09:20:00Z</gml:timePosition>
@@ -46,7 +49,7 @@ xmlns:sps="http://www.opengis.net/sps" xmlns="">
46
49
  </sps:GetFeasibilityRequestResponse>
47
50
  END
48
51
 
49
- class TestXmlAttribute50a0 < ProcessDefinition
52
+ class TestXmlAttribute50a0 < OpenWFE::ProcessDefinition
50
53
  sequence do
51
54
  geo_0
52
55
  geo_1
@@ -85,5 +88,71 @@ END
85
88
  assert_equal doc0.to_s, doc1.to_s
86
89
  end
87
90
 
91
+ #
92
+ # Against bug #10150
93
+ #
94
+ def test_2
95
+
96
+ workitem = OpenWFE::InFlowWorkItem.new
97
+ workitem.fei = new_fei
98
+
99
+ workitem.result = REXML::Document.new PAT_XML
100
+
101
+ s = OpenWFE::xml_encode workitem
102
+
103
+ #puts s
104
+
105
+ w = OpenWFE::xml_decode s
106
+
107
+ #puts workitem.to_s
108
+ #puts w.to_s
109
+
110
+ assert_equal workitem.to_s, w.to_s
111
+ end
112
+
113
+ def test_3
114
+
115
+ workitem = OpenWFE::InFlowWorkItem.new
116
+ workitem.fei = new_fei
117
+
118
+ workitem.result = REXML::Document.new(
119
+ PAT_XML, :compress_whitespace=>:all, :ignore_whitespace_nodes=>:all)
120
+
121
+ workitem.result = workitem.result.root
122
+
123
+ s = OpenWFE::xml_encode workitem
124
+
125
+ #puts s
126
+
127
+ w = OpenWFE::xml_decode s
128
+
129
+ #puts workitem.to_s
130
+ #puts w.to_s
131
+
132
+ assert_equal workitem.to_s, w.to_s
133
+ end
134
+
135
+ #def xxxx_4
136
+ def test_4
137
+
138
+ doc0 = nil
139
+ doc1 = nil
140
+
141
+ @engine.register_participant :geo_0 do |fei, workitem|
142
+ doc0 = REXML::Document.new(PAT_XML).root
143
+ workitem.attributes['xml'] = doc0
144
+ @tracer << "0\n"
145
+ end
146
+
147
+ @engine.register_participant :geo_1 do |fei, workitem|
148
+ doc1 = workitem.attributes['xml']
149
+ @tracer << "1\n"
150
+ end
151
+
152
+ dotest(TestXmlAttribute50a0, "0\n1")
153
+
154
+ assert_equal doc0.to_s, doc1.to_s
155
+ end
156
+
88
157
  end
89
158
 
@@ -0,0 +1,58 @@
1
+
2
+ #
3
+ # Testing OpenWFEru
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+
8
+ require 'flowtestbase'
9
+ require 'openwfe/def'
10
+
11
+ include OpenWFE
12
+
13
+
14
+ class FlowTest51 < Test::Unit::TestCase
15
+ include FlowTestBase
16
+
17
+ #def setup
18
+ #end
19
+
20
+ #def teardown
21
+ #end
22
+
23
+
24
+ #
25
+ # Test 0
26
+ #
27
+
28
+ #COUNT = 400 :)
29
+ #COUNT = 500 :(
30
+ COUNT = 450
31
+ #
32
+ # before svn639, it broke with a too deep stack with a sequence
33
+ # of 450 elements
34
+
35
+ class TestCondition51a0 < ProcessDefinition
36
+ sequence do
37
+ COUNT.times do
38
+ toto
39
+ end
40
+ _print "${f:__result__}"
41
+ end
42
+ end
43
+
44
+ #def xxxx_0
45
+ def test_0
46
+
47
+ count = 0
48
+
49
+ @engine.register_participant :toto do |workitem|
50
+ count += 1
51
+ workitem.__result__ = count
52
+ end
53
+
54
+ dotest(TestCondition51a0, "#{COUNT}")
55
+ end
56
+
57
+ end
58
+
@@ -0,0 +1,127 @@
1
+
2
+ #
3
+ # Testing OpenWFEru
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+
8
+ require 'flowtestbase'
9
+ require 'openwfe/def'
10
+
11
+ include OpenWFE
12
+
13
+
14
+ class FlowTest52 < Test::Unit::TestCase
15
+ include FlowTestBase
16
+
17
+ #def setup
18
+ #end
19
+
20
+ #def teardown
21
+ #end
22
+
23
+ #
24
+ # Test 0
25
+ #
26
+
27
+ class TestObsParticipant52a0 < ProcessDefinition
28
+ participant :ref => :toto
29
+ end
30
+
31
+ #def xxxx_0
32
+ def test_0
33
+
34
+ @engine.get_expression_pool.add_observer :apply do |evt, fe, workitem|
35
+ @tracer << "#{evt} #{fe.fei.expression_name}\n" \
36
+ if fe.fei.expression_name == "participant"
37
+ end
38
+ @engine.get_expression_pool.add_observer :reply_to_parent do |evt, fe, workitem|
39
+ @tracer << "#{evt} #{fe.fei.expression_name}\n" \
40
+ if fe.fei.expression_name == "participant"
41
+ end
42
+
43
+ @engine.register_participant :toto do |workitem|
44
+ @tracer << "toto\n"
45
+ end
46
+
47
+ dotest(
48
+ TestObsParticipant52a0,
49
+ """
50
+ apply participant
51
+ toto
52
+ reply_to_parent participant
53
+ """.strip)
54
+ end
55
+
56
+
57
+ #
58
+ # Test 1
59
+ #
60
+
61
+ class TestObsParticipant52a1 < ProcessDefinition
62
+ sequence do
63
+ toto
64
+ sub0
65
+ end
66
+ process_definition :name => "sub0" do
67
+ end
68
+ end
69
+
70
+ def test_1
71
+ @engine.get_expression_pool.add_observer :apply do |evt, fe, workitem|
72
+ @tracer << "#{evt} #{fe.fei.expression_name}\n"
73
+ end
74
+ @engine.register_participant :toto do
75
+ #nothing
76
+ end
77
+ dotest(
78
+ TestObsParticipant52a1,
79
+ """
80
+ apply process-definition
81
+ apply sequence
82
+ apply toto
83
+ apply sub0
84
+ apply process-definition
85
+ """.strip)
86
+ end
87
+
88
+
89
+ #
90
+ # Test 2
91
+ #
92
+
93
+ class TestObsParticipant52a2 < ProcessDefinition
94
+ sequence do
95
+ alpha
96
+ bravo
97
+ end
98
+ end
99
+
100
+ #def xxxx_2
101
+ def test_2
102
+
103
+ @engine.get_participant_map.add_observer :dispatch do |evt, msg, wi|
104
+ @tracer << "#{evt} #{msg} #{wi.fei.expression_name}\n"
105
+ end
106
+
107
+ @engine.register_participant :alpha do |workitem|
108
+ @tracer << "alpha\n"
109
+ end
110
+ @engine.register_participant :bravo do |workitem|
111
+ @tracer << "bravo\n"
112
+ end
113
+
114
+ dotest(
115
+ TestObsParticipant52a2,
116
+ """
117
+ dispatch before_consume alpha
118
+ alpha
119
+ dispatch after_consume alpha
120
+ dispatch before_consume bravo
121
+ bravo
122
+ dispatch after_consume bravo
123
+ """.strip)
124
+ end
125
+
126
+ end
127
+
data/test/ft_7b_lose.rb CHANGED
@@ -41,7 +41,7 @@ class FlowTest7b < Test::Unit::TestCase
41
41
  </process-definition>''',
42
42
  """b
43
43
  c""",
44
- 0.1,
44
+ true,
45
45
  true)
46
46
  end
47
47
 
@@ -75,10 +75,11 @@ c""",
75
75
  def test_lose_2
76
76
  dotest(
77
77
  TestDefinition2,
78
- """before
78
+ """
79
+ before
79
80
  ok 5
80
- after""",
81
- 0.1)
81
+ after
82
+ """.strip)
82
83
  end
83
84
 
84
85
  end
data/test/ft_tests.rb CHANGED
@@ -51,6 +51,7 @@ require 'ft_36_subprocids'
51
51
  require 'ft_37_pnames'
52
52
  require 'ft_38_tag'
53
53
  require 'ft_39_reserve'
54
+ require 'ft_39b_reserve'
54
55
  require 'ft_40_defined'
55
56
  require 'ft_41_case'
56
57
  require 'ft_42_environments'
@@ -63,6 +64,8 @@ require 'ft_47_filter'
63
64
  require 'ft_48_fe_filter'
64
65
  require 'ft_49_condition'
65
66
  require 'ft_50_xml_attribute'
67
+ #require 'ft_51_stack'
68
+ require 'ft_52_obs_participant'
66
69
 
67
70
  require 'ft_32_journal'
68
71
 
@@ -80,10 +80,10 @@ class HParticipantTest < Test::Unit::TestCase
80
80
  #puts "alice count : #{@hpAlice.size}"
81
81
  #puts "bob count : #{@hpBob.size}"
82
82
 
83
- assert \
84
- @hpBob.size == 0
85
- assert \
86
- @hpAlice.size == 1
83
+ sleep 0.200
84
+
85
+ assert_equal @hpBob.size, 0
86
+ assert_equal @hpAlice.size, 1
87
87
 
88
88
  wi = @hpAlice.list_workitems(id.workflow_instance_id)[0]
89
89
 
@@ -95,25 +95,23 @@ class HParticipantTest < Test::Unit::TestCase
95
95
 
96
96
  @hpAlice.forward(wi)
97
97
 
98
- assert \
99
- @hpAlice.size == 0
100
- assert \
101
- @hpBob.size == 1
98
+ sleep 0.400
99
+
100
+ assert_equal @hpAlice.size, 0
101
+ assert_equal @hpBob.size, 1
102
102
 
103
103
  wi = @hpBob.list_workitems(id.workflow_instance_id)[0]
104
104
 
105
- assert \
106
- wi.message == "Hello bob !"
105
+ assert_equal wi.message, "Hello bob !"
107
106
 
108
107
  @hpBob.proceed(wi)
109
108
 
110
- assert \
111
- @hpAlice.size == 0
112
- assert \
113
- @hpBob.size == 0
109
+ sleep 0.300
114
110
 
115
- assert \
116
- @engine.get_expression_storage.size == 1
111
+ assert_equal @hpAlice.size, 0
112
+ assert_equal @hpBob.size, 0
113
+
114
+ assert_equal @engine.get_expression_storage.size, 1
117
115
  end
118
116
 
119
117
  def test_d_0
@@ -126,6 +124,8 @@ class HParticipantTest < Test::Unit::TestCase
126
124
 
127
125
  id = @engine.launch(HpDefinition0)
128
126
 
127
+ sleep 0.100
128
+
129
129
  assert_equal @hpAlice.size, 1
130
130
  assert_equal @hpBob.size, 0
131
131
 
@@ -140,6 +140,8 @@ class HParticipantTest < Test::Unit::TestCase
140
140
 
141
141
  @hpBob.proceed wi
142
142
 
143
+ sleep 0.100
144
+
143
145
  assert_equal @hpAlice.size, 0
144
146
  assert_equal @hpBob.size, 1
145
147
 
@@ -154,11 +156,12 @@ class HParticipantTest < Test::Unit::TestCase
154
156
 
155
157
  @hpAlice.forward wi
156
158
 
159
+ sleep 0.100
160
+
157
161
  assert_equal @hpAlice.size, 0
158
162
  assert_equal @hpBob.size, 0
159
163
 
160
- assert \
161
- @engine.get_expression_storage.size == 1
164
+ assert_equal @engine.get_expression_storage.size, 1
162
165
  end
163
166
 
164
167
  end
data/test/misc_test.rb CHANGED
@@ -78,6 +78,15 @@ class MiscTest < Test::Unit::TestCase
78
78
  assert d.object_id != d1.object_id
79
79
  end
80
80
 
81
+ def test_grep_0
82
+ assert OpenWFE::grep("sputnik", "Rakefile").empty?
83
+ assert_equal OpenWFE::grep("Mettraux", "Rakefile").size, 4
84
+
85
+ OpenWFE::grep "Mettraux", "Rakefile" do |line|
86
+ assert_match "Mettraux", line
87
+ end
88
+ end
89
+
81
90
  private
82
91
 
83
92
  class A
data/test/param_test.rb CHANGED
@@ -139,6 +139,8 @@ class ParameterTest < Test::Unit::TestCase
139
139
  #puts OpenWFE::exception_to_s(e)
140
140
  end
141
141
 
142
+ sleep 0.200
143
+
142
144
  assert_nil e
143
145
  assert_equal @tracer.to_s, "(unknown address)"
144
146
  end
@@ -171,6 +173,10 @@ class ParameterTest < Test::Unit::TestCase
171
173
  #puts OpenWFE::exception_to_s(e)
172
174
  end
173
175
 
176
+ sleep 0.200
177
+
178
+ # well, I should maybe refactor the test into a method
179
+
174
180
  assert_nil e
175
181
  assert_equal @tracer.to_s, "3"
176
182
  end
data/test/rake_test.rb CHANGED
@@ -19,6 +19,7 @@ require 'restart_tests'
19
19
 
20
20
  require 'ft_20_cron'
21
21
  require 'ft_21_cron'
22
+ require 'ft_51_stack'
22
23
 
23
24
  #
24
25
  # the quick tests
@@ -161,6 +161,27 @@ class SchedulerTest < Test::Unit::TestCase
161
161
  scheduler.sstop
162
162
  end
163
163
 
164
+ #
165
+ # testing to see if the scheduler immediately executes schedule_in(t)
166
+ # requests where t < scheduler.frequency.
167
+ # (100ms < 250ms)
168
+ #
169
+ def test_scheduler_5
170
+
171
+ scheduler = OpenWFE::Scheduler.new()
172
+ scheduler.sstart
173
+
174
+ touched = false
175
+
176
+ scheduler.schedule_in "100" do
177
+ touched = true
178
+ end
179
+
180
+ assert touched
181
+
182
+ scheduler.sstop
183
+ end
184
+
164
185
  protected
165
186
 
166
187
  class TestSchedulable