ruote 0.9.18

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 (291) hide show
  1. data/README.txt +24 -0
  2. data/bin/validate-workflow.rb +89 -0
  3. data/examples/about_state.rb +81 -0
  4. data/examples/bigflow.rb +19 -0
  5. data/examples/csv_weather.rb +23 -0
  6. data/examples/engine_template.rb +247 -0
  7. data/examples/flowtracing.rb +24 -0
  8. data/examples/homeworkreview.rb +68 -0
  9. data/examples/kotoba.rb +22 -0
  10. data/examples/mano_tracker.rb +172 -0
  11. data/examples/openwferu.rb +58 -0
  12. data/examples/quotereporter.rb +157 -0
  13. data/examples/scheduler_cron_usage.rb +48 -0
  14. data/examples/scheduler_usage.rb +56 -0
  15. data/lib/openwfe.rb +41 -0
  16. data/lib/openwfe/contextual.rb +111 -0
  17. data/lib/openwfe/def.rb +46 -0
  18. data/lib/openwfe/engine.rb +37 -0
  19. data/lib/openwfe/engine/engine.rb +756 -0
  20. data/lib/openwfe/engine/expool_methods.rb +172 -0
  21. data/lib/openwfe/engine/file_persisted_engine.rb +105 -0
  22. data/lib/openwfe/engine/participant_methods.rb +133 -0
  23. data/lib/openwfe/engine/status_methods.rb +353 -0
  24. data/lib/openwfe/engine/update_exp_methods.rb +112 -0
  25. data/lib/openwfe/exceptions.rb +51 -0
  26. data/lib/openwfe/expool/errorjournal.rb +476 -0
  27. data/lib/openwfe/expool/expressionpool.rb +1144 -0
  28. data/lib/openwfe/expool/expstorage.rb +403 -0
  29. data/lib/openwfe/expool/history.rb +174 -0
  30. data/lib/openwfe/expool/journal.rb +224 -0
  31. data/lib/openwfe/expool/journal_replay.rb +321 -0
  32. data/lib/openwfe/expool/parser.rb +242 -0
  33. data/lib/openwfe/expool/representation.rb +121 -0
  34. data/lib/openwfe/expool/threadedexpstorage.rb +188 -0
  35. data/lib/openwfe/expool/wfidgen.rb +388 -0
  36. data/lib/openwfe/expool/yamlexpstorage.rb +224 -0
  37. data/lib/openwfe/expressions/condition.rb +244 -0
  38. data/lib/openwfe/expressions/environment.rb +246 -0
  39. data/lib/openwfe/expressions/expressionmap.rb +258 -0
  40. data/lib/openwfe/expressions/fe_cancel.rb +109 -0
  41. data/lib/openwfe/expressions/fe_command.rb +241 -0
  42. data/lib/openwfe/expressions/fe_concurrence.rb +662 -0
  43. data/lib/openwfe/expressions/fe_cron.rb +259 -0
  44. data/lib/openwfe/expressions/fe_cursor.rb +259 -0
  45. data/lib/openwfe/expressions/fe_define.rb +192 -0
  46. data/lib/openwfe/expressions/fe_do.rb +168 -0
  47. data/lib/openwfe/expressions/fe_equals.rb +291 -0
  48. data/lib/openwfe/expressions/fe_filter.rb +129 -0
  49. data/lib/openwfe/expressions/fe_filter_definition.rb +168 -0
  50. data/lib/openwfe/expressions/fe_fqv.rb +250 -0
  51. data/lib/openwfe/expressions/fe_if.rb +303 -0
  52. data/lib/openwfe/expressions/fe_iterator.rb +145 -0
  53. data/lib/openwfe/expressions/fe_listen.rb +371 -0
  54. data/lib/openwfe/expressions/fe_losfor.rb +111 -0
  55. data/lib/openwfe/expressions/fe_misc.rb +421 -0
  56. data/lib/openwfe/expressions/fe_participant.rb +269 -0
  57. data/lib/openwfe/expressions/fe_reserve.rb +212 -0
  58. data/lib/openwfe/expressions/fe_save.rb +274 -0
  59. data/lib/openwfe/expressions/fe_sequence.rb +117 -0
  60. data/lib/openwfe/expressions/fe_set.rb +139 -0
  61. data/lib/openwfe/expressions/fe_sleep.rb +166 -0
  62. data/lib/openwfe/expressions/fe_step.rb +159 -0
  63. data/lib/openwfe/expressions/fe_subprocess.rb +168 -0
  64. data/lib/openwfe/expressions/fe_timeout.rb +127 -0
  65. data/lib/openwfe/expressions/fe_wait.rb +78 -0
  66. data/lib/openwfe/expressions/fe_when.rb +142 -0
  67. data/lib/openwfe/expressions/filter.rb +104 -0
  68. data/lib/openwfe/expressions/flowexpression.rb +847 -0
  69. data/lib/openwfe/expressions/iterator.rb +221 -0
  70. data/lib/openwfe/expressions/merge.rb +84 -0
  71. data/lib/openwfe/expressions/raw.rb +547 -0
  72. data/lib/openwfe/expressions/rprocdef.rb +375 -0
  73. data/lib/openwfe/expressions/time.rb +333 -0
  74. data/lib/openwfe/expressions/timeout.rb +178 -0
  75. data/lib/openwfe/expressions/value.rb +126 -0
  76. data/lib/openwfe/filterdef.rb +259 -0
  77. data/lib/openwfe/flowexpressionid.rb +357 -0
  78. data/lib/openwfe/listeners/listener.rb +97 -0
  79. data/lib/openwfe/listeners/listeners.rb +139 -0
  80. data/lib/openwfe/listeners/socketlisteners.rb +272 -0
  81. data/lib/openwfe/logging.rb +122 -0
  82. data/lib/openwfe/omixins.rb +95 -0
  83. data/lib/openwfe/orest/controlclient.rb +119 -0
  84. data/lib/openwfe/orest/definitions.rb +113 -0
  85. data/lib/openwfe/orest/exception.rb +60 -0
  86. data/lib/openwfe/orest/oldrestservlet.rb +279 -0
  87. data/lib/openwfe/orest/osocket.rb +148 -0
  88. data/lib/openwfe/orest/restclient.rb +176 -0
  89. data/lib/openwfe/orest/workitem.rb +206 -0
  90. data/lib/openwfe/orest/worklistclient.rb +272 -0
  91. data/lib/openwfe/orest/xmlcodec.rb +670 -0
  92. data/lib/openwfe/participants.rb +38 -0
  93. data/lib/openwfe/participants/enoparticipants.rb +230 -0
  94. data/lib/openwfe/participants/participant.rb +141 -0
  95. data/lib/openwfe/participants/participantmap.rb +249 -0
  96. data/lib/openwfe/participants/participants.rb +407 -0
  97. data/lib/openwfe/participants/soapparticipants.rb +135 -0
  98. data/lib/openwfe/participants/socketparticipants.rb +202 -0
  99. data/lib/openwfe/participants/storeparticipants.rb +254 -0
  100. data/lib/openwfe/rudefinitions.rb +130 -0
  101. data/lib/openwfe/service.rb +103 -0
  102. data/lib/openwfe/storage/yamlcustom.rb +106 -0
  103. data/lib/openwfe/storage/yamlfilestorage.rb +245 -0
  104. data/lib/openwfe/tools/flowtracer.rb +81 -0
  105. data/lib/openwfe/util/dollar.rb +217 -0
  106. data/lib/openwfe/util/irb.rb +86 -0
  107. data/lib/openwfe/util/observable.rb +144 -0
  108. data/lib/openwfe/util/ometa.rb +62 -0
  109. data/lib/openwfe/util/workqueue.rb +124 -0
  110. data/lib/openwfe/util/xml.rb +418 -0
  111. data/lib/openwfe/utils.rb +554 -0
  112. data/lib/openwfe/version.rb +37 -0
  113. data/lib/openwfe/workitem.rb +499 -0
  114. data/lib/openwfe/worklist/oldrest.rb +244 -0
  115. data/lib/openwfe/worklist/storelocks.rb +293 -0
  116. data/lib/openwfe/worklist/storeparticipant.rb +44 -0
  117. data/lib/openwfe/worklist/worklist.rb +297 -0
  118. data/test/README.txt +27 -0
  119. data/test/back_0916_test.rb +111 -0
  120. data/test/bm/bm_1_xml_vs_prog.rb +56 -0
  121. data/test/bm/bm_2_step.rb +109 -0
  122. data/test/bm/ft_0f_5ms.rb +35 -0
  123. data/test/bm/ft_26_load.rb +210 -0
  124. data/test/bm/ft_26b_load.rb +86 -0
  125. data/test/bm/ft_26c_load.rb +97 -0
  126. data/test/bm/ft_26d_load.rb +97 -0
  127. data/test/bm/ft_recu.rb +71 -0
  128. data/test/clone_test.rb +122 -0
  129. data/test/concurrence_test.rb +77 -0
  130. data/test/condition_test.rb +155 -0
  131. data/test/console_test.rb +12 -0
  132. data/test/cron_ltest.rb +15 -0
  133. data/test/description_test.rb +87 -0
  134. data/test/eno_test.rb +76 -0
  135. data/test/expmap_test.rb +54 -0
  136. data/test/expool_20031219_0916.tgz +0 -0
  137. data/test/fe_lookup_att_test.rb +62 -0
  138. data/test/fei_test.rb +181 -0
  139. data/test/file_persisted_engine_test.rb +64 -0
  140. data/test/file_persistence_test.rb +134 -0
  141. data/test/filep_cancel_test.rb +123 -0
  142. data/test/filter_test.rb +109 -0
  143. data/test/flowtestbase.rb +351 -0
  144. data/test/ft_0.rb +68 -0
  145. data/test/ft_0b_sequence.rb +36 -0
  146. data/test/ft_0c_testname.rb +33 -0
  147. data/test/ft_0d_participant.rb +30 -0
  148. data/test/ft_0e_multibody.rb +34 -0
  149. data/test/ft_10_loop.rb +134 -0
  150. data/test/ft_11_ppd.rb +415 -0
  151. data/test/ft_11b_ppd.rb +54 -0
  152. data/test/ft_12_blockparticipant.rb +97 -0
  153. data/test/ft_13_eno.rb +52 -0
  154. data/test/ft_14_subprocess.rb +88 -0
  155. data/test/ft_14b_subprocess.rb +192 -0
  156. data/test/ft_14c_subprocess.rb +68 -0
  157. data/test/ft_15_iterator.rb +216 -0
  158. data/test/ft_15b_iterator.rb +74 -0
  159. data/test/ft_16_fqv.rb +73 -0
  160. data/test/ft_17_condition.rb +84 -0
  161. data/test/ft_18_pname.rb +56 -0
  162. data/test/ft_1_unset.rb +175 -0
  163. data/test/ft_1b_unset.rb +39 -0
  164. data/test/ft_20_cron.rb +53 -0
  165. data/test/ft_21_cron.rb +87 -0
  166. data/test/ft_21b_cron_pause.rb +82 -0
  167. data/test/ft_22_history.rb +74 -0
  168. data/test/ft_23_when.rb +77 -0
  169. data/test/ft_23b_when.rb +70 -0
  170. data/test/ft_23c_wait.rb +80 -0
  171. data/test/ft_23d_cww.rb +58 -0
  172. data/test/ft_24_def.rb +44 -0
  173. data/test/ft_25_cancel.rb +89 -0
  174. data/test/ft_27_getflowpos.rb +147 -0
  175. data/test/ft_28_fileparticipant.rb +63 -0
  176. data/test/ft_29_httprb.rb +106 -0
  177. data/test/ft_2_concurrence.rb +135 -0
  178. data/test/ft_2b_concurrence.rb +188 -0
  179. data/test/ft_2c_concurrence.rb +64 -0
  180. data/test/ft_30_socketlistener.rb +203 -0
  181. data/test/ft_31_flowname.rb +40 -0
  182. data/test/ft_32_journal.rb +91 -0
  183. data/test/ft_32c_journal.rb +102 -0
  184. data/test/ft_32d_journal.rb +84 -0
  185. data/test/ft_33_description.rb +107 -0
  186. data/test/ft_34_cancelwfid.rb +80 -0
  187. data/test/ft_35_localdefs.rb +75 -0
  188. data/test/ft_36_subprocids.rb +97 -0
  189. data/test/ft_37_pnames.rb +70 -0
  190. data/test/ft_38_tag.rb +127 -0
  191. data/test/ft_38b_tag.rb +161 -0
  192. data/test/ft_38c_tag.rb +100 -0
  193. data/test/ft_39_reserve.rb +63 -0
  194. data/test/ft_39b_reserve.rb +84 -0
  195. data/test/ft_3_equals.rb +170 -0
  196. data/test/ft_3b_lookup_vf.rb +83 -0
  197. data/test/ft_40_defined.rb +61 -0
  198. data/test/ft_41_case.rb +110 -0
  199. data/test/ft_42_environments.rb +75 -0
  200. data/test/ft_43_pat10.rb +85 -0
  201. data/test/ft_44_save.rb +70 -0
  202. data/test/ft_44b_restore.rb +212 -0
  203. data/test/ft_45_citerator.rb +214 -0
  204. data/test/ft_46_pparams.rb +62 -0
  205. data/test/ft_47_filter.rb +160 -0
  206. data/test/ft_48_fe_filter.rb +88 -0
  207. data/test/ft_49_condition.rb +126 -0
  208. data/test/ft_4_misc.rb +237 -0
  209. data/test/ft_50_xml_attribute.rb +155 -0
  210. data/test/ft_51_stack.rb +55 -0
  211. data/test/ft_52_obs_participant.rb +123 -0
  212. data/test/ft_53_null_noop_participant.rb +62 -0
  213. data/test/ft_54_listen.rb +288 -0
  214. data/test/ft_54b_listen.rb +66 -0
  215. data/test/ft_54c_listen.rb +99 -0
  216. data/test/ft_55_ptimeout.rb +59 -0
  217. data/test/ft_56_timeout.rb +59 -0
  218. data/test/ft_57_a.rb +145 -0
  219. data/test/ft_58_ejournal.rb +151 -0
  220. data/test/ft_59_ps.rb +150 -0
  221. data/test/ft_59b_ps_for_pat.rb +58 -0
  222. data/test/ft_5_time.rb +118 -0
  223. data/test/ft_60_ecancel.rb +161 -0
  224. data/test/ft_61_elsub.rb +51 -0
  225. data/test/ft_62_procparticipant.rb +71 -0
  226. data/test/ft_63_pause.rb +124 -0
  227. data/test/ft_64_alias.rb +102 -0
  228. data/test/ft_64_clone.rb +69 -0
  229. data/test/ft_65_stringlaunch.rb +59 -0
  230. data/test/ft_66_subforget.rb +70 -0
  231. data/test/ft_67_schedlaunch.rb +116 -0
  232. data/test/ft_68_ifparticipant.rb +70 -0
  233. data/test/ft_69_cancelmissing.rb +51 -0
  234. data/test/ft_6_lambda.rb +64 -0
  235. data/test/ft_70_lookupvar.rb +55 -0
  236. data/test/ft_71_log.rb +60 -0
  237. data/test/ft_72_lookup_processes.rb +76 -0
  238. data/test/ft_73_cancel_sub.rb +139 -0
  239. data/test/ft_74_block_and_workitem_dup.rb +63 -0
  240. data/test/ft_75_ruby_attributes.rb +87 -0
  241. data/test/ft_76_merge_isolate.rb +88 -0
  242. data/test/ft_77_segments.rb +35 -0
  243. data/test/ft_78_eval.rb +150 -0
  244. data/test/ft_79_tticket.rb +187 -0
  245. data/test/ft_79b_tticket.rb +172 -0
  246. data/test/ft_79c_outcome.rb +56 -0
  247. data/test/ft_7_lose.rb +104 -0
  248. data/test/ft_7b_lose.rb +78 -0
  249. data/test/ft_80_spname.rb +91 -0
  250. data/test/ft_81_exp.rb +60 -0
  251. data/test/ft_82_trecu.rb +46 -0
  252. data/test/ft_83_badpause.rb +58 -0
  253. data/test/ft_84_updateexp.rb +198 -0
  254. data/test/ft_85_dolhash.rb +43 -0
  255. data/test/ft_86_dollar_fv.rb +68 -0
  256. data/test/ft_87_define.rb +74 -0
  257. data/test/ft_8_forget.rb +44 -0
  258. data/test/ft_9_cursor.rb +145 -0
  259. data/test/ft_9b_cursor.rb +105 -0
  260. data/test/ft_tests.rb +124 -0
  261. data/test/hash_test.rb +75 -0
  262. data/test/hparticipant_test.rb +164 -0
  263. data/test/lookup_att_test.rb +90 -0
  264. data/test/lookup_vf_test.rb +94 -0
  265. data/test/misc_test.rb +90 -0
  266. data/test/nut_0_irb.rb +20 -0
  267. data/test/obs_test.rb +142 -0
  268. data/test/orest_test.rb +251 -0
  269. data/test/param_test.rb +290 -0
  270. data/test/participant_test.rb +101 -0
  271. data/test/pending.rb +23 -0
  272. data/test/ps_representation.rb +133 -0
  273. data/test/rake_ltest.rb +38 -0
  274. data/test/rake_qtest.rb +68 -0
  275. data/test/raw_prog_test.rb +412 -0
  276. data/test/restart_cron_test.rb +136 -0
  277. data/test/restart_paused_test.rb +98 -0
  278. data/test/restart_sleep_test.rb +140 -0
  279. data/test/restart_tests.rb +18 -0
  280. data/test/restart_when_test.rb +112 -0
  281. data/test/ruby_procdef_test.rb +132 -0
  282. data/test/rutest_utils.rb +63 -0
  283. data/test/sec_test.rb +205 -0
  284. data/test/slock_test.rb +80 -0
  285. data/test/storage_test.rb +44 -0
  286. data/test/test.rb +3 -0
  287. data/test/timeout_test.rb +105 -0
  288. data/test/util_xml_test.rb +112 -0
  289. data/test/wfid_test.rb +175 -0
  290. data/test/wi_test.rb +75 -0
  291. metadata +433 -0
@@ -0,0 +1,109 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+
8
+ require 'test/unit'
9
+
10
+ require 'openwfe/filterdef'
11
+
12
+
13
+ class FilterTest < Test::Unit::TestCase
14
+
15
+ #def setup
16
+ #end
17
+
18
+ #def teardown
19
+ #end
20
+
21
+ def test_filter_in
22
+
23
+ f0 = OpenWFE::FilterDefinition.new
24
+ f0.closed = true
25
+ f0.add_field("a", "r")
26
+ f0.add_field("b", "rw")
27
+ f0.add_field("c", "")
28
+
29
+ m0 = {
30
+ "a" => "A",
31
+ "b" => "B",
32
+ "c" => "C",
33
+ "d" => "D",
34
+ }
35
+
36
+ m1 = f0.filter_in m0
37
+
38
+ #require 'pp'; pp m0
39
+ #require 'pp'; pp m1
40
+ assert_equal m1, { "a" => "A", "b" => "B" }
41
+
42
+ f0.closed = false
43
+
44
+ m2 = f0.filter_in m0
45
+
46
+ #require 'pp'; pp m0
47
+ #require 'pp'; pp m2
48
+ assert_equal m2, { "a" => "A", "b" => "B", "d" => "D" }
49
+ end
50
+
51
+ def test_filter_out_0
52
+
53
+ f0 = OpenWFE::FilterDefinition.new
54
+ f0.closed = false
55
+ f0.add_ok = true
56
+ f0.remove_ok = true
57
+ f0.add_field("a", "r")
58
+ f0.add_field("b", "rw")
59
+ f0.add_field("c", "")
60
+
61
+ m0 = {
62
+ "a" => "A",
63
+ "b" => "B",
64
+ "c" => "C",
65
+ "d" => "D",
66
+ }
67
+
68
+ #
69
+ # 0
70
+
71
+ m1 = {
72
+ "z" => "Z"
73
+ }
74
+
75
+ m2 = f0.filter_out m0, m1
76
+
77
+ #require 'pp'; pp m2
78
+ assert_equal m2, {"z"=>"Z"}
79
+
80
+ #
81
+ # 1
82
+
83
+ f0.remove_ok = false
84
+
85
+ m2 = f0.filter_out m0, m1
86
+
87
+ #require 'pp'; pp m2
88
+ assert_equal m2, {"a"=>"A", "b"=>"B", "c"=>"C", "z"=>"Z", "d"=>"D"}
89
+
90
+ #
91
+ # 2
92
+
93
+ f0.remove_allowed = true
94
+
95
+ m1 = {
96
+ "a" => 0,
97
+ "b" => 1,
98
+ "c" => 2,
99
+ "d" => 3
100
+ }
101
+
102
+ m2 = f0.filter_out m0, m1
103
+
104
+ #require 'pp'; pp m2
105
+ assert_equal m2, {"a"=>"A", "b"=>1, "c"=>"C", "d"=>3}
106
+ end
107
+
108
+ end
109
+
@@ -0,0 +1,351 @@
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 'rubygems'
12
+ require 'test/unit'
13
+
14
+ require 'openwfe/workitem'
15
+ require 'openwfe/engine/engine'
16
+ require 'openwfe/rudefinitions'
17
+ require 'openwfe/participants/participants'
18
+
19
+ require 'rutest_utils'
20
+
21
+
22
+ $WORKFLOW_ENGINE_CLASS = OpenWFE::Engine
23
+
24
+ persistence = ENV["__persistence__"]
25
+
26
+
27
+ if persistence == "pure-persistence"
28
+
29
+ require "openwfe/engine/file_persisted_engine"
30
+ $WORKFLOW_ENGINE_CLASS = OpenWFE::FilePersistedEngine
31
+
32
+ elsif persistence == "cached-persistence"
33
+
34
+ require "openwfe/engine/file_persisted_engine"
35
+ $WORKFLOW_ENGINE_CLASS = OpenWFE::CachedFilePersistedEngine
36
+
37
+ elsif persistence == "db-persistence"
38
+
39
+ require 'extras/active_connection'
40
+ require 'openwfe/extras/engine/db_persisted_engine'
41
+ $WORKFLOW_ENGINE_CLASS = OpenWFE::Extras::DbPersistedEngine
42
+
43
+ elsif persistence == "cached-db-persistence"
44
+
45
+ require 'extras/active_connection'
46
+ require 'openwfe/extras/engine/db_persisted_engine'
47
+ $WORKFLOW_ENGINE_CLASS = OpenWFE::Extras::CachedDbPersistedEngine
48
+ end
49
+
50
+
51
+ puts
52
+ puts "testing with engine of class " + $WORKFLOW_ENGINE_CLASS.to_s
53
+ puts
54
+
55
+ module FlowTestBase
56
+
57
+ attr_reader \
58
+ :engine, :tracer
59
+
60
+ #
61
+ # SETUP
62
+ #
63
+ def setup
64
+
65
+ @engine = $WORKFLOW_ENGINE_CLASS.new
66
+
67
+ $OWFE_LOG.info(
68
+ "setup() started engine #{@engine.object_id} @ #{caller[-1]}")
69
+
70
+ @terminated_processes = []
71
+ @engine.get_expression_pool.add_observer(:terminate) do |c, fe, wi|
72
+ @terminated_processes << fe.fei.wfid
73
+ #p [ :terminated, @terminated_processes ]
74
+ end
75
+ #@terminated = false
76
+ #@engine.get_expression_pool.add_observer(:terminate) do |c, fe, wi|
77
+ # @terminated = true
78
+ #end
79
+
80
+ @engine.application_context[:ruby_eval_allowed] = true
81
+ @engine.application_context[:definition_in_launchitem_allowed] = true
82
+
83
+ @tracer = Tracer.new
84
+ @engine.application_context["__tracer"] = @tracer
85
+
86
+ @engine.register_participant('pp-workitem') do |workitem|
87
+
88
+ puts
89
+ require 'pp'; pp workitem
90
+ puts
91
+ end
92
+
93
+ @engine.register_participant('pp-fields') do |workitem|
94
+
95
+ workitem.attributes.keys.sort.each do |field|
96
+ next if field == "___map_type" or field == "__result__"
97
+ next if field == "params"
98
+ @tracer << "#{field}: #{workitem.attributes[field]}\n"
99
+ end
100
+ @tracer << "--\n"
101
+ end
102
+
103
+ @engine.register_participant 'test-.*', OpenWFE::PrintParticipant.new
104
+
105
+ @engine.register_participant('block-participant') do |workitem|
106
+ @tracer << "the block participant received a workitem"
107
+ @tracer << "\n"
108
+ end
109
+
110
+ @engine.register_participant('p-toto') do |workitem|
111
+ @tracer << "toto"
112
+ end
113
+ end
114
+
115
+ #
116
+ # TEARDOWN
117
+ #
118
+ def teardown
119
+
120
+ if @engine
121
+ $OWFE_LOG.level = Logger::INFO
122
+ @engine.stop
123
+ end
124
+ end
125
+
126
+ protected
127
+
128
+ def log_level_to_debug
129
+ $OWFE_LOG.level = Logger::DEBUG
130
+ end
131
+
132
+ def print_exp_list (l)
133
+ puts
134
+ l.each do |fexp|
135
+ puts " - #{fexp.fei.to_debug_s}"
136
+ end
137
+ puts
138
+ end
139
+
140
+ def name_of_test
141
+
142
+ s = caller(1)[0]
143
+ i = s.index('`')
144
+ s[i+6..s.length-2]
145
+ end
146
+
147
+ #
148
+ # some tests return quickly, leverage the @terminated_processes
149
+ # of the test engine to determine those processes that are
150
+ # already over...
151
+ #
152
+ def wait_for (fei)
153
+
154
+ #for i in (0..42)
155
+ for i in (0..217)
156
+ Thread.pass
157
+ return if @terminated_processes.include?(fei.wfid)
158
+ #return if @terminated
159
+ end
160
+
161
+ @engine.wait_for fei
162
+ end
163
+
164
+ #
165
+ # calling
166
+ #
167
+ # launch li
168
+ #
169
+ # instead of
170
+ #
171
+ # @engine.launch li
172
+ #
173
+ # ensures that the logs will contain a mention of the wfid of the
174
+ # flow just started along with the test method (and it's location
175
+ # in its source file).
176
+ #
177
+ def launch (li)
178
+
179
+ fei = @engine.launch li
180
+
181
+ $OWFE_LOG.info(
182
+ "dotest() launched #{fei.to_short_s} "+
183
+ "@ #{caller[1]} on engine #{@engine.object_id}")
184
+
185
+ fei
186
+ end
187
+
188
+ #
189
+ # dotest()
190
+ #
191
+ def dotest (
192
+ flowDef,
193
+ expected_trace,
194
+ join=false,
195
+ allow_remaining_expressions=false)
196
+
197
+ @tracer.clear
198
+
199
+ li = if flowDef.kind_of?(OpenWFE::LaunchItem)
200
+ flowDef
201
+ else
202
+ OpenWFE::LaunchItem.new flowDef
203
+ end
204
+
205
+ #start = Time.now.to_f
206
+
207
+ fei = launch li
208
+
209
+ if join.is_a?(Numeric)
210
+ sleep join
211
+ else
212
+ wait_for fei
213
+ end
214
+
215
+ #puts "// took #{Time.now.to_f - start} s"
216
+
217
+
218
+ trace = @tracer.to_s
219
+
220
+ #if trace == ''
221
+ # Thread.pass; sleep 0.350
222
+ # trace = @tracer.to_s
223
+ #end
224
+ #
225
+ # occurs when the tracing is done from a participant
226
+ # (participant dispatching occurs in a thread)
227
+
228
+ #for i in 0..70
229
+ # Thread.pass; sleep 0.140
230
+ # trace = @trace.to_s
231
+ # p [ :trace, trace ]
232
+ # break if trace != ''
233
+ #end if trace == ''
234
+
235
+ #puts "...'#{trace}' ?= '#{expected_trace}'"
236
+
237
+ if expected_trace.is_a?(Array)
238
+
239
+ result = expected_trace.find do |etrace|
240
+ trace == etrace
241
+ end
242
+ assert(
243
+ (result != nil),
244
+ """flow failed :
245
+
246
+ trace doesn't correspond to any of the expected traces...
247
+
248
+ traced :
249
+
250
+ '#{trace}'
251
+
252
+ """)
253
+ elsif expected_trace.kind_of?(Regexp)
254
+
255
+ assert trace.match(expected_trace)
256
+ else
257
+
258
+ assert(
259
+ trace == expected_trace,
260
+ """flow failed :
261
+
262
+ traced :
263
+
264
+ '#{trace}'
265
+
266
+ but was expecting :
267
+
268
+ '#{expected_trace}'
269
+ """)
270
+ end
271
+
272
+ if allow_remaining_expressions
273
+
274
+ purge_engine
275
+
276
+ return fei
277
+ end
278
+
279
+ #Thread.pass; sleep 0.003; Thread.pass
280
+
281
+ exp_storage = engine.get_expression_storage
282
+
283
+ view = exp_storage.to_s
284
+ size = exp_storage.size
285
+
286
+ if size != 1
287
+ sleep 0.350
288
+ view = exp_storage.to_s
289
+ size = exp_storage.size
290
+ end
291
+
292
+ if size != 1
293
+ puts
294
+ puts " remaining expressions : #{size}"
295
+ puts
296
+ puts view
297
+ puts
298
+ puts OpenWFE::caller_to_s(0, 2)
299
+ puts
300
+
301
+ purge_engine
302
+ end
303
+
304
+ assert_equal(
305
+ 1,
306
+ size,
307
+ "there are expressions remaining in the expression pool " +
308
+ "(right now : #{exp_storage.length})")
309
+
310
+ fei
311
+ end
312
+
313
+ #
314
+ # makes sure to purge the engine's expression storage
315
+ #
316
+ def purge_engine
317
+
318
+ @engine.get_expression_storages.each do |storage|
319
+ storage.purge
320
+ end
321
+ end
322
+
323
+ def assert_trace (desired_trace)
324
+
325
+ assert_equal desired_trace, @tracer.to_s
326
+ end
327
+
328
+ end
329
+
330
+ #
331
+ # A bunch of methods for testing the journal component
332
+ #
333
+ module JournalTestBase
334
+
335
+ def get_journal
336
+
337
+ @engine.get_journal
338
+ end
339
+
340
+ def get_error_count (wfid)
341
+
342
+ fn = get_journal.workdir + "/" + wfid + ".journal"
343
+
344
+ get_journal.flush_buckets
345
+
346
+ events = get_journal.load_events(fn)
347
+
348
+ events.inject(0) { |r, evt| r += 1 if evt[0] == :error; r }
349
+ end
350
+ end
351
+