openwferu 0.9.13 → 0.9.14

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 (91) hide show
  1. data/examples/bigflow.rb +19 -0
  2. data/examples/csv_weather.rb +23 -0
  3. data/examples/engine_template.rb +7 -0
  4. data/lib/openwfe/contextual.rb +0 -2
  5. data/lib/openwfe/engine/engine.rb +137 -34
  6. data/lib/openwfe/engine/file_persisted_engine.rb +0 -5
  7. data/lib/openwfe/exceptions.rb +0 -2
  8. data/lib/openwfe/expool/errorjournal.rb +83 -7
  9. data/lib/openwfe/expool/expressionpool.rb +279 -60
  10. data/lib/openwfe/expool/expstorage.rb +7 -6
  11. data/lib/openwfe/expool/yamlexpstorage.rb +17 -14
  12. data/lib/openwfe/expressions/condition.rb +10 -7
  13. data/lib/openwfe/expressions/environment.rb +11 -1
  14. data/lib/openwfe/expressions/fe_command.rb +14 -1
  15. data/lib/openwfe/expressions/fe_cron.rb +29 -14
  16. data/lib/openwfe/expressions/fe_define.rb +26 -1
  17. data/lib/openwfe/expressions/fe_iterator.rb +2 -0
  18. data/lib/openwfe/expressions/fe_losfor.rb +20 -15
  19. data/lib/openwfe/expressions/fe_misc.rb +0 -2
  20. data/lib/openwfe/expressions/fe_participant.rb +78 -24
  21. data/lib/openwfe/expressions/fe_reserve.rb +0 -2
  22. data/lib/openwfe/expressions/fe_sleep.rb +0 -4
  23. data/lib/openwfe/expressions/fe_subprocess.rb +34 -0
  24. data/lib/openwfe/expressions/fe_value.rb +46 -4
  25. data/lib/openwfe/expressions/fe_wait.rb +0 -2
  26. data/lib/openwfe/expressions/flowexpression.rb +39 -9
  27. data/lib/openwfe/expressions/raw.rb +73 -48
  28. data/lib/openwfe/expressions/raw_prog.rb +45 -15
  29. data/lib/openwfe/expressions/simplerep.rb +54 -7
  30. data/lib/openwfe/expressions/time.rb +5 -2
  31. data/lib/openwfe/expressions/timeout.rb +0 -2
  32. data/lib/openwfe/flowexpressionid.rb +26 -2
  33. data/lib/openwfe/participants/enoparticipants.rb +6 -1
  34. data/lib/openwfe/participants/participant.rb +0 -2
  35. data/lib/openwfe/participants/participantmap.rb +21 -7
  36. data/lib/openwfe/participants/participants.rb +29 -0
  37. data/lib/openwfe/rest/exception.rb +0 -2
  38. data/lib/openwfe/storage/yamlfilestorage.rb +4 -1
  39. data/lib/openwfe/util/dollar.rb +0 -2
  40. data/lib/openwfe/util/lru.rb +0 -2
  41. data/lib/openwfe/util/observable.rb +1 -1
  42. data/lib/openwfe/util/scheduler.rb +4 -4
  43. data/lib/openwfe/util/schedulers.rb +0 -2
  44. data/lib/openwfe/util/workqueue.rb +34 -91
  45. data/lib/openwfe/utils.rb +35 -28
  46. data/lib/openwfe/version.rb +1 -1
  47. data/lib/openwfe/workitem.rb +1 -1
  48. data/test/clone_test.rb +51 -0
  49. data/test/concurrence_test.rb +78 -0
  50. data/test/cron_test_2.rb +50 -0
  51. data/test/flowtestbase.rb +40 -12
  52. data/test/ft_21_cron.rb +32 -6
  53. data/test/ft_26_load.rb +8 -2
  54. data/test/ft_26c_load.rb +19 -0
  55. data/test/ft_27_getflowpos.rb +4 -4
  56. data/test/ft_2_concurrence.rb +14 -9
  57. data/test/ft_32_journal.rb +1 -1
  58. data/test/ft_32c_journal.rb +3 -2
  59. data/test/ft_32d_journal.rb +2 -1
  60. data/test/ft_34_cancelwfid.rb +7 -3
  61. data/test/ft_35_localdefs.rb +13 -0
  62. data/test/ft_38_tag.rb +8 -6
  63. data/test/ft_49_condition.rb +7 -1
  64. data/test/ft_55_ptimeout.rb +13 -14
  65. data/test/ft_57_a.rb +17 -0
  66. data/test/ft_58_ejournal.rb +3 -3
  67. data/test/ft_59_ps.rb +6 -6
  68. data/test/ft_60_ecancel.rb +3 -5
  69. data/test/ft_61_elsub.rb +2 -4
  70. data/test/ft_63_pause.rb +122 -0
  71. data/test/ft_64_alias.rb +102 -0
  72. data/test/ft_64_clone.rb +69 -0
  73. data/test/ft_65_stringlaunch.rb +61 -0
  74. data/test/ft_66_subforget.rb +70 -0
  75. data/test/ft_67_schedlaunch.rb +102 -0
  76. data/test/ft_68_ifparticipant.rb +70 -0
  77. data/test/ft_69_cancelmissing.rb +49 -0
  78. data/test/ft_6_lambda.rb +23 -3
  79. data/test/ft_70_lookupvar.rb +55 -0
  80. data/test/ft_7_lose.rb +1 -1
  81. data/test/ft_tests.rb +10 -1
  82. data/test/hparticipant_test.rb +6 -6
  83. data/test/param_test.rb +1 -1
  84. data/test/{rake_test.rb → rake_ltest.rb} +9 -2
  85. data/test/rake_qtest.rb +3 -1
  86. data/test/raw_prog_test.rb +11 -3
  87. data/test/restart_sleep_test.rb +44 -6
  88. data/test/ruby_procdef_test.rb +129 -0
  89. data/test/rutest_utils.rb +1 -0
  90. data/test/sec_test.rb +3 -3
  91. metadata +19 -4
@@ -0,0 +1,122 @@
1
+
2
+ #
3
+ # Testing OpenWFEru
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+
8
+ require 'flowtestbase'
9
+ require 'openwfe/def'
10
+ require 'openwfe/worklist/storeparticipant'
11
+
12
+ include OpenWFE
13
+
14
+
15
+ class FlowTest63 < Test::Unit::TestCase
16
+ include FlowTestBase
17
+
18
+ #def setup
19
+ #end
20
+
21
+ #def teardown
22
+ #end
23
+
24
+
25
+ #
26
+ # Test 0
27
+ #
28
+
29
+ class Test0 < ProcessDefinition
30
+ sequence do
31
+ participant :alpha
32
+ _print "done."
33
+ end
34
+ end
35
+
36
+ #def xxxx_0
37
+ def test_0
38
+
39
+ #log_level_to_debug
40
+
41
+ sa = @engine.register_participant :alpha, OpenWFE::HashParticipant
42
+
43
+ fei = @engine.launch Test0
44
+
45
+ sleep 0.200
46
+
47
+ assert_equal(
48
+ @engine.process_status(fei.wfid).expressions[0].fei.wfid,
49
+ fei.wfid)
50
+ #puts @engine.process_status(fei.wfid)
51
+ #puts @engine.list_process_status
52
+
53
+ assert ! @engine.process_status(fei.wfid).paused?
54
+
55
+ @engine.pause_process fei.workflow_instance_id
56
+
57
+ assert @engine.process_status(fei.wfid).paused?
58
+
59
+ hp = @engine.get_participant :alpha
60
+ wi = hp.first_workitem
61
+ hp.forward wi
62
+
63
+ sleep 0.200
64
+
65
+ assert_equal @engine.process_status(fei.wfid).errors.size, 1
66
+ assert_equal @tracer.to_s, ""
67
+
68
+ @engine.resume_process fei.workflow_instance_id
69
+
70
+ ps = @engine.process_status fei.wfid
71
+ #puts ps
72
+ assert_equal ps.errors.size, 0
73
+ assert ! ps.paused?
74
+
75
+ sleep 0.200
76
+
77
+ assert_nil @engine.process_status(fei.wfid)
78
+ assert_equal @tracer.to_s, "done."
79
+ end
80
+
81
+
82
+ #
83
+ # Test 1
84
+ #
85
+
86
+ class Test1 < ProcessDefinition
87
+ sequence do
88
+ participant :alpha
89
+ _print "done."
90
+ end
91
+ end
92
+
93
+ #def xxxx_1
94
+ def test_1
95
+
96
+ #log_level_to_debug
97
+
98
+ sa = @engine.register_participant :alpha, OpenWFE::NullParticipant
99
+
100
+ fei = @engine.launch Test1
101
+
102
+ sleep 0.200
103
+
104
+ assert ! @engine.process_status(fei.wfid).paused?
105
+
106
+ @engine.pause_process fei.wfid
107
+
108
+ sleep 0.200
109
+
110
+ assert @engine.process_status(fei.wfid).paused?
111
+
112
+ @engine.resume_process fei.wfid
113
+
114
+ assert ! @engine.process_status(fei.wfid).paused?
115
+
116
+ @engine.cancel_process fei.wfid
117
+
118
+ sleep 0.200
119
+ end
120
+
121
+ end
122
+
@@ -0,0 +1,102 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+
8
+ require 'openwfe/def'
9
+
10
+ require 'flowtestbase'
11
+
12
+
13
+ class FlowTest64a < Test::Unit::TestCase
14
+ include FlowTestBase
15
+
16
+ #def teardown
17
+ #end
18
+
19
+ #def setup
20
+ #end
21
+
22
+
23
+ #
24
+ # TEST 0
25
+
26
+ class Test0 < ProcessDefinition
27
+ sequence do
28
+ participant :bravo
29
+ participant :abracadabra
30
+ end
31
+ end
32
+
33
+ #def xxxx_0
34
+ def test_0
35
+
36
+ @engine.register_participant "a.*" do |workitem|
37
+ @tracer << workitem.participant_name
38
+ @tracer << "\n"
39
+ end
40
+
41
+ @engine.register_participant :bravo, AliasParticipant.new("alpha")
42
+
43
+ dotest(Test0, "alpha\nabracadabra")
44
+ end
45
+
46
+
47
+ #
48
+ # TEST 1
49
+
50
+ class Test1 < ProcessDefinition
51
+ sequence do
52
+ set :v => "toto", :val => "elvis"
53
+ toto
54
+ end
55
+ end
56
+
57
+ def test_1
58
+
59
+ #log_level_to_debug
60
+
61
+ @engine.register_participant "elvis" do
62
+ @tracer << "sivle"
63
+ end
64
+
65
+ dotest(Test1, "sivle")
66
+ end
67
+
68
+
69
+ #
70
+ # TEST 2
71
+
72
+ class Test2 < ProcessDefinition
73
+
74
+ #
75
+ # some aliases
76
+
77
+ set :v => "alice", :val => "elvis"
78
+ set :v => "bob", :val => "elvis"
79
+
80
+ #
81
+ # the body of the process
82
+
83
+ sequence do
84
+ alice
85
+ bob
86
+ end
87
+ end
88
+
89
+ def test_2
90
+
91
+ #log_level_to_debug
92
+
93
+ @engine.register_participant "elvis" do |workitem|
94
+ @tracer << workitem.fei.expression_id
95
+ @tracer << "\n"
96
+ end
97
+
98
+ dotest(Test2, "0.2.0\n0.2.1")
99
+ end
100
+
101
+ end
102
+
@@ -0,0 +1,69 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+
8
+ require 'openwfe/def'
9
+
10
+ require 'flowtestbase'
11
+
12
+
13
+ class FlowTest64 < Test::Unit::TestCase
14
+ include FlowTestBase
15
+
16
+ #def teardown
17
+ #end
18
+
19
+ #def setup
20
+ #end
21
+
22
+
23
+ #
24
+ # TEST 0
25
+
26
+ class Box
27
+
28
+ attr_reader :content
29
+
30
+ def initialize (content)
31
+ @content = content
32
+ end
33
+ end
34
+
35
+ class Test0 < ProcessDefinition
36
+ sequence do
37
+ participant :alpha
38
+ participant :bravo
39
+ _print "ok"
40
+ end
41
+ end
42
+
43
+ #def xxxx_0
44
+ def test_0
45
+
46
+ box1 = nil
47
+
48
+ @engine.register_participant :alpha do |workitem|
49
+ # nothing
50
+ end
51
+
52
+ @engine.register_participant :bravo do |workitem|
53
+
54
+ box1 = OpenWFE::fulldup(workitem.box)
55
+ end
56
+
57
+ box0 = Box.new("books")
58
+
59
+ li = LaunchItem.new(Test0)
60
+ li.box = box0
61
+
62
+ dotest(li, "ok")
63
+
64
+ assert_equal box1.content, "books"
65
+ assert_not_equal box1.object_id, box0.object_id
66
+ end
67
+
68
+ end
69
+
@@ -0,0 +1,61 @@
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 FlowTest65 < 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
+ TEST0 = """
29
+ class Test0 < ProcessDefinition
30
+ _print 'ok.'
31
+ end
32
+ """.strip
33
+
34
+ #def xxxx_0
35
+ def test_0
36
+ @engine.launch(TEST0)
37
+ sleep 0.200
38
+ assert_equal @tracer.to_s, "ok."
39
+ end
40
+
41
+
42
+ #
43
+ # Test 1
44
+ #
45
+
46
+ TEST1 = """
47
+ <process-definition name='65_1' revision='0.1'>
48
+ <print>ok.</print>
49
+ </process-definition>
50
+ """.strip
51
+
52
+ #def xxxx_1
53
+ def test_1
54
+
55
+ @engine.launch(TEST1)
56
+ sleep 0.200
57
+ assert_equal @tracer.to_s, "ok."
58
+ end
59
+
60
+ end
61
+
@@ -0,0 +1,70 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+ # Mon Oct 9 22:19:44 JST 2006
8
+ #
9
+
10
+ require 'openwfe/def'
11
+
12
+ require 'flowtestbase'
13
+
14
+
15
+ class FlowTest66 < Test::Unit::TestCase
16
+ include FlowTestBase
17
+
18
+ #def teardown
19
+ #end
20
+
21
+ #def setup
22
+ #end
23
+
24
+ #
25
+ # TEST 0
26
+
27
+ class Test0 < ProcessDefinition
28
+ sequence do
29
+ subproc :forget => true
30
+ _print "main done."
31
+ end
32
+ process_definition :name => :subproc do
33
+ sequence do
34
+ _print "sub done."
35
+ end
36
+ end
37
+ end
38
+
39
+ def test_0
40
+
41
+ #log_level_to_debug
42
+
43
+ dotest(Test0, "main done.\nsub done.", 0.600)
44
+ end
45
+
46
+
47
+ #
48
+ # TEST 1
49
+
50
+ class Test1 < ProcessDefinition
51
+ sequence do
52
+ subproc
53
+ _print "main done."
54
+ end
55
+ process_definition :name => :subproc do
56
+ sequence do
57
+ _print "sub done."
58
+ end
59
+ end
60
+ end
61
+
62
+ def test_1
63
+
64
+ #log_level_to_debug
65
+
66
+ dotest(Test1, "sub done.\nmain done.")
67
+ end
68
+
69
+ end
70
+
@@ -0,0 +1,102 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+ # Tue Sep 11 08:48:18 JST 2007
8
+ #
9
+
10
+ require 'openwfe/def'
11
+
12
+ require 'flowtestbase'
13
+
14
+
15
+ class FlowTest67 < Test::Unit::TestCase
16
+ include FlowTestBase
17
+
18
+ #def teardown
19
+ #end
20
+
21
+ #def setup
22
+ #end
23
+
24
+ #
25
+ # TEST 0
26
+
27
+ class Test0 < ProcessDefinition
28
+ _print "hell0"
29
+ end
30
+
31
+ def test_0
32
+
33
+ #log_level_to_debug
34
+
35
+ @engine.launch(Test0, :in => "2s")
36
+
37
+ sleep 0.200
38
+
39
+ assert_equal @tracer.to_s, ""
40
+
41
+ sleep 2.500
42
+
43
+ assert_equal @tracer.to_s, "hell0"
44
+ end
45
+
46
+ #
47
+ # TEST 1
48
+
49
+ #def xxxx_1
50
+ def test_1
51
+
52
+ #log_level_to_debug
53
+
54
+ t = Time.now
55
+
56
+ @engine.launch(Test0, :at => (t + 2).to_s)
57
+
58
+ sleep 0.200
59
+
60
+ assert_equal @tracer.to_s, ""
61
+
62
+ sleep 2.500
63
+
64
+ assert_equal @tracer.to_s, "hell0"
65
+ end
66
+
67
+ #
68
+ # TEST 2
69
+
70
+ #def xxxx_2
71
+ def test_2
72
+
73
+ log_level_to_debug
74
+
75
+ @engine.launch(Test0, :cron => "* * * * *")
76
+
77
+ assert_equal @tracer.to_s, ""
78
+
79
+ sleep 130
80
+
81
+ assert_equal @tracer.to_s, "hell0\nhell0"
82
+ end
83
+
84
+ #
85
+ # TEST 3
86
+
87
+ #def xxxx_3
88
+ def test_3
89
+
90
+ log_level_to_debug
91
+
92
+ @engine.launch(Test0, :every => "2s")
93
+
94
+ assert_equal @tracer.to_s, ""
95
+
96
+ sleep 5
97
+
98
+ assert_equal @tracer.to_s, "hell0\nhell0"
99
+ end
100
+
101
+ end
102
+
@@ -0,0 +1,70 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+ # Tue Sep 11 21:32:10 JST 2007
8
+ #
9
+
10
+ require 'openwfe/def'
11
+
12
+ require 'flowtestbase'
13
+
14
+
15
+ class FlowTest68 < Test::Unit::TestCase
16
+ include FlowTestBase
17
+
18
+ #def teardown
19
+ #end
20
+
21
+ #def setup
22
+ #end
23
+
24
+ #
25
+ # TEST 0
26
+
27
+ class Test0 < ProcessDefinition
28
+ sequence do
29
+ alpha :id => 0
30
+ alpha :id => 1, :if => "${r:$count > 1}"
31
+ alpha :id => 2
32
+ alpha :id => 3, :if => "${r:$count > 1}"
33
+ end
34
+ end
35
+
36
+ def test_0
37
+
38
+ #log_level_to_debug
39
+
40
+ $count = 0
41
+
42
+ @engine.register_participant :alpha do |workitem|
43
+ @tracer << "#{workitem.params["id"]} #{$count}\n"
44
+ $count += 1
45
+ end
46
+
47
+ dotest(Test0, "0 0\n2 1\n3 2")
48
+ end
49
+
50
+ #
51
+ # TEST 1
52
+
53
+ class Test1 < ProcessDefinition
54
+ sequence do
55
+ subp :id => 0
56
+ subp :id => 1, :unless => "true"
57
+ subp :id => 2
58
+ end
59
+ process_definition :name => "subp" do
60
+ _print "${id}"
61
+ end
62
+ end
63
+
64
+ def test_0
65
+
66
+ dotest(Test1, "0\n2")
67
+ end
68
+
69
+ end
70
+
@@ -0,0 +1,49 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+ # Thu Sep 13 09:50:29 JST 2007
8
+ #
9
+
10
+ require 'openwfe/def'
11
+
12
+ require 'flowtestbase'
13
+
14
+
15
+ class FlowTest69 < Test::Unit::TestCase
16
+ include FlowTestBase
17
+
18
+ #def teardown
19
+ #end
20
+
21
+ #def setup
22
+ #end
23
+
24
+ #
25
+ # TEST 0
26
+
27
+ class Test0 < ProcessDefinition
28
+ #__bravo
29
+ participant :ref => "__bravo"
30
+ end
31
+
32
+ def test_0
33
+
34
+ #log_level_to_debug
35
+
36
+ fei = @engine.launch(Test0)
37
+
38
+ sleep 0.200
39
+
40
+ assert @engine.process_status(fei.wfid).errors.size > 0
41
+
42
+ @engine.cancel_process fei
43
+
44
+ assert_nil @engine.process_status(fei.wfid)
45
+ assert_equal @engine.list_process_status, {}
46
+ end
47
+
48
+ end
49
+
data/test/ft_6_lambda.rb CHANGED
@@ -21,8 +21,8 @@ class FlowTest6 < Test::Unit::TestCase
21
21
  #end
22
22
 
23
23
  def test_lambda_0
24
- #def xxxx_lambda_0
25
- dotest(\
24
+
25
+ dotest(
26
26
  '''<process-definition name="lambda_0" revision="0">
27
27
  <sequence>
28
28
  <set variable="inside1">
@@ -35,7 +35,27 @@ class FlowTest6 < Test::Unit::TestCase
35
35
  <print>over</print>
36
36
  </sequence>
37
37
  </process-definition>''', """bonjour world
38
- over""", 3)
38
+ over""")
39
+ end
40
+
41
+ #
42
+ # TEST 1
43
+
44
+ class Test1 < OpenWFE::ProcessDefinition
45
+ sequence do
46
+ _set :v => "inside1" do
47
+ process_definition do
48
+ _print "hello ${name}"
49
+ end
50
+ end
51
+ inside1 :name => "mundo"
52
+ _print "done."
53
+ end
54
+ end
55
+
56
+ def test_1
57
+
58
+ dotest(Test1, "hello mundo\ndone.")
39
59
  end
40
60
 
41
61
  end