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,132 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+ # Tue Aug 21 10:22:18 JST 2007
8
+ #
9
+
10
+ require 'rubygems'
11
+
12
+ require 'test/unit'
13
+
14
+ require 'find'
15
+
16
+ require 'openwfe/engine/file_persisted_engine'
17
+ require 'openwfe/participants/storeparticipants'
18
+
19
+
20
+ #
21
+ # fighting bug at :
22
+ # http://rubyforge.org/tracker/index.php?func=detail&aid=13238&group_id=2609&atid=10023
23
+ #
24
+
25
+ class RubyProcDefTest < Test::Unit::TestCase
26
+
27
+ def setup
28
+
29
+ @engine = OpenWFE::CachedFilePersistedEngine.new(
30
+ :definition_in_launchitem_allowed => true)
31
+
32
+ @engine.register_participant :alpha, OpenWFE::HashParticipant
33
+ end
34
+
35
+ def teardown
36
+
37
+ @engine.stop if @engine
38
+ end
39
+
40
+ #
41
+ # TESTS
42
+
43
+ class Test0 < OpenWFE::ProcessDefinition
44
+ sequence do
45
+ alpha
46
+ end
47
+ end
48
+
49
+ def test_0
50
+
51
+ fei0 = @engine.launch Test0
52
+ sleep 0.100
53
+ fei1 = @engine.launch Test0
54
+ sleep 0.200
55
+
56
+ stack0 = @engine.process_stack fei0.wfid
57
+ stack1 = @engine.process_stack fei1.wfid
58
+
59
+ assert_equal 3, stack0.size
60
+ assert_equal 3, stack1.size
61
+
62
+ assert_equal 4, count_files(fei0.wfid)
63
+ assert_equal 4, count_files(fei1.wfid)
64
+
65
+ @engine.cancel_process(fei0.wfid)
66
+ @engine.cancel_process(fei1.wfid)
67
+
68
+ sleep 0.350
69
+ end
70
+
71
+
72
+ TEST1 = """
73
+ class Test1 < OpenWFE::ProcessDefinition
74
+ sequence do
75
+ alpha
76
+ end
77
+ end
78
+ """
79
+
80
+ def test_1
81
+
82
+ fei0 = launch TEST1
83
+ sleep 0.100
84
+ fei1 = launch TEST1
85
+ sleep 0.200
86
+
87
+ assert_equal(
88
+ OpenWFE::ProcessDefinition::Test1,
89
+ OpenWFE::ProcessDefinition.extract_class(TEST1))
90
+
91
+ stack0 = @engine.process_stack fei0.wfid
92
+ #puts stack0
93
+ stack1 = @engine.process_stack fei1.wfid
94
+ #puts stack1
95
+
96
+ assert_equal 3, stack0.size
97
+ assert_equal 3, stack1.size
98
+
99
+ assert_equal 4, count_files(fei0.wfid)
100
+ assert_equal 4, count_files(fei1.wfid)
101
+
102
+ @engine.cancel_process(fei0.wfid)
103
+ @engine.cancel_process(fei1.wfid)
104
+
105
+ sleep 0.350
106
+ end
107
+
108
+ protected
109
+
110
+ def launch (test_string)
111
+
112
+ filename = "work/procdef.rb"
113
+
114
+ File.open(filename, "w") do |f|
115
+ f.puts test_string
116
+ end
117
+ @engine.launch filename
118
+ end
119
+
120
+ def count_files (wfid)
121
+
122
+ count = 0
123
+
124
+ Find.find("work/expool/") do |path|
125
+ next unless path.match(wfid+"__.*\.yaml")
126
+ count += 1
127
+ end
128
+
129
+ count
130
+ end
131
+
132
+ end
@@ -0,0 +1,63 @@
1
+ #
2
+ # Testing OpenWFE
3
+ #
4
+ # John Mettraux at openwfe.org
5
+ #
6
+ # Mon Oct 9 22:19:44 JST 2006
7
+ #
8
+
9
+ require 'openwfe/version'
10
+
11
+
12
+ class Tracer
13
+
14
+ def initialize
15
+ super
16
+ @trace = ""
17
+ end
18
+
19
+ def to_s
20
+ @trace.to_s.strip
21
+ end
22
+
23
+ def << s
24
+ @trace << s
25
+ end
26
+
27
+ def clear
28
+ @trace = ""
29
+ end
30
+
31
+ def puts s
32
+ @trace << "#{s}\n"
33
+ end
34
+ end
35
+
36
+ #
37
+ # Returns a new FlowExpressionId, for testing purposes
38
+ #
39
+ def new_fei
40
+
41
+ fei = OpenWFE::FlowExpressionId.new
42
+
43
+ fei.owfe_version = OpenWFE::OPENWFERU_VERSION
44
+ fei.engine_id = 'this'
45
+ #fei.initial_engine_id = 'that'
46
+ fei.workflow_definition_url = 'http://test/test.xml'
47
+ fei.workflow_definition_name = 'test'
48
+ fei.workflow_definition_revision = '1.0'
49
+ fei.workflow_instance_id = '123456'
50
+ fei.expression_name = 'do-test'
51
+ fei.expression_id = '0.0'
52
+
53
+ fei
54
+ end
55
+
56
+ #
57
+ # Returns true when on JRuby
58
+ #
59
+ def on_jruby?
60
+
61
+ (defined?(JRUBY_VERSION) != nil)
62
+ end
63
+
data/test/sec_test.rb ADDED
@@ -0,0 +1,205 @@
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 test_sec_0
25
+
26
+ engine = OpenWFE::Engine.new
27
+
28
+ engine.ac[:ruby_eval_allowed] = true
29
+ engine.ac[:definition_in_launchitem_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
+ dotest engine, def0
45
+
46
+ assert(
47
+ OpenWFE::grep(
48
+ "Insecure operation - initialize",
49
+ "logs/openwferu.log").size > 0)
50
+
51
+ def2 =
52
+ '''<process-definition name="" revision="0">
53
+ <sequence>
54
+ <reval>
55
+ <![CDATA[
56
+ class << self.ac["engine"]
57
+ def is_secure?
58
+ true
59
+ end
60
+ end
61
+ self.ac["engine"].is_secure?
62
+ ]]>
63
+ </reval>
64
+ </sequence>
65
+ </process-definition>'''
66
+
67
+ dotest(engine, def2)
68
+
69
+ def3 =
70
+ '''<process-definition name="" revision="0">
71
+ <sequence>
72
+ <reval>self.ac[:ruby_eval_allowed] = false</reval>
73
+ <reval>puts self.ac[:ruby_eval_allowed]</reval>
74
+ </sequence>
75
+ </process-definition>'''
76
+
77
+ dotest(engine, def3)
78
+
79
+ assert OpenWFE::grep(
80
+ "evaluation of ruby code is not allowed", "logs/openwferu.log")
81
+
82
+ engine.stop
83
+ end
84
+
85
+ def test_sec_0b
86
+
87
+ engine = OpenWFE::Engine.new
88
+
89
+ engine.ac[:ruby_eval_allowed] = true
90
+ engine.ac[:definition_in_launchitem_allowed] = true
91
+
92
+ def1 =
93
+ '''<process-definition name="" revision="0">
94
+ <sequence>
95
+ <reval>
96
+ class Object
97
+ def my_name
98
+ "toto"
99
+ end
100
+ end
101
+ "stringobject".my_name
102
+ </reval>
103
+ </sequence>
104
+ </process-definition>'''
105
+
106
+ dotest engine, def1
107
+
108
+ assert_equal(
109
+ 1,
110
+ OpenWFE::grep(
111
+ "undefined method `my_name' for \"stringobject\":String",
112
+ "logs/openwferu.log").size)
113
+ #assert_equal(
114
+ # 1,
115
+ # OpenWFE::grep(
116
+ # "Insecure: can't set constant",
117
+ # "logs/openwferu.log").size)
118
+ #
119
+ # level 4 is too much (can't modify hashes)...
120
+ end
121
+
122
+ XMLDEF =
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
+ def test_sec_1
131
+
132
+ value = nil
133
+
134
+ engine = OpenWFE::Engine.new :definition_in_launchitem_allowed => true
135
+
136
+ engine.register_participant(:toto) do |workitem|
137
+
138
+ workitem.attributes.delete("___map_type")
139
+ #
140
+ # if the xmlencoder was used in previous, this field
141
+ # might be set, removing it.
142
+
143
+ value = "#{workitem.attributes.size}_#{workitem.f}"
144
+ end
145
+
146
+ engine.launch XMLDEF
147
+
148
+ sleep 0.350
149
+
150
+ assert_equal "3_", value
151
+
152
+ engine.stop
153
+ end
154
+
155
+ def test_sec_1b
156
+
157
+ value = nil
158
+
159
+ engine = OpenWFE::Engine.new
160
+
161
+ engine.register_participant(:toto) do |workitem|
162
+
163
+ workitem.attributes.delete("___map_type")
164
+ #
165
+ # if the xmlencoder was used in previous, this field
166
+ # might be set, removing it.
167
+
168
+ value = "#{workitem.attributes.size}_#{workitem.f}"
169
+ end
170
+
171
+ engine.ac[:ruby_eval_allowed] = true
172
+ engine.ac[:definition_in_launchitem_allowed] = true
173
+
174
+ engine.launch XMLDEF
175
+
176
+ sleep 0.350
177
+
178
+ assert_equal "3_35", value
179
+
180
+ engine.stop
181
+ end
182
+
183
+ def test_sec_2
184
+
185
+ assert_equal 35, Rufus::eval_safely("5*7", 4)
186
+ assert_equal 35, Rufus::eval_safely("5*7", 4, binding())
187
+ end
188
+
189
+ protected
190
+
191
+ def dotest (engine, def_or_li)
192
+
193
+ li = if def_or_li.is_a?(OpenWFE::LaunchItem)
194
+ def_or_li
195
+ else
196
+ OpenWFE::LaunchItem.new(def_or_li)
197
+ end
198
+
199
+ engine.launch(li)
200
+
201
+ sleep 0.350
202
+ end
203
+
204
+ end
205
+
@@ -0,0 +1,80 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+
8
+ require 'test/unit'
9
+ require 'openwfe/worklist/storelocks'
10
+ require 'openwfe/participants/storeparticipants'
11
+
12
+
13
+ class MockItem
14
+ attr_reader :fei
15
+ def initialize (fei)
16
+ @fei = fei
17
+ end
18
+ def flow_expression_id
19
+ @fei
20
+ end
21
+ end
22
+
23
+ class StoreLockTest < Test::Unit::TestCase
24
+
25
+ #def setup
26
+ #end
27
+
28
+ #def teardown
29
+ #end
30
+
31
+ def test_0
32
+
33
+ store = StoreWithLocks.new(HashParticipant)
34
+
35
+ wi0 = MockItem.new("fei")
36
+
37
+ store.store.push(wi0)
38
+
39
+ wi1 = store.get_and_lock("locker_a", "fei")
40
+
41
+ assert_not_nil wi1
42
+ assert_equal wi0.object_id, wi1.object_id
43
+
44
+ assert_raise RuntimeError do
45
+ wi2 = store.get_and_lock("locker_b", "fei")
46
+ end
47
+
48
+ assert_equal store.get_locker("fei"), "locker_a"
49
+
50
+ assert_raise RuntimeError do
51
+ store.release "locker_b", "fei"
52
+ end
53
+
54
+ store.release "locker_a", "fei"
55
+
56
+ assert_nil store.get_locker("fei")
57
+ end
58
+
59
+ def test_1
60
+
61
+ store = StoreWithLocks.new(
62
+ HashParticipant,
63
+ nil,
64
+ :lock_max_age => "100")
65
+
66
+ wi0 = MockItem.new("fei")
67
+
68
+ store.store.push(wi0)
69
+
70
+ wi1 = store.get_and_lock("locker_a", "fei")
71
+
72
+ assert_not_nil wi1
73
+
74
+ sleep 1
75
+
76
+ assert_nil store.get_locker("fei")
77
+ end
78
+
79
+ end
80
+