unageanu-jiji 1.1.4 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (233) hide show
  1. data/ChangeLog +24 -1
  2. data/README +0 -0
  3. data/base/shared_lib/moving_average.rb +34 -33
  4. data/base/shared_lib/system/cross.rb +76 -0
  5. data/base/shared_lib/system/position_manager.rb +160 -0
  6. data/base/shared_lib/system/signal.rb +347 -0
  7. data/html/css/datatable.css +4 -4
  8. data/html/css/default.css +57 -5
  9. data/html/css/treeview.css +205 -0
  10. data/html/img/bin_closed.png +0 -0
  11. data/html/img/bin_empty.png +0 -0
  12. data/html/img/button_add_small.gif +0 -0
  13. data/html/img/button_add_small_gray.gif +0 -0
  14. data/html/img/button_add_small_over.gif +0 -0
  15. data/html/img/button_mkcol.gif +0 -0
  16. data/html/img/button_mkcol_gray.gif +0 -0
  17. data/html/img/button_mkcol_over.gif +0 -0
  18. data/html/img/button_remove_small.gif +0 -0
  19. data/html/img/button_remove_small_gray.gif +0 -0
  20. data/html/img/button_remove_small_over.gif +0 -0
  21. data/html/img/button_rename.gif +0 -0
  22. data/html/img/button_rename_gray.gif +0 -0
  23. data/html/img/button_rename_over.gif +0 -0
  24. data/html/img/control_play.png +0 -0
  25. data/html/img/control_play_blue.png +0 -0
  26. data/html/img/folder.png +0 -0
  27. data/html/img/folder_brick.png +0 -0
  28. data/html/img/folder_user.png +0 -0
  29. data/html/{js/codepress/images → img}/line-numbers.png +0 -0
  30. data/html/img/page_white_ruby.png +0 -0
  31. data/html/img/sidebar_agent_edit.png +0 -0
  32. data/html/img/sidebar_agent_edit_over.png +0 -0
  33. data/html/img/sidebar_agent_edit_s.png +0 -0
  34. data/html/img/yui/treeview-sprite.gif +0 -0
  35. data/html/index.html +34 -18
  36. data/html/js/agent-editor/agent-editor-page.js +324 -0
  37. data/html/js/agent-editor/agent-editor.js +363 -0
  38. data/html/js/agent-editor/agent-list-tree.js +251 -0
  39. data/html/js/agent-selector.js +23 -28
  40. data/html/js/app.js +63 -91
  41. data/html/js/bt-create-page.js +25 -19
  42. data/html/js/container-min.js +1 -1
  43. data/html/js/container.js +944 -0
  44. data/html/js/edit_area/autocompletion.js +11 -13
  45. data/html/js/edit_area/edit_area.css +79 -40
  46. data/html/js/edit_area/edit_area.js +255 -226
  47. data/html/js/edit_area/edit_area_compressor.php +4 -4
  48. data/html/js/edit_area/edit_area_full.gz +0 -0
  49. data/html/js/edit_area/edit_area_full.js +31 -31
  50. data/html/js/edit_area/edit_area_full_with_plugins.gz +0 -0
  51. data/html/js/edit_area/edit_area_full_with_plugins.js +31 -31
  52. data/html/js/edit_area/edit_area_functions.js +448 -341
  53. data/html/js/edit_area/edit_area_loader.js +409 -397
  54. data/html/js/edit_area/elements_functions.js +120 -123
  55. data/html/js/edit_area/highlight.js +305 -197
  56. data/html/js/edit_area/images/goto.png +0 -0
  57. data/html/js/edit_area/images/help.png +0 -0
  58. data/html/js/edit_area/images/redo.png +0 -0
  59. data/html/js/edit_area/images/save.png +0 -0
  60. data/html/js/edit_area/images/search.png +0 -0
  61. data/html/js/edit_area/images/undo.png +0 -0
  62. data/html/js/edit_area/images/word_wrap.gif +0 -0
  63. data/html/js/edit_area/keyboard.js +5 -5
  64. data/html/js/edit_area/langs/bg.js +73 -0
  65. data/html/js/edit_area/langs/cs.js +2 -0
  66. data/html/js/edit_area/langs/de.js +2 -0
  67. data/html/js/edit_area/langs/dk.js +2 -0
  68. data/html/js/edit_area/langs/en.js +2 -0
  69. data/html/js/edit_area/langs/eo.js +2 -0
  70. data/html/js/edit_area/langs/es.js +2 -0
  71. data/html/js/edit_area/langs/fi.js +67 -0
  72. data/html/js/edit_area/langs/fr.js +2 -0
  73. data/html/js/edit_area/langs/hr.js +2 -0
  74. data/html/js/edit_area/langs/it.js +2 -0
  75. data/html/js/edit_area/langs/ja.js +2 -0
  76. data/html/js/edit_area/langs/mk.js +2 -0
  77. data/html/js/edit_area/langs/nl.js +2 -0
  78. data/html/js/edit_area/langs/pl.js +2 -0
  79. data/html/js/edit_area/langs/pt.js +2 -0
  80. data/html/js/edit_area/langs/ru.js +2 -0
  81. data/html/js/edit_area/langs/sk.js +2 -0
  82. data/html/js/edit_area/langs/zh.js +67 -0
  83. data/html/js/edit_area/manage_area.js +362 -205
  84. data/html/js/edit_area/plugins/charmap/langs/bg.js +12 -0
  85. data/html/js/edit_area/plugins/charmap/langs/zh.js +6 -0
  86. data/html/js/edit_area/plugins/test/langs/bg.js +10 -0
  87. data/html/js/edit_area/plugins/test/langs/zh.js +4 -0
  88. data/html/js/edit_area/reg_syntax/java.js +56 -0
  89. data/html/js/edit_area/reg_syntax/ruby.js +9 -9
  90. data/html/js/edit_area/reg_syntax.js +15 -13
  91. data/html/js/edit_area/regexp.js +36 -32
  92. data/html/js/edit_area/resize_area.js +43 -47
  93. data/html/js/edit_area/search_replace.js +29 -29
  94. data/html/js/edit_area/template.html +6 -4
  95. data/html/js/json-broker-client.js +23 -17
  96. data/html/js/result-page.js +107 -57
  97. data/html/js/rt-setting-page.js +38 -15
  98. data/html/js/sidebar.js +41 -27
  99. data/html/js/templates.js +167 -32
  100. data/html/js/utils.js +143 -7
  101. data/html/js/yui/treeview.js +3671 -0
  102. data/html/swf/chart.swf +0 -0
  103. data/html/test/agent_editor_spec.js +815 -0
  104. data/html/test/index.html +40 -0
  105. data/html/test/jsspec/JSSpec.css +224 -0
  106. data/html/test/jsspec/JSSpec.js +1549 -0
  107. data/html/test/jsspec/diff_match_patch.js +1 -0
  108. data/html/test/utils_spec.js +111 -0
  109. data/lib/jiji/agent/agent.rb +69 -12
  110. data/lib/jiji/agent/agent_manager.rb +18 -12
  111. data/lib/jiji/agent/agent_registry.rb +35 -121
  112. data/lib/jiji/collector.rb +16 -6
  113. data/lib/jiji/command.rb +46 -5
  114. data/lib/jiji/dao/file_system_dao.rb +158 -0
  115. data/lib/jiji/dao/timed_data_dao.rb +2 -0
  116. data/lib/jiji/dao/trade_result_dao.rb +1 -1
  117. data/lib/jiji/error.rb +24 -8
  118. data/lib/jiji/migration/migrator1_2_0.rb +67 -0
  119. data/lib/jiji/models.rb +82 -24
  120. data/lib/jiji/operator.rb +55 -51
  121. data/lib/jiji/output.rb +85 -29
  122. data/lib/jiji/output_manager.rb +84 -0
  123. data/lib/jiji/plugin/embedded/single_click_client.rb +2 -2
  124. data/lib/jiji/plugin/securities_plugin.rb +0 -1
  125. data/lib/jiji/process.rb +229 -208
  126. data/lib/jiji/process_manager.rb +190 -96
  127. data/lib/jiji/registry.rb +87 -19
  128. data/lib/jiji/server.rb +1 -0
  129. data/lib/jiji/service/agent_service.rb +147 -48
  130. data/lib/jiji/service/output_service.rb +37 -17
  131. data/lib/jiji/service/process_service.rb +3 -5
  132. data/lib/jiji/service/trade_result_service.rb +4 -5
  133. data/lib/jiji/util/file_lock.rb +4 -4
  134. data/lib/jiji/util/include_proxy.rb +17 -0
  135. data/lib/jiji/util/json_broker.rb +6 -4
  136. data/lib/jiji/util/util.rb +1 -1
  137. data/swf/chart/fx/chart/Chart.as +7 -0
  138. data/swf/chart/fx/chart/ui/graph/GraphManager.as +15 -2
  139. data/test/ProcessTest/agents/foo.rb +10 -0
  140. data/test/ProcessTest/conf/configuration.yaml +3 -0
  141. data/test/agent/agent_tests.rb +10 -0
  142. data/test/agent/test_AgentManager.rb +28 -12
  143. data/test/agent/test_AgentRegistry.rb +194 -99
  144. data/test/agent/test_PeriodicallyAgent.rb +1 -2
  145. data/test/agent/test_Permitter.rb +1 -2
  146. data/test/all_tests.rb +7 -19
  147. data/test/dao/dao_tests.rb +9 -0
  148. data/test/dao/test_FileSystemDao.rb +431 -0
  149. data/test/dao/test_RateDao.rb +5 -7
  150. data/test/dao/test_TradeResultDao.rb +1 -2
  151. data/test/migration/migration_tests.rb +10 -0
  152. data/test/migration/migrator1_2_0test_data/basic/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  153. data/test/migration/migrator1_2_0test_data/basic/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  154. data/test/migration/migrator1_2_0test_data/basic/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  155. data/test/migration/migrator1_2_0test_data/basic/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  156. data/test/migration/migrator1_2_0test_data/basic/props.yaml +85 -0
  157. data/test/migration/migrator1_2_0test_data/illegal_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  158. data/test/migration/migrator1_2_0test_data/illegal_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  159. data/test/migration/migrator1_2_0test_data/illegal_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  160. data/test/migration/migrator1_2_0test_data/illegal_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  161. data/test/migration/migrator1_2_0test_data/illegal_props/props.yaml +1 -0
  162. data/test/migration/migrator1_2_0test_data/no_outs/props.yaml +85 -0
  163. data/test/migration/migrator1_2_0test_data/no_props/out/M2NlOTA2ODEtZDdlNi00NWU1LWIwNDQtMjBmODY2ZGNkNzBj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  164. data/test/migration/migrator1_2_0test_data/no_props/out/MDVhYzcxMjYtMGFlMS00Mzk0LWEyNmUtYjVjZjgwNDA0ZmE2/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  165. data/test/migration/migrator1_2_0test_data/no_props/out/MzA1YTk0NDgtNzhjNi00NDk3LTk2NTktYzE1ZjBhNzdiYjNj/56e75YuV5bmz5Z2H57ea/meta.yaml +8 -0
  166. data/test/migration/migrator1_2_0test_data/no_props/out/YjRkOTI1MzEtZTM4MS00YjQwLTg1ZTQtMWFmZDRlNDUwMzBm/56e75YuV5bmz5Z2H57ea/meta.yaml +9 -0
  167. data/test/migration/test_Migrator.rb +1 -1
  168. data/test/migration/test_Migrator1_0_3.rb +1 -1
  169. data/test/migration/test_Migrator1_1_0.rb +1 -1
  170. data/test/migration/test_Migrator1_2_0.rb +94 -0
  171. data/test/plugin/embedded/test_SingleClickClient.rb +1 -2
  172. data/test/plugin/plugin_tests.rb +8 -0
  173. data/test/plugin/test_Loader.rb +1 -1
  174. data/test/shared/rate.csv +144 -0
  175. data/test/shared/shared_tests.rb +9 -0
  176. data/test/shared/test_Cross.rb +144 -0
  177. data/test/shared/test_PositionManager.rb +285 -0
  178. data/test/shared/test_Signal.rb +65 -0
  179. data/test/test_Output.rb +28 -21
  180. data/test/test_OutputManager.rb +162 -0
  181. data/test/test_Output_registry.rb +6 -17
  182. data/test/test_Process.rb +434 -222
  183. data/test/test_ProcessManager.rb +458 -101
  184. data/test/test_utils.rb +71 -8
  185. data/test/util/test_BlockToSession.rb +1 -2
  186. data/test/util/test_CSV.rb +1 -2
  187. data/test/util/test_SynchronizeInterceptor.rb +1 -2
  188. data/test/util/util_tests.rb +9 -0
  189. metadata +127 -47
  190. data/html/js/agent-editor-page.js +0 -440
  191. data/html/js/codepress/codepress.css +0 -21
  192. data/html/js/codepress/codepress.html +0 -35
  193. data/html/js/codepress/codepress.js +0 -138
  194. data/html/js/codepress/engines/gecko.js +0 -293
  195. data/html/js/codepress/engines/khtml.js +0 -0
  196. data/html/js/codepress/engines/msie.js +0 -304
  197. data/html/js/codepress/engines/older.js +0 -0
  198. data/html/js/codepress/engines/opera.js +0 -260
  199. data/html/js/codepress/images/line-numbers.gif +0 -0
  200. data/html/js/codepress/index.html +0 -443
  201. data/html/js/codepress/languages/asp.css +0 -71
  202. data/html/js/codepress/languages/asp.js +0 -117
  203. data/html/js/codepress/languages/autoit.css +0 -13
  204. data/html/js/codepress/languages/autoit.js +0 -32
  205. data/html/js/codepress/languages/csharp.css +0 -9
  206. data/html/js/codepress/languages/csharp.js +0 -25
  207. data/html/js/codepress/languages/css.css +0 -10
  208. data/html/js/codepress/languages/css.js +0 -23
  209. data/html/js/codepress/languages/generic.css +0 -9
  210. data/html/js/codepress/languages/generic.js +0 -25
  211. data/html/js/codepress/languages/html.css +0 -13
  212. data/html/js/codepress/languages/html.js +0 -59
  213. data/html/js/codepress/languages/java.css +0 -7
  214. data/html/js/codepress/languages/java.js +0 -24
  215. data/html/js/codepress/languages/javascript.css +0 -8
  216. data/html/js/codepress/languages/javascript.js +0 -30
  217. data/html/js/codepress/languages/perl.css +0 -11
  218. data/html/js/codepress/languages/perl.js +0 -27
  219. data/html/js/codepress/languages/php.css +0 -12
  220. data/html/js/codepress/languages/php.js +0 -61
  221. data/html/js/codepress/languages/ruby.css +0 -10
  222. data/html/js/codepress/languages/ruby.js +0 -26
  223. data/html/js/codepress/languages/sql.css +0 -10
  224. data/html/js/codepress/languages/sql.js +0 -30
  225. data/html/js/codepress/languages/text.css +0 -5
  226. data/html/js/codepress/languages/text.js +0 -9
  227. data/html/js/codepress/languages/vbscript.css +0 -71
  228. data/html/js/codepress/languages/vbscript.js +0 -117
  229. data/html/js/codepress/languages/xsl.css +0 -15
  230. data/html/js/codepress/languages/xsl.js +0 -103
  231. data/html/js/codepress/license.txt +0 -458
  232. data/html/js/edit_area/images/Thumbs.db +0 -0
  233. data/test/plugin/test_gem/a/lib/jiji_plugin_test.rb +0 -6
@@ -3,26 +3,26 @@
3
3
  $: << "../lib"
4
4
 
5
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
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
26
 
27
27
  require 'runit/testcase'
28
28
  require 'runit/cui/testrunner'
@@ -42,28 +42,17 @@ class ProcessManagerTest < RUNIT::TestCase
42
42
  @registry = JIJI::Registry.new(@dir , nil)
43
43
  @registry.plugin_loader.load
44
44
  @mng = @registry[:process_manager]
45
+ @omng = @registry[:output_manager]
45
46
  end
46
47
 
47
48
  def teardown
48
- begin
49
- @mng.stop
50
- begin
51
- @registry.permitter.close
52
- ensure
53
- begin
54
- ensure
55
- @registry.server_logger.close
56
- end
57
- end
49
+ Test.destry( @registry, nil )
50
+ FileUtils.rm_rf "#{@dir}/logs"
51
+ FileUtils.rm_rf "#{@dir}/process_logs"
58
52
  # Thread.list.each {|t|
59
53
  # puts "---#{t}"
60
54
  # puts t[:stack]
61
55
  # }
62
- ensure
63
- FileUtils.rm_rf "#{@dir}/logs"
64
- FileUtils.rm_rf "#{@dir}/process_logs"
65
- FileUtils.rm_rf "#{@dir}/shared_lib"
66
- end
67
56
  end
68
57
 
69
58
  def test_basic
@@ -85,9 +74,9 @@ class ProcessManagerTest < RUNIT::TestCase
85
74
 
86
75
  # プロセスを取得
87
76
  process = @mng.get( pid )
88
- assert_equals process.state, :RUNNING
77
+ assert_equals process["state"], :RUNNING
89
78
  assert_not_nil process.progress
90
- assert_equals process.id, pid
79
+ assert_equals process.process_id, pid
91
80
  assert_equals process["name"], "test"
92
81
  assert_equals process["memo"], "memo"
93
82
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
@@ -95,11 +84,11 @@ class ProcessManagerTest < RUNIT::TestCase
95
84
  assert_not_nil process["create_date"]
96
85
 
97
86
  # 実行完了を待つ
98
- sleep 1 while @mng.get( pid ).state == :RUNNING
87
+ sleep 1 while @mng.get( pid )["state"] == :RUNNING
99
88
 
100
- assert_equals process.state, :FINISHED
89
+ assert_equals process["state"], :FINISHED
101
90
  assert_not_nil process.progress
102
- assert_equals process.id, pid
91
+ assert_equals process.process_id, pid
103
92
  assert_equals process["name"], "test"
104
93
  assert_equals process["memo"], "memo"
105
94
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
@@ -111,9 +100,9 @@ class ProcessManagerTest < RUNIT::TestCase
111
100
  sleep 1
112
101
 
113
102
  process = @mng.get( pid )
114
- assert_equals process.state, :FINISHED
103
+ assert_equals process["state"], :FINISHED
115
104
  assert_not_nil process.progress
116
- assert_equals process.id, pid
105
+ assert_equals process.process_id, pid
117
106
  assert_equals process["name"], "test"
118
107
  assert_equals process["memo"], "memo"
119
108
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
@@ -121,22 +110,22 @@ class ProcessManagerTest < RUNIT::TestCase
121
110
  assert_not_nil process["create_date"]
122
111
 
123
112
  process = @mng.get( pid2 )
124
- assert_equals process.state, :RUNNING
113
+ assert_equals process["state"], :RUNNING
125
114
  assert_not_nil process.progress
126
- assert_equals process.id, pid2
115
+ assert_equals process.process_id, pid2
127
116
  assert_equals process["name"], "test2"
128
117
  assert_equals process["memo"], "memo"
129
118
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
130
119
  assert_equals process["end_date"], Time.gm( 2008, 8, 22 ).to_i
131
120
  assert_not_nil process["create_date"]
132
-
121
+
133
122
  # 停止
134
123
  @mng.stop
135
-
124
+
136
125
  process = @mng.get( pid )
137
- assert_equals process.state, :FINISHED
126
+ assert_equals process["state"], :FINISHED
138
127
  assert_not_nil process.progress
139
- assert_equals process.id, pid
128
+ assert_equals process.process_id, pid
140
129
  assert_equals process["name"], "test"
141
130
  assert_equals process["memo"], "memo"
142
131
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
@@ -144,9 +133,9 @@ class ProcessManagerTest < RUNIT::TestCase
144
133
  assert_not_nil process["create_date"]
145
134
 
146
135
  process = @mng.get( pid2 )
147
- assert_equals process.state, :CANCELED
136
+ assert_equals process["state"], :CANCELED
148
137
  assert_not_nil process.progress
149
- assert_equals process.id, pid2
138
+ assert_equals process.process_id, pid2
150
139
  assert_equals process["name"], "test2"
151
140
  assert_equals process["memo"], "memo"
152
141
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
@@ -159,9 +148,9 @@ class ProcessManagerTest < RUNIT::TestCase
159
148
  @mng = @registry[:process_manager]
160
149
 
161
150
  process = @mng.get( pid )
162
- assert_equals process.state, :FINISHED
151
+ assert_equals process["state"], :FINISHED
163
152
  assert_not_nil process.progress
164
- assert_equals process.id, pid
153
+ assert_equals process.process_id, pid
165
154
  assert_equals process["name"], "test"
166
155
  assert_equals process["memo"], "memo"
167
156
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
@@ -169,9 +158,9 @@ class ProcessManagerTest < RUNIT::TestCase
169
158
  assert_not_nil process["create_date"]
170
159
 
171
160
  process = @mng.get( pid2 )
172
- assert_equals process.state, :CANCELED
161
+ assert_equals process["state"], :CANCELED
173
162
  assert_not_nil process.progress
174
- assert_equals process.id, pid2
163
+ assert_equals process.process_id, pid2
175
164
  assert_equals process["name"], "test2"
176
165
  assert_equals process["memo"], "memo"
177
166
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
@@ -184,9 +173,9 @@ class ProcessManagerTest < RUNIT::TestCase
184
173
  assert_process_not_found(pid)
185
174
 
186
175
  process = @mng.get( pid2 )
187
- assert_equals process.state, :CANCELED
176
+ assert_equals process["state"], :CANCELED
188
177
  assert_not_nil process.progress
189
- assert_equals process.id, pid2
178
+ assert_equals process.process_id, pid2
190
179
  assert_equals process["name"], "test2"
191
180
  assert_equals process["memo"], "memo"
192
181
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
@@ -208,9 +197,9 @@ class ProcessManagerTest < RUNIT::TestCase
208
197
  sleep 0.1
209
198
 
210
199
  process = @mng.get( pid3 )
211
- assert_equals process.state, :RUNNING
200
+ assert_equals process["state"], :RUNNING
212
201
  assert_not_nil process.progress
213
- assert_equals process.id, pid3
202
+ assert_equals process.process_id, pid3
214
203
  assert_equals process["name"], "test3"
215
204
  assert_equals process["memo"], "memo"
216
205
  assert_equals process["start_date"], Time.gm( 2008, 8, 21 ).to_i
@@ -249,9 +238,9 @@ class ProcessManagerTest < RUNIT::TestCase
249
238
 
250
239
  # プロセスを取得
251
240
  process = @mng.get( pid )
252
- assert_equals process.state, :RUNNING
241
+ assert_equals process["state"], :RUNNING
253
242
  assert_not_nil process.progress
254
- assert_equals process.id, pid
243
+ assert_equals process.process_id, pid
255
244
 
256
245
  #別のプロセスを追加
257
246
  pid2 = @mng.create_back_test( "test2", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
@@ -259,51 +248,51 @@ class ProcessManagerTest < RUNIT::TestCase
259
248
 
260
249
  #別のプロセスは待機中になる。
261
250
  process = @mng.get( pid2 )
262
- assert_equals process.state, :WAITING
251
+ assert_equals process["state"], :WAITING
263
252
  assert_not_nil process.progress
264
- assert_equals process.id, pid2
253
+ assert_equals process.process_id, pid2
265
254
 
266
255
  process = @mng.get( pid )
267
- assert_equals process.state, :RUNNING
256
+ assert_equals process["state"], :RUNNING
268
257
  assert_not_nil process.progress
269
- assert_equals process.id, pid
258
+ assert_equals process.process_id, pid
270
259
 
271
260
  # 実行完了を待つ
272
- sleep 1 while @mng.get( pid ).state == :RUNNING
261
+ sleep 1 while @mng.get( pid )["state"] == :RUNNING
273
262
 
274
263
  process = @mng.get( pid )
275
- assert_equals process.state, :FINISHED
264
+ assert_equals process["state"], :FINISHED
276
265
  assert_not_nil process.progress
277
- assert_equals process.id, pid
266
+ assert_equals process.process_id, pid
278
267
 
279
268
  sleep 1
280
269
 
281
270
  #別のプロセスが開始される。
282
271
  process = @mng.get( pid2 )
283
- assert_equals process.state, :RUNNING
272
+ assert_equals process["state"], :RUNNING
284
273
  assert_not_nil process.progress
285
- assert_equals process.id, pid2
274
+ assert_equals process.process_id, pid2
286
275
 
287
276
  # 別のプロセスを追加して削除
288
277
  pid3 = @mng.create_back_test( "test3", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
289
278
  sleep 1
290
279
  process = @mng.get( pid3 )
291
- assert_equals process.state, :WAITING
280
+ assert_equals process["state"], :WAITING
292
281
  assert_not_nil process.progress
293
- assert_equals process.id, pid3
294
-
282
+ assert_equals process.process_id, pid3
283
+
295
284
  @mng.delete_back_test( pid3 )
296
285
  assert_process_not_found(pid3)
297
-
298
- sleep 1 while @mng.get( pid2 ).state == :RUNNING
286
+
287
+ sleep 1 while @mng.get( pid2 )["state"] == :RUNNING
299
288
 
300
289
  process = @mng.get( pid2 )
301
- assert_equals process.state, :FINISHED
290
+ assert_equals process["state"], :FINISHED
302
291
  assert_not_nil process.progress
303
- assert_equals process.id, pid2
304
-
292
+ assert_equals process.process_id, pid2
293
+
305
294
  sleep 10
306
-
295
+
307
296
  ## 待機状態のまま再起動
308
297
  # プロセスを追加
309
298
  pid4 = @mng.create_back_test( "test4", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
@@ -313,49 +302,417 @@ class ProcessManagerTest < RUNIT::TestCase
313
302
  pid5 = @mng.create_back_test( "test5", "memo", Time.gm( 2008, 8, 21 ).to_i, Time.gm( 2008, 8, 22 ).to_i, agents )["id"]
314
303
 
315
304
  process = @mng.get( pid4 )
316
- assert_equals process.state, :RUNNING
305
+ assert_equals process["state"], :RUNNING
317
306
  assert_not_nil process.progress
318
- assert_equals process.id, pid4
319
-
307
+ assert_equals process.process_id, pid4
308
+
320
309
  process = @mng.get( pid5 )
321
- assert_equals process.state, :WAITING
310
+ assert_equals process["state"], :WAITING
322
311
  assert_not_nil process.progress
323
- assert_equals process.id, pid5
324
-
312
+ assert_equals process.process_id, pid5
313
+
325
314
  recreate_registry
326
315
  @mng = @registry[:process_manager]
327
-
316
+
328
317
  # 実行中のものも待機中のものもキャンセル状態になる。
329
318
  process = @mng.get( pid4 )
330
- assert_equals process.state, :CANCELED
319
+ assert_equals process["state"], :CANCELED
331
320
  assert_not_nil process.progress
332
- assert_equals process.id, pid4
333
-
321
+ assert_equals process.process_id, pid4
322
+
334
323
  process = @mng.get( pid5)
335
- assert_equals process.state, :CANCELED
324
+ assert_equals process["state"], :CANCELED
336
325
  assert_not_nil process.progress
337
- assert_equals process.id, pid5
326
+ assert_equals process.process_id, pid5
338
327
  end
339
328
 
340
- def recreate_registry
341
- begin
342
- @mng.stop
343
- ensure
344
- begin
345
- @registry.permitter.close
346
- ensure
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にできない
347
527
  begin
348
- ensure
349
- @registry.server_logger.close
528
+ @mng.set( pid, { "trade_enable" => "true" } )
529
+ fail
530
+ rescue JIJI::UserError
350
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" )
351
537
  end
352
- return @registry = JIJI::Registry.new(@dir , nil)
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
353
704
  end
354
705
  end
355
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
+
356
713
  # プロセスが存在しないことを確認する。
357
714
  def assert_process_not_found( pid )
358
- begin
715
+ begin
359
716
  @mng.get( pid )
360
717
  fail
361
718
  rescue JIJI::UserError