jiji 1.2.5

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 (670) hide show
  1. data/ChangeLog +58 -0
  2. data/README +1 -0
  3. data/base/agents/moving_average_agent.rb +78 -0
  4. data/base/shared_lib/moving_average.rb +35 -0
  5. data/base/shared_lib/system/cross.rb +76 -0
  6. data/base/shared_lib/system/position_manager.rb +160 -0
  7. data/base/shared_lib/system/signal.rb +347 -0
  8. data/bin/jiji +5 -0
  9. data/html/css/calendar.css +432 -0
  10. data/html/css/datatable.css +299 -0
  11. data/html/css/default.css +627 -0
  12. data/html/css/dialog.css +77 -0
  13. data/html/css/treeview.css +205 -0
  14. data/html/img/auto_trade_off.gif +0 -0
  15. data/html/img/auto_trade_on.gif +0 -0
  16. data/html/img/back_bottom.gif +0 -0
  17. data/html/img/back_middle.gif +0 -0
  18. data/html/img/back_top.gif +0 -0
  19. data/html/img/bin_closed.png +0 -0
  20. data/html/img/bin_empty.png +0 -0
  21. data/html/img/bt-create-title-1.gif +0 -0
  22. data/html/img/bt-create-title-2.gif +0 -0
  23. data/html/img/bt-create-title-3.gif +0 -0
  24. data/html/img/button_add.gif +0 -0
  25. data/html/img/button_add_gray.gif +0 -0
  26. data/html/img/button_add_over.gif +0 -0
  27. data/html/img/button_add_small.gif +0 -0
  28. data/html/img/button_add_small_gray.gif +0 -0
  29. data/html/img/button_add_small_over.gif +0 -0
  30. data/html/img/button_apply.gif +0 -0
  31. data/html/img/button_apply_gray.gif +0 -0
  32. data/html/img/button_apply_over.gif +0 -0
  33. data/html/img/button_calendar.gif +0 -0
  34. data/html/img/button_calendar_over.gif +0 -0
  35. data/html/img/button_cancel.gif +0 -0
  36. data/html/img/button_cancel.jpg +0 -0
  37. data/html/img/button_cancel_gray.gif +0 -0
  38. data/html/img/button_cancel_over.gif +0 -0
  39. data/html/img/button_cancel_over.jpg +0 -0
  40. data/html/img/button_close.gif +0 -0
  41. data/html/img/button_close_gray.gif +0 -0
  42. data/html/img/button_close_over.gif +0 -0
  43. data/html/img/button_mkcol.gif +0 -0
  44. data/html/img/button_mkcol_gray.gif +0 -0
  45. data/html/img/button_mkcol_over.gif +0 -0
  46. data/html/img/button_no.gif +0 -0
  47. data/html/img/button_no_gray.gif +0 -0
  48. data/html/img/button_no_over.gif +0 -0
  49. data/html/img/button_ok.gif +0 -0
  50. data/html/img/button_ok_gray.gif +0 -0
  51. data/html/img/button_ok_over.gif +0 -0
  52. data/html/img/button_remove.gif +0 -0
  53. data/html/img/button_remove_gray.gif +0 -0
  54. data/html/img/button_remove_over.gif +0 -0
  55. data/html/img/button_remove_small.gif +0 -0
  56. data/html/img/button_remove_small_gray.gif +0 -0
  57. data/html/img/button_remove_small_over.gif +0 -0
  58. data/html/img/button_rename.gif +0 -0
  59. data/html/img/button_rename_gray.gif +0 -0
  60. data/html/img/button_rename_over.gif +0 -0
  61. data/html/img/button_save.gif +0 -0
  62. data/html/img/button_save_gray.gif +0 -0
  63. data/html/img/button_save_over.gif +0 -0
  64. data/html/img/button_start.gif +0 -0
  65. data/html/img/button_start_over.gif +0 -0
  66. data/html/img/button_update.gif +0 -0
  67. data/html/img/button_update_gray.gif +0 -0
  68. data/html/img/button_update_over.gif +0 -0
  69. data/html/img/button_update_s.gif +0 -0
  70. data/html/img/button_update_s_gray.gif +0 -0
  71. data/html/img/button_update_s_over.gif +0 -0
  72. data/html/img/button_yes.gif +0 -0
  73. data/html/img/button_yes_gray.gif +0 -0
  74. data/html/img/button_yes_over.gif +0 -0
  75. data/html/img/circle.gif +0 -0
  76. data/html/img/control_play.png +0 -0
  77. data/html/img/control_play_blue.png +0 -0
  78. data/html/img/delta.gif +0 -0
  79. data/html/img/dialog_info.jpg +0 -0
  80. data/html/img/dialog_input.jpg +0 -0
  81. data/html/img/dialog_warn.jpg +0 -0
  82. data/html/img/dt-arrow-dn.png +0 -0
  83. data/html/img/dt-arrow-up.png +0 -0
  84. data/html/img/folder.png +0 -0
  85. data/html/img/folder_brick.png +0 -0
  86. data/html/img/folder_user.png +0 -0
  87. data/html/img/foot.jpg +0 -0
  88. data/html/img/goto.gif +0 -0
  89. data/html/img/goto_o.gif +0 -0
  90. data/html/img/h3_bt-create_0.gif +0 -0
  91. data/html/img/h3_bt-create_1.gif +0 -0
  92. data/html/img/h3_bt-create_2.gif +0 -0
  93. data/html/img/h3_result_0.gif +0 -0
  94. data/html/img/h3_result_1.gif +0 -0
  95. data/html/img/h3_result_2.gif +0 -0
  96. data/html/img/h3_result_3.gif +0 -0
  97. data/html/img/h3_result_4.gif +0 -0
  98. data/html/img/h3_result_5.gif +0 -0
  99. data/html/img/h3_result_6.gif +0 -0
  100. data/html/img/h3_rt-setting_0.gif +0 -0
  101. data/html/img/h3_rt-setting_1.gif +0 -0
  102. data/html/img/head.jpg +0 -0
  103. data/html/img/line-numbers.png +0 -0
  104. data/html/img/line_white.gif +0 -0
  105. data/html/img/loading.gif +0 -0
  106. data/html/img/page_white_ruby.png +0 -0
  107. data/html/img/panel_100_bottom.gif +0 -0
  108. data/html/img/panel_100_middle.gif +0 -0
  109. data/html/img/panel_100_top.gif +0 -0
  110. data/html/img/panel_140_650_b.gif +0 -0
  111. data/html/img/panel_140_650_m.gif +0 -0
  112. data/html/img/panel_140_650_t.gif +0 -0
  113. data/html/img/panel_140_660_b.gif +0 -0
  114. data/html/img/panel_140_660_m.gif +0 -0
  115. data/html/img/panel_140_660_t.gif +0 -0
  116. data/html/img/panel_140_b.gif +0 -0
  117. data/html/img/panel_140_m.gif +0 -0
  118. data/html/img/panel_140_t.gif +0 -0
  119. data/html/img/panel_260_b.gif +0 -0
  120. data/html/img/panel_260_m.gif +0 -0
  121. data/html/img/panel_260_t.gif +0 -0
  122. data/html/img/panel_300_b.gif +0 -0
  123. data/html/img/panel_300_m.gif +0 -0
  124. data/html/img/panel_300_t.gif +0 -0
  125. data/html/img/panel_320_b.gif +0 -0
  126. data/html/img/panel_320_m.gif +0 -0
  127. data/html/img/panel_320_t.gif +0 -0
  128. data/html/img/panel_360_b.gif +0 -0
  129. data/html/img/panel_360_m.gif +0 -0
  130. data/html/img/panel_360_t.gif +0 -0
  131. data/html/img/panel_380_b.gif +0 -0
  132. data/html/img/panel_380_m.gif +0 -0
  133. data/html/img/panel_380_t.gif +0 -0
  134. data/html/img/panel_500_b.gif +0 -0
  135. data/html/img/panel_500_m.gif +0 -0
  136. data/html/img/panel_500_t.gif +0 -0
  137. data/html/img/panel_620_b.gif +0 -0
  138. data/html/img/panel_620_m.gif +0 -0
  139. data/html/img/panel_620_t.gif +0 -0
  140. data/html/img/panel_780_b.gif +0 -0
  141. data/html/img/panel_780_m.gif +0 -0
  142. data/html/img/panel_780_t.gif +0 -0
  143. data/html/img/problem.gif +0 -0
  144. data/html/img/progressbar.gif +0 -0
  145. data/html/img/result-title-1-1.gif +0 -0
  146. data/html/img/result-title-1-2.gif +0 -0
  147. data/html/img/result-title-2-1.gif +0 -0
  148. data/html/img/result-title-2-2.gif +0 -0
  149. data/html/img/result-title-3-1.gif +0 -0
  150. data/html/img/result-title-4-1.gif +0 -0
  151. data/html/img/rt-setting-title-1.gif +0 -0
  152. data/html/img/rt-setting-title-2.gif +0 -0
  153. data/html/img/s.gif +0 -0
  154. data/html/img/scroll.gif +0 -0
  155. data/html/img/separator.gif +0 -0
  156. data/html/img/sidebar_agent.png +0 -0
  157. data/html/img/sidebar_agent_edit.png +0 -0
  158. data/html/img/sidebar_agent_edit_agent.png +0 -0
  159. data/html/img/sidebar_agent_edit_agent_over.png +0 -0
  160. data/html/img/sidebar_agent_edit_agent_s.png +0 -0
  161. data/html/img/sidebar_agent_edit_over.png +0 -0
  162. data/html/img/sidebar_agent_edit_s.png +0 -0
  163. data/html/img/sidebar_agent_edit_shared_lib.png +0 -0
  164. data/html/img/sidebar_agent_edit_shared_lib_over.png +0 -0
  165. data/html/img/sidebar_agent_edit_shared_lib_s.png +0 -0
  166. data/html/img/sidebar_back.gif +0 -0
  167. data/html/img/sidebar_bt.png +0 -0
  168. data/html/img/sidebar_bt_create.png +0 -0
  169. data/html/img/sidebar_bt_create_over.png +0 -0
  170. data/html/img/sidebar_bt_create_s.png +0 -0
  171. data/html/img/sidebar_bt_result.png +0 -0
  172. data/html/img/sidebar_bt_result_over.png +0 -0
  173. data/html/img/sidebar_bt_result_s.png +0 -0
  174. data/html/img/sidebar_result_rmt.png +0 -0
  175. data/html/img/sidebar_result_rmt_over.png +0 -0
  176. data/html/img/sidebar_result_rmt_s.png +0 -0
  177. data/html/img/sidebar_rt.png +0 -0
  178. data/html/img/sidebar_rt_setting.png +0 -0
  179. data/html/img/sidebar_rt_setting_over.png +0 -0
  180. data/html/img/sidebar_rt_setting_s.png +0 -0
  181. data/html/img/sprite.png +0 -0
  182. data/html/img/submenu_agents.png +0 -0
  183. data/html/img/submenu_agents_over.png +0 -0
  184. data/html/img/submenu_agents_s.png +0 -0
  185. data/html/img/submenu_graph.png +0 -0
  186. data/html/img/submenu_graph_over.png +0 -0
  187. data/html/img/submenu_graph_s.png +0 -0
  188. data/html/img/submenu_info.png +0 -0
  189. data/html/img/submenu_info_over.png +0 -0
  190. data/html/img/submenu_info_s.png +0 -0
  191. data/html/img/submenu_log.png +0 -0
  192. data/html/img/submenu_log_over.png +0 -0
  193. data/html/img/submenu_log_s.png +0 -0
  194. data/html/img/submenu_operation.png +0 -0
  195. data/html/img/submenu_operation_over.png +0 -0
  196. data/html/img/submenu_operation_s.png +0 -0
  197. data/html/img/submenu_trade.png +0 -0
  198. data/html/img/submenu_trade_over.png +0 -0
  199. data/html/img/submenu_trade_s.png +0 -0
  200. data/html/img/td_over.gif +0 -0
  201. data/html/img/td_over_d.gif +0 -0
  202. data/html/img/td_selected.gif +0 -0
  203. data/html/img/thead.gif +0 -0
  204. data/html/img/transparent.gif +0 -0
  205. data/html/img/yui/treeview-sprite.gif +0 -0
  206. data/html/index.html +492 -0
  207. data/html/js/agent-editor/agent-editor-page.js +324 -0
  208. data/html/js/agent-editor/agent-editor.js +363 -0
  209. data/html/js/agent-editor/agent-list-tree.js +251 -0
  210. data/html/js/agent-selector.js +666 -0
  211. data/html/js/app.js +198 -0
  212. data/html/js/bt-create-page.js +205 -0
  213. data/html/js/container-min.js +1 -0
  214. data/html/js/container-utils.js +78 -0
  215. data/html/js/container.js +944 -0
  216. data/html/js/dialog.js +279 -0
  217. data/html/js/edit_area/autocompletion.js +491 -0
  218. data/html/js/edit_area/edit_area.css +546 -0
  219. data/html/js/edit_area/edit_area.js +539 -0
  220. data/html/js/edit_area/edit_area_compressor.php +408 -0
  221. data/html/js/edit_area/edit_area_full.gz +0 -0
  222. data/html/js/edit_area/edit_area_full.js +38 -0
  223. data/html/js/edit_area/edit_area_full_with_plugins.gz +0 -0
  224. data/html/js/edit_area/edit_area_full_with_plugins.js +39 -0
  225. data/html/js/edit_area/edit_area_functions.js +1205 -0
  226. data/html/js/edit_area/edit_area_loader.js +1082 -0
  227. data/html/js/edit_area/elements_functions.js +334 -0
  228. data/html/js/edit_area/highlight.js +391 -0
  229. data/html/js/edit_area/images/autocompletion.gif +0 -0
  230. data/html/js/edit_area/images/close.gif +0 -0
  231. data/html/js/edit_area/images/fullscreen.gif +0 -0
  232. data/html/js/edit_area/images/go_to_line.gif +0 -0
  233. data/html/js/edit_area/images/goto.png +0 -0
  234. data/html/js/edit_area/images/help.gif +0 -0
  235. data/html/js/edit_area/images/help.png +0 -0
  236. data/html/js/edit_area/images/highlight.gif +0 -0
  237. data/html/js/edit_area/images/load.gif +0 -0
  238. data/html/js/edit_area/images/move.gif +0 -0
  239. data/html/js/edit_area/images/newdocument.gif +0 -0
  240. data/html/js/edit_area/images/opacity.png +0 -0
  241. data/html/js/edit_area/images/processing.gif +0 -0
  242. data/html/js/edit_area/images/redo.gif +0 -0
  243. data/html/js/edit_area/images/redo.png +0 -0
  244. data/html/js/edit_area/images/reset_highlight.gif +0 -0
  245. data/html/js/edit_area/images/save.gif +0 -0
  246. data/html/js/edit_area/images/save.png +0 -0
  247. data/html/js/edit_area/images/search.gif +0 -0
  248. data/html/js/edit_area/images/search.png +0 -0
  249. data/html/js/edit_area/images/smooth_selection.gif +0 -0
  250. data/html/js/edit_area/images/spacer.gif +0 -0
  251. data/html/js/edit_area/images/statusbar_resize.gif +0 -0
  252. data/html/js/edit_area/images/undo.gif +0 -0
  253. data/html/js/edit_area/images/undo.png +0 -0
  254. data/html/js/edit_area/images/word_wrap.gif +0 -0
  255. data/html/js/edit_area/keyboard.js +145 -0
  256. data/html/js/edit_area/langs/bg.js +73 -0
  257. data/html/js/edit_area/langs/cs.js +67 -0
  258. data/html/js/edit_area/langs/de.js +67 -0
  259. data/html/js/edit_area/langs/dk.js +67 -0
  260. data/html/js/edit_area/langs/en.js +67 -0
  261. data/html/js/edit_area/langs/eo.js +67 -0
  262. data/html/js/edit_area/langs/es.js +64 -0
  263. data/html/js/edit_area/langs/fi.js +67 -0
  264. data/html/js/edit_area/langs/fr.js +67 -0
  265. data/html/js/edit_area/langs/hr.js +67 -0
  266. data/html/js/edit_area/langs/it.js +67 -0
  267. data/html/js/edit_area/langs/ja.js +67 -0
  268. data/html/js/edit_area/langs/mk.js +67 -0
  269. data/html/js/edit_area/langs/nl.js +67 -0
  270. data/html/js/edit_area/langs/pl.js +67 -0
  271. data/html/js/edit_area/langs/pt.js +67 -0
  272. data/html/js/edit_area/langs/ru.js +67 -0
  273. data/html/js/edit_area/langs/sk.js +67 -0
  274. data/html/js/edit_area/langs/zh.js +67 -0
  275. data/html/js/edit_area/license_apache.txt +7 -0
  276. data/html/js/edit_area/license_bsd.txt +10 -0
  277. data/html/js/edit_area/license_lgpl.txt +458 -0
  278. data/html/js/edit_area/manage_area.js +623 -0
  279. data/html/js/edit_area/plugins/charmap/charmap.js +90 -0
  280. data/html/js/edit_area/plugins/charmap/css/charmap.css +64 -0
  281. data/html/js/edit_area/plugins/charmap/images/charmap.gif +0 -0
  282. data/html/js/edit_area/plugins/charmap/jscripts/map.js +373 -0
  283. data/html/js/edit_area/plugins/charmap/langs/bg.js +12 -0
  284. data/html/js/edit_area/plugins/charmap/langs/cs.js +6 -0
  285. data/html/js/edit_area/plugins/charmap/langs/de.js +6 -0
  286. data/html/js/edit_area/plugins/charmap/langs/dk.js +6 -0
  287. data/html/js/edit_area/plugins/charmap/langs/en.js +6 -0
  288. data/html/js/edit_area/plugins/charmap/langs/eo.js +6 -0
  289. data/html/js/edit_area/plugins/charmap/langs/es.js +6 -0
  290. data/html/js/edit_area/plugins/charmap/langs/fr.js +6 -0
  291. data/html/js/edit_area/plugins/charmap/langs/hr.js +6 -0
  292. data/html/js/edit_area/plugins/charmap/langs/it.js +6 -0
  293. data/html/js/edit_area/plugins/charmap/langs/ja.js +6 -0
  294. data/html/js/edit_area/plugins/charmap/langs/mk.js +6 -0
  295. data/html/js/edit_area/plugins/charmap/langs/nl.js +6 -0
  296. data/html/js/edit_area/plugins/charmap/langs/pl.js +6 -0
  297. data/html/js/edit_area/plugins/charmap/langs/pt.js +6 -0
  298. data/html/js/edit_area/plugins/charmap/langs/ru.js +6 -0
  299. data/html/js/edit_area/plugins/charmap/langs/sk.js +6 -0
  300. data/html/js/edit_area/plugins/charmap/langs/zh.js +6 -0
  301. data/html/js/edit_area/plugins/charmap/popup.html +24 -0
  302. data/html/js/edit_area/plugins/test/css/test.css +3 -0
  303. data/html/js/edit_area/plugins/test/images/Thumbs.db +0 -0
  304. data/html/js/edit_area/plugins/test/images/test.gif +0 -0
  305. data/html/js/edit_area/plugins/test/langs/bg.js +10 -0
  306. data/html/js/edit_area/plugins/test/langs/cs.js +4 -0
  307. data/html/js/edit_area/plugins/test/langs/de.js +4 -0
  308. data/html/js/edit_area/plugins/test/langs/dk.js +4 -0
  309. data/html/js/edit_area/plugins/test/langs/en.js +4 -0
  310. data/html/js/edit_area/plugins/test/langs/eo.js +4 -0
  311. data/html/js/edit_area/plugins/test/langs/es.js +4 -0
  312. data/html/js/edit_area/plugins/test/langs/fr.js +4 -0
  313. data/html/js/edit_area/plugins/test/langs/hr.js +4 -0
  314. data/html/js/edit_area/plugins/test/langs/it.js +4 -0
  315. data/html/js/edit_area/plugins/test/langs/ja.js +4 -0
  316. data/html/js/edit_area/plugins/test/langs/mk.js +4 -0
  317. data/html/js/edit_area/plugins/test/langs/nl.js +4 -0
  318. data/html/js/edit_area/plugins/test/langs/pl.js +4 -0
  319. data/html/js/edit_area/plugins/test/langs/pt.js +4 -0
  320. data/html/js/edit_area/plugins/test/langs/ru.js +4 -0
  321. data/html/js/edit_area/plugins/test/langs/sk.js +4 -0
  322. data/html/js/edit_area/plugins/test/langs/zh.js +4 -0
  323. data/html/js/edit_area/plugins/test/test.js +110 -0
  324. data/html/js/edit_area/plugins/test/test2.js +1 -0
  325. data/html/js/edit_area/reg_syntax/basic.js +69 -0
  326. data/html/js/edit_area/reg_syntax/brainfuck.js +44 -0
  327. data/html/js/edit_area/reg_syntax/c.js +62 -0
  328. data/html/js/edit_area/reg_syntax/coldfusion.js +119 -0
  329. data/html/js/edit_area/reg_syntax/cpp.js +65 -0
  330. data/html/js/edit_area/reg_syntax/css.js +84 -0
  331. data/html/js/edit_area/reg_syntax/html.js +50 -0
  332. data/html/js/edit_area/reg_syntax/java.js +56 -0
  333. data/html/js/edit_area/reg_syntax/js.js +93 -0
  334. data/html/js/edit_area/reg_syntax/pas.js +82 -0
  335. data/html/js/edit_area/reg_syntax/perl.js +88 -0
  336. data/html/js/edit_area/reg_syntax/php.js +156 -0
  337. data/html/js/edit_area/reg_syntax/python.js +144 -0
  338. data/html/js/edit_area/reg_syntax/robotstxt.js +24 -0
  339. data/html/js/edit_area/reg_syntax/ruby.js +67 -0
  340. data/html/js/edit_area/reg_syntax/sql.js +55 -0
  341. data/html/js/edit_area/reg_syntax/tsql.js +87 -0
  342. data/html/js/edit_area/reg_syntax/vb.js +52 -0
  343. data/html/js/edit_area/reg_syntax/xml.js +56 -0
  344. data/html/js/edit_area/reg_syntax.js +166 -0
  345. data/html/js/edit_area/regexp.js +139 -0
  346. data/html/js/edit_area/resize_area.js +78 -0
  347. data/html/js/edit_area/search_replace.js +174 -0
  348. data/html/js/edit_area/template.html +101 -0
  349. data/html/js/json-broker-client.js +67 -0
  350. data/html/js/page-manager.js +93 -0
  351. data/html/js/prototype.js +4184 -0
  352. data/html/js/result-page.js +775 -0
  353. data/html/js/rt-setting-page.js +152 -0
  354. data/html/js/sidebar.js +263 -0
  355. data/html/js/templates.js +386 -0
  356. data/html/js/utils.js +890 -0
  357. data/html/js/uuid.js +103 -0
  358. data/html/js/yui/treeview.js +3671 -0
  359. data/html/swf/chart.swf +0 -0
  360. data/html/test/agent_editor_spec.js +815 -0
  361. data/html/test/index.html +40 -0
  362. data/html/test/jsspec/JSSpec.css +224 -0
  363. data/html/test/jsspec/JSSpec.js +1549 -0
  364. data/html/test/jsspec/diff_match_patch.js +1 -0
  365. data/html/test/utils_spec.js +111 -0
  366. data/lib/jiji/agent/agent.rb +149 -0
  367. data/lib/jiji/agent/agent_manager.rb +138 -0
  368. data/lib/jiji/agent/agent_registry.rb +165 -0
  369. data/lib/jiji/agent/permitter.rb +128 -0
  370. data/lib/jiji/agent/util.rb +16 -0
  371. data/lib/jiji/collector.rb +226 -0
  372. data/lib/jiji/command.rb +204 -0
  373. data/lib/jiji/configuration.rb +86 -0
  374. data/lib/jiji/dao/file_system_dao.rb +158 -0
  375. data/lib/jiji/dao/rate_dao.rb +149 -0
  376. data/lib/jiji/dao/timed_data_dao.rb +336 -0
  377. data/lib/jiji/dao/trade_result_dao.rb +128 -0
  378. data/lib/jiji/error.rb +49 -0
  379. data/lib/jiji/migration/migrator.rb +50 -0
  380. data/lib/jiji/migration/migrator1_0_3.rb +26 -0
  381. data/lib/jiji/migration/migrator1_1_0.rb +46 -0
  382. data/lib/jiji/migration/migrator1_2_0.rb +67 -0
  383. data/lib/jiji/models.rb +223 -0
  384. data/lib/jiji/observer.rb +105 -0
  385. data/lib/jiji/operator.rb +396 -0
  386. data/lib/jiji/output.rb +221 -0
  387. data/lib/jiji/output_manager.rb +84 -0
  388. data/lib/jiji/plugin/embedded/click_securities_demo_plugin.rb +141 -0
  389. data/lib/jiji/plugin/embedded/single_click_client.rb +116 -0
  390. data/lib/jiji/plugin/plugin_loader.rb +53 -0
  391. data/lib/jiji/plugin/securities_plugin.rb +134 -0
  392. data/lib/jiji/process.rb +234 -0
  393. data/lib/jiji/process_manager.rb +290 -0
  394. data/lib/jiji/registry.rb +349 -0
  395. data/lib/jiji/server.rb +127 -0
  396. data/lib/jiji/service/agent_service.rb +230 -0
  397. data/lib/jiji/service/hello_service.rb +10 -0
  398. data/lib/jiji/service/output_service.rb +82 -0
  399. data/lib/jiji/service/process_service.rb +76 -0
  400. data/lib/jiji/service/rate_service.rb +38 -0
  401. data/lib/jiji/service/system_service.rb +14 -0
  402. data/lib/jiji/service/trade_result_service.rb +31 -0
  403. data/lib/jiji/util/backtester.rb +116 -0
  404. data/lib/jiji/util/block_to_session.rb +70 -0
  405. data/lib/jiji/util/cache.rb +79 -0
  406. data/lib/jiji/util/csv_append_support.rb +15 -0
  407. data/lib/jiji/util/file_lock.rb +86 -0
  408. data/lib/jiji/util/fix_yaml_bug.rb +11 -0
  409. data/lib/jiji/util/include_proxy.rb +17 -0
  410. data/lib/jiji/util/iterator.rb +70 -0
  411. data/lib/jiji/util/json_broker.rb +55 -0
  412. data/lib/jiji/util/json_rpc_requestor.rb +30 -0
  413. data/lib/jiji/util/rate_data_importer.rb +219 -0
  414. data/lib/jiji/util/synchronize_interceptor.rb +41 -0
  415. data/lib/jiji/util/thread_use_generator.rb +52 -0
  416. data/lib/jiji/util/util.rb +112 -0
  417. data/lib/jiji_plugin.rb +6 -0
  418. data/swf/build.xml +23 -0
  419. data/swf/chart/FxChart-config.xml +9 -0
  420. data/swf/chart/FxChart.mxml +17 -0
  421. data/swf/chart/fx/chart/Chart.as +173 -0
  422. data/swf/chart/fx/chart/ctrl/AutoUpdate.as +96 -0
  423. data/swf/chart/fx/chart/ctrl/Controller.as +270 -0
  424. data/swf/chart/fx/chart/ctrl/Event.as +75 -0
  425. data/swf/chart/fx/chart/model/Model.as +228 -0
  426. data/swf/chart/fx/chart/model/TimedData.as +40 -0
  427. data/swf/chart/fx/chart/ui/AbstractChartUI.as +59 -0
  428. data/swf/chart/fx/chart/ui/AbstractDrawChartUI.as +63 -0
  429. data/swf/chart/fx/chart/ui/Constants.as +233 -0
  430. data/swf/chart/fx/chart/ui/InformationWindow.as +228 -0
  431. data/swf/chart/fx/chart/ui/LayerManager.as +95 -0
  432. data/swf/chart/fx/chart/ui/Loading.as +32 -0
  433. data/swf/chart/fx/chart/ui/Pointer.as +61 -0
  434. data/swf/chart/fx/chart/ui/RangeInfoWindow.as +84 -0
  435. data/swf/chart/fx/chart/ui/RenderingContext.as +54 -0
  436. data/swf/chart/fx/chart/ui/ScaleSelector.as +84 -0
  437. data/swf/chart/fx/chart/ui/Scroll.as +241 -0
  438. data/swf/chart/fx/chart/ui/ScrollBar.as +378 -0
  439. data/swf/chart/fx/chart/ui/Stage.as +97 -0
  440. data/swf/chart/fx/chart/ui/TradeDetailWindow.as +147 -0
  441. data/swf/chart/fx/chart/ui/TradeResult.as +330 -0
  442. data/swf/chart/fx/chart/ui/Window.as +96 -0
  443. data/swf/chart/fx/chart/ui/candle/Axis.as +112 -0
  444. data/swf/chart/fx/chart/ui/candle/Candle.as +79 -0
  445. data/swf/chart/fx/chart/ui/candle/CandleChart.as +81 -0
  446. data/swf/chart/fx/chart/ui/graph/Graph.as +200 -0
  447. data/swf/chart/fx/chart/ui/graph/GraphManager.as +192 -0
  448. data/swf/chart/fx/chart/ui/resource/buy.gif +0 -0
  449. data/swf/chart/fx/chart/ui/resource/cursor_hand.gif +0 -0
  450. data/swf/chart/fx/chart/ui/resource/diff_label.gif +0 -0
  451. data/swf/chart/fx/chart/ui/resource/down.gif +0 -0
  452. data/swf/chart/fx/chart/ui/resource/down_buy.gif +0 -0
  453. data/swf/chart/fx/chart/ui/resource/down_buy_1.gif +0 -0
  454. data/swf/chart/fx/chart/ui/resource/down_buy_2.gif +0 -0
  455. data/swf/chart/fx/chart/ui/resource/down_buy_3.gif +0 -0
  456. data/swf/chart/fx/chart/ui/resource/down_sell.gif +0 -0
  457. data/swf/chart/fx/chart/ui/resource/down_sell_1.gif +0 -0
  458. data/swf/chart/fx/chart/ui/resource/down_sell_2.gif +0 -0
  459. data/swf/chart/fx/chart/ui/resource/down_sell_3.gif +0 -0
  460. data/swf/chart/fx/chart/ui/resource/draw_buy.gif +0 -0
  461. data/swf/chart/fx/chart/ui/resource/draw_sell.gif +0 -0
  462. data/swf/chart/fx/chart/ui/resource/end_label.gif +0 -0
  463. data/swf/chart/fx/chart/ui/resource/fixed.gif +0 -0
  464. data/swf/chart/fx/chart/ui/resource/loading.gif +0 -0
  465. data/swf/chart/fx/chart/ui/resource/max_label.gif +0 -0
  466. data/swf/chart/fx/chart/ui/resource/min_label.gif +0 -0
  467. data/swf/chart/fx/chart/ui/resource/scroll_bar.gif +0 -0
  468. data/swf/chart/fx/chart/ui/resource/scroll_bar_a.gif +0 -0
  469. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle.gif +0 -0
  470. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_a.gif +0 -0
  471. data/swf/chart/fx/chart/ui/resource/scroll_bar_handle_o.gif +0 -0
  472. data/swf/chart/fx/chart/ui/resource/scroll_bar_left.gif +0 -0
  473. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_a.gif +0 -0
  474. data/swf/chart/fx/chart/ui/resource/scroll_bar_left_o.gif +0 -0
  475. data/swf/chart/fx/chart/ui/resource/scroll_bar_o.gif +0 -0
  476. data/swf/chart/fx/chart/ui/resource/scroll_bar_right.gif +0 -0
  477. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_a.gif +0 -0
  478. data/swf/chart/fx/chart/ui/resource/scroll_bar_right_o.gif +0 -0
  479. data/swf/chart/fx/chart/ui/resource/scroll_handle.gif +0 -0
  480. data/swf/chart/fx/chart/ui/resource/scroll_info_handle.gif +0 -0
  481. data/swf/chart/fx/chart/ui/resource/scroll_left_button.gif +0 -0
  482. data/swf/chart/fx/chart/ui/resource/scroll_left_button_d.gif +0 -0
  483. data/swf/chart/fx/chart/ui/resource/scroll_left_button_down.gif +0 -0
  484. data/swf/chart/fx/chart/ui/resource/scroll_left_button_g.gif +0 -0
  485. data/swf/chart/fx/chart/ui/resource/scroll_left_button_o.gif +0 -0
  486. data/swf/chart/fx/chart/ui/resource/scroll_left_button_up.gif +0 -0
  487. data/swf/chart/fx/chart/ui/resource/scroll_outer.gif +0 -0
  488. data/swf/chart/fx/chart/ui/resource/scroll_outer_left.gif +0 -0
  489. data/swf/chart/fx/chart/ui/resource/scroll_outer_right.gif +0 -0
  490. data/swf/chart/fx/chart/ui/resource/scroll_right_button.gif +0 -0
  491. data/swf/chart/fx/chart/ui/resource/scroll_right_button_d.gif +0 -0
  492. data/swf/chart/fx/chart/ui/resource/scroll_right_button_down.gif +0 -0
  493. data/swf/chart/fx/chart/ui/resource/scroll_right_button_g.gif +0 -0
  494. data/swf/chart/fx/chart/ui/resource/scroll_right_button_o.gif +0 -0
  495. data/swf/chart/fx/chart/ui/resource/scroll_right_button_up.gif +0 -0
  496. data/swf/chart/fx/chart/ui/resource/scroll_slider_left.gif +0 -0
  497. data/swf/chart/fx/chart/ui/resource/scroll_slider_right.gif +0 -0
  498. data/swf/chart/fx/chart/ui/resource/sell.gif +0 -0
  499. data/swf/chart/fx/chart/ui/resource/start_label.gif +0 -0
  500. data/swf/chart/fx/chart/ui/resource/stripe.gif +0 -0
  501. data/swf/chart/fx/chart/ui/resource/stripe_b.gif +0 -0
  502. data/swf/chart/fx/chart/ui/resource/stripe_r.gif +0 -0
  503. data/swf/chart/fx/chart/ui/resource/unfixed.gif +0 -0
  504. data/swf/chart/fx/chart/ui/resource/up.gif +0 -0
  505. data/swf/chart/fx/chart/ui/resource/up_buy.gif +0 -0
  506. data/swf/chart/fx/chart/ui/resource/up_buy_1.gif +0 -0
  507. data/swf/chart/fx/chart/ui/resource/up_buy_2.gif +0 -0
  508. data/swf/chart/fx/chart/ui/resource/up_buy_3.gif +0 -0
  509. data/swf/chart/fx/chart/ui/resource/up_sell.gif +0 -0
  510. data/swf/chart/fx/chart/ui/resource/up_sell_1.gif +0 -0
  511. data/swf/chart/fx/chart/ui/resource/up_sell_2.gif +0 -0
  512. data/swf/chart/fx/chart/ui/resource/up_sell_3.gif +0 -0
  513. data/swf/chart/fx/net/StubFactory.as +113 -0
  514. data/swf/chart/fx/util/ListenerSupport.as +55 -0
  515. data/swf/chart/fx/util/PositionManager.as +95 -0
  516. data/swf/chart/fx/util/ScaleFormatter.as +156 -0
  517. data/swf/chart/fx/util/Util.as +61 -0
  518. data/swf/chart/log.as +40 -0
  519. data/swf/lib/corelib.swc +0 -0
  520. data/test/BackCollectorTest/basic/2008-08-04/AUDJPY.csv +5 -0
  521. data/test/BackCollectorTest/basic/2008-08-04/USDJPY.csv +5 -0
  522. data/test/BackCollectorTest/basic/2008-08-04/ZARJPY.csv +5 -0
  523. data/test/BackCollectorTest/basic/2008-08-05/AUDJPY.csv +5 -0
  524. data/test/BackCollectorTest/basic/2008-08-05/USDJPY.csv +5 -0
  525. data/test/BackCollectorTest/basic/2008-08-05/ZARJPY.csv +5 -0
  526. data/test/BackCollectorTest/basic/2008-08-06/AUDJPY.csv +5 -0
  527. data/test/BackCollectorTest/basic/2008-08-06/USDJPY.csv +5 -0
  528. data/test/BackCollectorTest/basic/2008-08-06/ZARJPY.csv +5 -0
  529. data/test/BackCollectorTest/basic/2008-08-07/AUDJPY.csv +5 -0
  530. data/test/BackCollectorTest/basic/2008-08-07/USDJPY.csv +5 -0
  531. data/test/BackCollectorTest/basic/2008-08-07/ZARJPY.csv +5 -0
  532. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-04.csv +5 -0
  533. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-05.csv +5 -0
  534. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-06.csv +5 -0
  535. data/test/BackCollectorTest/basic/AUDJPY/raw/2008-08-07.csv +5 -0
  536. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-04.csv +5 -0
  537. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-05.csv +5 -0
  538. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-06.csv +5 -0
  539. data/test/BackCollectorTest/basic/USDJPY/raw/2008-08-07.csv +5 -0
  540. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-04.csv +5 -0
  541. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-05.csv +5 -0
  542. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-06.csv +5 -0
  543. data/test/BackCollectorTest/basic/ZARJPY/raw/2008-08-07.csv +5 -0
  544. data/test/BackCollectorTest/lack/2008-08-04/AUDJPY.csv +5 -0
  545. data/test/BackCollectorTest/lack/2008-08-04/USDJPY.csv +5 -0
  546. data/test/BackCollectorTest/lack/2008-08-04/ZARJPY.csv +5 -0
  547. data/test/BackCollectorTest/lack/2008-08-06/AUDJPY.csv +5 -0
  548. data/test/BackCollectorTest/lack/2008-08-06/USDJPY.csv +5 -0
  549. data/test/BackCollectorTest/lack/2008-08-06/ZARJPY.csv +5 -0
  550. data/test/BackCollectorTest/lack/2008-08-07/AUDJPY.csv +5 -0
  551. data/test/BackCollectorTest/lack/2008-08-07/USDJPY.csv +5 -0
  552. data/test/BackCollectorTest/lack/2008-08-07/ZARJPY.csv +5 -0
  553. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-04.csv +5 -0
  554. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-06.csv +5 -0
  555. data/test/BackCollectorTest/lack/AUDJPY/raw/2008-08-07.csv +5 -0
  556. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-04.csv +5 -0
  557. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-06.csv +5 -0
  558. data/test/BackCollectorTest/lack/USDJPY/raw/2008-08-07.csv +5 -0
  559. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-04.csv +5 -0
  560. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-06.csv +5 -0
  561. data/test/BackCollectorTest/lack/ZARJPY/raw/2008-08-07.csv +5 -0
  562. data/test/OutputregistryTest/conf/configuration.yaml +3 -0
  563. data/test/ProcessManagerTest/agents/moving_average.rb +95 -0
  564. data/test/ProcessManagerTest/conf/configuration.yaml +6 -0
  565. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-21.csv +5853 -0
  566. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-22.csv +5821 -0
  567. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-23.csv +5921 -0
  568. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-24.csv +5956 -0
  569. data/test/ProcessManagerTest/rate_datas/EURJPY/raw/2008-08-25.csv +5796 -0
  570. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-21.csv +5853 -0
  571. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-22.csv +5821 -0
  572. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-23.csv +5921 -0
  573. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-24.csv +5956 -0
  574. data/test/ProcessManagerTest/rate_datas/USDJPY/raw/2008-08-25.csv +5796 -0
  575. data/test/ProcessTest/agents/foo.rb +10 -0
  576. data/test/ProcessTest/conf/configuration.yaml +3 -0
  577. data/test/agent/agent_tests.rb +10 -0
  578. data/test/agent/test_AgentManager.rb +321 -0
  579. data/test/agent/test_AgentRegistry.rb +662 -0
  580. data/test/agent/test_PeriodicallyAgent.rb +180 -0
  581. data/test/agent/test_Permitter.rb +217 -0
  582. data/test/all_tests.rb +24 -0
  583. data/test/dao/dao_tests.rb +9 -0
  584. data/test/dao/test_FileSystemDao.rb +431 -0
  585. data/test/dao/test_RateDao.rb +695 -0
  586. data/test/dao/test_TradeResultDao.rb +487 -0
  587. data/test/jiji_plugin.rb +7 -0
  588. data/test/migration/migration_tests.rb +10 -0
  589. data/test/migration/migrator1_0_3test_data/rmt/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  590. data/test/migration/migrator1_0_3test_data/rmt/out/NjM5YWFhZmQtNDFjNy00NjUxLWIwYmItNTc3ZjAyZTg5ODA5/56e75YuV5bmz5Z2H57ea/meta.yaml +12 -0
  591. data/test/migration/migrator1_0_3test_data/rmt/out/NjM5YWFhZmQtNDFjNy00NjUxLWIwYmItNTc3ZjAyZTg5ODA5/56e75Yuasdwqdd/meta.yaml +12 -0
  592. data/test/migration/migrator1_1_0test_data/configuration.yaml +11 -0
  593. data/test/migration/migrator1_2_0test_data/basic/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  594. data/test/migration/migrator1_2_0test_data/basic/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  595. data/test/migration/migrator1_2_0test_data/basic/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  596. data/test/migration/migrator1_2_0test_data/basic/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  597. data/test/migration/migrator1_2_0test_data/basic/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  598. data/test/migration/migrator1_2_0test_data/basic/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  599. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  600. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  601. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  602. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  603. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  604. data/test/migration/migrator1_2_0test_data/basic/props.yaml +85 -0
  605. data/test/migration/migrator1_2_0test_data/illegal_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  606. data/test/migration/migrator1_2_0test_data/illegal_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  607. data/test/migration/migrator1_2_0test_data/illegal_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  608. data/test/migration/migrator1_2_0test_data/illegal_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  609. data/test/migration/migrator1_2_0test_data/illegal_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  610. data/test/migration/migrator1_2_0test_data/illegal_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  611. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  612. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  613. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  614. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  615. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  616. data/test/migration/migrator1_2_0test_data/illegal_props/props.yaml +1 -0
  617. data/test/migration/migrator1_2_0test_data/no_outs/props.yaml +85 -0
  618. data/test/migration/migrator1_2_0test_data/no_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +8 -0
  619. data/test/migration/migrator1_2_0test_data/no_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  620. data/test/migration/migrator1_2_0test_data/no_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  621. data/test/migration/migrator1_2_0test_data/no_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  622. data/test/migration/migrator1_2_0test_data/no_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +1 -0
  623. data/test/migration/migrator1_2_0test_data/no_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  624. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-04.csv +10 -0
  625. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-05.csv +20 -0
  626. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-06.csv +20 -0
  627. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/1d/2009-07.csv +18 -0
  628. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  629. data/test/migration/test_Migrator.rb +117 -0
  630. data/test/migration/test_Migrator1_0_3.rb +118 -0
  631. data/test/migration/test_Migrator1_1_0.rb +56 -0
  632. data/test/migration/test_Migrator1_2_0.rb +94 -0
  633. data/test/plugin/embedded/test_SingleClickClient.rb +144 -0
  634. data/test/plugin/error_test/jiji_plugin.rb +2 -0
  635. data/test/plugin/plugin_tests.rb +8 -0
  636. data/test/plugin/test/foo_plugin.rb +1 -0
  637. data/test/plugin/test/jiji_plugin.rb +2 -0
  638. data/test/plugin/test_Loader.rb +33 -0
  639. data/test/plugin/test_gem/a/jiji_plugin_test_gem_a-1.0.0.gem +0 -0
  640. data/test/plugin/test_gem/a/jiji_plugin_test_gem_a.gemspec +10 -0
  641. data/test/plugin/test_gem/a/lib/jiji_plugin.rb +2 -0
  642. data/test/plugin/test_gem/a/lib/jiji_plugin_test.rb +6 -0
  643. data/test/plugin/test_gem/b/jiji_plugin_test_gem_b-1.0.0.gem +0 -0
  644. data/test/plugin/test_gem/b/jiji_plugin_test_gem_b.gemspec +9 -0
  645. data/test/plugin/test_gem/b/lib/jiji_plugin.rb +2 -0
  646. data/test/service/all_service_tests.rb +10 -0
  647. data/test/service/test_AgentService.rb +185 -0
  648. data/test/service/test_OutputService.rb +33 -0
  649. data/test/service/test_RateService.rb +56 -0
  650. data/test/shared/rate.csv +144 -0
  651. data/test/shared/shared_tests.rb +9 -0
  652. data/test/shared/test_Cross.rb +144 -0
  653. data/test/shared/test_PositionManager.rb +285 -0
  654. data/test/shared/test_Signal.rb +65 -0
  655. data/test/test_BackTestCollector.rb +273 -0
  656. data/test/test_Collector.rb +230 -0
  657. data/test/test_Configuration.rb +61 -0
  658. data/test/test_Configuration_a.yaml +6 -0
  659. data/test/test_Operator.rb +501 -0
  660. data/test/test_Output.rb +175 -0
  661. data/test/test_OutputManager.rb +162 -0
  662. data/test/test_Output_registry.rb +42 -0
  663. data/test/test_Process.rb +557 -0
  664. data/test/test_ProcessManager.rb +723 -0
  665. data/test/test_utils.rb +112 -0
  666. data/test/util/test_BlockToSession.rb +121 -0
  667. data/test/util/test_CSV.rb +84 -0
  668. data/test/util/test_SynchronizeInterceptor.rb +76 -0
  669. data/test/util/util_tests.rb +9 -0
  670. metadata +941 -0
@@ -0,0 +1,723 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $: << "../lib"
4
+
5
+
6
+ #clazz = class << Thread; self; end
7
+ #clazz.__send__(:alias_method, :start_org, :start )
8
+ #def Thread.start(*args, &b)
9
+ # Thread.start_org( caller, *args) {|stack, *arg|
10
+ # Thread.current[:stack] = stack
11
+ # yield( *arg )
12
+ # }
13
+ #end
14
+ #def Thread.fork(*args, &b)
15
+ # Thread.start_org( caller, *args) {|stack, *arg|
16
+ # Thread.current[:stack] = stack
17
+ # yield( *arg )
18
+ # }
19
+ #end
20
+ #def Thread.new(*args, &b)
21
+ # Thread.start_org( caller, *args) {|stack, *arg|
22
+ # Thread.current[:stack] = stack
23
+ # yield( *arg )
24
+ # }
25
+ #end
26
+
27
+ require 'runit/testcase'
28
+ require 'runit/cui/testrunner'
29
+ require 'jiji/registry'
30
+ require 'logger'
31
+ require 'test_utils'
32
+
33
+ # プロセスマネージャのテスト
34
+ class ProcessManagerTest < RUNIT::TestCase
35
+
36
+ include Test::Constants
37
+
38
+ def setup
39
+ @dir = File.dirname(__FILE__) + "/ProcessManagerTest"
40
+ FileUtils.rm_rf "#{@dir}/logs"
41
+ FileUtils.rm_rf "#{@dir}/process_logs"
42
+ @registry = JIJI::Registry.new(@dir , nil)
43
+ @registry.plugin_loader.load
44
+ @mng = @registry[:process_manager]
45
+ @omng = @registry[:output_manager]
46
+ end
47
+
48
+ def teardown
49
+ Test.destry( @registry, nil )
50
+ FileUtils.rm_rf "#{@dir}/logs"
51
+ FileUtils.rm_rf "#{@dir}/process_logs"
52
+ # Thread.list.each {|t|
53
+ # puts "---#{t}"
54
+ # puts t[:stack]
55
+ # }
56
+ end
57
+
58
+ def test_basic
59
+ @mng.start
60
+ agents = [{
61
+ "name" => "aaa",
62
+ "class" => "MovingAverageAgent@moving_average.rb",
63
+ "id"=> "44c0d256-8994-4240-a6c6-8d9546aef8c4",
64
+ "properties" => {
65
+ "period" => 10,
66
+ "short" => 25,
67
+ "long" => 75
68
+ }
69
+ }]
70
+
71
+ # プロセスを追加
72
+ pid = @mng.create_back_test( "test", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
73
+ sleep 0.1
74
+
75
+ # プロセスを取得
76
+ process = @mng.get( pid )
77
+ assert_equals process["state"], :RUNNING
78
+ assert_not_nil process.progress
79
+ assert_equals process.process_id, pid
80
+ assert_equals process["name"], "test"
81
+ assert_equals process["memo"], "memo"
82
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
83
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
84
+ assert_not_nil process["create_date"]
85
+
86
+ # 実行完了を待つ
87
+ sleep 1 while @mng.get( pid )["state"] == :RUNNING
88
+
89
+ assert_equals process["state"], :FINISHED
90
+ assert_not_nil process.progress
91
+ assert_equals process.process_id, pid
92
+ assert_equals process["name"], "test"
93
+ assert_equals process["memo"], "memo"
94
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
95
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
96
+ assert_not_nil process["create_date"]
97
+
98
+ #別のプロセスを追加
99
+ pid2 = @mng.create_back_test( "test2", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
100
+ sleep 1
101
+
102
+ process = @mng.get( pid )
103
+ assert_equals process["state"], :FINISHED
104
+ assert_not_nil process.progress
105
+ assert_equals process.process_id, pid
106
+ assert_equals process["name"], "test"
107
+ assert_equals process["memo"], "memo"
108
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
109
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
110
+ assert_not_nil process["create_date"]
111
+
112
+ process = @mng.get( pid2 )
113
+ assert_equals process["state"], :RUNNING
114
+ assert_not_nil process.progress
115
+ assert_equals process.process_id, pid2
116
+ assert_equals process["name"], "test2"
117
+ assert_equals process["memo"], "memo"
118
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
119
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
120
+ assert_not_nil process["create_date"]
121
+
122
+ # 停止
123
+ @mng.stop
124
+
125
+ process = @mng.get( pid )
126
+ assert_equals process["state"], :FINISHED
127
+ assert_not_nil process.progress
128
+ assert_equals process.process_id, pid
129
+ assert_equals process["name"], "test"
130
+ assert_equals process["memo"], "memo"
131
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
132
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
133
+ assert_not_nil process["create_date"]
134
+
135
+ process = @mng.get( pid2 )
136
+ assert_equals process["state"], :CANCELED
137
+ assert_not_nil process.progress
138
+ assert_equals process.process_id, pid2
139
+ assert_equals process["name"], "test2"
140
+ assert_equals process["memo"], "memo"
141
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
142
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
143
+ assert_not_nil process["create_date"]
144
+
145
+
146
+ # マネージャを再作成 / プロセスがローカルのファイルより復元される
147
+ recreate_registry
148
+ @mng = @registry[:process_manager]
149
+
150
+ process = @mng.get( pid )
151
+ assert_equals process["state"], :FINISHED
152
+ assert_not_nil process.progress
153
+ assert_equals process.process_id, pid
154
+ assert_equals process["name"], "test"
155
+ assert_equals process["memo"], "memo"
156
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
157
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
158
+ assert_not_nil process["create_date"]
159
+
160
+ process = @mng.get( pid2 )
161
+ assert_equals process["state"], :CANCELED
162
+ assert_not_nil process.progress
163
+ assert_equals process.process_id, pid2
164
+ assert_equals process["name"], "test2"
165
+ assert_equals process["memo"], "memo"
166
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
167
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
168
+ assert_not_nil process["create_date"]
169
+
170
+
171
+ # プロセスを削除
172
+ @mng.delete_back_test( pid )
173
+ assert_process_not_found(pid)
174
+
175
+ process = @mng.get( pid2 )
176
+ assert_equals process["state"], :CANCELED
177
+ assert_not_nil process.progress
178
+ assert_equals process.process_id, pid2
179
+ assert_equals process["name"], "test2"
180
+ assert_equals process["memo"], "memo"
181
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
182
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
183
+ assert_not_nil process["create_date"]
184
+
185
+ @mng.delete_back_test( pid2 )
186
+ assert_process_not_found(pid2)
187
+
188
+ # マネージャを再作成 / 削除されたデータは消えている筈
189
+ recreate_registry
190
+ @mng = @registry[:process_manager]
191
+
192
+ assert_process_not_found(pid)
193
+ assert_process_not_found(pid2)
194
+
195
+ # 実行中に削除
196
+ pid3 = @mng.create_back_test( "test3", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
197
+ sleep 0.1
198
+
199
+ process = @mng.get( pid3 )
200
+ assert_equals process["state"], :RUNNING
201
+ assert_not_nil process.progress
202
+ assert_equals process.process_id, pid3
203
+ assert_equals process["name"], "test3"
204
+ assert_equals process["memo"], "memo"
205
+ assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
206
+ assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
207
+ assert_not_nil process["create_date"]
208
+
209
+ @mng.delete_back_test( pid3 )
210
+ assert_process_not_found(pid3)
211
+
212
+ # マネージャを再作成 / 削除されたデータは消えている筈
213
+ recreate_registry
214
+ @mng = @registry[:process_manager]
215
+ assert_process_not_found(pid3)
216
+
217
+ end
218
+
219
+ #
220
+ #複数プロセスを同時に起動するテスト。
221
+ #
222
+ def test_multi_process
223
+ @mng.start
224
+ agents = [{
225
+ "name" => "aaa",
226
+ "class" => "MovingAverageAgent@moving_average.rb",
227
+ "id"=> "44c0d256-8994-4240-a6c6-8d9546aef8c4",
228
+ "properties" => {
229
+ "period" => 10,
230
+ "short" => 25,
231
+ "long" => 75
232
+ }
233
+ }]
234
+
235
+ # プロセスを追加
236
+ pid = @mng.create_back_test( "test", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
237
+ sleep 1
238
+
239
+ # プロセスを取得
240
+ process = @mng.get( pid )
241
+ assert_equals process["state"], :RUNNING
242
+ assert_not_nil process.progress
243
+ assert_equals process.process_id, pid
244
+
245
+ #別のプロセスを追加
246
+ pid2 = @mng.create_back_test( "test2", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
247
+ sleep 1
248
+
249
+ #別のプロセスは待機中になる。
250
+ process = @mng.get( pid2 )
251
+ assert_equals process["state"], :WAITING
252
+ assert_not_nil process.progress
253
+ assert_equals process.process_id, pid2
254
+
255
+ process = @mng.get( pid )
256
+ assert_equals process["state"], :RUNNING
257
+ assert_not_nil process.progress
258
+ assert_equals process.process_id, pid
259
+
260
+ # 実行完了を待つ
261
+ sleep 1 while @mng.get( pid )["state"] == :RUNNING
262
+
263
+ process = @mng.get( pid )
264
+ assert_equals process["state"], :FINISHED
265
+ assert_not_nil process.progress
266
+ assert_equals process.process_id, pid
267
+
268
+ sleep 1
269
+
270
+ #別のプロセスが開始される。
271
+ process = @mng.get( pid2 )
272
+ assert_equals process["state"], :RUNNING
273
+ assert_not_nil process.progress
274
+ assert_equals process.process_id, pid2
275
+
276
+ # 別のプロセスを追加して削除
277
+ pid3 = @mng.create_back_test( "test3", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
278
+ sleep 1
279
+ process = @mng.get( pid3 )
280
+ assert_equals process["state"], :WAITING
281
+ assert_not_nil process.progress
282
+ assert_equals process.process_id, pid3
283
+
284
+ @mng.delete_back_test( pid3 )
285
+ assert_process_not_found(pid3)
286
+
287
+ sleep 1 while @mng.get( pid2 )["state"] == :RUNNING
288
+
289
+ process = @mng.get( pid2 )
290
+ assert_equals process["state"], :FINISHED
291
+ assert_not_nil process.progress
292
+ assert_equals process.process_id, pid2
293
+
294
+ sleep 10
295
+
296
+ ## 待機状態のまま再起動
297
+ # プロセスを追加
298
+ pid4 = @mng.create_back_test( "test4", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
299
+ sleep 10
300
+
301
+ #別のプロセスを追加
302
+ pid5 = @mng.create_back_test( "test5", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
303
+
304
+ process = @mng.get( pid4 )
305
+ assert_equals process["state"], :RUNNING
306
+ assert_not_nil process.progress
307
+ assert_equals process.process_id, pid4
308
+
309
+ process = @mng.get( pid5 )
310
+ assert_equals process["state"], :WAITING
311
+ assert_not_nil process.progress
312
+ assert_equals process.process_id, pid5
313
+
314
+ recreate_registry
315
+ @mng = @registry[:process_manager]
316
+
317
+ # 実行中のものも待機中のものもキャンセル状態になる。
318
+ process = @mng.get( pid4 )
319
+ assert_equals process["state"], :CANCELED
320
+ assert_not_nil process.progress
321
+ assert_equals process.process_id, pid4
322
+
323
+ process = @mng.get( pid5)
324
+ assert_equals process["state"], :CANCELED
325
+ assert_not_nil process.progress
326
+ assert_equals process.process_id, pid5
327
+ end
328
+
329
+ #リスタートのテスト。
330
+ def test_restart
331
+ @mng.start
332
+ agents = [{
333
+ "name" => "aaa",
334
+ "class" => "MovingAverageAgent@moving_average.rb",
335
+ "id"=> "44c0d256-8994-4240-a6c6-8d9546aef8c4",
336
+ "properties" => {
337
+ "period" => 10,
338
+ "short" => 25,
339
+ "long" => 75
340
+ }
341
+ }]
342
+
343
+ # プロセスを追加
344
+ pid = @mng.create_back_test( "test", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
345
+ sleep 1
346
+ process = @mng.get( pid )
347
+ assert_equals process["state"], :RUNNING
348
+ assert_not_nil process.progress
349
+
350
+ # 実行完了を待つ
351
+ sleep 1 while @mng.get( pid )["state"] == :RUNNING
352
+ process = @mng.get( pid )
353
+ assert_equals process["state"], :FINISHED
354
+ assert_not_nil process.progress
355
+
356
+ #再起動
357
+ pid = @mng.restart_test( pid )["id"]
358
+ sleep 1
359
+ process = @mng.get( pid )
360
+ assert_equals process["state"], :RUNNING
361
+ assert_not_nil process.progress
362
+
363
+ #別のプロセスを追加
364
+ pid2 = @mng.create_back_test( "test2", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
365
+ sleep 1
366
+
367
+ #別のプロセスは待機中になる。
368
+ process = @mng.get( pid2 )
369
+ assert_equals process["state"], :WAITING
370
+ assert_not_nil process.progress
371
+
372
+ process = @mng.get( pid )
373
+ assert_equals process["state"], :RUNNING
374
+ assert_not_nil process.progress
375
+
376
+
377
+ # 実行完了を待つ
378
+ sleep 1 while @mng.get( pid )["state"] == :RUNNING
379
+
380
+ process = @mng.get( pid )
381
+ assert_equals process["state"], :FINISHED
382
+ assert_not_nil process.progress
383
+
384
+ sleep 1
385
+
386
+ #別のプロセスが開始される。
387
+ process = @mng.get( pid2 )
388
+ assert_equals process["state"], :RUNNING
389
+ assert_not_nil process.progress
390
+ assert_equals process.process_id, pid2
391
+
392
+
393
+ #再起動 / プロセスpid2が実行中なので待機状態になる
394
+ pid = @mng.restart_test( pid )["id"]
395
+ sleep 1
396
+ process = @mng.get( pid )
397
+ assert_equals process["state"], :WAITING
398
+ assert_not_nil process.progress
399
+ assert_equals process.process_id, pid
400
+
401
+
402
+ #pid2の完了待つ。完了後pid1が起動する。
403
+ sleep 1 while @mng.get( pid2 )["state"] == :RUNNING
404
+
405
+ process = @mng.get( pid2 )
406
+ assert_equals process["state"], :FINISHED
407
+ assert_not_nil process.progress
408
+ sleep 1
409
+ process = @mng.get( pid )
410
+ assert_equals process["state"], :RUNNING
411
+ assert_not_nil process.progress
412
+
413
+
414
+ # 別のプロセスを追加してpid1を削除
415
+ pid3 = @mng.create_back_test( "test3", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
416
+ sleep 1
417
+ process = @mng.get( pid3 )
418
+ assert_equals process["state"], :WAITING
419
+ assert_not_nil process.progress
420
+
421
+ @mng.delete_back_test( pid )
422
+ assert_process_not_found(pid)
423
+
424
+ sleep 1
425
+ process = @mng.get( pid3 )
426
+ assert_equals process["state"], :RUNNING
427
+ assert_not_nil process.progress
428
+
429
+ #追加したプロセスも削除
430
+ @mng.delete_back_test( pid3 )
431
+ assert_process_not_found(pid3)
432
+
433
+ end
434
+
435
+ # プロセスの属性変更のテスト。
436
+ def test_set
437
+ agents = [{
438
+ "name" => "aaa",
439
+ "class" => "MovingAverageAgent@moving_average.rb",
440
+ "id"=> "44c0d256-8994-4240-a6c6-8d9546aef8c4",
441
+ "properties" => {
442
+ "period" => 10,
443
+ "short" => 25,
444
+ "long" => 75
445
+ }
446
+ }]
447
+
448
+ @mng.start
449
+ @mng.set("rmt", { "agents"=>agents, "trade_enable"=>false })
450
+ pid1 = @mng.create_back_test( "test", "memo",
451
+ Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
452
+ sleep 0.1
453
+
454
+ ["rmt",pid1].each{|pid|
455
+
456
+ #初期状態の確認
457
+ process = @mng.get( pid )
458
+ assert_equals( process["agents"], agents )
459
+ assert_equals( process["trade_enable"], false )
460
+ assert_equals( @omng.get(pid, agents[0]["id"]).agent_name, "aaa" )
461
+
462
+ #エージェントの追加
463
+ agents2 = agents.map {|i| i.clone }
464
+ agents2 << {
465
+ "name" => "bbb",
466
+ "class" => "MovingAverageAgent@moving_average.rb",
467
+ "id"=> "54c0d256-8994-4240-a6c6-8d9546aef8c4",
468
+ "properties" => {
469
+ "period" => 10,
470
+ "short" => 25,
471
+ "long" => 75
472
+ }
473
+ }
474
+ @mng.set( pid, { "agents" => agents2 } )
475
+ process = @mng.get( pid )
476
+ assert_equals( process["agents"], agents2 )
477
+ assert_equals( process["trade_enable"], false )
478
+ assert_equals( @omng.get(pid, agents2[0]["id"]).agent_name, "aaa" )
479
+ assert_equals( @omng.get(pid, agents2[1]["id"]).agent_name, "bbb" )
480
+
481
+
482
+ #エージェントの名前変更
483
+ agents2[0]["name"] = "aaa2"
484
+ @mng.set( pid, { "agents" => agents2 } )
485
+ process = @mng.get( pid )
486
+ assert_equals( process["agents"], agents2 )
487
+ assert_equals( process["trade_enable"], false )
488
+ assert_equals( @omng.get(pid, agents2[0]["id"]).agent_name, "aaa2" )
489
+ assert_equals( @omng.get(pid, agents2[1]["id"]).agent_name, "bbb" )
490
+
491
+
492
+ #エージェントのプロパティ変更
493
+ agents2[0]["properties"] = {
494
+ "period" => 20,
495
+ "short" => 25,
496
+ "long" => 75
497
+ }
498
+ @mng.set( pid, { "agents" => agents2 } )
499
+ process = @mng.get( pid )
500
+ assert_equals( process["agents"], agents2 )
501
+ assert_equals( process["trade_enable"], false )
502
+ assert_equals( @omng.get(pid, agents2[0]["id"]).agent_name, "aaa2" )
503
+ assert_equals( @omng.get(pid, agents2[1]["id"]).agent_name, "bbb" )
504
+
505
+ #tradeのon/off
506
+ if ( pid == "rmt" )
507
+ @mng.set( pid, { "trade_enable" => "true" } )
508
+ process = @mng.get( pid )
509
+ assert_equals( process["agents"], agents2 )
510
+ assert_equals( process["trade_enable"], true )
511
+ assert_equals( @omng.get(pid, agents2[0]["id"]).agent_name, "aaa2" )
512
+ assert_equals( @omng.get(pid, agents2[1]["id"]).agent_name, "bbb" )
513
+
514
+ @mng.set( pid, { "trade_enable" => "false" } )
515
+ process = @mng.get( pid )
516
+ assert_equals( process["trade_enable"], false )
517
+
518
+ @mng.set( pid, { "trade_enable" => true } )
519
+ process = @mng.get( pid )
520
+ assert_equals( process["trade_enable"], true )
521
+
522
+ @mng.set( pid, { "trade_enable" => false } )
523
+ process = @mng.get( pid )
524
+ assert_equals( process["trade_enable"], false )
525
+ else
526
+ # バックテストではtrueにできない
527
+ begin
528
+ @mng.set( pid, { "trade_enable" => "true" } )
529
+ fail
530
+ rescue JIJI::UserError
531
+ end
532
+ process = @mng.get( pid )
533
+ assert_equals( process["agents"], agents2 )
534
+ assert_equals( process["trade_enable"], false )
535
+ assert_equals( @omng.get(pid, agents2[0]["id"]).agent_name, "aaa2" )
536
+ assert_equals( @omng.get(pid, agents2[1]["id"]).agent_name, "bbb" )
537
+ end
538
+
539
+ #エージェントの削除
540
+ agents3 = agents2[0..1]
541
+ @mng.set( pid, { "agents" => agents3 } )
542
+ process = @mng.get( pid )
543
+ assert_equals( process["agents"], agents3 )
544
+ assert_equals( process["trade_enable"], false )
545
+ assert_equals( @omng.get(pid, agents2[0]["id"]).agent_name, "aaa2" )
546
+ assert_equals( @omng.get(pid, agents2[1]["id"]).agent_name, "bbb" )
547
+
548
+ }
549
+ @mng.delete_back_test( pid1 )
550
+ end
551
+
552
+ # 属性変更の異常系テスト。
553
+ def test_set_error
554
+
555
+ agents = []
556
+ @mng.start
557
+ pid1 = @mng.create_back_test( "test", "memo",
558
+ Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
559
+ sleep 0.1
560
+
561
+ error_registry = Test::RegistryMock.new
562
+ @mng.rmt.agent_manager.agent_registry = error_registry
563
+ @mng.executor.get( pid1 ).agent_manager.agent_registry = error_registry
564
+
565
+ agents_org = [{
566
+ "name" => "aaa",
567
+ "class" => "Test@foo.rb",
568
+ "id"=> "a",
569
+ "properties" => {
570
+ "period" => 10,
571
+ "short" => 25,
572
+ "long" => 75
573
+ }
574
+ }]
575
+ @mng.set("rmt", { "agents"=>agents_org, "trade_enable"=>false })
576
+ @mng.set(pid1, { "agents"=>agents_org })
577
+
578
+ ["rmt",pid1].each{|pid|
579
+ agents = agents_org.map{|i| i.clone }
580
+
581
+ #追加でエラー
582
+ Test::RegistryMock.set_fail_create {|cl,p| cl == "Test3@foo.rb" }
583
+ agents2 = agents.map{|i| i.clone }
584
+ agents2 << {
585
+ "name" => "bbb",
586
+ "class" => "Test2@foo.rb",
587
+ "id"=> "b",
588
+ "properties" => {
589
+ "period" => 10,
590
+ "short" => 25,
591
+ "long" => 75
592
+ }
593
+ }
594
+ agents2 << {
595
+ "name" => "ccc",
596
+ "class" => "Test3@foo.rb",
597
+ "id"=> "c",
598
+ "properties" => {
599
+ "period" => 10,
600
+ "short" => 25,
601
+ "long" => 75
602
+ }
603
+ }
604
+ result = @mng.set( pid, { "agents" => agents2 } )
605
+ assert_not_nil result["c"][:cause]
606
+ assert_equals result["c"][:info], agents2[2]
607
+ assert_equals result["c"][:operation], :add
608
+ assert_nil result["a"]
609
+ assert_nil result["b"]
610
+
611
+ agents = agents2[0..1]
612
+ process = @mng.get( pid )
613
+ assert_equals( process["agents"], agents )
614
+ assert_equals( process["trade_enable"], false )
615
+ assert_equals( @omng.get(pid, "a").agent_name, "aaa" )
616
+ assert_equals( @omng.get(pid, "b").agent_name, "bbb" )
617
+ begin
618
+ @omng.get(pid, "c")
619
+ fail
620
+ rescue JIJI::UserError
621
+ end
622
+
623
+ Test::RegistryMock.set_fail_create {|cl,p| false }
624
+
625
+ #更新でエラー
626
+ Test::Agent.set_fail_propset {|a| a.cl == "Test@foo.rb" }
627
+ agents2 = agents.map{|i| i.clone}
628
+ agents2[0]["name"] = "aaa2"
629
+ agents2[0]["properties"] = {
630
+ "period" => 20,
631
+ "short" => 100
632
+ }
633
+ agents2[1]["name"] = "bbb2"
634
+ agents2[1]["properties"] = {
635
+ "period" => 21,
636
+ "short" => 101
637
+ }
638
+ result = @mng.set( pid, { "agents" => agents2 } )
639
+ assert_not_nil result["a"][:cause]
640
+ assert_equals result["a"][:info], agents2[0]
641
+ assert_equals result["a"][:operation], :update
642
+ assert_nil result["b"]
643
+
644
+ agents = [agents[0],agents2[1]]
645
+ process = @mng.get( pid )
646
+ assert_equals( process["agents"], agents )
647
+ assert_equals( process["trade_enable"], false )
648
+ assert_equals( @omng.get(pid, "a").agent_name, "aaa" )
649
+ assert_equals( @omng.get(pid, "b").agent_name, "bbb2" )
650
+ Test::Agent.set_fail_propset {|a| false }
651
+
652
+ #削除でエラー
653
+ target = pid == "rmt" ? @mng.rmt.agent_manager : @mng.executor.get( pid ).agent_manager
654
+ class << target
655
+ def remove( agent_id )
656
+ raise "test" if agent_id == "a"
657
+ super
658
+ end
659
+ end
660
+ result = @mng.set( pid, { "agents" => []} )
661
+ assert_not_nil result["a"][:cause]
662
+ assert_equals result["a"][:info], agents[0]
663
+ assert_equals result["a"][:operation], :remove
664
+ assert_nil result["b"]
665
+
666
+ process = @mng.get( pid )
667
+ assert_equals( process["agents"], [agents[0]] )
668
+ assert_equals( process["trade_enable"], false )
669
+ assert_equals( @omng.get(pid, "a").agent_name, "aaa" )
670
+ assert_equals( @omng.get(pid, "b").agent_name, "bbb2" )
671
+
672
+ }
673
+ @mng.delete_back_test( pid1 )
674
+ end
675
+
676
+ # 異常系テスト。
677
+ def test_error
678
+ # RMT起動時にエージェント作成でエラー / ログ出力のみ行なわれ、処理は継続
679
+ @mng.start
680
+ agents = [{
681
+ "name" => "aaa",
682
+ "class" => "MovingAverageAgent@moving_average.rb",
683
+ "id"=> "a",
684
+ "properties" => {}
685
+ }]
686
+ @mng.set( "rmt", {"agents"=>agents});
687
+ process = @mng.get( "rmt" )
688
+ assert_equals( process["agents"], agents )
689
+
690
+ recreate_registry
691
+ @registry[:agent_registry].unload( "agents/moving_average.rb" )
692
+ @mng = @registry[:process_manager]
693
+ @mng.start # エラーが発生しない
694
+ process = @mng.get( "rmt" )
695
+ assert_equals( process["agents"], agents ) # 設定はそのまま保持されている
696
+
697
+
698
+ # バックテスト作成時にエージェント作成でエラー / 例外が返される。
699
+ begin
700
+ @mng.create_back_test( "test", "memo",
701
+ Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )
702
+ fail
703
+ rescue JIJI::UserError
704
+ end
705
+ end
706
+
707
+ def recreate_registry
708
+ Test.destry( @registry )
709
+ FileUtils.rm_rf "#{@dir}/logs"
710
+ return @registry = JIJI::Registry.new(@dir , nil)
711
+ end
712
+
713
+ # プロセスが存在しないことを確認する。
714
+ def assert_process_not_found( pid )
715
+ begin
716
+ @mng.get( pid )
717
+ fail
718
+ rescue JIJI::UserError
719
+ assert_equals JIJI::ERROR_NOT_FOUND, $!.code
720
+ end
721
+ end
722
+
723
+ end