cosmos 4.3.0-java → 4.4.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (288) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  4. data/.github/ISSUE_TEMPLATE/help---usage---general-question.md +12 -0
  5. data/.gitignore +1 -0
  6. data/.travis.yml +5 -5
  7. data/Manifest.txt +81 -44
  8. data/Rakefile +9 -0
  9. data/appveyor.yml +2 -1
  10. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
  11. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
  12. data/autohotkey/config/targets/INST/lib/sim_inst.rb +3 -1
  13. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  14. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  15. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  16. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  17. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  18. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  19. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  20. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  21. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  22. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  23. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +2 -4
  24. data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
  25. data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
  26. data/autohotkey/config/tools/test_runner/test_runner.txt +1 -1
  27. data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
  28. data/autohotkey/config/tools/test_runner/test_runner3.txt +1 -1
  29. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  30. data/autohotkey/tools/limits_monitor.ahk +1 -1
  31. data/autohotkey/tools/packet_viewer.ahk +1 -1
  32. data/autohotkey/tools/script_runner.ahk +16 -4
  33. data/bin/cosmos +1 -1
  34. data/bin/xtce_converter +1 -1
  35. data/cosmos.gemspec +5 -7
  36. data/data/config/_interfaces.yaml +4 -0
  37. data/data/config/cmd_sequence.yaml +14 -0
  38. data/data/config/housekeeping_params.yaml +14 -0
  39. data/data/config/interface_modifiers.yaml +11 -0
  40. data/data/config/item_modifiers.yaml +2 -1
  41. data/data/config/launcher.yaml +12 -2
  42. data/data/config/param_item_modifiers.yaml +2 -2
  43. data/data/config/parameter_modifiers.yaml +20 -0
  44. data/data/config/screen.yaml +2 -0
  45. data/data/config/script_runner.yaml +9 -0
  46. data/data/config/system.yaml +47 -10
  47. data/data/config/table_manager.yaml +7 -0
  48. data/data/config/target.yaml +12 -0
  49. data/data/config/telemetry_modifiers.yaml +3 -1
  50. data/data/config/test_runner.yaml +10 -9
  51. data/data/config/widgets.yaml +174 -11
  52. data/data/crc.txt +128 -125
  53. data/demo/Gemfile +1 -1
  54. data/demo/Launcher.bat +1 -9
  55. data/demo/Launcher2.bat +1 -0
  56. data/demo/LauncherMini.bat +1 -0
  57. data/demo/config/data/crc.txt +40 -20
  58. data/demo/config/system/system.txt +1 -1
  59. data/demo/config/system/system_alt_ports.txt +1 -1
  60. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +1 -0
  61. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +2 -1
  62. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +7 -7
  63. data/demo/config/targets/INST/cmd_tlm_server.txt +2 -0
  64. data/demo/config/targets/INST/lib/sim_inst.rb +15 -3
  65. data/demo/config/targets/INST/screens/adcs.txt +2 -2
  66. data/demo/config/targets/INST/screens/block.txt +1 -1
  67. data/demo/config/targets/INST/screens/commanding.txt +1 -1
  68. data/demo/config/targets/INST/screens/ground.txt +27 -5
  69. data/demo/config/targets/INST/screens/ground_error.gif +0 -0
  70. data/demo/config/{data/groundoff.gif → targets/INST/screens/ground_off.gif} +0 -0
  71. data/demo/config/{data/groundon.gif → targets/INST/screens/ground_on.gif} +0 -0
  72. data/demo/config/targets/INST/screens/limits.txt +69 -31
  73. data/demo/config/targets/INST/screens/other.txt +13 -3
  74. data/demo/config/targets/INST/screens/params.txt +54 -0
  75. data/demo/config/targets/INST/screens/satellite.gif +0 -0
  76. data/demo/config/tools/data_viewer/data_viewer.txt +3 -0
  77. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  78. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  79. data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  80. data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  81. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  82. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  83. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  84. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  85. data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  86. data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  87. data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  88. data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  89. data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  90. data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  91. data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  92. data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  93. data/demo/config/tools/script_runner/script_runner.txt +1 -2
  94. data/demo/config/tools/test_runner/test_runner.txt +3 -1
  95. data/demo/lib/example_background_task.rb +1 -0
  96. data/demo/procedures/cosmos_api_test.rb +1 -1
  97. data/demo/procedures/interactive.rb +22 -0
  98. data/ext/cosmos/ext/packet/packet.c +0 -77
  99. data/install/Gemfile +1 -1
  100. data/install/Launcher.bat +1 -9
  101. data/install/config/data/crc.txt +17 -1
  102. data/install/config/system/system.txt +1 -1
  103. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  104. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  105. data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  106. data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  107. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  108. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  109. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  110. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  111. data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  112. data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  113. data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  114. data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  115. data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  116. data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  117. data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  118. data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  119. data/lib/cosmos/config/config_parser.rb +4 -5
  120. data/lib/cosmos/dart/lib/dart_common.rb +1 -1
  121. data/lib/cosmos/gui/dialogs/details_dialog.rb +16 -1
  122. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -0
  123. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +4 -2
  124. data/lib/cosmos/gui/opengl/earth_model.rb +1 -1
  125. data/lib/cosmos/gui/qt.rb +3 -1
  126. data/lib/cosmos/gui/qt_tool.rb +46 -23
  127. data/lib/cosmos/gui/text/ruby_editor.rb +44 -41
  128. data/lib/cosmos/gui/utilities/screenshot.rb +1 -1
  129. data/lib/cosmos/gui/utilities/script_module_gui.rb +92 -92
  130. data/lib/cosmos/interfaces.rb +1 -0
  131. data/lib/cosmos/interfaces/interface.rb +5 -1
  132. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +40 -18
  133. data/lib/cosmos/interfaces/protocols/template_protocol.rb +6 -1
  134. data/lib/cosmos/interfaces/simulated_target_interface.rb +14 -5
  135. data/lib/cosmos/io/json_drb.rb +11 -7
  136. data/lib/cosmos/packets/commands.rb +28 -11
  137. data/lib/cosmos/packets/packet.rb +69 -32
  138. data/lib/cosmos/packets/packet_config.rb +34 -1
  139. data/lib/cosmos/packets/parsers/state_parser.rb +0 -1
  140. data/lib/cosmos/packets/parsers/xtce_converter.rb +2 -0
  141. data/lib/cosmos/packets/parsers/xtce_parser.rb +4 -3
  142. data/lib/cosmos/packets/structure.rb +4 -2
  143. data/lib/cosmos/packets/telemetry.rb +19 -3
  144. data/lib/cosmos/script/api_shared.rb +12 -9
  145. data/lib/cosmos/script/scripting.rb +16 -14
  146. data/lib/cosmos/system/system.rb +39 -20
  147. data/lib/cosmos/system/target.rb +39 -9
  148. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +94 -35
  149. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +3 -0
  150. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +1 -1
  151. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +2 -0
  152. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +30 -4
  153. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +1 -0
  154. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +9 -12
  155. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +5 -2
  156. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +2 -0
  157. data/lib/cosmos/tools/config_editor/config_editor.rb +80 -24
  158. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +2 -0
  159. data/lib/cosmos/tools/data_viewer/data_viewer.rb +15 -9
  160. data/lib/cosmos/tools/data_viewer/dump_component.rb +2 -9
  161. data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
  162. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +64 -38
  163. data/lib/cosmos/tools/launcher/launcher.rb +1 -0
  164. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -17
  165. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +8 -6
  166. data/lib/cosmos/tools/script_runner/script_runner.rb +87 -29
  167. data/lib/cosmos/tools/script_runner/script_runner_config.rb +14 -0
  168. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +41 -7
  169. data/lib/cosmos/tools/table_manager/table_config.rb +5 -3
  170. data/lib/cosmos/tools/table_manager/table_manager.rb +6 -3
  171. data/lib/cosmos/tools/test_runner/test_runner.rb +14 -9
  172. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +21 -9
  173. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +3 -3
  174. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +5 -8
  175. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +11 -8
  176. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +9 -15
  177. data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -1
  178. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +19 -13
  179. data/lib/cosmos/tools/tlm_viewer/widgets.rb +2 -0
  180. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +4 -5
  181. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +3 -4
  182. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +4 -5
  183. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +16 -2
  184. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +17 -3
  185. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +1 -2
  186. data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +1 -1
  187. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +12 -7
  188. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +79 -29
  189. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +1 -0
  190. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +2 -1
  191. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -0
  192. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +4 -0
  193. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +33 -25
  194. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +5 -3
  195. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +5 -3
  196. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +1 -1
  197. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +4 -7
  198. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +5 -5
  199. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +6 -7
  200. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +2 -4
  201. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +10 -8
  202. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +2 -3
  203. data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
  204. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +3 -4
  205. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +2 -4
  206. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +2 -1
  207. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +3 -5
  208. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +2 -3
  209. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +2 -3
  210. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +2 -3
  211. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +2 -3
  212. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +3 -5
  213. data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
  214. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +60 -10
  215. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +22 -8
  216. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +19 -13
  217. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +22 -8
  218. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +2 -3
  219. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +4 -3
  220. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +1 -3
  221. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +10 -5
  222. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +7 -4
  223. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +4 -6
  224. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +3 -5
  225. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +4 -3
  226. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +2 -3
  227. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +2 -3
  228. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +4 -6
  229. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +2 -3
  230. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +2 -3
  231. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +13 -4
  232. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +3 -4
  233. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +2 -7
  234. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +6 -12
  235. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +5 -10
  236. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +5 -3
  237. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +4 -4
  238. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +2 -3
  239. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +2 -3
  240. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +3 -4
  241. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +2 -3
  242. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +8 -7
  243. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +9 -7
  244. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +54 -46
  245. data/lib/cosmos/top_level.rb +23 -12
  246. data/lib/cosmos/version.rb +4 -4
  247. data/spec/gui/utilities/script_module_gui_spec.rb +44 -63
  248. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
  249. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
  250. data/spec/install/yaml_docs_spec.rb +112 -0
  251. data/spec/interfaces/protocols/fixed_protocol_spec.rb +20 -9
  252. data/spec/interfaces/protocols/template_protocol_spec.rb +78 -25
  253. data/spec/packets/commands_spec.rb +22 -0
  254. data/spec/packets/packet_config_spec.rb +24 -0
  255. data/spec/packets/packet_item_spec.rb +2 -2
  256. data/spec/packets/packet_spec.rb +39 -6
  257. data/spec/packets/parsers/state_parser_spec.rb +33 -11
  258. data/spec/packets/structure_spec.rb +41 -0
  259. data/spec/packets/telemetry_spec.rb +23 -0
  260. data/spec/streams/tcpip_socket_stream_spec.rb +32 -27
  261. data/spec/system/system_spec.rb +77 -2
  262. data/spec/system/target_spec.rb +62 -1
  263. data/spec/tools/cmd_tlm_server/api_spec.rb +1 -1
  264. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -7
  265. data/spec/top_level/top_level_spec.rb +29 -5
  266. data/tasks/gemfile_stats.rake +28 -14
  267. data/test/performance/config/system/system.txt +0 -0
  268. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +5 -5
  269. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  270. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  271. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  272. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  273. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  274. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  275. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  276. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  277. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  278. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  279. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  280. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  281. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  282. data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  283. data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  284. data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  285. data/test/performance/config/tools/test_runner/test_runner.txt +1 -1
  286. data/test/performance/procedures/cosmos_api_test.rb +1 -1
  287. data/test/performance/tools/identify_performance.rb +82 -0
  288. metadata +92 -55
@@ -57,82 +57,87 @@ module Cosmos
57
57
  ss = TcpipSocketStream.new('write',nil,nil,nil)
58
58
  ss.connect
59
59
  expect { ss.read }.to raise_error("Attempt to read from write only stream")
60
+ ss.disconnect
60
61
  end
61
62
 
62
63
  it "calls read_nonblock from the socket" do
63
64
  server = TCPServer.new(2000) # Server bound to port 2000
64
65
  thread = Thread.new do
65
- loop do
66
- client = server.accept # Wait for a client to connect
67
- sleep 0.1
68
- client.write "test"
69
- client.close
70
- end
66
+ client = server.accept # Wait for a client to connect
67
+ sleep 0.1
68
+ client.write "test"
69
+ client.close
71
70
  end
71
+ sleep 0.1
72
72
  socket = TCPSocket.new('localhost', 2000)
73
73
  ss = TcpipSocketStream.new(nil,socket,nil,nil)
74
74
  expect(ss.read_nonblock).to eql ''
75
75
  sleep 0.2
76
76
  expect(ss.read_nonblock).to eql 'test'
77
+ thread.join
77
78
  Cosmos.close_socket(socket)
78
79
  Cosmos.close_socket(server)
79
- thread.kill
80
80
  sleep 0.1
81
+ ss.disconnect
81
82
  end
82
83
 
83
84
  it "handles socket blocking exceptions" do
84
85
  server = TCPServer.new(2000) # Server bound to port 2000
85
86
  thread = Thread.new do
86
- loop do
87
- client = server.accept # Wait for a client to connect
88
- sleep 0.2
89
- client.write "test"
90
- client.close
91
- end
87
+ client = server.accept # Wait for a client to connect
88
+ sleep 0.2
89
+ client.write "test"
90
+ client.close
92
91
  end
92
+ sleep 0.1
93
93
  socket = TCPSocket.new('localhost', 2000)
94
94
  ss = TcpipSocketStream.new(nil,socket,nil,nil)
95
95
  expect(ss.read).to eql 'test'
96
+ thread.join
96
97
  Cosmos.close_socket(socket)
97
98
  Cosmos.close_socket(server)
98
- thread.kill
99
99
  sleep 0.1
100
+ ss.disconnect
100
101
  end
101
102
 
102
103
  it "handles socket timeouts" do
103
104
  server = TCPServer.new(2000) # Server bound to port 2000
104
105
  thread = Thread.new do
105
- loop do
106
- client = server.accept # Wait for a client to connect
107
- sleep 0.2
108
- client.close
109
- end
106
+ client = server.accept # Wait for a client to connect
107
+ sleep 0.2
108
+ client.close
110
109
  end
111
110
  socket = TCPSocket.new('localhost', 2000)
112
111
  ss = TcpipSocketStream.new(nil,socket,nil,0.1)
113
112
  expect { ss.read }.to raise_error(Timeout::Error)
113
+ thread.join
114
114
  sleep 0.2
115
115
  Cosmos.close_socket(socket)
116
116
  Cosmos.close_socket(server)
117
- thread.kill
117
+ ss.disconnect
118
118
  sleep 0.1
119
119
  end
120
120
 
121
121
  it "handles socket connection reset exceptions" do
122
122
  server = TCPServer.new(2000) # Server bound to port 2000
123
123
  thread = Thread.new do
124
- loop do
125
- client = server.accept # Wait for a client to connect
124
+ client = server.accept # Wait for a client to connect
125
+ sleep 0.2
126
+ begin
126
127
  client.close
128
+ rescue IOError
129
+ # Closing the socket causes an IOError
127
130
  end
128
131
  end
129
132
  socket = TCPSocket.new('localhost', 2000)
130
133
  ss = TcpipSocketStream.new(nil,socket,nil,5)
134
+ sleep 0.1 # Allow the server thread to accept
131
135
  # Close the socket before trying to read from it
132
136
  Cosmos.close_socket(socket)
133
137
  expect(ss.read).to eql ''
134
138
  Cosmos.close_socket(server)
135
- thread.kill
139
+ thread.join
140
+ ss.disconnect
136
141
  sleep 0.1
137
142
  end
138
143
  end
@@ -142,6 +147,7 @@ module Cosmos
142
147
  ss = TcpipSocketStream.new(nil,'read',nil,nil)
143
148
  ss.connect
144
149
  expect { ss.write('test') }.to raise_error("Attempt to write to read only stream")
150
+ ss.disconnect
145
151
  end
146
152
 
147
153
  it "calls write from the driver" do
@@ -151,6 +157,7 @@ module Cosmos
151
157
  ss = TcpipSocketStream.new(write,nil,nil,nil)
152
158
  ss.connect
153
159
  ss.write('test')
160
+ ss.disconnect
154
161
  end
155
162
 
156
163
  it "handles socket blocking exceptions" do
@@ -169,6 +176,7 @@ module Cosmos
169
176
  ss = TcpipSocketStream.new(write,nil,nil,nil)
170
177
  ss.connect
171
178
  ss.write('test')
179
+ ss.disconnect
172
180
  end
173
181
 
174
182
  it "handles socket timeouts" do
@@ -178,6 +186,7 @@ module Cosmos
178
186
  ss = TcpipSocketStream.new(write,nil,nil,nil)
179
187
  ss.connect
180
188
  expect { ss.write('test') }.to raise_error(Timeout::Error)
189
+ ss.disconnect
181
190
  end
182
191
  end
183
192
 
@@ -217,10 +226,6 @@ module Cosmos
217
226
  expect(ss.connected?).to be false
218
227
  end
219
228
  end
220
-
221
229
  end
222
-
223
230
  end # TEMP for Jruby
224
-
225
231
  end
226
-
@@ -263,7 +263,7 @@ module Cosmos
263
263
  end
264
264
 
265
265
  describe "packets and System.packets" do
266
- it "calculates MD5s across all the target files" do
266
+ it "calculates hash strings across all the target files" do
267
267
  capture_io do |stdout|
268
268
  # This line actually does the work of reading the configuration
269
269
  expect(System.telemetry.target_names).to eql ['INST', 'SYSTEM']
@@ -488,6 +488,8 @@ module Cosmos
488
488
  tf.close
489
489
  FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
490
490
  System.instance.process_file(tf.path)
491
+ expect(System.targets.key?('TGT')).to be true
492
+ expect(System.targets.key?('SYSTEM')).to be true
491
493
  tf.unlink
492
494
  end
493
495
 
@@ -870,12 +872,85 @@ module Cosmos
870
872
  tf.puts("ADD_MD5_FILE #{File.expand_path(md5f.path)}")
871
873
  tf.close
872
874
  System.instance.process_file(tf.path)
873
- expect(System.additional_md5_files.include?(File.expand_path(md5f.path))).to be true
875
+ expect(System.additional_hashing_files.include?(File.expand_path(md5f.path))).to be true
874
876
  md5f.close
875
877
  md5f.unlink
876
878
  tf.unlink
877
879
  end
878
880
  end
881
+
882
+ context "with ADD_HASH_FILE" do
883
+ it "takes 1 parameter" do
884
+ tf = Tempfile.new('unittest')
885
+ tf.puts("ADD_HASH_FILE")
886
+ tf.close
887
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for ADD_HASH_FILE./)
888
+ tf.unlink
889
+
890
+ tf = Tempfile.new('unittest')
891
+ tf.puts("ADD_HASH_FILE 1 2")
892
+ tf.close
893
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for ADD_HASH_FILE./)
894
+ tf.unlink
895
+ end
896
+
897
+ it "complains about missing files" do
898
+ tf = Tempfile.new('unittest')
899
+ tf.puts("ADD_HASH_FILE missing_file")
900
+ tf.close
901
+ expect { System.instance.process_file(tf.path) }.to raise_error(/Missing expected file: missing_file/)
902
+ tf.unlink
903
+ end
904
+
905
+ it "adds a file to the hashing sum calculation" do
906
+ hashf = Tempfile.new('hash_file')
907
+ tf = Tempfile.new('unittest')
908
+ tf.puts("ADD_HASH_FILE #{File.expand_path(hashf.path)}")
909
+ tf.close
910
+ System.instance.process_file(tf.path)
911
+ expect(System.additional_hashing_files.include?(File.expand_path(hashf.path))).to be true
912
+ hashf.close
913
+ hashf.unlink
914
+ tf.unlink
915
+ end
916
+ end
917
+
918
+ context "with HASHING_ALGORITHM" do
919
+ it "takes 1 parameter" do
920
+ tf = Tempfile.new('unittest')
921
+ tf.puts("HASHING_ALGORITHM")
922
+ tf.close
923
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for HASHING_ALGORITHM./)
924
+ tf.unlink
925
+
926
+ tf = Tempfile.new('unittest')
927
+ tf.puts("HASHING_ALGORITHM 1 2")
928
+ tf.close
929
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for HASHING_ALGORITHM./)
930
+ tf.unlink
931
+ end
932
+
933
+ it "complains about invalid algorithms" do
934
+ tf = Tempfile.new('unittest')
935
+ tf.puts("HASHING_ALGORITHM BAD")
936
+ tf.close
937
+ expect(Logger).to receive(:error) do |msg|
938
+ expect(msg).to eql "Unrecognized hashing algorithm: BAD, using default algorithm MD5"
939
+ end
940
+ System.instance.process_file(tf.path)
941
+ expect(System.hashing_algorithm).to eql 'MD5'
942
+ tf.unlink
943
+ end
944
+
945
+ it "sets the hashing algorithm" do
946
+ tf = Tempfile.new('unittest')
947
+ tf.puts("HASHING_ALGORITHM SHA256")
948
+ tf.close
949
+ System.instance.process_file(tf.path)
950
+ expect(System.hashing_algorithm).to eql 'SHA256'
951
+ tf.unlink
952
+ end
953
+ end
879
954
  end
880
955
 
881
956
  describe "Cosmos.write_exception_file" do
@@ -12,6 +12,7 @@ require 'spec_helper'
12
12
  require 'cosmos'
13
13
  require 'cosmos/system/target'
14
14
  require 'tempfile'
15
+ require 'pathname'
15
16
 
16
17
  module Cosmos
17
18
 
@@ -167,8 +168,28 @@ module Cosmos
167
168
 
168
169
  # Initial require in target lib shouldn't be reported as error
169
170
  expect(Logger).to_not receive(:error)
170
- Target.new("INST").process_file(tf.path)
171
+ target = Target.new("INST")
172
+ target.process_file(tf.path)
171
173
  expect { SystemFile.new }.to_not raise_error
174
+ expect(Pathname.new(target.requires[0]).absolute?).to be true
175
+ File.delete filename
176
+ tf.unlink
177
+ end
178
+
179
+ it "requires a file with absolute path" do
180
+ filename = File.join(Cosmos::USERPATH, 'abs_path.rb')
181
+ File.open(filename, 'w') do |file|
182
+ file.puts "class AbsPath"
183
+ file.puts "end"
184
+ end
185
+ tf = Tempfile.new('unittest')
186
+ tf.puts("REQUIRE #{File.expand_path(filename)}")
187
+ tf.close
188
+
189
+ # Initial require in target lib shouldn't be reported as error
190
+ expect(Logger).to_not receive(:error)
191
+ Target.new("INST").process_file(tf.path)
192
+ expect { AbsPath.new }.to_not raise_error
172
193
  File.delete filename
173
194
  tf.unlink
174
195
  end
@@ -200,6 +221,46 @@ module Cosmos
200
221
  end
201
222
  end
202
223
 
224
+ context "with TLM_UNIQUE_ID_MODE" do
225
+ it "takes no parameters" do
226
+ tf = Tempfile.new('unittest')
227
+ tf.puts("")
228
+ tf.close
229
+ tgt = Target.new("TGT")
230
+ tgt.process_file(tf.path)
231
+ expect(tgt.tlm_unique_id_mode).to eql false
232
+ tf.unlink
233
+
234
+ tf = Tempfile.new('unittest')
235
+ tf.puts("TLM_UNIQUE_ID_MODE")
236
+ tf.close
237
+ tgt = Target.new("TGT")
238
+ tgt.process_file(tf.path)
239
+ expect(tgt.tlm_unique_id_mode).to eql true
240
+ tf.unlink
241
+ end
242
+ end
243
+
244
+ context "with CMD_UNIQUE_ID_MODE" do
245
+ it "takes no parameters" do
246
+ tf = Tempfile.new('unittest')
247
+ tf.puts("")
248
+ tf.close
249
+ tgt = Target.new("TGT")
250
+ tgt.process_file(tf.path)
251
+ expect(tgt.cmd_unique_id_mode).to eql false
252
+ tf.unlink
253
+
254
+ tf = Tempfile.new('unittest')
255
+ tf.puts("CMD_UNIQUE_ID_MODE")
256
+ tf.close
257
+ tgt = Target.new("TGT")
258
+ tgt.process_file(tf.path)
259
+ expect(tgt.cmd_unique_id_mode).to eql true
260
+ tf.unlink
261
+ end
262
+ end
263
+
203
264
  context "with COMMANDS and TELEMETRY" do
204
265
  it "takes 1 parameters" do
205
266
  tf = Tempfile.new('unittest')
@@ -497,7 +497,7 @@ DOC
497
497
  # Each element in the results array contains:
498
498
  # name, default, states, description, full units, units, required
499
499
  expect(result).to include ['TYPE',0,{"NORMAL"=>0,"SPECIAL"=>1},'Collect type',nil,nil,true,"UINT"]
500
- expect(result).to include ['TEMP',0.0,nil,'Collect temperature','Celcius','C',false,"FLOAT"]
500
+ expect(result).to include ['TEMP',0.0,nil,'Collect temperature','Celsius','C',false,"FLOAT"]
501
501
  end
502
502
 
503
503
  it "returns array parameters for the command" do
@@ -23,7 +23,7 @@ module Cosmos
23
23
  file.puts "require 'cosmos/tools/cmd_tlm_server/background_task'"
24
24
  file.puts "class MyBgTask#{i} < Cosmos::BackgroundTask"
25
25
  if i == 3
26
- file.puts " def call; raise 'Error'; end"
26
+ file.puts " def call; puts 'BG#{i} START'; raise 'Error'; end"
27
27
  else
28
28
  file.puts " def call; puts 'BG#{i} START'; @go = true; sleep 1 while @go; end"
29
29
  end
@@ -163,16 +163,24 @@ module Cosmos
163
163
  bt.start_all
164
164
  # 2 because the RSpec main thread plus the background task
165
165
  expect(running_threads.length).to eql(2)
166
+ expect(bt.instance_variable_get("@threads").length).to eq 1
167
+ expect(bt.instance_variable_get("@threads")[0].alive?).to eq true
166
168
  sleep 1.1 # Allow the thread to crash
167
169
  expect(running_threads.length).to eql(1)
168
- expect(bt.instance_variable_get("@threads").length).to eq 1
169
- expect(bt.instance_variable_get("@threads")[0].alive?).to eq false
170
+ expect(bt.instance_variable_get("@threads")[0]).to be_nil
171
+ expect(stdout.string).to match("unexpectedly died")
172
+ end
170
173
 
171
- bt.stop_all
172
- sleep 0.2
174
+ # Try to restart the task
175
+ capture_io do |stdout|
176
+ bt.start_all
177
+ # 2 because the RSpec main thread plus the background task
178
+ expect(running_threads.length).to eql(2)
179
+ expect(bt.instance_variable_get("@threads").length).to eq 1
180
+ expect(bt.instance_variable_get("@threads")[0].alive?).to eq true
181
+ sleep 1.1 # Allow the thread to crash
173
182
  expect(running_threads.length).to eql(1)
174
- expect(bt.instance_variable_get("@threads").length).to eq 0
175
-
183
+ expect(bt.instance_variable_get("@threads")[0]).to be_nil
176
184
  expect(stdout.string).to match("unexpectedly died")
177
185
  end
178
186
  tf.unlink
@@ -111,8 +111,8 @@ module Cosmos
111
111
  expect(filename).to eql File.join(Cosmos::PATH,'data','about.txt')
112
112
  end
113
113
 
114
- it "complains if the file is not found" do
115
- expect { Cosmos.data_path('nope.txt') }.to raise_error(/Could not find path/)
114
+ it "returns nil if the file is not found" do
115
+ expect(Cosmos.data_path('nope.txt')).to be_nil
116
116
  end
117
117
  end
118
118
 
@@ -171,6 +171,19 @@ module Cosmos
171
171
  Cosmos.cleanup_exceptions()
172
172
  end
173
173
 
174
+ it "rescues marshal dump errors in a Packet with a Mutex" do
175
+ capture_io do |stdout|
176
+ system_exit_count = $system_exit_count
177
+ pkt = Packet.new("TGT","PKT")
178
+ pkt.append_item("ITEM", 16, :UINT)
179
+ pkt.read_all
180
+ Cosmos.marshal_dump('marshal_test', pkt)
181
+ expect($system_exit_count).to be > system_exit_count
182
+ expect(stdout.string).to match("Mutex exists in a packet")
183
+ end
184
+ Cosmos.cleanup_exceptions()
185
+ end
186
+
174
187
  it "rescues marshal load errors" do
175
188
  # Attempt to load something that doesn't exist
176
189
  expect(Cosmos.marshal_load('blah')).to be_nil
@@ -222,18 +235,29 @@ module Cosmos
222
235
  end
223
236
  end
224
237
 
225
- describe "md5_files" do
226
- it "calculates a MD5 sum across files" do
238
+ describe "hash_files" do
239
+ it "calculates a hashing sum across files in md5 mode" do
227
240
  File.open(File.join(Cosmos::USERPATH,'test1.txt'),'w') {|f| f.puts "test1" }
228
241
  File.open(File.join(Cosmos::USERPATH,'test2.txt'),'w') {|f| f.puts "test2" }
229
- digest = Cosmos.md5_files(["test1.txt", "test2.txt"])
242
+ digest = Cosmos.hash_files(["test1.txt", "test2.txt"])
230
243
  expect(digest.digest.length).to be 16
231
244
  expect(digest.hexdigest).to eql 'e51dfbea83de9c7e6b49560089d8a170'
232
245
  File.delete(File.join(Cosmos::USERPATH, 'test1.txt'))
233
246
  File.delete(File.join(Cosmos::USERPATH, 'test2.txt'))
234
247
  end
248
+
249
+ it "calculates a hashing sum across files in sha256 mode" do
250
+ File.open(File.join(Cosmos::USERPATH,'test1.txt'),'w') {|f| f.puts "test1" }
251
+ File.open(File.join(Cosmos::USERPATH,'test2.txt'),'w') {|f| f.puts "test2" }
252
+ digest = Cosmos.hash_files(["test1.txt", "test2.txt"], nil, 'SHA256')
253
+ expect(digest.digest.length).to be 32
254
+ expect(digest.hexdigest).to eql '49789e7c809eb38ea34864b00e2cfd68825e0c07cd7b7d0c6fe2642ac87a919c'
255
+ File.delete(File.join(Cosmos::USERPATH, 'test1.txt'))
256
+ File.delete(File.join(Cosmos::USERPATH, 'test2.txt'))
257
+ end
235
258
  end
236
259
 
260
+
237
261
  describe "create_log_file" do
238
262
  it "creates a log file in System LOGS" do
239
263
  filename1 = Cosmos.create_log_file('test')