cosmos 4.1.1-java → 4.2.0-java

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 (336) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -2
  3. data/.travis.yml +2 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +1 -0
  6. data/Manifest.txt +130 -0
  7. data/autohotkey/tools/ConfigEditorAHK +19 -0
  8. data/autohotkey/tools/cmd_extractor.ahk +4 -4
  9. data/autohotkey/tools/cmd_sequence.ahk +9 -5
  10. data/autohotkey/tools/config_editor.ahk +197 -0
  11. data/autohotkey/tools/packet_viewer.ahk +12 -6
  12. data/autohotkey/tools/replay.ahk +29 -29
  13. data/autohotkey/tools/script_runner.ahk +10 -2
  14. data/autohotkey/tools/tlm_extractor.ahk +7 -8
  15. data/autohotkey/tools/tlm_grapher.ahk +21 -9
  16. data/bin/dart_import +2 -0
  17. data/cosmos.gemspec +18 -16
  18. data/data/config/cmd_tlm_server.yaml +9 -0
  19. data/data/config/interface_modifiers.yaml +17 -0
  20. data/data/config/item_modifiers.yaml +3 -3
  21. data/data/crc.txt +184 -90
  22. data/data/dart.png +0 -0
  23. data/demo/Gemfile +1 -0
  24. data/demo/Rakefile +4 -0
  25. data/demo/config/dart/Gemfile +54 -0
  26. data/demo/config/data/crc.txt +28 -21
  27. data/demo/config/system/system.txt +3 -0
  28. data/demo/config/system/system2.txt +3 -0
  29. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +3 -3
  30. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -1
  31. data/demo/config/targets/INST/lib/sim_inst.rb +1 -1
  32. data/demo/config/targets/INST/screens/adcs.txt +2 -1
  33. data/demo/config/targets/INST/screens/array.txt +1 -1
  34. data/demo/config/targets/INST/screens/block.txt +1 -1
  35. data/demo/config/targets/INST/screens/commanding.txt +7 -2
  36. data/demo/config/targets/INST/screens/graphs.txt +1 -1
  37. data/demo/config/targets/INST/screens/ground.txt +1 -1
  38. data/demo/config/targets/INST/screens/hs.txt +2 -1
  39. data/demo/config/targets/INST/screens/latest.txt +1 -1
  40. data/demo/config/targets/INST/screens/limits.txt +1 -1
  41. data/demo/config/targets/INST/screens/other.txt +1 -1
  42. data/demo/config/targets/INST/screens/tabs.txt +1 -1
  43. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  44. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +3 -1
  45. data/demo/config/tools/launcher/launcher.txt +3 -2
  46. data/demo/tools/Dart +16 -0
  47. data/demo/tools/Dart.bat +9 -0
  48. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  49. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  50. data/install/Gemfile +1 -0
  51. data/install/Rakefile +4 -0
  52. data/install/config/dart/Gemfile +54 -0
  53. data/install/config/data/crc.txt +6 -3
  54. data/install/config/system/system.txt +3 -0
  55. data/install/config/tools/launcher/launcher.txt +3 -2
  56. data/install/tools/Dart +16 -0
  57. data/install/tools/Dart.bat +9 -0
  58. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  59. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  60. data/lib/cosmos/core_ext/time.rb +8 -8
  61. data/lib/cosmos/dart/.rspec +1 -0
  62. data/lib/cosmos/dart/Gemfile +69 -0
  63. data/lib/cosmos/dart/Rakefile +7 -0
  64. data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
  65. data/lib/cosmos/dart/app/assets/images/.keep +0 -0
  66. data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
  67. data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
  68. data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
  69. data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
  70. data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
  71. data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
  72. data/lib/cosmos/dart/app/helpers/application_helper.rb +2 -0
  73. data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
  74. data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
  75. data/lib/cosmos/dart/app/models/application_record.rb +3 -0
  76. data/lib/cosmos/dart/app/models/item.rb +6 -0
  77. data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
  78. data/lib/cosmos/dart/app/models/packet.rb +4 -0
  79. data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
  80. data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
  81. data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
  82. data/lib/cosmos/dart/app/models/system_config.rb +2 -0
  83. data/lib/cosmos/dart/app/models/target.rb +4 -0
  84. data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
  85. data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
  86. data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
  87. data/lib/cosmos/dart/bin/bundle +3 -0
  88. data/lib/cosmos/dart/bin/rails +4 -0
  89. data/lib/cosmos/dart/bin/rake +4 -0
  90. data/lib/cosmos/dart/bin/setup +34 -0
  91. data/lib/cosmos/dart/bin/update +29 -0
  92. data/lib/cosmos/dart/config.ru +5 -0
  93. data/lib/cosmos/dart/config/application.rb +29 -0
  94. data/lib/cosmos/dart/config/boot.rb +3 -0
  95. data/lib/cosmos/dart/config/cable.yml +9 -0
  96. data/lib/cosmos/dart/config/database.yml +23 -0
  97. data/lib/cosmos/dart/config/environment.rb +5 -0
  98. data/lib/cosmos/dart/config/environments/development.rb +62 -0
  99. data/lib/cosmos/dart/config/environments/production.rb +84 -0
  100. data/lib/cosmos/dart/config/environments/test.rb +42 -0
  101. data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
  102. data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
  103. data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
  104. data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
  105. data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
  106. data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
  107. data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
  108. data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
  109. data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
  110. data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
  111. data/lib/cosmos/dart/config/locales/en.yml +23 -0
  112. data/lib/cosmos/dart/config/puma.rb +47 -0
  113. data/lib/cosmos/dart/config/routes.rb +3 -0
  114. data/lib/cosmos/dart/config/secrets.yml +22 -0
  115. data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
  116. data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
  117. data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
  118. data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
  119. data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
  120. data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
  121. data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
  122. data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
  123. data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
  124. data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
  125. data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
  126. data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
  127. data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
  128. data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
  129. data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
  130. data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
  131. data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
  132. data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
  133. data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
  134. data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
  135. data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
  136. data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
  137. data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
  138. data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
  139. data/lib/cosmos/dart/db/schema.rb +103 -0
  140. data/lib/cosmos/dart/db/seeds.rb +7 -0
  141. data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
  142. data/lib/cosmos/dart/examples/dart_stream_client.rb +93 -0
  143. data/lib/cosmos/dart/lib/dart_common.rb +749 -0
  144. data/lib/cosmos/dart/lib/dart_database_cleaner.rb +172 -0
  145. data/lib/cosmos/dart/lib/dart_decom_query.rb +184 -0
  146. data/lib/cosmos/dart/lib/dart_decommutator.rb +235 -0
  147. data/lib/cosmos/dart/lib/dart_importer.rb +154 -0
  148. data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
  149. data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +139 -0
  150. data/lib/cosmos/dart/lib/dart_reducer_manager.rb +85 -0
  151. data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +263 -0
  152. data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
  153. data/lib/cosmos/dart/processes/dart.rb +145 -0
  154. data/lib/cosmos/dart/processes/dart_decom_server.rb +39 -0
  155. data/lib/cosmos/dart/processes/dart_import.rb +63 -0
  156. data/lib/cosmos/dart/processes/dart_ingester.rb +92 -0
  157. data/lib/cosmos/dart/processes/dart_reducer.rb +27 -0
  158. data/lib/cosmos/dart/processes/dart_stream_server.rb +31 -0
  159. data/lib/cosmos/dart/processes/dart_worker.rb +37 -0
  160. data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
  161. data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
  162. data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +153 -0
  163. data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +336 -0
  164. data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +83 -0
  165. data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
  166. data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +149 -0
  167. data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +289 -0
  168. data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +241 -0
  169. data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
  170. data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
  171. data/lib/cosmos/gui/dialogs/about_dialog.rb +1 -1
  172. data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
  173. data/lib/cosmos/gui/dialogs/legal_dialog.rb +1 -0
  174. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +0 -3
  175. data/lib/cosmos/gui/qt.rb +10 -1
  176. data/lib/cosmos/gui/text/completion.rb +10 -9
  177. data/lib/cosmos/gui/text/completion_text_edit.rb +16 -14
  178. data/lib/cosmos/gui/text/ruby_editor.rb +2 -2
  179. data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
  180. data/lib/cosmos/gui/widgets/dart_meta_frame.rb +119 -0
  181. data/lib/cosmos/gui/widgets/packet_log_frame.rb +42 -12
  182. data/lib/cosmos/interfaces/interface.rb +1 -2
  183. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +26 -8
  184. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +8 -2
  185. data/lib/cosmos/interfaces/protocols/protocol.rb +2 -1
  186. data/lib/cosmos/interfaces/protocols/template_protocol.rb +1 -1
  187. data/lib/cosmos/interfaces/stream_interface.rb +1 -0
  188. data/lib/cosmos/interfaces/tcpip_server_interface.rb +2 -3
  189. data/lib/cosmos/io/json_drb_object.rb +1 -1
  190. data/lib/cosmos/io/json_rpc.rb +2 -1
  191. data/lib/cosmos/io/win32_serial_driver.rb +2 -9
  192. data/lib/cosmos/packet_logs/packet_log_writer.rb +1 -1
  193. data/lib/cosmos/packets/packet.rb +22 -12
  194. data/lib/cosmos/packets/packet_config.rb +2 -1
  195. data/lib/cosmos/packets/packet_item.rb +26 -24
  196. data/lib/cosmos/packets/parsers/macro_parser.rb +5 -2
  197. data/lib/cosmos/packets/parsers/packet_item_parser.rb +35 -17
  198. data/lib/cosmos/packets/parsers/packet_parser.rb +3 -10
  199. data/lib/cosmos/packets/parsers/xtce_converter.rb +21 -35
  200. data/lib/cosmos/packets/parsers/xtce_parser.rb +54 -46
  201. data/lib/cosmos/packets/structure.rb +10 -2
  202. data/lib/cosmos/packets/structure_item.rb +22 -8
  203. data/lib/cosmos/processors/statistics_processor.rb +2 -0
  204. data/lib/cosmos/script/api_shared.rb +13 -12
  205. data/lib/cosmos/script/cmd_tlm_server.rb +4 -0
  206. data/lib/cosmos/script/commands.rb +3 -15
  207. data/lib/cosmos/script/script.rb +69 -23
  208. data/lib/cosmos/streams/tcpip_client_stream.rb +2 -2
  209. data/lib/cosmos/system/system.rb +42 -25
  210. data/lib/cosmos/system/target.rb +6 -2
  211. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +177 -36
  212. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +3 -2
  213. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +34 -8
  214. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +80 -25
  215. data/lib/cosmos/tools/cmd_tlm_server/api.rb +19 -4
  216. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +15 -14
  217. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +15 -9
  218. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +1 -9
  219. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -6
  220. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -3
  221. data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +84 -7
  222. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +0 -1
  223. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +1 -5
  224. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +3 -2
  225. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +159 -27
  226. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +1 -1
  227. data/lib/cosmos/tools/config_editor/config_editor.rb +17 -52
  228. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +0 -5
  229. data/lib/cosmos/tools/data_viewer/data_viewer.rb +111 -0
  230. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -18
  231. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +12 -3
  232. data/lib/cosmos/tools/script_runner/script_runner.rb +27 -14
  233. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +104 -37
  234. data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
  235. data/lib/cosmos/tools/table_manager/table_item_parser.rb +4 -2
  236. data/lib/cosmos/tools/table_manager/table_manager.rb +0 -5
  237. data/lib/cosmos/tools/table_manager/table_manager_core.rb +0 -1
  238. data/lib/cosmos/tools/test_runner/test.rb +1 -3
  239. data/lib/cosmos/tools/test_runner/test_runner.rb +26 -15
  240. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +290 -137
  241. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +122 -25
  242. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +67 -0
  243. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +28 -0
  244. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +36 -0
  245. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +42 -3
  246. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +88 -14
  247. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +2 -5
  248. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +2 -6
  249. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +74 -18
  250. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +3 -7
  251. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +159 -0
  252. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +49 -2
  253. data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -0
  254. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +0 -2
  255. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  256. data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
  257. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +5 -5
  258. data/lib/cosmos/top_level.rb +1 -0
  259. data/lib/cosmos/utilities/crc.rb +3 -0
  260. data/lib/cosmos/utilities/csv.rb +1 -0
  261. data/lib/cosmos/utilities/message_log.rb +2 -1
  262. data/lib/cosmos/utilities/simulated_target.rb +8 -8
  263. data/lib/cosmos/version.rb +5 -5
  264. data/lib/cosmos/win32/win32.rb +4 -10
  265. data/run_gui_tests.bat +2 -1
  266. data/spec/config/config_parser_spec.rb +4 -4
  267. data/spec/core_ext/array_spec.rb +1 -1
  268. data/spec/core_ext/exception_spec.rb +12 -12
  269. data/spec/core_ext/file_spec.rb +6 -6
  270. data/spec/core_ext/hash_spec.rb +1 -1
  271. data/spec/core_ext/socket_spec.rb +2 -2
  272. data/spec/core_ext/string_spec.rb +13 -13
  273. data/spec/core_ext/time_spec.rb +0 -2
  274. data/spec/gui/utilities/script_module_gui_spec.rb +3 -3
  275. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +6 -6
  276. data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
  277. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +6 -2
  278. data/spec/interfaces/interface_spec.rb +0 -1
  279. data/spec/interfaces/linc_interface_spec.rb +0 -5
  280. data/spec/interfaces/protocols/crc_protocol_spec.rb +201 -85
  281. data/spec/interfaces/protocols/fixed_protocol_spec.rb +33 -9
  282. data/spec/interfaces/protocols/length_protocol_spec.rb +1 -1
  283. data/spec/interfaces/protocols/override_protocol_spec.rb +6 -2
  284. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +1 -5
  285. data/spec/interfaces/protocols/template_protocol_spec.rb +0 -1
  286. data/spec/interfaces/simulated_target_interface_spec.rb +5 -5
  287. data/spec/interfaces/udp_interface_spec.rb +2 -4
  288. data/spec/io/buffered_file_spec.rb +8 -12
  289. data/spec/io/json_drb_spec.rb +9 -9
  290. data/spec/io/json_rpc_spec.rb +4 -4
  291. data/spec/io/raw_logger_spec.rb +4 -3
  292. data/spec/packet_logs/packet_log_reader_spec.rb +3 -6
  293. data/spec/packet_logs/packet_log_writer_spec.rb +4 -4
  294. data/spec/packets/binary_accessor_spec.rb +5 -8
  295. data/spec/packets/commands_spec.rb +2 -2
  296. data/spec/packets/limits_spec.rb +2 -2
  297. data/spec/packets/packet_config_spec.rb +12 -0
  298. data/spec/packets/packet_item_limits_spec.rb +1 -1
  299. data/spec/packets/packet_item_spec.rb +9 -9
  300. data/spec/packets/packet_spec.rb +15 -5
  301. data/spec/packets/parsers/packet_item_parser_spec.rb +27 -0
  302. data/spec/packets/parsers/xtce_parser_spec.rb +27 -30
  303. data/spec/packets/structure_spec.rb +2 -1
  304. data/spec/packets/telemetry_spec.rb +3 -5
  305. data/spec/processors/statistics_processor_spec.rb +35 -0
  306. data/spec/script/cmd_tlm_server_spec.rb +4 -21
  307. data/spec/script/commands_disconnect_spec.rb +46 -58
  308. data/spec/script/commands_spec.rb +40 -61
  309. data/spec/script/limits_spec.rb +1 -21
  310. data/spec/script/script_spec.rb +32 -41
  311. data/spec/script/scripting_spec.rb +166 -185
  312. data/spec/script/telemetry_spec.rb +10 -5
  313. data/spec/script/tools_spec.rb +2 -24
  314. data/spec/spec_helper.rb +11 -5
  315. data/spec/system/system_spec.rb +17 -12
  316. data/spec/tools/cmd_tlm_server/api_spec.rb +21 -10
  317. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -16
  318. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +0 -1
  319. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +16 -27
  320. data/spec/tools/cmd_tlm_server/commanding_spec.rb +2 -6
  321. data/spec/tools/cmd_tlm_server/connections_spec.rb +0 -4
  322. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +13 -13
  323. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +5 -9
  324. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +11 -3
  325. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +0 -4
  326. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +5 -5
  327. data/spec/tools/cmd_tlm_server/routers_spec.rb +5 -9
  328. data/spec/tools/table_manager/table_config_spec.rb +0 -1
  329. data/spec/tools/table_manager/tablemanager_core_spec.rb +23 -23
  330. data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +6 -4
  331. data/spec/top_level/top_level_spec.rb +9 -9
  332. data/spec/utilities/csv_spec.rb +2 -12
  333. data/spec/utilities/logger_spec.rb +6 -6
  334. data/spec/utilities/message_log_spec.rb +3 -11
  335. data/tasks/gemfile_stats.rake +2 -2
  336. metadata +167 -60
@@ -0,0 +1,241 @@
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 'rails_helper'
12
+ require 'dart_tcpip_server_interface'
13
+ require 'packet_log_entry'
14
+ require 'dart_packet_log_writer'
15
+
16
+ describe DartTcpipServerInterface do
17
+ before(:all) do
18
+ @request = Cosmos::Packet.new('DART', 'DART')
19
+ @request.define_item('REQUEST', 0, 0, :BLOCK)
20
+ end
21
+
22
+ before(:each) do
23
+ DatabaseCleaner.strategy = :truncation
24
+ DatabaseCleaner.clean
25
+ end
26
+
27
+ describe "initialize" do
28
+ it "uses the System.ports['DART_STREAM']" do
29
+ i = DartTcpipServerInterface.new
30
+ expect(i.instance_variable_get(:@read_port)).to eq Cosmos::System.ports['DART_STREAM']
31
+ expect(i.instance_variable_get(:@write_port)).to eq Cosmos::System.ports['DART_STREAM']
32
+ expect(i.listen_address).to eq Cosmos::System.listen_hosts['DART_STREAM']
33
+ end
34
+ end
35
+
36
+ describe "write" do
37
+ it "drops connection on bad request packets" do
38
+ Cosmos::Logger.level = Cosmos::Logger::INFO
39
+ i = DartTcpipServerInterface.new
40
+ i.connect
41
+
42
+ interface = Cosmos::TcpipClientInterface.new(
43
+ Cosmos::System.connect_hosts['DART_STREAM'],
44
+ Cosmos::System.ports['DART_STREAM'],
45
+ Cosmos::System.ports['DART_STREAM'],
46
+ 10, 10, 'PREIDENTIFIED')
47
+ interface.connect
48
+ @request.write('REQUEST', "BLAH")
49
+ interface.write(@request)
50
+ sleep 0.1
51
+ # TODO: Why is the interface still connected?
52
+ # expect(interface.connected?).to be false
53
+ i.disconnect
54
+
55
+ Dir["#{Cosmos::System.paths['DART_LOGS']}/*"].each do |file|
56
+ expect(file).to match(/dart_stream_server/)
57
+ expect(File.read(file)).to include("lost read connection")
58
+ end
59
+ end
60
+ end
61
+
62
+ def load_db(num_pkts)
63
+ writer = DartPacketLogWriter.new(
64
+ :TLM, # Log telemetry
65
+ 'test_decom_', # File name suffix
66
+ true, # Enable logging
67
+ nil, # Don't cycle on time
68
+ 2_000_000_000, # Cycle the log at 2GB
69
+ Cosmos::System.paths['DART_DATA']) # Log into the DART_DATA dir
70
+
71
+ hs_packet = Cosmos::System.telemetry.packet("INST", "HEALTH_STATUS")
72
+ @hs_packets = []
73
+ # Write packets. The first packet is always SYSTEM META.
74
+ num_pkts.times do
75
+ hs_packet.received_time = Time.now
76
+ @hs_packets << hs_packet.clone
77
+ writer.write(hs_packet)
78
+ sleep 0.01
79
+ end
80
+ writer.shutdown
81
+ end
82
+
83
+ describe "read" do
84
+ it "reads from the server" do
85
+ start_time = Time.now
86
+ load_db(3) # Load the DB with 3 packets
87
+ end_time = Time.now
88
+
89
+ i = DartTcpipServerInterface.new
90
+ i.connect
91
+
92
+ request_packet = Cosmos::Packet.new('DART', 'DART')
93
+ request_packet.define_item('REQUEST', 0, 0, :BLOCK)
94
+ request = {}
95
+ request['start_time_sec'] = start_time.tv_sec
96
+ request['start_time_usec'] = start_time.tv_usec
97
+ request['end_time_sec'] = end_time.tv_sec
98
+ request['end_time_usec'] = end_time.tv_usec
99
+ request['cmd_tlm'] = 'TLM'
100
+ request['packets'] = [['INST', 'HEALTH_STATUS']]
101
+ #~ request['meta_ids'] = [4962]
102
+ request_packet.write('REQUEST', JSON.dump(request))
103
+
104
+ interface = Cosmos::TcpipClientInterface.new(
105
+ Cosmos::System.connect_hosts['DART_STREAM'],
106
+ Cosmos::System.ports['DART_STREAM'],
107
+ Cosmos::System.ports['DART_STREAM'],
108
+ 10, 10, 'PREIDENTIFIED')
109
+ interface.connect
110
+ interface.write(request_packet)
111
+ # The first packet read is SYSTEM META
112
+ packet = interface.read
113
+ expect(packet.target_name).to eq "SYSTEM"
114
+ expect(packet.packet_name).to eq "META"
115
+ packet = interface.read
116
+ # Verify the three INST HEALTH_STATUS packets match their original times
117
+ expect(packet.target_name).to eq "INST"
118
+ expect(packet.packet_name).to eq "HEALTH_STATUS"
119
+ expect(packet.received_time).to eq @hs_packets[0].received_time
120
+ packet = interface.read
121
+ expect(packet.target_name).to eq "INST"
122
+ expect(packet.packet_name).to eq "HEALTH_STATUS"
123
+ expect(packet.received_time).to eq @hs_packets[1].received_time
124
+ packet = interface.read
125
+ expect(packet.target_name).to eq "INST"
126
+ expect(packet.packet_name).to eq "HEALTH_STATUS"
127
+ expect(packet.received_time).to eq @hs_packets[2].received_time
128
+ # After three packets are read we get back nil
129
+ packet = interface.read
130
+ expect(packet).to be nil
131
+
132
+ i.disconnect
133
+ end
134
+
135
+ it "reads packets between the start and end times" do
136
+ load_db(5) # Load the DB with 5 packets
137
+ # Set the start time after the first HEALTH_STATUS packet
138
+ start_time = @hs_packets[0].received_time + 0.005
139
+ # Set the end time before the last HEALTH_STATUS packet
140
+ end_time = @hs_packets[4].received_time - 0.005
141
+
142
+ i = DartTcpipServerInterface.new
143
+ i.connect
144
+
145
+ request_packet = Cosmos::Packet.new('DART', 'DART')
146
+ request_packet.define_item('REQUEST', 0, 0, :BLOCK)
147
+ request = {}
148
+ request['start_time_sec'] = start_time.tv_sec
149
+ request['start_time_usec'] = start_time.tv_usec
150
+ request['end_time_sec'] = end_time.tv_sec
151
+ request['end_time_usec'] = end_time.tv_usec
152
+ request['cmd_tlm'] = 'TLM'
153
+ request['packets'] = [['INST', 'HEALTH_STATUS']]
154
+ #~ request['meta_ids'] = [4962]
155
+ request_packet.write('REQUEST', JSON.dump(request))
156
+
157
+ interface = Cosmos::TcpipClientInterface.new(
158
+ Cosmos::System.connect_hosts['DART_STREAM'],
159
+ Cosmos::System.ports['DART_STREAM'],
160
+ Cosmos::System.ports['DART_STREAM'],
161
+ 10, 10, 'PREIDENTIFIED')
162
+ interface.connect
163
+ interface.write(request_packet)
164
+ # The first packet read is SYSTEM META
165
+ packet = interface.read
166
+ expect(packet.target_name).to eq "SYSTEM"
167
+ expect(packet.packet_name).to eq "META"
168
+ packet = interface.read
169
+ # Verify the three INST HEALTH_STATUS packets match their original times
170
+ expect(packet.target_name).to eq "INST"
171
+ expect(packet.packet_name).to eq "HEALTH_STATUS"
172
+ expect(packet.received_time).to eq @hs_packets[1].received_time
173
+ packet = interface.read
174
+ expect(packet.target_name).to eq "INST"
175
+ expect(packet.packet_name).to eq "HEALTH_STATUS"
176
+ expect(packet.received_time).to eq @hs_packets[2].received_time
177
+ packet = interface.read
178
+ expect(packet.target_name).to eq "INST"
179
+ expect(packet.packet_name).to eq "HEALTH_STATUS"
180
+ expect(packet.received_time).to eq @hs_packets[3].received_time
181
+ # After three packets are read we get back nil
182
+ packet = interface.read
183
+ expect(packet).to be nil
184
+
185
+ i.disconnect
186
+ end
187
+
188
+ it "returns packet in reverse order if start time is after end time" do
189
+ load_db(5) # Load the DB with 5 packets
190
+ # Set the end time after the first HEALTH_STATUS packet
191
+ end_time = @hs_packets[0].received_time + 0.005
192
+ # Set the start time before the last HEALTH_STATUS packet
193
+ start_time = @hs_packets[4].received_time - 0.005
194
+
195
+ i = DartTcpipServerInterface.new
196
+ i.connect
197
+
198
+ request_packet = Cosmos::Packet.new('DART', 'DART')
199
+ request_packet.define_item('REQUEST', 0, 0, :BLOCK)
200
+ request = {}
201
+ request['start_time_sec'] = start_time.tv_sec
202
+ request['start_time_usec'] = start_time.tv_usec
203
+ request['end_time_sec'] = end_time.tv_sec
204
+ request['end_time_usec'] = end_time.tv_usec
205
+ request['cmd_tlm'] = 'TLM'
206
+ request['packets'] = [['INST', 'HEALTH_STATUS']]
207
+ #~ request['meta_ids'] = [4962]
208
+ request_packet.write('REQUEST', JSON.dump(request))
209
+
210
+ interface = Cosmos::TcpipClientInterface.new(
211
+ Cosmos::System.connect_hosts['DART_STREAM'],
212
+ Cosmos::System.ports['DART_STREAM'],
213
+ Cosmos::System.ports['DART_STREAM'],
214
+ 10, 10, 'PREIDENTIFIED')
215
+ interface.connect
216
+ interface.write(request_packet)
217
+ # The first packet read is SYSTEM META
218
+ packet = interface.read
219
+ expect(packet.target_name).to eq "SYSTEM"
220
+ expect(packet.packet_name).to eq "META"
221
+ packet = interface.read
222
+ # Verify the three INST HEALTH_STATUS packets match their original times
223
+ expect(packet.target_name).to eq "INST"
224
+ expect(packet.packet_name).to eq "HEALTH_STATUS"
225
+ expect(packet.received_time).to eq @hs_packets[3].received_time
226
+ packet = interface.read
227
+ expect(packet.target_name).to eq "INST"
228
+ expect(packet.packet_name).to eq "HEALTH_STATUS"
229
+ expect(packet.received_time).to eq @hs_packets[2].received_time
230
+ packet = interface.read
231
+ expect(packet.target_name).to eq "INST"
232
+ expect(packet.packet_name).to eq "HEALTH_STATUS"
233
+ expect(packet.received_time).to eq @hs_packets[1].received_time
234
+ # After three packets are read we get back nil
235
+ packet = interface.read
236
+ expect(packet).to be nil
237
+
238
+ i.disconnect
239
+ end
240
+ end
241
+ end
@@ -0,0 +1,60 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ # Set the user path to our COSMOS configuration in the spec directory
3
+ ENV['COSMOS_USERPATH'] = File.join(File.dirname(File.expand_path(__FILE__)), '../../../../spec/install')
4
+
5
+ require 'spec_helper'
6
+ ENV['RAILS_ENV'] ||= 'test'
7
+ require File.expand_path('../../config/environment', __FILE__)
8
+ # Prevent database truncation if the environment is production
9
+ abort("The Rails environment is running in production mode!") if Rails.env.production?
10
+ require 'rspec/rails'
11
+ # Add additional requires below this line. Rails is not loaded until this point!
12
+
13
+ # Requires supporting ruby files with custom matchers and macros, etc, in
14
+ # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
15
+ # run as spec files by default. This means that files in spec/support that end
16
+ # in _spec.rb will both be required and run as specs, causing the specs to be
17
+ # run twice. It is recommended that you do not name files matching this glob to
18
+ # end with _spec.rb. You can configure this pattern with the --pattern
19
+ # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
20
+ #
21
+ # The following line is provided for convenience purposes. It has the downside
22
+ # of increasing the boot-up time by auto-requiring all files in the support
23
+ # directory. Alternatively, in the individual `*_spec.rb` files, manually
24
+ # require only the support files necessary.
25
+ #
26
+ # Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
27
+
28
+ # Checks for pending migrations and applies them before tests are run.
29
+ # If you are not using ActiveRecord, you can remove this line.
30
+ ActiveRecord::Migration.maintain_test_schema!
31
+
32
+ RSpec.configure do |config|
33
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
34
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
35
+
36
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
37
+ # examples within a transaction, remove the following line or assign false
38
+ # instead of true.
39
+ config.use_transactional_fixtures = true
40
+
41
+ # RSpec Rails can automatically mix in different behaviours to your tests
42
+ # based on their file location, for example enabling you to call `get` and
43
+ # `post` in specs under `spec/controllers`.
44
+ #
45
+ # You can disable this behaviour by removing the line below, and instead
46
+ # explicitly tag your specs with their type, e.g.:
47
+ #
48
+ # RSpec.describe UsersController, :type => :controller do
49
+ # # ...
50
+ # end
51
+ #
52
+ # The different available types are documented in the features, such as in
53
+ # https://relishapp.com/rspec/rspec-rails/docs
54
+ config.infer_spec_type_from_file_location!
55
+
56
+ # Filter lines from Rails gems in backtraces.
57
+ config.filter_rails_from_backtrace!
58
+ # arbitrary gems may also be filtered via:
59
+ # config.filter_gems_from_backtrace("gem name")
60
+ end
@@ -0,0 +1,139 @@
1
+ # This file was generated by the `rails generate rspec:install` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
4
+ # this file to always be loaded, without a need to explicitly require it in any
5
+ # files.
6
+ #
7
+ # Given that it is always loaded, you are encouraged to keep this file as
8
+ # light-weight as possible. Requiring heavyweight dependencies from this file
9
+ # will add to the boot time of your test suite on EVERY test run, even for an
10
+ # individual file that may not need all of that loaded. Instead, consider making
11
+ # a separate helper file that requires the additional dependencies and performs
12
+ # the additional setup, and require it from the spec files that actually need
13
+ # it.
14
+ #
15
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
16
+
17
+ # NOTE: You MUST require simplecov before anything else!
18
+ if !ENV['COSMOS_NO_SIMPLECOV']
19
+ require 'simplecov'
20
+ require 'codecov'
21
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
22
+ SimpleCov::Formatter::HTMLFormatter,
23
+ SimpleCov::Formatter::Codecov,
24
+ ])
25
+ SimpleCov.start do
26
+ merge_timeout 12 * 60 * 60 # merge the last 12 hours of results
27
+ add_filter '/spec/'
28
+ add_group 'Lib', 'lib'
29
+ add_group 'Processes', 'processes'
30
+ add_group 'Rails' do |src|
31
+ src.filename.include?('app') || src.filename.include?('config')
32
+ end
33
+ root = File.dirname(__FILE__)
34
+ root.to_s
35
+ end
36
+ SimpleCov.at_exit do
37
+ Cosmos.disable_warnings do
38
+ Encoding.default_external = Encoding::UTF_8
39
+ Encoding.default_internal = nil
40
+ end
41
+ SimpleCov.result.format!
42
+ end
43
+ end
44
+
45
+ RSpec.configure do |config|
46
+ config.before(:all) do
47
+ Thread.abort_on_exception = true
48
+ %w(DART_DATA DART_LOGS).each do |dir|
49
+ if File.exist?(Cosmos::System.paths[dir])
50
+ FileUtils.rm_rf Cosmos::System.paths[dir]
51
+ end
52
+ FileUtils.mkdir_p Cosmos::System.paths[dir]
53
+ end
54
+ end
55
+
56
+ # rspec-expectations config goes here. You can use an alternate
57
+ # assertion/expectation library such as wrong or the stdlib/minitest
58
+ # assertions if you prefer.
59
+ config.expect_with :rspec do |expectations|
60
+ # This option will default to `true` in RSpec 4. It makes the `description`
61
+ # and `failure_message` of custom matchers include text for helper methods
62
+ # defined using `chain`, e.g.:
63
+ # be_bigger_than(2).and_smaller_than(4).description
64
+ # # => "be bigger than 2 and smaller than 4"
65
+ # ...rather than:
66
+ # # => "be bigger than 2"
67
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
68
+ end
69
+
70
+ # rspec-mocks config goes here. You can use an alternate test double
71
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
72
+ config.mock_with :rspec do |mocks|
73
+ # Prevents you from mocking or stubbing a method that does not exist on
74
+ # a real object. This is generally recommended, and will default to
75
+ # `true` in RSpec 4.
76
+ mocks.verify_partial_doubles = true
77
+ end
78
+
79
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
80
+ # have no way to turn it off -- the option exists only for backwards
81
+ # compatibility in RSpec 3). It causes shared context metadata to be
82
+ # inherited by the metadata hash of host groups and examples, rather than
83
+ # triggering implicit auto-inclusion in groups with matching metadata.
84
+ config.shared_context_metadata_behavior = :apply_to_host_groups
85
+
86
+ # The settings below are suggested to provide a good initial experience
87
+ # with RSpec, but feel free to customize to your heart's content.
88
+ =begin
89
+ # This allows you to limit a spec run to individual examples or groups
90
+ # you care about by tagging them with `:focus` metadata. When nothing
91
+ # is tagged with `:focus`, all examples get run. RSpec also provides
92
+ # aliases for `it`, `describe`, and `context` that include `:focus`
93
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
94
+ config.filter_run_when_matching :focus
95
+
96
+ # Allows RSpec to persist some state between runs in order to support
97
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
98
+ # you configure your source control system to ignore this file.
99
+ config.example_status_persistence_file_path = "spec/examples.txt"
100
+
101
+ # Limits the available syntax to the non-monkey patched syntax that is
102
+ # recommended. For more details, see:
103
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
104
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
105
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
106
+ config.disable_monkey_patching!
107
+
108
+ # This setting enables warnings. It's recommended, but in some cases may
109
+ # be too noisy due to issues in dependencies.
110
+ config.warnings = true
111
+
112
+ # Many RSpec users commonly either run the entire suite or an individual
113
+ # file, and it's useful to allow more verbose output when running an
114
+ # individual spec file.
115
+ if config.files_to_run.one?
116
+ # Use the documentation formatter for detailed output,
117
+ # unless a formatter has already been configured
118
+ # (e.g. via a command-line flag).
119
+ config.default_formatter = "doc"
120
+ end
121
+
122
+ # Print the 10 slowest examples and example groups at the
123
+ # end of the spec run, to help surface which specs are running
124
+ # particularly slow.
125
+ config.profile_examples = 10
126
+
127
+ # Run specs in random order to surface order dependencies. If you find an
128
+ # order dependency and want to debug it, you can fix the order by providing
129
+ # the seed, which is printed after each run.
130
+ # --seed 1234
131
+ config.order = :random
132
+
133
+ # Seed global randomization in this process using the `--seed` CLI option.
134
+ # Setting this allows you to use `--seed` to deterministically reproduce
135
+ # test failures related to randomization by passing the same `--seed` value
136
+ # as the one that triggered the failure.
137
+ Kernel.srand config.seed
138
+ =end
139
+ end
@@ -67,7 +67,7 @@ module Cosmos
67
67
  cosmos_layout.addWidget(version, 0, 0)
68
68
  cosmos_layout.addWidget(open_cosmos_code, 0, 1)
69
69
 
70
- if USER_VERSION && USER_VERSION != 'Unofficial'
70
+ if defined?(USER_VERSION) && USER_VERSION != 'Unofficial'
71
71
  user_version = Qt::Label.new("Project Version: " + USER_VERSION)
72
72
  user_version.setFont(Cosmos.getFont("Arial", 14))
73
73
  cosmos_layout.addWidget(user_version, 1, 0)