openwferu 0.9.6 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/bin/validate-workflow.rb +1 -0
  2. data/examples/openwferu.rb +57 -0
  3. data/lib/openwfe/contextual.rb +2 -0
  4. data/lib/openwfe/engine/engine.rb +109 -17
  5. data/lib/openwfe/engine/file_persisted_engine.rb +11 -1
  6. data/lib/openwfe/exceptions.rb +53 -0
  7. data/lib/openwfe/expool/expressionpool.rb +195 -137
  8. data/lib/openwfe/expool/journal.rb +175 -0
  9. data/lib/openwfe/expool/journal_replay.rb +121 -0
  10. data/lib/openwfe/expool/wfidgen.rb +318 -0
  11. data/lib/openwfe/expool/yamlexpstorage.rb +23 -54
  12. data/lib/openwfe/expressions/condition.rb +14 -2
  13. data/lib/openwfe/expressions/environment.rb +47 -37
  14. data/lib/openwfe/expressions/expressionmap.rb +73 -67
  15. data/lib/openwfe/expressions/fe_cancel.rb +2 -0
  16. data/lib/openwfe/expressions/fe_concurrence.rb +14 -1
  17. data/lib/openwfe/expressions/fe_cron.rb +186 -0
  18. data/lib/openwfe/expressions/fe_cursor.rb +6 -0
  19. data/lib/openwfe/expressions/fe_define.rb +2 -0
  20. data/lib/openwfe/expressions/fe_fqv.rb +2 -0
  21. data/lib/openwfe/expressions/fe_iterator.rb +2 -0
  22. data/lib/openwfe/expressions/fe_losfor.rb +4 -0
  23. data/lib/openwfe/expressions/fe_misc.rb +16 -1
  24. data/lib/openwfe/expressions/fe_participant.rb +7 -0
  25. data/lib/openwfe/expressions/fe_raw.rb +125 -8
  26. data/lib/openwfe/expressions/fe_sequence.rb +2 -0
  27. data/lib/openwfe/expressions/fe_sleep.rb +213 -0
  28. data/lib/openwfe/expressions/fe_subprocess.rb +2 -0
  29. data/lib/openwfe/expressions/fe_value.rb +8 -0
  30. data/lib/openwfe/expressions/fe_when.rb +205 -0
  31. data/lib/openwfe/expressions/flowexpression.rb +62 -9
  32. data/lib/openwfe/expressions/raw_prog.rb +147 -45
  33. data/lib/openwfe/expressions/raw_xml.rb +50 -5
  34. data/lib/openwfe/expressions/timeout.rb +32 -5
  35. data/lib/openwfe/flowexpressionid.rb +6 -4
  36. data/lib/openwfe/listeners/listeners.rb +4 -3
  37. data/lib/openwfe/listeners/socketlisteners.rb +30 -4
  38. data/lib/openwfe/logging.rb +9 -1
  39. data/lib/openwfe/participants/participants.rb +9 -9
  40. data/lib/openwfe/participants/socketparticipants.rb +41 -8
  41. data/lib/openwfe/rudefinitions.rb +21 -0
  42. data/lib/openwfe/storage/yamlextras.rb +115 -0
  43. data/lib/openwfe/storage/yamlfilestorage.rb +23 -4
  44. data/lib/openwfe/util/csvtable.rb +76 -6
  45. data/lib/openwfe/util/dollar.rb +5 -0
  46. data/lib/openwfe/util/kotoba.rb +236 -0
  47. data/lib/openwfe/util/ometa.rb +64 -0
  48. data/lib/openwfe/util/safe.rb +2 -0
  49. data/lib/openwfe/util/scheduler.rb +58 -11
  50. data/lib/openwfe/utils.rb +27 -0
  51. data/lib/openwfe/version.rb +1 -1
  52. data/lib/openwfe/worklist/storeparticipant.rb +2 -3
  53. data/test/csv_test.rb +57 -0
  54. data/test/expmap_test.rb +54 -0
  55. data/test/file_persistence_test.rb +9 -9
  56. data/test/flowtestbase.rb +19 -1
  57. data/test/ft_11_ppd.rb +18 -0
  58. data/test/ft_15_iterator.rb +27 -0
  59. data/test/ft_23b_when.rb +2 -2
  60. data/test/ft_27_getflowpos.rb +19 -9
  61. data/test/ft_29_httprb.rb +31 -2
  62. data/test/ft_30_socketlistener.rb +3 -5
  63. data/test/ft_31_flowname.rb +40 -0
  64. data/test/ft_32_journal.rb +60 -0
  65. data/test/ft_33_description.rb +100 -0
  66. data/test/ft_34_cancelwfid.rb +69 -0
  67. data/test/ft_35_localdefs.rb +63 -0
  68. data/test/ft_7_lose.rb +0 -61
  69. data/test/ft_7b_lose.rb +85 -0
  70. data/test/ft_tests.rb +49 -0
  71. data/test/kotoba_test.rb +72 -0
  72. data/test/misc_test.rb +4 -12
  73. data/test/param_test.rb +284 -0
  74. data/test/rake_qtest.rb +13 -35
  75. data/test/rake_test.rb +2 -3
  76. data/test/raw_prog_test.rb +9 -7
  77. data/test/restart_cron_test.rb +9 -5
  78. data/test/restart_sleep_test.rb +104 -0
  79. data/test/restart_tests.rb +15 -0
  80. data/test/restart_when_test.rb +105 -0
  81. data/test/scheduler_test.rb +2 -2
  82. data/test/sec_test.rb +163 -0
  83. data/test/wfid_test.rb +69 -13
  84. metadata +31 -16
  85. data/lib/openwfe/expressions/fe_time.rb +0 -454
  86. data/test/restart_test.rb +0 -79
@@ -13,6 +13,8 @@ require 'openwfe/expressions/raw_prog'
13
13
 
14
14
  class RawProgTest < Test::Unit::TestCase
15
15
 
16
+ DEBUG = false
17
+
16
18
  #def setup
17
19
  #end
18
20
 
@@ -47,8 +49,7 @@ class RawProgTest < Test::Unit::TestCase
47
49
 
48
50
  s = TestDefinition.new().make.to_s
49
51
 
50
- #puts
51
- #puts s
52
+ puts s if DEBUG
52
53
 
53
54
  assert \
54
55
  s == XML_DEF,
@@ -59,8 +60,7 @@ class RawProgTest < Test::Unit::TestCase
59
60
 
60
61
  s = TestDefinition.do_make.to_s
61
62
 
62
- #puts
63
- #puts s
63
+ puts s if DEBUG
64
64
 
65
65
  assert \
66
66
  s == XML_DEF,
@@ -89,7 +89,7 @@ class RawProgTest < Test::Unit::TestCase
89
89
  pdef = pg.my_proc
90
90
  s = pdef.to_s
91
91
 
92
- #puts s
92
+ puts s if DEBUG
93
93
 
94
94
  assert \
95
95
  s == XML_DEF,
@@ -125,7 +125,8 @@ class RawProgTest < Test::Unit::TestCase
125
125
  def test_prog_2
126
126
 
127
127
  s = TestDefinition2.do_make.to_s
128
- #puts s
128
+
129
+ puts s if DEBUG
129
130
 
130
131
  assert \
131
132
  s == XML_DEF2,
@@ -170,7 +171,8 @@ end""".strip
170
171
  def test_prog_3
171
172
 
172
173
  s = TestDefinition3.do_make.to_s
173
- #puts s
174
+
175
+ puts s if DEBUG
174
176
 
175
177
  assert \
176
178
  s == XML_DEF3,
@@ -17,7 +17,7 @@ require 'rutest_utils'
17
17
  include OpenWFE
18
18
 
19
19
 
20
- class RestartTest < Test::Unit::TestCase
20
+ class RestartCronTest < Test::Unit::TestCase
21
21
 
22
22
  #def setup
23
23
  # @engine = $WORKFLOW_ENGINE_CLASS.new()
@@ -30,7 +30,7 @@ class RestartTest < Test::Unit::TestCase
30
30
  def make
31
31
  process_definition :name => "rs0", :revision => "0" do
32
32
  cron :tab => "* * * * *", :name => "//cron" do
33
- participant :cron_event
33
+ participant :cron_event_restart
34
34
  end
35
35
  end
36
36
  end
@@ -43,11 +43,11 @@ class RestartTest < Test::Unit::TestCase
43
43
  count = 0
44
44
 
45
45
  participant = lambda do
46
- #puts "______________________ :cron_event"
46
+ #puts "______________________ :cron_event_restart"
47
47
  count = count + 1
48
48
  end
49
49
 
50
- engine.register_participant(:cron_event, &participant)
50
+ engine.register_participant(:cron_event_restart, &participant)
51
51
 
52
52
  engine.launch(RestartDefinition0)
53
53
 
@@ -60,7 +60,11 @@ class RestartTest < Test::Unit::TestCase
60
60
  old_engine = engine
61
61
  engine = FilePersistedEngine.new
62
62
 
63
- engine.register_participant(:cron_event, &participant)
63
+ engine.register_participant(:cron_event_restart, &participant)
64
+
65
+ engine.reload
66
+ #
67
+ # very important
64
68
 
65
69
  sleep(60)
66
70
 
@@ -0,0 +1,104 @@
1
+ #
2
+ # Testing OpenWFE
3
+ #
4
+ # John Mettraux at openwfe.org
5
+ #
6
+ # Sun Oct 29 15:41:44 JST 2006
7
+ #
8
+ # somewhere between Philippina and the Japan
9
+ #
10
+
11
+ require 'test/unit'
12
+
13
+ require 'openwfe/workitem'
14
+ require 'openwfe/engine/file_persisted_engine'
15
+ require 'openwfe/expressions/raw_prog'
16
+
17
+ require 'rutest_utils'
18
+
19
+ include OpenWFE
20
+
21
+
22
+ class RestartSleepTest < Test::Unit::TestCase
23
+
24
+ #def setup
25
+ # @engine = $WORKFLOW_ENGINE_CLASS.new()
26
+ #end
27
+
28
+ #def teardown
29
+ #end
30
+
31
+ class RestartDefinition0 < ProcessDefinition
32
+ def make
33
+ process_definition :name => "rs0", :revision => "0" do
34
+ sequence do
35
+ _sleep :for => "10s"
36
+ _print "after"
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ def test_restart_0
43
+
44
+ dotest FilePersistedEngine
45
+ end
46
+
47
+ def test_restart_1
48
+
49
+ dotest CachedFilePersistedEngine
50
+ end
51
+
52
+ protected
53
+
54
+ def dotest (engine_class)
55
+
56
+ #require 'fileutils'
57
+ #FileUtils.remove_dir "work" if File.exist? "work"
58
+
59
+ engine = new_engine(engine_class)
60
+
61
+ li = LaunchItem.new(RestartDefinition0)
62
+
63
+ engine.launch(li)
64
+
65
+ sleep(1)
66
+
67
+ engine.stop()
68
+
69
+ $OWFE_LOG.warn "stopped the engine"
70
+
71
+ old_engine = engine
72
+ engine = new_engine(engine_class)
73
+
74
+ $OWFE_LOG.warn "started the new engine"
75
+
76
+ sleep(11)
77
+ #sleep(21)
78
+
79
+ s_old = old_engine.application_context["__tracer"].to_s
80
+ s_now = engine.application_context["__tracer"].to_s
81
+
82
+ #puts "__ s_old >>>#{s_old}<<<"
83
+ #puts "__ s_now >>>#{s_now}<<<"
84
+
85
+ assert \
86
+ (s_old == "" and s_now == "after"),
87
+ "old : '#{s_old}' / new : '#{s_now}' BAD for #{engine_class}"
88
+ end
89
+
90
+ def new_engine (engine_class)
91
+
92
+ engine = engine_class.new()
93
+
94
+ tracer = Tracer.new
95
+ engine.application_context["__tracer"] = tracer
96
+
97
+ #engine.reschedule
98
+ engine.reload
99
+
100
+ engine
101
+ end
102
+
103
+ end
104
+
@@ -0,0 +1,15 @@
1
+ #
2
+ # Testing OpenWFE
3
+ #
4
+ # John Mettraux at openwfe.org
5
+ #
6
+ # Wed Mar 14 15:40:33 JST 2007
7
+ # a clear view on the Fuji this morning
8
+ #
9
+
10
+ # just the restart tests
11
+
12
+ require 'restart_sleep_test'
13
+ require 'restart_cron_test'
14
+ require 'restart_when_test'
15
+
@@ -0,0 +1,105 @@
1
+ #
2
+ # Testing OpenWFE
3
+ #
4
+ # John Mettraux at openwfe.org
5
+ #
6
+ # Sun Oct 29 15:41:44 JST 2006
7
+ #
8
+ # somewhere between Philippina and the Japan
9
+ #
10
+
11
+ require 'test/unit'
12
+
13
+ require 'openwfe/workitem'
14
+ require 'openwfe/engine/file_persisted_engine'
15
+ require 'openwfe/expressions/raw_prog'
16
+
17
+ require 'rutest_utils'
18
+
19
+ include OpenWFE
20
+
21
+
22
+ class RestartWhenTest < Test::Unit::TestCase
23
+
24
+ #def setup
25
+ # @engine = $WORKFLOW_ENGINE_CLASS.new()
26
+ #end
27
+
28
+ #def teardown
29
+ #end
30
+
31
+ class RestartWhenDefinition0 < ProcessDefinition
32
+ def make
33
+ concurrence do
34
+ _when :test => "${v:done} == true", :frequency => "1s" do
35
+ #_when :test => "${v:done} == true" do
36
+ _print "when triggered"
37
+ end
38
+ sequence do
39
+ _sleep "2s"
40
+ _set :variable => "done", :value => "true"
41
+ _print "done"
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ def test_restart_0
48
+ dotest FilePersistedEngine
49
+ end
50
+
51
+ def test_restart_1
52
+ dotest CachedFilePersistedEngine
53
+ end
54
+
55
+ protected
56
+
57
+ def dotest (engine_class)
58
+
59
+ engine = new_engine(engine_class)
60
+
61
+ li = LaunchItem.new(RestartWhenDefinition0)
62
+
63
+ engine.launch(li)
64
+
65
+ sleep(1)
66
+
67
+ engine.stop()
68
+
69
+ $OWFE_LOG.warn "stopped the engine"
70
+
71
+ old_engine = engine
72
+ engine = new_engine(engine_class)
73
+
74
+ $OWFE_LOG.warn "started the new engine"
75
+
76
+ sleep(3)
77
+
78
+ s_old = old_engine.application_context["__tracer"].to_s
79
+ s_now = engine.application_context["__tracer"].to_s
80
+
81
+ #uts "__ s_old >>>#{s_old}<<<"
82
+ #uts "__ s_now >>>#{s_now}<<<"
83
+
84
+ assert \
85
+ (s_old == "" and s_now == "done\nwhen triggered"),
86
+ "old : '#{s_old}' / new : '#{s_now}' BAD for #{engine_class}"
87
+
88
+ engine.stop
89
+ end
90
+
91
+ def new_engine (engine_class)
92
+
93
+ engine = engine_class.new()
94
+
95
+ tracer = Tracer.new
96
+ engine.application_context["__tracer"] = tracer
97
+
98
+ #engine.reschedule
99
+ engine.reload
100
+
101
+ engine
102
+ end
103
+
104
+ end
105
+
@@ -144,13 +144,13 @@ class SchedulerTest < Test::Unit::TestCase
144
144
 
145
145
  es = EverySchedulable.new
146
146
 
147
- scheduler.schedule_every("500", es, nil)
147
+ job_id = scheduler.schedule_every("500", es, nil)
148
148
 
149
149
  sleep(3.2)
150
150
 
151
151
  assert_equal es.count, 6
152
152
 
153
- scheduler.unschedule(es.job_id)
153
+ scheduler.unschedule(job_id)
154
154
 
155
155
  sleep(1)
156
156
 
data/test/sec_test.rb ADDED
@@ -0,0 +1,163 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+ # Tue Jan 2 13:14:37 JST 2007
8
+ #
9
+
10
+ require 'test/unit'
11
+
12
+ require 'openwfe/workitem'
13
+ require 'openwfe/engine/engine'
14
+
15
+
16
+ class SecTest < Test::Unit::TestCase
17
+
18
+ #def setup
19
+ #end
20
+
21
+ #def teardown
22
+ #end
23
+
24
+ #def xxxx_sec_0
25
+ def test_sec_0
26
+
27
+ engine = OpenWFE::Engine.new
28
+
29
+ engine.ac[:ruby_eval_allowed] = true
30
+
31
+ def0 = \
32
+ '''<process-definition name="" revision="0">
33
+ <sequence>
34
+ <!--
35
+ <reval>puts "ok"</reval>
36
+ <reval>self.ac[:ruby_eval_allowed] = false</reval>
37
+ <reval>puts self.ac[:ruby_eval_allowed]</reval>
38
+ <reval>puts "ok after"</reval>
39
+ -->
40
+ <reval>File.open("nada.txt") do |f| f.write("nada"); end</reval>
41
+ </sequence>
42
+ </process-definition>'''
43
+
44
+ e = dotest(engine, def0)
45
+
46
+ assert_not_nil e
47
+ assert_equal e.to_s, "Insecure operation - initialize"
48
+
49
+ def1 = \
50
+ '''<process-definition name="" revision="0">
51
+ <sequence>
52
+ <reval>
53
+ class Object
54
+ def my_name
55
+ "toto"
56
+ end
57
+ end
58
+ "stringobject".my_name
59
+ </reval>
60
+ </sequence>
61
+ </process-definition>'''
62
+
63
+ e = dotest(engine, def1)
64
+
65
+ assert_not_nil e
66
+
67
+ assert_equal \
68
+ e.to_s, "undefined method `my_name' for \"stringobject\":String"
69
+
70
+ def2 = \
71
+ '''<process-definition name="" revision="0">
72
+ <sequence>
73
+ <reval>
74
+ <![CDATA[
75
+ class << self.ac["engine"]
76
+ def is_secure?
77
+ true
78
+ end
79
+ end
80
+ self.ac["engine"].is_secure?
81
+ ]]>
82
+ </reval>
83
+ </sequence>
84
+ </process-definition>'''
85
+
86
+ e = dotest(engine, def2)
87
+
88
+ assert_nil e
89
+ #
90
+ # I don't like that
91
+
92
+ def3 = \
93
+ '''<process-definition name="" revision="0">
94
+ <sequence>
95
+ <reval>self.ac[:ruby_eval_allowed] = false</reval>
96
+ <reval>puts self.ac[:ruby_eval_allowed]</reval>
97
+ </sequence>
98
+ </process-definition>'''
99
+
100
+ e = dotest(engine, def3)
101
+
102
+ #puts e
103
+
104
+ assert_not_nil e
105
+
106
+ assert_equal \
107
+ e.to_s, "evaluation of ruby code is not allowed"
108
+
109
+ engine.stop
110
+ end
111
+
112
+ def test_sec_1
113
+
114
+ value = nil
115
+
116
+ engine = OpenWFE::Engine.new
117
+
118
+ engine.register_participant(:toto) do |workitem|
119
+ value = "#{workitem.attributes.size}_#{workitem.f}"
120
+ end
121
+
122
+ def0 = \
123
+ '''<process-definition name="" revision="0">
124
+ <sequence>
125
+ <set field="f" value="${ruby:5*7}" />
126
+ <toto/>
127
+ </sequence>
128
+ </process-definition>'''
129
+
130
+ engine.launch(OpenWFE::LaunchItem.new(def0))
131
+
132
+ assert_equal value, "3_"
133
+
134
+ engine.ac[:ruby_eval_allowed] = true
135
+
136
+ engine.launch(OpenWFE::LaunchItem.new(def0))
137
+
138
+ assert_equal value, "3_35"
139
+
140
+ engine.stop
141
+ end
142
+
143
+ protected
144
+
145
+ def dotest (engine, def_or_li)
146
+ li = if def_or_li.is_a?(OpenWFE::LaunchItem)
147
+ def_or_li
148
+ else
149
+ OpenWFE::LaunchItem.new(def_or_li)
150
+ end
151
+
152
+ e = nil
153
+
154
+ begin
155
+ engine.launch(li)
156
+ rescue Exception => e
157
+ end
158
+
159
+ e
160
+ end
161
+
162
+ end
163
+
data/test/wfid_test.rb CHANGED
@@ -14,7 +14,7 @@
14
14
  require 'test/unit'
15
15
 
16
16
  require 'openwfe/utils'
17
- require 'openwfe/expool/expressionpool'
17
+ require 'openwfe/expool/wfidgen'
18
18
 
19
19
 
20
20
  #
@@ -30,25 +30,20 @@ class WfidTest < Test::Unit::TestCase
30
30
 
31
31
  def test_wfid_0
32
32
 
33
- expool = OpenWFE::ExpressionPool.new("expool", nil)
33
+ gen = OpenWFE::DefaultWfidGenerator.new("wfidgen", nil)
34
34
 
35
- class << expool
36
- public :new_workflow_instance_id
37
- end
35
+ thread = nil
38
36
 
39
- n = 21
37
+ n = 777
38
+ #n = 1000000
40
39
 
41
40
  map = {}
42
41
 
43
42
  n.times do |i|
44
43
 
45
- Thread.new do
44
+ thread = Thread.new do
46
45
 
47
- #begin
48
- wfid = expool.new_workflow_instance_id()
49
- #rescue Exception => e
50
- # OpenWFE::die(e.to_s)
51
- #end
46
+ wfid = gen.generate
52
47
 
53
48
  #puts wfid
54
49
 
@@ -56,13 +51,74 @@ class WfidTest < Test::Unit::TestCase
56
51
  if map[wfid]
57
52
 
58
53
  map[wfid] = true
54
+
55
+ #puts wfid if i == n-1
59
56
  end
60
57
  end
61
58
 
62
- sleep(2)
59
+ thread.join
60
+
61
+ sleep(0.1)
63
62
  #puts
63
+
64
+ assert_equal map.size, n
64
65
 
65
66
  assert true
66
67
  end
67
68
 
69
+ def test_wfid_1
70
+
71
+ gen = OpenWFE::DefaultWfidGenerator.new("wfidgen", nil)
72
+
73
+ a = %w{ 1 2 3 4 5 }
74
+ s = a.join
75
+
76
+ #a2 = gen.split_wfid(s)
77
+ a2 = OpenWFE::split_wfid(s)
78
+
79
+ assert_equal a, a2
80
+ end
81
+
82
+ def test_wfid_2
83
+
84
+ gen = OpenWFE::UuidWfidGenerator.new("wfidgen", nil)
85
+
86
+ id = gen.generate
87
+
88
+ #puts id
89
+
90
+ #assert_equal gen.split_wfid(id).join, id[0, 8]
91
+ assert_equal OpenWFE::split_wfid(id).join, id[0, 8]
92
+ end
93
+
94
+ def test_kotoba_wfid
95
+
96
+ gen = OpenWFE::KotobaWfidGenerator.new("wfidgen", nil)
97
+
98
+ t = Time.now.gmtime
99
+ kid = gen.generate
100
+
101
+ #puts "now : #{t}"
102
+ #puts "kid : #{kid}"
103
+
104
+ t2 = OpenWFE::KotobaWfidGenerator.to_time(kid)
105
+
106
+ #puts "t2 : #{t2}"
107
+
108
+ assert_equal t.to_s, t2.to_s
109
+
110
+ #t = Time.utc(2007, 03, 20, 23, 59, 59)
111
+ #kid = OpenWFE::KotobaWfidGenerator.from_time(t)
112
+ #puts t
113
+ #puts kid
114
+ #kid = "20070320-nayozumuja"
115
+ #puts OpenWFE::KotobaWfidGenerator.to_time(kid)
116
+ #kid = "20070320-nayozumuje"
117
+ #puts OpenWFE::KotobaWfidGenerator.to_time(kid)
118
+ #kid = "20070320-nayozunuje"
119
+ #puts OpenWFE::KotobaWfidGenerator.to_time(kid)
120
+ #kid = "20070320-nazazunuje"
121
+ #puts OpenWFE::KotobaWfidGenerator.to_time(kid)
122
+ end
123
+
68
124
  end