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
data/test/fei_test.rb ADDED
@@ -0,0 +1,181 @@
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 'test/unit'
11
+ require 'rutest_utils'
12
+ #require 'openwfe/owfe'
13
+ require 'openwfe/workitem'
14
+ require 'openwfe/flowexpressionid'
15
+ require 'openwfe/rudefinitions'
16
+
17
+
18
+ class FeiTest < Test::Unit::TestCase
19
+
20
+ #def setup
21
+ #end
22
+
23
+ #def teardown
24
+ #end
25
+
26
+ def test_equality
27
+
28
+ fei1 = new_fei()
29
+ fei2 = new_fei()
30
+
31
+ assert \
32
+ fei1.object_id != fei2.object_id, \
33
+ "feis are not two distinct feis"
34
+ assert \
35
+ fei1.hash == fei2.hash, \
36
+ "feis do not have the same hash"
37
+ assert \
38
+ fei1 == fei2, \
39
+ "feis are not equals (==)"
40
+ assert \
41
+ fei1.eql?(fei2), \
42
+ "feis are not equals (eql?)"
43
+ end
44
+
45
+ def test_inequality
46
+
47
+ fei1 = new_fei()
48
+
49
+ fei2 = new_fei()
50
+ fei2.expression_name = OpenWFE::EN_ENVIRONMENT
51
+
52
+ assert \
53
+ fei1.object_id != fei2.object_id, \
54
+ "feis are not two distinct feis"
55
+ assert \
56
+ fei1.hash != fei2.hash, \
57
+ "feis do have the same hash"
58
+ assert \
59
+ fei1 != fei2, \
60
+ "feis are equals (==)"
61
+ assert \
62
+ (not fei1.eql?(fei2)), \
63
+ "feis are equals (eql?)"
64
+ end
65
+
66
+ def test_in_hash
67
+ h = Hash.new()
68
+
69
+ fei1 = new_fei()
70
+ fei2 = new_fei()
71
+
72
+ h[fei1] = 'one'
73
+ h[fei2] = 'two'
74
+
75
+ #puts_hash(h)
76
+ #puts "fei1 : #{fei1.to_debug_s}"
77
+ #puts "fei2 : #{fei2.to_debug_s}"
78
+
79
+ assert \
80
+ h.size() == 1,
81
+ "h should have one entry"
82
+ assert \
83
+ h[fei1] == h[fei2],
84
+ "both keys should point to the same thing"
85
+ assert \
86
+ h[fei1] == 'two',
87
+ "value should be 'two' (fei1)"
88
+ assert \
89
+ h[fei2] == 'two',
90
+ "value should be 'two' (fei2)"
91
+ end
92
+
93
+ def test_dup
94
+ fei0 = new_fei()
95
+ fei1 = fei0.dup()
96
+
97
+ assert \
98
+ fei0 == fei1,
99
+ "feis should be equal"
100
+
101
+ fei1.expression_name = OpenWFE::EN_ENVIRONMENT
102
+
103
+ assert \
104
+ fei0 != fei1,
105
+ "feis should not be equal"
106
+ end
107
+
108
+ def test_parse_unparse
109
+ fei0 = new_fei()
110
+ s = fei0.to_s
111
+ fei1 = OpenWFE::FlowExpressionId.to_fei(s)
112
+ fei2 = OpenWFE::FlowExpressionId.from_s(s)
113
+
114
+ puts "\n#{s}\n#{fei1.to_s}" if fei0 != fei1
115
+
116
+ assert_equal fei0, fei1
117
+ assert_equal fei1, fei2
118
+ end
119
+
120
+ def test_parent_wfid
121
+
122
+ fei = new_fei
123
+
124
+ assert \
125
+ fei.parent_workflow_instance_id == "123456",
126
+ "failure 0"
127
+
128
+ fei.workflow_instance_id = "123456.0.0"
129
+
130
+ assert \
131
+ fei.parent_workflow_instance_id == "123456",
132
+ "failure 1"
133
+ end
134
+
135
+ def test_initial_engine_id_deprecation
136
+
137
+ s0 = "(fei 0.9.16 this/that http://test/test.xml test 1.0 123456 do-test 0.0)"
138
+ s1 = "(fei 0.9.16 this http://test/test.xml test 1.0 123456 do-test 0.0)"
139
+
140
+ fei0 = OpenWFE::FlowExpressionId.from_s s0
141
+ fei1 = OpenWFE::FlowExpressionId.from_s s1
142
+
143
+ assert_equal fei0, fei1
144
+
145
+ fei0 = OpenWFE::FlowExpressionId.to_fei s0
146
+ fei1 = OpenWFE::FlowExpressionId.to_fei s1
147
+
148
+ assert_equal fei0, fei1
149
+
150
+ assert_equal s1, fei0.to_s
151
+ assert_equal s1, fei1.to_s
152
+ end
153
+
154
+ def test_web_s
155
+
156
+ s1 = "(fei 0.9.16 eng http://test/test.xml test 1.0 123456 do-test 0.0)"
157
+ fei1 = OpenWFE::FlowExpressionId.from_s s1
158
+
159
+ assert_equal(
160
+ [ "123456", "0.0" ],
161
+ OpenWFE::FlowExpressionId.split_web_s(fei1.to_web_s))
162
+ end
163
+
164
+ def test_from_h
165
+
166
+ fei = new_fei()
167
+ assert_equal fei, OpenWFE::FlowExpressionId.from_h(fei.to_h)
168
+ end
169
+
170
+ protected
171
+
172
+ def puts_hash (h)
173
+ puts
174
+ h.each do |k, v|
175
+ puts " * '#{k.to_debug_s}' --> '#{v}'"
176
+ end
177
+ puts
178
+ end
179
+
180
+ end
181
+
@@ -0,0 +1,64 @@
1
+ #
2
+ #--
3
+ # Copyright (c) 2007, Urbacon Ltd.
4
+ # All rights reserved.
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions are met:
8
+ #
9
+ # . Redistributions of source code must retain the above copyright notice, this
10
+ # list of conditions and the following disclaimer.
11
+ #
12
+ # . Redistributions in binary form must reproduce the above copyright notice,
13
+ # this list of conditions and the following disclaimer in the documentation
14
+ # and/or other materials provided with the distribution.
15
+ #
16
+ # . Neither the name of the "OpenWFE" nor the names of its contributors may be
17
+ # used to endorse or promote products derived from this software without
18
+ # specific prior written permission.
19
+ #
20
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
+ # POSSIBILITY OF SUCH DAMAGE.
31
+ #++
32
+ #
33
+ #
34
+
35
+ #
36
+ # "made in Canada"
37
+ #
38
+ # Matt Zukowski at roughest.net
39
+ # John Mettraux at openwfe.org
40
+ #
41
+
42
+ require 'test/unit'
43
+
44
+ require 'fileutils'
45
+
46
+ require 'openwfe/engine/file_persisted_engine'
47
+
48
+ # Tests to assert correct functionality of the FilePersistedEngine.
49
+ class FilePersistedEngineTest < Test::Unit::TestCase
50
+
51
+ # Test to make sure that persistence data is stored in the specified
52
+ # working directory.
53
+ def test_custom_working_directory
54
+ workdir = "test_custom_working_directory-#{Time.now.to_i}-#{rand(99999)}"
55
+ FileUtils.rm_rf(workdir) if File.exists?(workdir)
56
+
57
+ engine = FilePersistedEngine.new(:work_directory => workdir)
58
+
59
+ assert File.exists?(workdir),
60
+ "Custom working directory '#{workdir}' was not created by #{engine.class} during testing!"
61
+
62
+ FileUtils.rm_rf(workdir)
63
+ end
64
+ end
@@ -0,0 +1,134 @@
1
+
2
+ require 'test/unit'
3
+
4
+ require 'openwfe/engine/engine'
5
+ require 'openwfe/expool/expstorage'
6
+ require 'openwfe/expool/yamlexpstorage'
7
+
8
+
9
+ class FilePersistenceTest < Test::Unit::TestCase
10
+
11
+ def setup
12
+ @engine = Engine.new
13
+ end
14
+
15
+ def teardown
16
+ @engine.stop
17
+ end
18
+
19
+ def ac
20
+ @engine.application_context
21
+ end
22
+
23
+ #
24
+ # test persistence using yaml
25
+ def test_yaml_persistence
26
+ fes = OpenWFE::YamlFileExpressionStorage.new("yaml", ac)
27
+ test_persistence(fes)
28
+ end
29
+
30
+ #
31
+ # flow expression check
32
+ def test_flow_expression
33
+ fei = new_fei()
34
+ fes = OpenWFE::YamlFileExpressionStorage.new "yaml", ac
35
+ fe = OpenWFE::SequenceExpression.new_exp fei, nil, nil, nil, nil
36
+ test_persistence(fes,fe)
37
+ end
38
+
39
+ def test_path_splitting
40
+
41
+ fei = new_fei
42
+ fes = OpenWFE::YamlFileExpressionStorage.new("yaml", ac)
43
+ class << fes
44
+ public :compute_file_path
45
+ end
46
+ path = fes.compute_file_path fei
47
+ a = fes.class.split_file_path path
48
+
49
+ assert_equal a[0], fei.wfid
50
+ assert_equal a[1], fei.expression_id
51
+ assert_equal a[2], fei.expression_name
52
+ end
53
+
54
+ def test_other_workdir
55
+
56
+ context = ac
57
+ context[:work_directory] = "work2"
58
+
59
+ fei = new_fei()
60
+ fes = OpenWFE::YamlFileExpressionStorage.new("yaml", ac)
61
+ #fe = SequenceExpression.new(fei, nil, nil, nil, nil)
62
+ #fes[fei] = fe
63
+
64
+ assert File.exist?("work2")
65
+
66
+ FileUtils.rm_rf("work2")
67
+ assert (not File.exist?("work2"))
68
+ end
69
+
70
+ #
71
+ # test UTF-8 data persistence
72
+ def test_utf8_with_file
73
+
74
+ workflow_definition_name = "みんなにARIGATOU★☆に関する最新の情報公開"
75
+ fei = new_fei workflow_definition_name
76
+ fes = OpenWFE::YamlFileExpressionStorage.new "yaml", ac
77
+ fe = OpenWFE::SequenceExpression.new_exp fei, nil, nil, nil, nil
78
+
79
+ loaded = test_persistence(fes, fe)
80
+
81
+ #puts
82
+ #puts fei.workflow_definition_name
83
+ #puts loaded.fei.workflow_definition_name
84
+
85
+ assert_equal loaded.fei.workflow_definition_name, fei.workflow_definition_name
86
+ end
87
+
88
+
89
+ protected
90
+
91
+ def test_persistence (fes, fe=nil)
92
+
93
+ fei = new_fei()
94
+ fes.delete(fei) if (fes.has_key?(fei))
95
+
96
+ raw = fe ? \
97
+ fe : \
98
+ OpenWFE::RawExpression.new_raw(fei, 'parent', 'env', nil, nil)
99
+
100
+ assert \
101
+ (not fes.has_key?(fei)),
102
+ "they key is present in the file system. "+
103
+ "Maybe a previous test did not delete the "
104
+
105
+ fes[fei] = raw
106
+ assert fes.has_key?(fei)
107
+
108
+ loaded = fes[fei]
109
+
110
+ fes.delete(fei)
111
+ assert !(fes.has_key?(fei))
112
+ return loaded
113
+ end
114
+
115
+ def new_fei (definition_name=nil)
116
+
117
+ fei = OpenWFE::FlowExpressionId.new()
118
+ fei.owfe_version = OPENWFERU_VERSION
119
+ fei.engine_id = 'this'
120
+ fei.initial_engine_id = 'that'
121
+ fei.workflow_definition_url = 'http://test/test.xml'
122
+ fei.workflow_definition_name = if definition_name == nil
123
+ 'test'
124
+ else
125
+ definition_name
126
+ end
127
+ fei.workflow_definition_revision = '1.0'
128
+ fei.workflow_instance_id = @engine.get_wfid_generator.generate
129
+ fei.expression_name = 'do-test'
130
+ fei.expression_id = '0.0'
131
+ return fei
132
+ end
133
+
134
+ end
@@ -0,0 +1,123 @@
1
+
2
+ #
3
+ # Testing OpenWFE
4
+ #
5
+ # John Mettraux at openwfe.org
6
+ #
7
+ # Sun Nov 25 14:41:32 JST 2007
8
+ #
9
+
10
+ require 'rubygems'
11
+
12
+ require 'test/unit'
13
+ require 'fileutils'
14
+ require 'openwfe/def'
15
+ require 'openwfe/engine/file_persisted_engine'
16
+
17
+
18
+ class FilePersistenceAndCancel < Test::Unit::TestCase
19
+
20
+ #def setup
21
+ #end
22
+
23
+ def teardown
24
+
25
+ $OWFE_LOG.level = Logger::INFO
26
+
27
+ FileUtils.rm_rf "work_filep"
28
+ end
29
+
30
+ class OpenWFE::YamlFileExpressionStorage
31
+ public :compute_file_path
32
+ end
33
+
34
+ XMLDEF = <<XML
35
+ <process-definition name="simple_sequence" revision="1">
36
+ <description>
37
+ a tiny 'hello world' sequence
38
+ </description>
39
+ <sequence>
40
+ <set field="message" value="hello world !" />
41
+ <participant ref="bravo" />
42
+ <participant ref="alpha" />
43
+ </sequence>
44
+ </process-definition>
45
+ XML
46
+
47
+ class TestDef0 < OpenWFE::ProcessDefinition
48
+ sequence do
49
+ alpha
50
+ bravo
51
+ end
52
+ end
53
+
54
+ def test_0
55
+
56
+ ac = {
57
+ :work_directory => "work_filep",
58
+ :definition_in_launchitem_allowed => true
59
+ }
60
+
61
+ @engine = OpenWFE::FilePersistedEngine.new ac
62
+
63
+ #fei = @engine.launch TestDef0
64
+ fei = @engine.launch XMLDEF
65
+
66
+ sleep 0.300
67
+
68
+ assert File.exist?(path0(fei))
69
+
70
+ @engine.cancel_process fei.wfid
71
+
72
+ sleep 0.300
73
+
74
+ assert ( ! File.exist?(path0(fei)))
75
+ #assert ( ! File.exist?("./work/ejournal/#{fei.wfid}.ejournal"))
76
+
77
+ @engine.stop
78
+
79
+ FileUtils.rm_rf "work_filep"
80
+ end
81
+
82
+ def test_1
83
+
84
+ ac = {
85
+ :work_directory => "work_filep",
86
+ :definition_in_launchitem_allowed => true
87
+ }
88
+
89
+ @engine = OpenWFE::CachedFilePersistedEngine.new ac
90
+
91
+ #$OWFE_LOG.level = Logger::DEBUG
92
+
93
+ #fei = @engine.launch TestDef0
94
+ fei = @engine.launch XMLDEF
95
+
96
+ sleep 0.900
97
+ # it's a bit longish...
98
+
99
+ #puts path1(fei)
100
+ assert File.exist?(path1(fei))
101
+
102
+ @engine.cancel_process fei.wfid
103
+
104
+ sleep 0.900
105
+
106
+ assert ( ! File.exist?(path1(fei)))
107
+ #assert ( ! File.exist?("./work/ejournal/#{fei.wfid}.ejournal"))
108
+
109
+ @engine.stop
110
+ end
111
+
112
+ protected
113
+
114
+ def path0 (fei)
115
+
116
+ @engine.get_expression_storage.compute_file_path(fei)
117
+ end
118
+
119
+ def path1 (fei)
120
+
121
+ @engine.ac[OpenWFE::S_EXPRESSION_STORAGE + ".1"].compute_file_path(fei)
122
+ end
123
+ end