cosmos 3.9.2 → 4.0.0

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 (438) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +23 -0
  3. data/.travis.yml +1 -0
  4. data/.yardopts +3 -0
  5. data/Gemfile +1 -1
  6. data/Manifest.txt +137 -52
  7. data/Rakefile +50 -44
  8. data/autohotkey/config/system/system.txt +0 -5
  9. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +6 -1
  10. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  11. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  12. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  13. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  14. data/autohotkey/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  15. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  16. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  17. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  18. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  19. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  20. data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
  21. data/autohotkey/tools/CmdSequence +14 -0
  22. data/autohotkey/tools/CmdSequenceAHK +23 -0
  23. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  24. data/autohotkey/tools/cmd_extractor.ahk +2 -2
  25. data/autohotkey/tools/cmd_sender.ahk +4 -6
  26. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  27. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  28. data/autohotkey/tools/data_viewer.ahk +2 -3
  29. data/autohotkey/tools/limits_monitor.ahk +9 -11
  30. data/autohotkey/tools/open_gl_builder.ahk +1 -2
  31. data/autohotkey/tools/packet_viewer.ahk +51 -35
  32. data/autohotkey/tools/replay.ahk +1 -2
  33. data/autohotkey/tools/script_runner.ahk +1 -2
  34. data/autohotkey/tools/script_runner2.ahk +1 -2
  35. data/autohotkey/tools/test_runner2.ahk +1 -5
  36. data/autohotkey/tools/test_runner3.ahk +1 -3
  37. data/autohotkey/tools/tlm_grapher.ahk +1 -3
  38. data/autohotkey/tools/tlm_grapher3.ahk +1 -2
  39. data/autohotkey/tools/tlm_viewer.ahk +8 -3
  40. data/autohotkey/tools/tlm_viewer2.ahk +2 -3
  41. data/autohotkey/tools/tlm_viewer5.ahk +1 -2
  42. data/cosmos.gemspec +26 -20
  43. data/data/cmd_sequence.png +0 -0
  44. data/data/config/_array_params.yaml +23 -0
  45. data/data/config/_id_items.yaml +24 -0
  46. data/data/config/_id_params.yaml +58 -0
  47. data/data/config/_interfaces.yaml +206 -0
  48. data/data/config/_items.yaml +20 -0
  49. data/data/config/_params.yaml +58 -0
  50. data/data/config/cmd_tlm_server.yaml +110 -0
  51. data/data/config/command.yaml +38 -0
  52. data/data/config/command_modifiers.yaml +127 -0
  53. data/data/config/command_telemetry.yaml +3 -0
  54. data/data/config/data_viewer.yaml +43 -0
  55. data/data/config/handbook_creator.yaml +23 -0
  56. data/data/config/housekeeping_params.yaml +71 -0
  57. data/data/config/interface_modifiers.yaml +44 -0
  58. data/data/config/item_modifiers.yaml +172 -0
  59. data/data/config/launcher.yaml +117 -0
  60. data/data/config/limits_monitor.yaml +53 -0
  61. data/data/config/linegraph_params.yaml +30 -0
  62. data/data/config/linegraph_plot.yaml +106 -0
  63. data/data/config/page_modifiers.yaml +128 -0
  64. data/data/config/param_item_modifiers.yaml +41 -0
  65. data/data/config/parameter_modifiers.yaml +144 -0
  66. data/data/config/protocols.yaml +257 -0
  67. data/data/config/screen.yaml +151 -0
  68. data/data/config/script_runner.yaml +15 -0
  69. data/data/config/system.yaml +153 -0
  70. data/data/config/table_manager.yaml +76 -0
  71. data/data/config/table_parameter_modifiers.yaml +9 -0
  72. data/data/config/target.yaml +71 -0
  73. data/data/config/telemetry.yaml +73 -0
  74. data/data/config/telemetry_modifiers.yaml +129 -0
  75. data/data/config/test_runner.yaml +118 -0
  76. data/data/config/tlm_extractor.yaml +109 -0
  77. data/data/config/tlm_grapher.yaml +78 -0
  78. data/data/config/tlm_viewer.yaml +107 -0
  79. data/data/config/unknown.yaml +3 -0
  80. data/data/config/widgets.yaml +1339 -0
  81. data/data/config/xy_params.yaml +50 -0
  82. data/data/config/xy_plot.yaml +12 -0
  83. data/data/config_editor.png +0 -0
  84. data/data/crc.txt +172 -161
  85. data/data/delete.png +0 -0
  86. data/demo/config/data/crc.txt +56 -36
  87. data/demo/config/data/meta_init.txt +1 -4
  88. data/demo/config/system/system.txt +15 -3
  89. data/demo/config/system/system2.txt +13 -3
  90. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +2 -6
  91. data/demo/config/targets/EXAMPLE/target.txt +3 -1
  92. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -0
  93. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  94. data/demo/config/targets/INST/screens/adcs.txt +39 -15
  95. data/demo/config/targets/INST/screens/commanding.txt +26 -19
  96. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  97. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  98. data/demo/config/targets/INST/screens/tabs.txt +0 -2
  99. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  100. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  101. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  102. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  103. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  104. data/demo/config/targets/INST/target.txt +4 -0
  105. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  106. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  107. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  108. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  109. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -3
  110. data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  111. data/demo/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  112. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  113. data/demo/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  114. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +39 -0
  115. data/demo/config/targets/SYSTEM/screens/status.txt +1 -1
  116. data/demo/config/targets/SYSTEM/target.txt +12 -0
  117. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +1 -1
  118. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +8 -5
  119. data/demo/config/targets/TEMPLATED/target.txt +2 -0
  120. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +15 -6
  121. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +13 -5
  122. data/demo/config/tools/data_viewer/data_viewer.txt +9 -0
  123. data/demo/config/tools/launcher/launcher.txt +9 -6
  124. data/demo/config/tools/launcher/launcher2.txt +16 -13
  125. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  126. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +12 -11
  127. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +12 -11
  128. data/demo/config/tools/test_runner/test_runner.txt +1 -1
  129. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  130. data/demo/lib/example_background_task.rb +9 -5
  131. data/demo/lib/example_target.rb +5 -15
  132. data/demo/lib/scpi_target.rb +4 -10
  133. data/demo/procedures/cosmos_api_test.rb +17 -0
  134. data/demo/tools/CmdSequence +16 -0
  135. data/demo/tools/CmdSequence.bat +9 -0
  136. data/demo/tools/ConfigEditor +16 -0
  137. data/demo/tools/ConfigEditor.bat +9 -0
  138. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  139. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  140. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  141. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  142. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  143. data/ext/cosmos/ext/packet/packet.c +5 -5
  144. data/install/config/data/crc.txt +12 -8
  145. data/install/config/system/system.txt +13 -3
  146. data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +14 -0
  147. data/install/config/targets/SYSTEM/target.txt +12 -0
  148. data/install/tools/CmdSequence +16 -0
  149. data/install/tools/CmdSequence.bat +9 -0
  150. data/install/tools/ConfigEditor +16 -0
  151. data/install/tools/ConfigEditor.bat +9 -0
  152. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  153. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  154. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  155. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  156. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  157. data/lib/cosmos.rb +1 -1
  158. data/lib/cosmos/config/config_parser.rb +147 -59
  159. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  160. data/lib/cosmos/conversions/polynomial_conversion.rb +20 -4
  161. data/lib/cosmos/conversions/unix_time_conversion.rb +4 -4
  162. data/lib/cosmos/core_ext/array.rb +45 -5
  163. data/lib/cosmos/core_ext/cosmos_io.rb +31 -15
  164. data/lib/cosmos/core_ext/file.rb +2 -2
  165. data/lib/cosmos/core_ext/kernel.rb +1 -6
  166. data/lib/cosmos/core_ext/objectspace.rb +0 -2
  167. data/lib/cosmos/core_ext/string.rb +27 -4
  168. data/lib/cosmos/core_ext/time.rb +39 -10
  169. data/lib/cosmos/gui/choosers/combobox_chooser.rb +37 -26
  170. data/lib/cosmos/gui/choosers/file_chooser.rb +23 -6
  171. data/lib/cosmos/gui/choosers/float_chooser.rb +13 -11
  172. data/lib/cosmos/gui/choosers/integer_chooser.rb +13 -11
  173. data/lib/cosmos/gui/choosers/string_chooser.rb +18 -36
  174. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +64 -64
  175. data/lib/cosmos/gui/choosers/value_chooser.rb +15 -15
  176. data/lib/cosmos/gui/dialogs/about_dialog.rb +18 -13
  177. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +11 -3
  178. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +1 -1
  179. data/lib/cosmos/gui/dialogs/details_dialog.rb +1 -1
  180. data/lib/cosmos/gui/dialogs/exception_dialog.rb +7 -7
  181. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +20 -15
  182. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  183. data/lib/cosmos/gui/dialogs/legal_dialog.rb +6 -5
  184. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +5 -2
  185. data/lib/cosmos/gui/dialogs/progress_dialog.rb +1 -1
  186. data/lib/cosmos/gui/dialogs/pry_dialog.rb +4 -4
  187. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +3 -0
  188. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +7 -6
  189. data/lib/cosmos/gui/dialogs/splash.rb +1 -1
  190. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
  191. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +114 -0
  192. data/lib/cosmos/gui/line_graph/line_graph.rb +9 -10
  193. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +7 -5
  194. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +3 -7
  195. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +3 -8
  196. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +2 -7
  197. data/lib/cosmos/gui/line_graph/overview_graph.rb +6 -1
  198. data/lib/cosmos/gui/opengl/earth_model.rb +6 -3
  199. data/lib/cosmos/gui/opengl/gl_bounds.rb +11 -23
  200. data/lib/cosmos/gui/opengl/gl_light.rb +3 -4
  201. data/lib/cosmos/gui/opengl/gl_material.rb +3 -4
  202. data/lib/cosmos/gui/opengl/gl_scene.rb +10 -4
  203. data/lib/cosmos/gui/opengl/gl_shape.rb +6 -2
  204. data/lib/cosmos/gui/opengl/gl_viewer.rb +5 -5
  205. data/lib/cosmos/gui/opengl/gl_viewport.rb +11 -12
  206. data/lib/cosmos/gui/opengl/moon_model.rb +6 -3
  207. data/lib/cosmos/gui/opengl/stl_reader.rb +8 -9
  208. data/lib/cosmos/gui/opengl/stl_shape.rb +4 -5
  209. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +7 -7
  210. data/lib/cosmos/gui/qt.rb +1 -1
  211. data/lib/cosmos/gui/qt_tool.rb +21 -10
  212. data/lib/cosmos/gui/text/completion.rb +23 -2
  213. data/lib/cosmos/gui/text/completion_text_edit.rb +38 -23
  214. data/lib/cosmos/gui/utilities/analyze_log.rb +1 -1
  215. data/lib/cosmos/gui/utilities/screenshot.rb +2 -2
  216. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +11 -1
  217. data/lib/cosmos/gui/widgets/packet_log_frame.rb +19 -6
  218. data/lib/cosmos/interfaces.rb +10 -0
  219. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +28 -47
  220. data/lib/cosmos/interfaces/interface.rb +240 -22
  221. data/lib/cosmos/interfaces/linc_interface.rb +3 -5
  222. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  223. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  224. data/lib/cosmos/{streams/fixed_stream_protocol.rb → interfaces/protocols/fixed_protocol.rb} +40 -37
  225. data/lib/cosmos/{streams/length_stream_protocol.rb → interfaces/protocols/length_protocol.rb} +55 -48
  226. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  227. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  228. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  229. data/lib/cosmos/interfaces/protocols/template_protocol.rb +209 -0
  230. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  231. data/lib/cosmos/interfaces/serial_interface.rb +28 -23
  232. data/lib/cosmos/interfaces/simulated_target_interface.rb +27 -16
  233. data/lib/cosmos/interfaces/stream_interface.rb +36 -108
  234. data/lib/cosmos/interfaces/tcpip_client_interface.rb +21 -21
  235. data/lib/cosmos/interfaces/tcpip_server_interface.rb +555 -94
  236. data/lib/cosmos/interfaces/udp_interface.rb +51 -83
  237. data/lib/cosmos/io/buffered_file.rb +92 -2
  238. data/lib/cosmos/io/json_drb.rb +2 -2
  239. data/lib/cosmos/io/posix_serial_driver.rb +3 -1
  240. data/lib/cosmos/io/raw_logger.rb +3 -3
  241. data/lib/cosmos/io/serial_driver.rb +14 -5
  242. data/lib/cosmos/io/win32_serial_driver.rb +16 -4
  243. data/lib/cosmos/packet_logs.rb +0 -1
  244. data/lib/cosmos/packet_logs/packet_log_reader.rb +11 -1
  245. data/lib/cosmos/packet_logs/packet_log_writer.rb +31 -13
  246. data/lib/cosmos/packets/binary_accessor.rb +599 -32
  247. data/lib/cosmos/packets/commands.rb +48 -24
  248. data/lib/cosmos/packets/packet.rb +140 -54
  249. data/lib/cosmos/packets/packet_config.rb +0 -2
  250. data/lib/cosmos/packets/parsers/packet_item_parser.rb +10 -2
  251. data/lib/cosmos/packets/structure.rb +81 -33
  252. data/lib/cosmos/packets/structure_item.rb +45 -5
  253. data/lib/cosmos/packets/telemetry.rb +149 -55
  254. data/lib/cosmos/script/api_shared.rb +1000 -0
  255. data/lib/cosmos/script/commands.rb +2 -2
  256. data/lib/cosmos/script/extract.rb +19 -4
  257. data/lib/cosmos/script/limits.rb +2 -0
  258. data/lib/cosmos/script/script.rb +1 -1
  259. data/lib/cosmos/script/scripting.rb +4 -784
  260. data/lib/cosmos/script/telemetry.rb +44 -23
  261. data/lib/cosmos/script/tools.rb +15 -69
  262. data/lib/cosmos/streams/serial_stream.rb +12 -19
  263. data/lib/cosmos/streams/stream.rb +2 -11
  264. data/lib/cosmos/streams/tcpip_socket_stream.rb +3 -13
  265. data/lib/cosmos/system/system.rb +187 -31
  266. data/lib/cosmos/system/target.rb +11 -2
  267. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +12 -11
  268. data/lib/cosmos/tools/cmd_sender/{cmd_sender_item_delegate.rb → cmd_param_table_item_delegate.rb} +11 -10
  269. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +209 -164
  270. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  271. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  272. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  273. data/lib/cosmos/tools/cmd_tlm_server/api.rb +179 -5
  274. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +31 -14
  275. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +23 -16
  276. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +92 -20
  277. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +1 -1
  278. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +17 -4
  279. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +0 -5
  280. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -2
  281. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +4 -4
  282. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +121 -0
  283. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +8 -4
  284. data/lib/cosmos/tools/config_editor/config_editor.rb +720 -0
  285. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +675 -0
  286. data/lib/cosmos/tools/data_viewer/data_viewer.rb +44 -27
  287. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +8 -22
  288. data/lib/cosmos/tools/launcher/launcher.rb +29 -12
  289. data/lib/cosmos/tools/launcher/launcher_config.rb +1 -1
  290. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +153 -42
  291. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +44 -6
  292. data/lib/cosmos/tools/replay/replay.rb +36 -20
  293. data/lib/cosmos/tools/replay/replay_server.rb +1 -1
  294. data/lib/cosmos/tools/script_runner/script_runner_config.rb +1 -1
  295. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +31 -21
  296. data/lib/cosmos/tools/table_manager/table_config.rb +9 -3
  297. data/lib/cosmos/tools/table_manager/table_manager.rb +27 -7
  298. data/lib/cosmos/tools/test_runner/results_writer.rb +6 -6
  299. data/lib/cosmos/tools/test_runner/test_runner.rb +4 -6
  300. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +4 -5
  301. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +1 -1
  302. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
  303. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +23 -6
  304. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +44 -3
  305. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +20 -7
  306. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1 -1
  307. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +11 -4
  308. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +2 -2
  309. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +1 -1
  310. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +16 -0
  311. data/lib/cosmos/tools/tlm_viewer/screen.rb +36 -32
  312. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +59 -50
  313. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +2 -2
  314. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  315. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +1 -0
  316. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +22 -4
  317. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +9 -0
  318. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  319. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +3 -2
  320. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +3 -2
  321. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +12 -12
  322. data/lib/cosmos/top_level.rb +34 -24
  323. data/lib/cosmos/utilities/crc.rb +108 -6
  324. data/lib/cosmos/utilities/csv.rb +68 -14
  325. data/lib/cosmos/utilities/logger.rb +2 -2
  326. data/lib/cosmos/utilities/low_fragmentation_array.rb +9 -1
  327. data/lib/cosmos/version.rb +6 -6
  328. data/lib/cosmos/win32/win32_main.rb +50 -46
  329. data/run_gui_tests.bat +3 -1
  330. data/spec/conversions/unix_time_formatted_conversion_spec.rb +2 -2
  331. data/spec/conversions/unix_time_seconds_conversion_spec.rb +2 -2
  332. data/spec/core_ext/file_spec.rb +1 -1
  333. data/spec/core_ext/objectspace_spec.rb +12 -9
  334. data/spec/core_ext/string_spec.rb +6 -0
  335. data/spec/core_ext/time_spec.rb +10 -0
  336. data/spec/gui/line_graph/line_clip_spec.rb +226 -224
  337. data/spec/gui/qt_spec.rb +81 -79
  338. data/spec/install/config/system/system.txt +0 -6
  339. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +5 -5
  340. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +8 -8
  341. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  342. data/{install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt → spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  343. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  344. data/spec/install/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  345. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  346. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  347. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +9 -13
  348. data/spec/interfaces/interface_spec.rb +402 -18
  349. data/spec/interfaces/linc_interface_spec.rb +37 -39
  350. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  351. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  352. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  353. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  354. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  355. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  356. data/spec/interfaces/protocols/template_protocol_spec.rb +218 -0
  357. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  358. data/spec/interfaces/serial_interface_spec.rb +35 -34
  359. data/spec/interfaces/simulated_target_interface_spec.rb +13 -13
  360. data/spec/interfaces/tcpip_client_interface_spec.rb +21 -16
  361. data/spec/interfaces/tcpip_server_interface_spec.rb +66 -69
  362. data/spec/interfaces/udp_interface_spec.rb +120 -55
  363. data/spec/io/serial_driver_spec.rb +41 -39
  364. data/spec/io/udp_sockets_spec.rb +13 -8
  365. data/spec/io/win32_serial_driver_spec.rb +62 -59
  366. data/spec/packet_logs/packet_log_reader_spec.rb +68 -47
  367. data/spec/packet_logs/packet_log_writer_spec.rb +7 -5
  368. data/spec/packets/commands_spec.rb +5 -5
  369. data/spec/packets/packet_spec.rb +2 -14
  370. data/spec/script/extract_spec.rb +21 -7
  371. data/spec/script/scripting_spec.rb +261 -6
  372. data/spec/script/telemetry_spec.rb +17 -9
  373. data/spec/spec_helper.rb +26 -10
  374. data/spec/streams/serial_stream_spec.rb +87 -82
  375. data/spec/streams/tcpip_client_stream_spec.rb +12 -4
  376. data/spec/streams/tcpip_socket_stream_spec.rb +5 -0
  377. data/spec/system/system_spec.rb +66 -50
  378. data/spec/system/target_spec.rb +33 -11
  379. data/spec/tools/cmd_tlm_server/api_spec.rb +5 -5
  380. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +75 -15
  381. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +125 -5
  382. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +244 -232
  383. data/spec/tools/cmd_tlm_server/commanding_spec.rb +18 -18
  384. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +124 -29
  385. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +2 -2
  386. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  387. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +50 -10
  388. data/spec/tools/table_manager/tablemanager_core_spec.rb +0 -1
  389. data/spec/top_level/top_level_spec.rb +39 -11
  390. data/spec/utilities/csv_spec.rb +62 -20
  391. data/tasks/gemfile_stats.rake +6 -3
  392. data/test/performance/config/system/system_packets.txt +0 -1
  393. data/test/performance/config/system/system_threads.txt +0 -1
  394. metadata +177 -92
  395. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  396. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  397. data/autohotkey/config/targets/COSMOS/target.txt +0 -5
  398. data/autohotkey/userpath.txt +0 -1
  399. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  400. data/demo/config/targets/COSMOS/screens/limits_change.txt +0 -20
  401. data/demo/config/targets/COSMOS/screens/version.txt +0 -19
  402. data/demo/config/targets/COSMOS/target.txt +0 -11
  403. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +0 -10
  404. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +0 -13
  405. data/demo/userpath.txt +0 -1
  406. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  407. data/install/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  408. data/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  409. data/install/config/targets/COSMOS/screens/version.txt +0 -19
  410. data/install/config/targets/COSMOS/target.txt +0 -9
  411. data/install/config/targets/SYSTEM/README.txt +0 -1
  412. data/install/userpath.txt +0 -1
  413. data/lib/cosmos/io/tcpip_server.rb +0 -571
  414. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +0 -107
  415. data/lib/cosmos/streams/burst_stream_protocol.rb +0 -25
  416. data/lib/cosmos/streams/preidentified_stream_protocol.rb +0 -118
  417. data/lib/cosmos/streams/stream_protocol.rb +0 -373
  418. data/lib/cosmos/streams/template_stream_protocol.rb +0 -140
  419. data/lib/cosmos/streams/terminated_stream_protocol.rb +0 -85
  420. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +0 -41
  421. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  422. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  423. data/spec/install/config/targets/COSMOS/screens/version.txt +0 -19
  424. data/spec/install/config/targets/COSMOS/target.txt +0 -5
  425. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +0 -4
  426. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +0 -4
  427. data/spec/install/userpath.txt +0 -1
  428. data/spec/interfaces/stream_interface_spec.rb +0 -157
  429. data/spec/io/tcpip_server_spec.rb +0 -338
  430. data/spec/packet_logs/meta_packet_log_writer_spec.rb +0 -170
  431. data/spec/streams/burst_stream_protocol_spec.rb +0 -32
  432. data/spec/streams/fixed_stream_protocol_spec.rb +0 -113
  433. data/spec/streams/length_stream_protocol_spec.rb +0 -300
  434. data/spec/streams/preidentified_stream_protocol_spec.rb +0 -121
  435. data/spec/streams/stream_protocol_spec.rb +0 -346
  436. data/spec/streams/template_stream_protocol_spec.rb +0 -156
  437. data/spec/streams/terminated_stream_protocol_spec.rb +0 -127
  438. data/test/performance/userpath.txt +0 -1
@@ -0,0 +1,174 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'spec_helper'
12
+ require 'cosmos/interfaces/protocols/terminated_protocol'
13
+ require 'cosmos/interfaces/interface'
14
+ require 'cosmos/streams/stream'
15
+
16
+ module Cosmos
17
+ describe TerminatedProtocol do
18
+ class TerminatedStream < Stream
19
+ def connect; end
20
+ def connected?; true; end
21
+ def disconnect; end
22
+ def read; $buffer; end
23
+ def write(data); $buffer = data; end
24
+ end
25
+
26
+ before(:each) do
27
+ @interface = StreamInterface.new
28
+ allow(@interface).to receive(:connected?) { true }
29
+ $buffer = ''
30
+ end
31
+
32
+ describe "initialize" do
33
+ it "initializes attributes" do
34
+ @interface.add_protocol(TerminatedProtocol, ['0xABCD','0xABCD'], :READ_WRITE)
35
+ expect(@interface.read_protocols[0].instance_variable_get(:@data)).to eq ''
36
+ end
37
+ end
38
+
39
+ describe "read" do
40
+ it "handles multiple reads" do
41
+ $index = 0
42
+ class MultiTerminatedStream < TerminatedStream
43
+ def read
44
+ case $index
45
+ when 0
46
+ $index += 1
47
+ "\x01\x02"
48
+ when 1
49
+ $index += 1
50
+ "\xAB"
51
+ when 2
52
+ $index += 1
53
+ "\xCD"
54
+ end
55
+ end
56
+ end
57
+
58
+ @interface.instance_variable_set(:@stream, MultiTerminatedStream.new)
59
+ @interface.add_protocol(TerminatedProtocol, ['', '0xABCD', true], :READ_WRITE)
60
+ packet = @interface.read
61
+ expect(packet.buffer).to eql("\x01\x02")
62
+ end
63
+
64
+ context "when stripping termination characters" do
65
+ it "handles empty packets" do
66
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
67
+ @interface.add_protocol(TerminatedProtocol, ['', '0xABCD', true], :READ_WRITE)
68
+ $buffer = "\xAB\xCD\x01\x02\xAB\xCD"
69
+ packet = @interface.read
70
+ expect(packet.buffer.length).to eql 0
71
+ packet = @interface.read
72
+ expect(packet.buffer).to eql("\x01\x02")
73
+ end
74
+
75
+ it "handles no sync pattern" do
76
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
77
+ @interface.add_protocol(TerminatedProtocol, ['', '0xABCD', true], :READ_WRITE)
78
+ $buffer = "\x00\x01\x02\xAB\xCD\x44\x02\x03"
79
+ packet = @interface.read
80
+ expect(packet.buffer).to eql("\x00\x01\x02")
81
+ end
82
+
83
+ it "handles a sync pattern inside the packet" do
84
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
85
+ @interface.add_protocol(TerminatedProtocol, ['', '0xABCD', true, 0, 'DEAD'], :READ_WRITE)
86
+ $buffer = "\xDE\xAD\x00\x01\x02\xAB\xCD\x44\x02\x03"
87
+ packet = @interface.read
88
+ expect(packet.buffer).to eql("\xDE\xAD\x00\x01\x02")
89
+ end
90
+
91
+ it "handles a sync pattern outside the packet" do
92
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
93
+ @interface.add_protocol(TerminatedProtocol, ['', '0xABCD', true, 2, 'DEAD'], :READ_WRITE)
94
+ $buffer = "\xDE\xAD\x00\x01\x02\xAB\xCD\x44\x02\x03"
95
+ packet = @interface.read
96
+ expect(packet.buffer).to eql("\x00\x01\x02")
97
+ end
98
+ end
99
+
100
+ context "when keeping termination characters" do
101
+ it "handles empty packets" do
102
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
103
+ @interface.add_protocol(TerminatedProtocol, ['', '0xABCD', false], :READ_WRITE)
104
+ $buffer = "\xAB\xCD\x01\x02\xAB\xCD"
105
+ packet = @interface.read
106
+ expect(packet.buffer).to eql("\xAB\xCD")
107
+ packet = @interface.read
108
+ expect(packet.buffer).to eql("\x01\x02\xAB\xCD")
109
+ end
110
+
111
+ it "handles no sync pattern" do
112
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
113
+ @interface.add_protocol(TerminatedProtocol, ['', '0xABCD', false], :READ_WRITE)
114
+ $buffer = "\x00\x01\x02\xAB\xCD\x44\x02\x03"
115
+ packet = @interface.read
116
+ expect(packet.buffer).to eql("\x00\x01\x02\xAB\xCD")
117
+ end
118
+
119
+ it "handles a sync pattern inside the packet" do
120
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
121
+ @interface.add_protocol(TerminatedProtocol, ['','0xABCD',false,0,'DEAD'], :READ_WRITE)
122
+ $buffer = "\xDE\xAD\x00\x01\x02\xAB\xCD\x44\x02\x03"
123
+ packet = @interface.read
124
+ expect(packet.buffer).to eql("\xDE\xAD\x00\x01\x02\xAB\xCD")
125
+ end
126
+
127
+ it "handles a sync pattern outside the packet" do
128
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
129
+ @interface.add_protocol(TerminatedProtocol, ['','0xABCD',false,2,'DEAD'], :READ_WRITE)
130
+ $buffer = "\xDE\xAD\x00\x01\x02\xAB\xCD\x44\x02\x03"
131
+ packet = @interface.read
132
+ expect(packet.buffer).to eql("\x00\x01\x02\xAB\xCD")
133
+ end
134
+ end
135
+ end
136
+
137
+ describe "write" do
138
+ it "appends termination characters to the packet" do
139
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
140
+ @interface.add_protocol(TerminatedProtocol, ['0xCDEF',''], :READ_WRITE)
141
+ pkt = Packet.new('tgt','pkt')
142
+ pkt.buffer = "\x00\x01\x02\x03"
143
+ @interface.write(pkt)
144
+ expect($buffer).to eql("\x00\x01\x02\x03\xCD\xEF")
145
+ end
146
+
147
+ it "complains if the packet buffer contains the termination characters" do
148
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
149
+ @interface.add_protocol(TerminatedProtocol, ['0xCDEF',''], :READ_WRITE)
150
+ pkt = Packet.new('tgt','pkt')
151
+ pkt.buffer = "\x00\xCD\xEF\x03"
152
+ expect { @interface.write(pkt) }.to raise_error("Packet contains termination characters!")
153
+ end
154
+
155
+ it "handles writing the sync field inside the packet" do
156
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
157
+ @interface.add_protocol(TerminatedProtocol, ['0xCDEF','',true,0,'DEAD',true], :READ_WRITE)
158
+ pkt = Packet.new('tgt','pkt')
159
+ pkt.buffer = "\x00\x01\x02\x03"
160
+ @interface.write(pkt)
161
+ expect($buffer).to eql("\xDE\xAD\x02\x03\xCD\xEF")
162
+ end
163
+
164
+ it "handles writing the sync field outside the packet" do
165
+ @interface.instance_variable_set(:@stream, TerminatedStream.new)
166
+ @interface.add_protocol(TerminatedProtocol, ['0xCDEF','',true,2,'DEAD',true], :READ_WRITE)
167
+ pkt = Packet.new('tgt','pkt')
168
+ pkt.buffer = "\x00\x01\x02\x03"
169
+ @interface.write(pkt)
170
+ expect($buffer).to eql("\xDE\xAD\x00\x01\x02\x03\xCD\xEF")
171
+ end
172
+ end
173
+ end
174
+ end
@@ -8,49 +8,50 @@
8
8
  # as published by the Free Software Foundation; version 3 with
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
- require 'spec_helper'
12
- require 'cosmos/interfaces/serial_interface'
11
+ if RUBY_ENGINE == 'ruby' or Gem.win_platform?
13
12
 
14
- module Cosmos
13
+ require 'spec_helper'
14
+ require 'cosmos/interfaces/serial_interface'
15
15
 
16
- describe SerialInterface do
16
+ module Cosmos
17
17
 
18
- describe "initialize" do
19
- it "initializes the instance variables" do
20
- i = SerialInterface.new('COM1','COM1','9600','NONE','1','0','0','burst')
21
- expect(i.name).to eql "Cosmos::SerialInterface"
22
- end
18
+ describe SerialInterface do
23
19
 
24
- it "is not writeable if no write port given" do
25
- i = SerialInterface.new('nil','COM1','9600','NONE','1','0','0','burst')
26
- expect(i.name).to eql "Cosmos::SerialInterface"
27
- expect(i.write_allowed?).to be false
28
- expect(i.write_raw_allowed?).to be false
29
- expect(i.read_allowed?).to be true
30
- end
20
+ describe "initialize" do
21
+ it "initializes the instance variables" do
22
+ i = SerialInterface.new('COM1','COM1','9600','NONE','1','0','0','burst')
23
+ expect(i.name).to eql "SerialInterface"
24
+ end
25
+
26
+ it "is not writeable if no write port given" do
27
+ i = SerialInterface.new('nil','COM1','9600','NONE','1','0','0','burst')
28
+ expect(i.write_allowed?).to be false
29
+ expect(i.write_raw_allowed?).to be false
30
+ expect(i.read_allowed?).to be true
31
+ end
31
32
 
32
- it "is not readable if no read port given" do
33
- i = SerialInterface.new('COM1','nil','9600','NONE','1','0','0','burst')
34
- expect(i.name).to eql "Cosmos::SerialInterface"
35
- expect(i.write_allowed?).to be true
36
- expect(i.write_raw_allowed?).to be true
37
- expect(i.read_allowed?).to be false
33
+ it "is not readable if no read port given" do
34
+ i = SerialInterface.new('COM1','nil','9600','NONE','1','0','0','burst')
35
+ expect(i.write_allowed?).to be true
36
+ expect(i.write_raw_allowed?).to be true
37
+ expect(i.read_allowed?).to be false
38
+ end
38
39
  end
39
- end
40
40
 
41
- describe "connect" do
42
- it "passes a new SerialStream to the stream protocol" do
43
- # Ensure the 'NONE' parity is coverted to a symbol
44
- if Kernel.is_windows?
45
- i = SerialInterface.new('COM1','COM1','9600','NONE','1','0','0','burst')
46
- expect(i.connected?).to be false
47
- i.connect
48
- expect(i.connected?).to be true
49
- i.disconnect
50
- expect(i.connected?).to be false
41
+ describe "connect" do
42
+ it "passes a new SerialStream to the stream protocol" do
43
+ # Ensure the 'NONE' parity is coverted to a symbol
44
+ if Kernel.is_windows?
45
+ i = SerialInterface.new('COM1','COM1','9600','NONE','1','0','0','burst')
46
+ expect(i.connected?).to be false
47
+ i.connect
48
+ expect(i.connected?).to be true
49
+ i.disconnect
50
+ expect(i.connected?).to be false
51
+ end
51
52
  end
52
53
  end
53
54
  end
54
55
  end
55
- end
56
56
 
57
+ end
@@ -31,8 +31,8 @@ module Cosmos
31
31
  end
32
32
  def read(count, time)
33
33
  pkts = []
34
- pkts << Packet.new("COSMOS","VERSION")
35
- pkts << Packet.new("COSMOS","VERSION")
34
+ pkts << Packet.new("SYSTEM","LIMITS_CHANGE")
35
+ pkts << Packet.new("SYSTEM","LIMITS_CHANGE")
36
36
  end
37
37
  end
38
38
  end
@@ -57,7 +57,7 @@ end
57
57
  describe "connect" do
58
58
  it "creates the simulated target" do
59
59
  sti = SimulatedTargetInterface.new("test_inst.rb")
60
- sti.target_names = ['COSMOS']
60
+ sti.target_names = ['SYSTEM']
61
61
  sti.connect
62
62
  end
63
63
  end
@@ -65,7 +65,7 @@ end
65
65
  describe "connected?" do
66
66
  it "initiallies be false" do
67
67
  sti = SimulatedTargetInterface.new("test_inst.rb")
68
- sti.target_names = ['COSMOS']
68
+ sti.target_names = ['SYSTEM']
69
69
  expect(sti.connected?).to be false
70
70
  sti.connect
71
71
  expect(sti.connected?).to be true
@@ -79,15 +79,15 @@ end
79
79
 
80
80
  it "returns a simulated packet" do
81
81
  sti = SimulatedTargetInterface.new("test_inst.rb")
82
- sti.target_names = ['COSMOS']
82
+ sti.target_names = ['SYSTEM']
83
83
  expect(sti.connected?).to be false
84
84
  sti.connect
85
85
  pkt = sti.read
86
- expect(pkt.target_name).to eql "COSMOS"
87
- expect(pkt.packet_name).to eql "VERSION"
88
- pkt = sti.read
89
- expect(pkt.target_name).to eql "COSMOS"
90
- expect(pkt.packet_name).to eql "VERSION"
86
+ #~ expect(pkt.target_name).to eql "SYSTEM"
87
+ #~ expect(pkt.packet_name).to eql "LIMITS_CHANGE"
88
+ #~ pkt = sti.read
89
+ #~ expect(pkt.target_name).to eql "SYSTEM"
90
+ #~ expect(pkt.packet_name).to eql "LIMITS_CHANGE"
91
91
  end
92
92
  end
93
93
 
@@ -98,10 +98,10 @@ end
98
98
 
99
99
  it "writes commands to the simulator" do
100
100
  sti = SimulatedTargetInterface.new("test_inst.rb")
101
- sti.target_names = ['COSMOS']
101
+ sti.target_names = ['SYSTEM']
102
102
  expect(sti.connected?).to be false
103
103
  sti.connect
104
- sti.write(Packet.new("COSMOS","SETLOGLABEL"))
104
+ sti.write(Packet.new("SYSTEM","SETLOGLABEL"))
105
105
  end
106
106
  end
107
107
 
@@ -114,7 +114,7 @@ end
114
114
  describe "disconnect" do
115
115
  it "disconnects from the simulator" do
116
116
  sti = SimulatedTargetInterface.new("test_inst.rb")
117
- sti.target_names = ['COSMOS']
117
+ sti.target_names = ['SYSTEM']
118
118
  expect(sti.connected?).to be false
119
119
  sti.connect
120
120
  expect(sti.connected?).to be true
@@ -12,17 +12,11 @@ require 'spec_helper'
12
12
  require 'cosmos/interfaces/tcpip_client_interface'
13
13
 
14
14
  module Cosmos
15
-
16
15
  describe TcpipClientInterface do
17
-
18
16
  describe "initialize" do
19
- it "initializes the instance variables" do
20
- i = TcpipClientInterface.new('localhost','8888','8889','5','5','burst')
21
- end
22
-
23
17
  it "is not writeable if no write port given" do
24
18
  i = TcpipClientInterface.new('localhost','nil','8889','nil','5','burst')
25
- expect(i.name).to eql "Cosmos::TcpipClientInterface"
19
+ expect(i.name).to eql "TcpipClientInterface"
26
20
  expect(i.write_allowed?).to be false
27
21
  expect(i.write_raw_allowed?).to be false
28
22
  expect(i.read_allowed?).to be true
@@ -30,20 +24,32 @@ module Cosmos
30
24
 
31
25
  it "is not readable if no read port given" do
32
26
  i = TcpipClientInterface.new('localhost','8888','nil','5','nil','burst')
33
- expect(i.name).to eql "Cosmos::TcpipClientInterface"
27
+ expect(i.name).to eql "TcpipClientInterface"
34
28
  expect(i.write_allowed?).to be true
35
29
  expect(i.write_raw_allowed?).to be true
36
30
  expect(i.read_allowed?).to be false
37
31
  end
38
32
  end
39
33
 
40
- describe "connect" do
41
- it "passes a new TcpipClientStream to the stream protocol" do
42
- stream = double("stream")
43
- allow(stream).to receive(:connect)
44
- expect(TcpipClientStream).to receive(:new) { stream }
45
- expect(stream).to receive(:connected?) { true }
46
- expect(stream).to receive(:raw_logger_pair=) { nil }
34
+ # This spec fails when run after all the rest. Is someone opening something
35
+ # that we're connecting to? When run stand alone it works.
36
+ #describe "connect" do
37
+ # it "raises a timeout when unable to connect" do
38
+ # i = TcpipClientInterface.new('localhost','8888','8889','5','5','burst')
39
+ # expect(i.connected?).to be false
40
+ # i.connect
41
+ # expect { i.connect }.to raise_error(/Connect timeout/)
42
+ # end
43
+ #end
44
+
45
+ describe "connected?" do
46
+ it "initially returns false" do
47
+ i = TcpipClientInterface.new('localhost','8888','8889','5','5','burst')
48
+ expect(i.connected?).to be false
49
+ end
50
+
51
+ it "returns true once connect succeeds" do
52
+ allow_any_instance_of(TcpipClientStream).to receive(:connect_nonblock)
47
53
  i = TcpipClientInterface.new('localhost','8888','8889','5','5','burst')
48
54
  expect(i.connected?).to be false
49
55
  i.connect
@@ -52,4 +58,3 @@ module Cosmos
52
58
  end
53
59
  end
54
60
  end
55
-
@@ -14,20 +14,14 @@ require 'cosmos/interfaces/tcpip_server_interface'
14
14
  module Cosmos
15
15
 
16
16
  describe TcpipServerInterface do
17
- before(:each) do
18
- @stream = double("stream")
19
- expect(@stream).to receive(:interface=)
20
- expect(TcpipServer).to receive(:new) { @stream }
21
- end
22
-
23
17
  describe "initialize" do
24
18
  it "initializes the instance variables" do
25
19
  i = TcpipServerInterface.new('8888','8889','5','5','burst')
20
+ expect(i.name).to eql "TcpipServerInterface"
26
21
  end
27
22
 
28
23
  it "is not writeable if no write port given" do
29
24
  i = TcpipServerInterface.new('nil','8889','nil','5','burst')
30
- expect(i.name).to eql "Cosmos::TcpipServerInterface"
31
25
  expect(i.write_allowed?).to be false
32
26
  expect(i.write_raw_allowed?).to be false
33
27
  expect(i.read_allowed?).to be true
@@ -35,46 +29,22 @@ module Cosmos
35
29
 
36
30
  it "is not readable if no read port given" do
37
31
  i = TcpipServerInterface.new('8888','nil','5','nil','burst')
38
- expect(i.name).to eql "Cosmos::TcpipServerInterface"
39
32
  expect(i.write_allowed?).to be true
40
33
  expect(i.write_raw_allowed?).to be true
41
34
  expect(i.read_allowed?).to be false
42
35
  end
43
36
  end
44
37
 
45
- describe "connect, connected?, disconnect, bytes_read, bytes_written, num_clients, read_queue_size, write_queue_size" do
46
- it "calls forward to the TcpipServer" do
47
- expect(@stream).to receive(:connected?).and_return(false, true, false)
48
- expect(@stream).to receive(:connect)
49
- expect(@stream).to receive(:disconnect)
50
- expect(@stream).to receive(:bytes_read=)
51
- expect(@stream).to receive(:bytes_written=)
52
- expect(@stream).to receive(:bytes_read).and_return(10)
53
- expect(@stream).to receive(:bytes_written).and_return(20)
54
- expect(@stream).to receive(:num_clients).and_return(30)
55
- expect(@stream).to receive(:read_queue_size).and_return(40)
56
- expect(@stream).to receive(:write_queue_size).and_return(50)
57
- expect(@stream).to receive(:raw_logger_pair=) { nil }
58
- i = TcpipServerInterface.new('8888','8889','5','5','burst')
59
- expect(i.connected?).to be false
60
- i.connect
61
- expect(i.connected?).to be true
62
- i.disconnect
63
- expect(i.connected?).to be false
64
- i.bytes_read = 1000
65
- i.bytes_written = 2000
66
- expect(i.bytes_read).to eql 10
67
- expect(i.bytes_written).to eql 20
68
- expect(i.num_clients).to eql 30
69
- expect(i.read_queue_size).to eql 40
70
- expect(i.write_queue_size).to eql 50
71
- end
72
- end
73
-
74
38
  describe "read" do
75
39
  it "counts the packets received" do
76
- allow(@stream).to receive(:read) { Packet.new('','') }
77
40
  i = TcpipServerInterface.new('8888','8889','5','5','burst')
41
+ class << i
42
+ def connected?; true; end
43
+ end
44
+
45
+ read_queue = i.instance_variable_get(:@read_queue)
46
+ 2.times { read_queue << Packet.new(nil, nil) }
47
+
78
48
  expect(i.read_count).to eql 0
79
49
  i.read
80
50
  expect(i.read_count).to eql 1
@@ -83,8 +53,14 @@ module Cosmos
83
53
  end
84
54
 
85
55
  it "does not count nil packets" do
86
- allow(@stream).to receive(:read) { nil }
87
56
  i = TcpipServerInterface.new('8888','8889','5','5','burst')
57
+ class << i
58
+ def connected?; true; end
59
+ end
60
+
61
+ read_queue = i.instance_variable_get(:@read_queue)
62
+ 2.times { read_queue << nil }
63
+
88
64
  expect(i.read_count).to eql 0
89
65
  i.read
90
66
  expect(i.read_count).to eql 0
@@ -95,63 +71,84 @@ module Cosmos
95
71
 
96
72
  describe "write" do
97
73
  it "complains if the server is not connected" do
98
- expect(@stream).to receive(:connected?).and_return(false)
99
74
  i = TcpipServerInterface.new('8888','8889','5','5','burst')
75
+ class << i
76
+ def connected?; false; end
77
+ end
100
78
  expect { i.write(Packet.new('','')) }.to raise_error(/Interface not connected/)
101
79
  end
102
80
 
103
81
  it "counts the packets written" do
104
- allow(@stream).to receive(:connected?).and_return(true)
105
- allow(@stream).to receive(:write).with(kind_of(Packet))
106
82
  i = TcpipServerInterface.new('8888','8889','5','5','burst')
83
+ class << i
84
+ def connected?; true; end
85
+ end
107
86
  expect(i.write_count).to eql 0
108
87
  i.write(Packet.new('',''))
109
88
  expect(i.write_count).to eql 1
110
89
  i.write(Packet.new('',''))
111
90
  expect(i.write_count).to eql 2
112
91
  end
113
-
114
- it "handles server exceptions and disconnect" do
115
- allow(@stream).to receive(:connected?).and_return(true)
116
- allow(@stream).to receive(:write).with(kind_of(Packet)).and_raise(RuntimeError.new("TEST"))
117
- expect(@stream).to receive(:disconnect)
118
- i = TcpipServerInterface.new('8888','8889','5','5','burst')
119
- expect { i.write(Packet.new('','')) }.to raise_error("TEST")
120
- end
121
92
  end
122
93
 
123
94
  describe "write_raw" do
124
95
  it "complains if the server is not connected" do
125
- expect(@stream).to receive(:connected?).and_return(false)
126
96
  i = TcpipServerInterface.new('8888','8889','5','5','burst')
127
- expect { i.write_raw(Packet.new('','')) }.to raise_error(/Interface not connected/)
97
+ class << i
98
+ def connected?; false; end
99
+ end
100
+ expect { i.write_raw("\x00") }.to raise_error(/Interface not connected/)
128
101
  end
129
102
 
130
- it "counts the packets written" do
131
- allow(@stream).to receive(:connected?).and_return(true)
132
- allow(@stream).to receive(:write_raw).with(kind_of(String))
103
+ it "counts the bytes written" do
133
104
  i = TcpipServerInterface.new('8888','8889','5','5','burst')
134
- expect(i.write_count).to eql 0
135
- i.write_raw('')
136
- expect(i.write_count).to eql 1
137
- i.write_raw('')
138
- expect(i.write_count).to eql 2
139
- end
140
-
141
- it "handles server exceptions and disconnect" do
142
- allow(@stream).to receive(:connected?).and_return(true)
143
- allow(@stream).to receive(:write_raw).with(kind_of(String)).and_raise(RuntimeError.new("TEST"))
144
- expect(@stream).to receive(:disconnect)
145
- i = TcpipServerInterface.new('8888','8889','5','5','burst')
146
- expect { i.write_raw('') }.to raise_error("TEST")
105
+ i.connect
106
+ sleep(1)
107
+ write_interface_infos = i.instance_variable_get(:@write_interface_infos)
108
+ wii = TcpipServerInterface::InterfaceInfo.new(StreamInterface.new, nil, nil, nil)
109
+ interface = wii.interface
110
+ class << interface
111
+ def connected?; true; end
112
+ def write_interface(data); write_interface_base(data); end
113
+ def stream
114
+ a = Object.new
115
+ class << a
116
+ def write_socket
117
+ b = Object.new
118
+ class << b
119
+ def recvfrom_nonblock(amount)
120
+ raise Errno::EWOULDBLOCK
121
+ end
122
+ end
123
+ b
124
+ end
125
+ end
126
+ a
127
+ end
128
+ end
129
+ write_interface_infos << wii
130
+ begin
131
+ expect(i.write_count).to eql 0
132
+ expect(i.bytes_written).to eql 0
133
+ i.write_raw("\x00\x01")
134
+ sleep(1)
135
+ expect(i.write_count).to eql 0
136
+ expect(i.bytes_written).to eql 2
137
+ i.write_raw("\x02")
138
+ sleep(1)
139
+ expect(i.write_count).to eql 0
140
+ expect(i.bytes_written).to eql 3
141
+ ensure
142
+ i.disconnect
143
+ end
147
144
  end
148
145
  end
149
146
 
150
147
  describe "set_option" do
151
148
  it "sets the listen address for the tcpip_server" do
152
- expect(@stream).to receive(:listen_address=).with('127.0.0.1')
153
149
  i = TcpipServerInterface.new('8888','8889','5','5','burst')
154
150
  i.set_option('LISTEN_ADDRESS', ['127.0.0.1'])
151
+ expect(i.instance_variable_get(:@listen_address)).to eq '127.0.0.1'
155
152
  end
156
153
  end
157
154