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
@@ -1,12 +1,12 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- COSMOS_VERSION = '4.1.1'
3
+ COSMOS_VERSION = '4.2.0'
4
4
  module Cosmos
5
5
  module Version
6
6
  MAJOR = '4'
7
- MINOR = '1'
8
- PATCH = '1'
9
- BUILD = '4d061cac0c17e02bfbb77c8506ee17354ef8b8f1'
7
+ MINOR = '2'
8
+ PATCH = '0'
9
+ BUILD = 'a20c2452747369e5340a437a5652474bae0299e4'
10
10
  end
11
- VERSION = '4.1.1'
11
+ VERSION = '4.2.0'
12
12
  end
@@ -12,11 +12,7 @@ require 'cosmos/win32/win32_main'
12
12
  require 'cosmos/packets/structure'
13
13
 
14
14
  module Cosmos
15
-
16
- # Win32 class
17
- #
18
- # This class implements the Win32
19
- #
15
+ # Uses the Win32API to implement methods useful on Windows.
20
16
  class Win32
21
17
  # Create a file
22
18
  def self.create_file(filename, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file = NULL)
@@ -132,10 +128,8 @@ module Cosmos
132
128
  comm_timeouts.write('WriteTotalTimeoutConstant', write_total_timeout_constant)
133
129
  comm_timeouts
134
130
  end
135
-
136
- end # class Win32
137
-
138
- end # module Cosmos
131
+ end
132
+ end
139
133
 
140
134
  module QDA
141
135
  module Filters
@@ -313,7 +307,7 @@ module QDA
313
307
  end
314
308
 
315
309
  class Win32popenIO
316
- def initialize (hRead, hWrite, hError)
310
+ def initialize(hRead, hWrite, hError)
317
311
  @hRead = hRead
318
312
  @hWrite = hWrite
319
313
  @hError = hError
@@ -4,6 +4,7 @@ call bundle exec ruby autohotkey\tools\CmdSequenceAHK -w 650 -t 650
4
4
  call bundle exec ruby autohotkey\tools\CmdSequenceAHK2 -w 650 -t 650 -r run_sequence.txt -o procedures
5
5
  call bundle exec ruby autohotkey\tools\CmdTlmServerAHK -x 50 -y 50 -w 900 -t 1000
6
6
  call bundle exec ruby autohotkey\tools\CmdTlmServerAHK2 -w 900 -t 1000 -p -n -c cmd_tlm_server.txt
7
+ call bundle exec ruby autohotkey\tools\ConfigEditorAHK -w 1200 -t 800
7
8
  call bundle exec ruby autohotkey\tools\DataViewerAHK -w 600 -t 800
8
9
  call bundle exec ruby autohotkey\tools\HandbookCreatorAHK
9
10
  call bundle exec ruby autohotkey\tools\LauncherAHK
@@ -11,7 +12,7 @@ call bundle exec ruby autohotkey\tools\LimitsMonitorAHK
11
12
  call bundle exec ruby autohotkey\tools\OpenGLBuilderAHK -w 600 -t 600
12
13
  call bundle exec ruby autohotkey\tools\PacketViewerAHK -w 600 -t 800
13
14
  call bundle exec ruby autohotkey\tools\PacketViewerAHK2 --defaultsize -p "INST ADCS"
14
- call bundle exec ruby autohotkey\tools\ReplayAHK -w 800
15
+ call bundle exec ruby autohotkey\tools\ReplayAHK -w 800 -t 800
15
16
  call bundle exec ruby autohotkey\tools\ScriptRunnerAHK -w 600 -t 800
16
17
  call bundle exec ruby autohotkey\tools\ScriptRunnerAHK2 -w 600 -t 800
17
18
  call bundle exec ruby autohotkey\tools\TableManagerAHK -w 800 -t 800
@@ -364,7 +364,7 @@ module Cosmos
364
364
  expect(ConfigParser.handle_defined_constants("MIN", :UINT, val)).to eql 0
365
365
  expect(ConfigParser.handle_defined_constants("MAX", :UINT, val)).to eql (2**val - 1)
366
366
  # Signed
367
- expect(ConfigParser.handle_defined_constants("MIN", :INT, val)).to eql -((2**val) / 2)
367
+ expect(ConfigParser.handle_defined_constants("MIN", :INT, val)).to eql (-(2**val) / 2)
368
368
  expect(ConfigParser.handle_defined_constants("MAX", :INT, val)).to eql ((2**val) / 2 - 1)
369
369
  end
370
370
  [8,16,32,64].each do |val|
@@ -372,16 +372,16 @@ module Cosmos
372
372
  expect(ConfigParser.handle_defined_constants("MIN_UINT#{val}")).to eql 0
373
373
  expect(ConfigParser.handle_defined_constants("MAX_UINT#{val}")).to eql (2**val - 1)
374
374
  # Signed
375
- expect(ConfigParser.handle_defined_constants("MIN_INT#{val}")).to eql -((2**val) / 2)
375
+ expect(ConfigParser.handle_defined_constants("MIN_INT#{val}")).to eql (-(2**val) / 2)
376
376
  expect(ConfigParser.handle_defined_constants("MAX_INT#{val}")).to eql ((2**val) / 2 - 1)
377
377
  end
378
378
  # Float
379
379
  expect(ConfigParser.handle_defined_constants("MIN_FLOAT32")).to be <= -3.4 * 10**38
380
380
  expect(ConfigParser.handle_defined_constants("MAX_FLOAT32")).to be >= 3.4 * 10**38
381
- expect(ConfigParser.handle_defined_constants("MIN_FLOAT64")).to eql -Float::MAX
381
+ expect(ConfigParser.handle_defined_constants("MIN_FLOAT64")).to eql (-Float::MAX)
382
382
  expect(ConfigParser.handle_defined_constants("MAX_FLOAT64")).to eql Float::MAX
383
383
  expect(ConfigParser.handle_defined_constants("POS_INFINITY")).to eql Float::INFINITY
384
- expect(ConfigParser.handle_defined_constants("NEG_INFINITY")).to eql -Float::INFINITY
384
+ expect(ConfigParser.handle_defined_constants("NEG_INFINITY")).to eql (-Float::INFINITY)
385
385
  end
386
386
 
387
387
  it "complains about undefined strings" do
@@ -16,7 +16,7 @@ describe Array do
16
16
  describe "inspect" do
17
17
  it "limits the number of items to 10" do
18
18
  expect(Array.new([1,2,3,4,5,6,7,8,9,10]).inspect).to eql "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
19
- expect(Array.new([1,2,3,4,5,6,7,8,9,10,11]).inspect).to match /#<Array:\d+>/
19
+ expect(Array.new([1,2,3,4,5,6,7,8,9,10,11]).inspect).to match(/#<Array:\d+>/)
20
20
  end
21
21
  end
22
22
 
@@ -18,8 +18,8 @@ describe Exception do
18
18
  begin
19
19
  raise "My message"
20
20
  rescue => err
21
- expect(err.formatted).to match /RuntimeError : My message/
22
- expect(err.formatted).to match /#{File.expand_path(__FILE__)}/
21
+ expect(err.formatted).to match(/RuntimeError : My message/)
22
+ expect(err.formatted).to match(/#{File.expand_path(__FILE__)}/)
23
23
  end
24
24
  end
25
25
 
@@ -27,18 +27,18 @@ describe Exception do
27
27
  begin
28
28
  raise "My message"
29
29
  rescue => err
30
- expect(err.formatted(true)).not_to match /RuntimeError/
31
- expect(err.formatted(true)).to match /My message/
32
- expect(err.formatted(true)).to match /#{File.expand_path(__FILE__)}/
30
+ expect(err.formatted(true)).not_to match(/RuntimeError/)
31
+ expect(err.formatted(true)).to match(/My message/)
32
+ expect(err.formatted(true)).to match(/#{File.expand_path(__FILE__)}/)
33
33
  end
34
34
 
35
35
  # If it's not a RuntimeError then we should still see the class
36
36
  begin
37
37
  raise ArgumentError.new("My message")
38
38
  rescue => err
39
- expect(err.formatted(true)).to match /ArgumentError/
40
- expect(err.formatted(true)).to match /My message/
41
- expect(err.formatted(true)).to match /#{File.expand_path(__FILE__)}/
39
+ expect(err.formatted(true)).to match(/ArgumentError/)
40
+ expect(err.formatted(true)).to match(/My message/)
41
+ expect(err.formatted(true)).to match(/#{File.expand_path(__FILE__)}/)
42
42
  end
43
43
  end
44
44
 
@@ -46,15 +46,15 @@ describe Exception do
46
46
  begin
47
47
  raise "My message"
48
48
  rescue => err
49
- expect(err.formatted(false, false)).to match /RuntimeError : My message/
50
- expect(err.formatted(false, false)).not_to match /#{File.expand_path(__FILE__)}/
49
+ expect(err.formatted(false, false)).to match(/RuntimeError : My message/)
50
+ expect(err.formatted(false, false)).not_to match(/#{File.expand_path(__FILE__)}/)
51
51
  end
52
52
 
53
53
  begin
54
54
  raise "My message"
55
55
  rescue => err
56
- expect(err.formatted(true, false)).to match /My message/
57
- expect(err.formatted(true, false)).not_to match /#{File.expand_path(__FILE__)}/
56
+ expect(err.formatted(true, false)).to match(/My message/)
57
+ expect(err.formatted(true, false)).not_to match(/#{File.expand_path(__FILE__)}/)
58
58
  end
59
59
  end
60
60
  end
@@ -40,29 +40,29 @@ describe File do
40
40
  it "formats the time" do
41
41
  time = Time.now
42
42
  timestamp = sprintf("%04u_%02u_%02u_%02u_%02u_%02u", time.year, time.month, time.mday, time.hour, time.min, time.sec)
43
- expect(File.build_timestamped_filename(nil,".txt",time)).to match timestamp
43
+ expect(File.build_timestamped_filename(nil,".txt",time)).to match(timestamp)
44
44
  end
45
45
 
46
46
  it "allows empty tags" do
47
- expect(File.build_timestamped_filename([])).to match /\d\d\.txt/
47
+ expect(File.build_timestamped_filename([])).to match(/\d\d\.txt/)
48
48
  end
49
49
 
50
50
  it "allows nil tags" do
51
- expect(File.build_timestamped_filename(nil)).to match /\d\d\.txt/
51
+ expect(File.build_timestamped_filename(nil)).to match(/\d\d\.txt/)
52
52
  end
53
53
 
54
54
  it "includes the tags" do
55
- expect(File.build_timestamped_filename(['this','is','a','test'])).to match 'this_is_a_test'
55
+ expect(File.build_timestamped_filename(['this','is','a','test'])).to match('this_is_a_test')
56
56
  end
57
57
 
58
58
  it "changes the extension" do
59
- expect(File.build_timestamped_filename(nil,".bin")).to match ".bin"
59
+ expect(File.build_timestamped_filename(nil,".bin")).to match(".bin")
60
60
  end
61
61
  end
62
62
 
63
63
  describe "find_in_search_path" do
64
64
  it "returns the path to the file" do
65
- expect(File.find_in_search_path("cosmos.rb")).to match "lib/cosmos.rb"
65
+ expect(File.find_in_search_path("cosmos.rb")).to match("lib/cosmos.rb")
66
66
  end
67
67
 
68
68
  it "returns nil if the file can't be found" do
@@ -18,7 +18,7 @@ describe Hash do
18
18
  hash = {'1'=>1,'2'=>2,'3'=>3,'4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9,'10'=>10}
19
19
  expect(hash.inspect).to eql '{"1"=>1, "2"=>2, "3"=>3, "4"=>4, "5"=>5, "6"=>6, "7"=>7, "8"=>8, "9"=>9, "10"=>10}'
20
20
  hash['11'] = 11
21
- expect(hash.inspect).to match /#<Hash:\d+>/
21
+ expect(hash.inspect).to match(/#<Hash:\d+>/)
22
22
  end
23
23
  end
24
24
  end
@@ -16,7 +16,7 @@ describe Socket do
16
16
  it "returns the ip address of the current machine" do
17
17
  begin
18
18
  Socket.get_own_ip_address
19
- expect(Socket.get_own_ip_address).to match /\b(?:\d{1,3}\.){3}\d{1,3}\b/
19
+ expect(Socket.get_own_ip_address).to match(/\b(?:\d{1,3}\.){3}\d{1,3}\b/)
20
20
  rescue Resolv::ResolvError
21
21
  # Oh well
22
22
  end
@@ -27,7 +27,7 @@ describe Socket do
27
27
  it "returns the hostname for the ip address" do
28
28
  if !ENV['APPVEYOR']
29
29
  ipaddr = Resolv.getaddress "localhost"
30
- expect(Socket.lookup_hostname_from_ip(ipaddr)).to match "localhost"
30
+ expect(Socket.lookup_hostname_from_ip(ipaddr)).to match("localhost")
31
31
  end
32
32
  end
33
33
  end
@@ -26,39 +26,39 @@ describe String do
26
26
  end
27
27
 
28
28
  it "uses 2 byte words" do
29
- expect(@data.formatted(2, 8)).to match "00000000: 1A1B 1C1D 1E1F" # ...
30
- expect(@data.formatted(2, 8)).to match "00000010: 2A2B 2C2D 2E2F"
29
+ expect(@data.formatted(2, 8)).to match("00000000: 1A1B 1C1D 1E1F") # ...
30
+ expect(@data.formatted(2, 8)).to match("00000010: 2A2B 2C2D 2E2F")
31
31
  end
32
32
 
33
33
  it "changes the word separator" do
34
- expect(@data.formatted(2, 4, '_')).to match "00000000: 1A1B_1C1D_1E1F_2021"
35
- expect(@data.formatted(2, 4, '_')).to match "00000008: 2223_2425_2627_2829"
36
- expect(@data.formatted(2, 4, '_')).to match "00000010: 2A2B_2C2D_2E2F"
34
+ expect(@data.formatted(2, 4, '_')).to match("00000000: 1A1B_1C1D_1E1F_2021")
35
+ expect(@data.formatted(2, 4, '_')).to match("00000008: 2223_2425_2627_2829")
36
+ expect(@data.formatted(2, 4, '_')).to match("00000010: 2A2B_2C2D_2E2F")
37
37
  end
38
38
 
39
39
  it "indents the lines" do
40
- expect(@data.formatted(1, 16, ' ', 4)).to match " 00000000: 1A 1B 1C 1D"
40
+ expect(@data.formatted(1, 16, ' ', 4)).to match(" 00000000: 1A 1B 1C 1D")
41
41
  end
42
42
 
43
43
  it "does not show the address" do
44
- expect(@data.formatted(1, 16, ' ', 0, false)).to match "1A 1B 1C 1D"
44
+ expect(@data.formatted(1, 16, ' ', 0, false)).to match("1A 1B 1C 1D")
45
45
  end
46
46
 
47
47
  it "changes the address separator" do
48
- expect(@data.formatted(1, 16, ' ', 0, true, '= ')).to match "00000000= 1A 1B 1C 1D"
48
+ expect(@data.formatted(1, 16, ' ', 0, true, '= ')).to match("00000000= 1A 1B 1C 1D")
49
49
  end
50
50
 
51
51
  it "does not show the ASCII" do
52
- expect(@data.formatted(1,16,'',0,true,'',true)).to match '29 !"#\$%&\'()'
53
- expect(@data.formatted(1,16,'',0,true,'',false)).not_to match '29 !"#\$%&\'()'
52
+ expect(@data.formatted(1,16,'',0,true,'',true)).to match('29 !"#\$%&\'()')
53
+ expect(@data.formatted(1,16,'',0,true,'',false)).not_to match('29 !"#\$%&\'()')
54
54
  end
55
55
 
56
56
  it "changes the ASCII separator" do
57
- expect(@data.formatted(1,16,'',0,true,'',true,'__')).to match '29__ !"#\$%&\'()'
57
+ expect(@data.formatted(1,16,'',0,true,'',true,'__')).to match('29__ !"#\$%&\'()')
58
58
  end
59
59
 
60
60
  it "changes the ASCII unprintable character" do
61
- expect(@data.formatted(1,16,'',0,true,'',true,'__','x')).to match '29__xxxxxx !"#\$%&\'()'
61
+ expect(@data.formatted(1,16,'',0,true,'',true,'__','x')).to match('29__xxxxxx !"#\$%&\'()')
62
62
  end
63
63
 
64
64
  it "changes the line separator" do
@@ -199,7 +199,7 @@ describe String do
199
199
  expect("[.a,2,3]".convert_to_value).to eql "[.a,2,3]"
200
200
  end
201
201
 
202
- it "doesn't match multiline strings" do
202
+ it "doesn't match(multiline strings" do
203
203
  expect("12345\n12345".convert_to_value).to eql "12345\n12345"
204
204
  expect("5.123\n5.123".convert_to_value).to eql "5.123\n5.123"
205
205
  expect("[0,1,2,3]\n[0,1,2,3]".convert_to_value).to eql "[0,1,2,3]\n[0,1,2,3]"
@@ -164,7 +164,6 @@ describe Time do
164
164
  describe "Time.ccsds2julian and Time.julian2ccsds" do
165
165
  it "converts CCSDS to and from Julian" do
166
166
  expect(Time.ccsds2julian(0, 1000, 2)).to be_within(0.00001).of(2436204.500012)
167
- time = Time.now
168
167
  ccsds_day, ccsds_ms, ccsds_us = Time.mdy2ccsds(2015,1,2,3,4,5,100)
169
168
  julian = Time.ccsds2julian(ccsds_day, ccsds_ms, ccsds_us)
170
169
  parts = Time.julian2ccsds(julian)
@@ -177,7 +176,6 @@ describe Time do
177
176
  describe "Time.ccsds2sec and Time.sec2ccsds" do
178
177
  it "converts seconds to and from CCSDS" do
179
178
  expect(Time.ccsds2sec(0, 1000, 2)).to be_within(0.00001).of(1)
180
- time = Time.now
181
179
  ccsds_day, ccsds_ms, ccsds_us = Time.mdy2ccsds(2015,1,2,3,4,5,100)
182
180
  seconds = Time.ccsds2sec(ccsds_day, ccsds_ms, ccsds_us)
183
181
  parts = Time.sec2ccsds(seconds)
@@ -63,7 +63,7 @@ if RUBY_ENGINE == 'ruby'
63
63
  end
64
64
 
65
65
  buttons = %w(THIS IS A TEST)
66
- answer = combo_box("HI", *buttons)
66
+ combo_box("HI", *buttons)
67
67
  expect(buttons).to eq %w(THIS IS A TEST)
68
68
  end
69
69
  end
@@ -79,7 +79,7 @@ if RUBY_ENGINE == 'ruby'
79
79
  end
80
80
 
81
81
  buttons = %w(THIS IS A TEST)
82
- answer = message_box("HI", *buttons)
82
+ message_box("HI", *buttons)
83
83
  expect(buttons).to eq %w(THIS IS A TEST)
84
84
  end
85
85
  end
@@ -93,7 +93,7 @@ if RUBY_ENGINE == 'ruby'
93
93
  end
94
94
 
95
95
  buttons = %w(THIS IS A TEST)
96
- answer = vertical_message_box("HI", *buttons)
96
+ vertical_message_box("HI", *buttons)
97
97
  expect(buttons).to eq %w(THIS IS A TEST)
98
98
  end
99
99
  end
@@ -70,17 +70,17 @@ TELEMETRY INST HEALTH_STATUS BIG_ENDIAN "Health and status from the instrument"
70
70
  ITEM TIMEFORMATTED 0 0 DERIVED "Derived time since epoch as formatted string"
71
71
  READ_CONVERSION unix_time_formatted_conversion.rb TIMESEC TIMEUS
72
72
  ITEM TEMP1HIGH 0 0 DERIVED "High-water mark for TEMP1"
73
- READ_CONVERSION processor_conversion.rb TEMP1WATER HIGH_WATER
73
+ READ_CONVERSION processor_conversion.rb TEMP1WATER HIGH_WATER # Deliberately leave off type and bit size
74
74
  ITEM TEMP1LOW 0 0 DERIVED "Low-water mark for TEMP1"
75
- READ_CONVERSION processor_conversion.rb TEMP1WATER LOW_WATER
75
+ READ_CONVERSION processor_conversion.rb TEMP1WATER LOW_WATER # Deliberately leave off type and bit size
76
76
  ITEM TEMP1MAX 0 0 DERIVED "Maximum of most recent 100 samples for TEMP1"
77
- READ_CONVERSION processor_conversion.rb TEMP1STAT MAX
77
+ READ_CONVERSION processor_conversion.rb TEMP1STAT MAX FLOAT 64
78
78
  ITEM TEMP1MIN 0 0 DERIVED "Minimum of most recent 100 samples for TEMP1"
79
- READ_CONVERSION processor_conversion.rb TEMP1STAT MIN
79
+ READ_CONVERSION processor_conversion.rb TEMP1STAT MIN FLOAT 64
80
80
  ITEM TEMP1MEAN 0 0 DERIVED "Mean of most recent 100 samples for TEMP1"
81
- READ_CONVERSION processor_conversion.rb TEMP1STAT MEAN
81
+ READ_CONVERSION processor_conversion.rb TEMP1STAT MEAN FLOAT 64
82
82
  ITEM TEMP1STDDEV 0 0 DERIVED "Stddev of most recent 100 samples for TEMP1"
83
- READ_CONVERSION processor_conversion.rb TEMP1STAT STDDEV
83
+ READ_CONVERSION processor_conversion.rb TEMP1STAT STDDEV FLOAT 64
84
84
  PROCESSOR TEMP1STAT statistics_processor.rb TEMP1 100
85
85
  PROCESSOR TEMP1WATER watermark_processor.rb TEMP1
86
86
 
@@ -0,0 +1,4 @@
1
+ INTERFACE SYSTEM_INT cmd_tlm_server_interface.rb
2
+ TARGET SYSTEM
3
+ INTERFACE INST_INT interface.rb
4
+ TARGET INST
@@ -15,7 +15,9 @@ module Cosmos
15
15
 
16
16
  describe CmdTlmServerInterface do
17
17
  before(:all) do
18
+ # Save cmd_tlm_server.txt
18
19
  cts = File.join(Cosmos::USERPATH,'config','tools','cmd_tlm_server','cmd_tlm_server.txt')
20
+ FileUtils.mv cts, Cosmos::USERPATH
19
21
  FileUtils.mkdir_p(File.dirname(cts))
20
22
  File.open(cts,'w') do |file|
21
23
  file.puts 'INTERFACE INT interface.rb'
@@ -24,8 +26,10 @@ module Cosmos
24
26
  end
25
27
 
26
28
  after(:all) do
27
- clean_config()
28
- FileUtils.rm_rf File.join(Cosmos::USERPATH,'config','tools')
29
+ # Restore cmd_tlm_server.txt
30
+ FileUtils.mv File.join(Cosmos::USERPATH, 'cmd_tlm_server.txt'),
31
+ File.join(Cosmos::USERPATH,'config','tools','cmd_tlm_server')
32
+ System.class_eval('@@instance = nil')
29
33
  end
30
34
 
31
35
  before(:each) do
@@ -14,7 +14,6 @@ require 'cosmos/interfaces/protocols/protocol'
14
14
 
15
15
  module Cosmos
16
16
  class InterfaceTestProtocol < Protocol
17
-
18
17
  def initialize(added_data, stop_count = 0, packet_added_data = nil, packet_stop_count = 0)
19
18
  @added_data = added_data
20
19
  @packet_added_data = packet_added_data
@@ -19,11 +19,6 @@ module Cosmos
19
19
  def write(data); end
20
20
  end
21
21
 
22
- before(:all) do
23
- clean_config()
24
- System.class_eval('@@instance = nil')
25
- end
26
-
27
22
  describe "connect" do
28
23
  it "passes a new TcpipClientStream to the stream protocol" do
29
24
  i = LincInterface.new('localhost','8888')
@@ -35,111 +35,226 @@ module Cosmos
35
35
 
36
36
  describe "initialize" do
37
37
  it "complains if strip crc is not boolean" do
38
- expect { @interface.add_protocol(CrcProtocol, [
39
- nil, # item name
40
- '', # strip crc
41
- 'ERROR', # bad strategy
42
- -16, # bit offset
43
- 16], # bit size
44
- :READ_WRITE) }.to raise_error(/Invalid strip CRC/)
38
+ ['ERROR', 0, nil].each do |strip_crc|
39
+ expect { @interface.add_protocol(CrcProtocol, [
40
+ nil, # item name
41
+ strip_crc, # strip crc
42
+ 'ERROR', # bad strategy
43
+ -16, # bit offset
44
+ 16], # bit size
45
+ :READ_WRITE) }.to raise_error(/Invalid strip CRC/)
46
+ end
45
47
  end
46
48
 
47
49
  it "complains if bad strategy is not ERROR or DISCONNECT" do
48
- expect { @interface.add_protocol(CrcProtocol, [
49
- nil, # item name
50
- 'TRUE', # strip crc
51
- '', # bad strategy
52
- -16, # bit offset
53
- 16], # bit size
54
- :READ_WRITE) }.to raise_error(/Invalid bad CRC strategy/)
50
+ ['BAD', 0, nil].each do |strategy|
51
+ expect { @interface.add_protocol(CrcProtocol, [
52
+ nil, # item name
53
+ 'TRUE', # strip crc
54
+ strategy, # bad strategy
55
+ -16, # bit offset
56
+ 16], # bit size
57
+ :READ_WRITE) }.to raise_error(/Invalid bad CRC strategy/)
58
+ end
55
59
  end
56
60
 
57
61
  it "complains if bit size is not 16, 32, or 64" do
58
- expect { @interface.add_protocol(CrcProtocol, [
59
- nil, # item name
60
- 'TRUE', # strip crc
61
- 'ERROR', # bad strategy
62
- 128, # bit offset
63
- 8], # bit size
64
- :READ_WRITE) }.to raise_error( /Invalid bit size/)
62
+ ['0', 0, nil].each do |bit_size|
63
+ expect { @interface.add_protocol(CrcProtocol, [
64
+ nil, # item name
65
+ 'TRUE', # strip crc
66
+ 'ERROR', # bad strategy
67
+ 128, # bit offset
68
+ bit_size], # bit size
69
+ :READ_WRITE) }.to raise_error( /Invalid bit size/)
70
+ end
71
+ end
72
+
73
+ it "accepts a string bit size of 16, 32, or 64" do
74
+ %w(16 32 64).each do |bit_size|
75
+ @interface.add_protocol(CrcProtocol, [
76
+ nil, # item name
77
+ 'TRUE', # strip crc
78
+ 'ERROR', # bad strategy
79
+ -32, # bit offset
80
+ bit_size], # bit size
81
+ :READ_WRITE)
82
+ expect(@interface.read_protocols[-1].instance_variable_get(:@bit_size)).to eq Integer(bit_size)
83
+ end
65
84
  end
66
85
 
67
86
  it "complains if bit offset is not byte divisible" do
68
- expect { @interface.add_protocol(CrcProtocol, [
69
- nil, # item name
70
- 'TRUE', # strip crc
71
- 'ERROR', # bad strategy
72
- 100, # bit offset
73
- 16], # bit size
74
- :READ_WRITE) }.to raise_error(/Invalid bit offset/)
87
+ [nil, 100, '100'].each do |offset|
88
+ expect { @interface.add_protocol(CrcProtocol, [
89
+ nil, # item name
90
+ 'TRUE', # strip crc
91
+ 'ERROR', # bad strategy
92
+ offset, # bit offset
93
+ 16], # bit size
94
+ :READ_WRITE) }.to raise_error(/Invalid bit offset/)
95
+ end
75
96
  end
76
97
 
77
- it "complains if the endianness is not a BIG_ENDIAN or LITTLE_ENDIAN" do
78
- expect { @interface.add_protocol(CrcProtocol, [
79
- nil, # item name
80
- 'FALSE', # strip crc
81
- 'ERROR', # bad strategy
82
- -16, # bit offset
83
- 16, # bit size
84
- 'TRUE', # endianness
85
- 0xDEAD, # poly
86
- 0x0, # seed
87
- 'TRUE', # xor
88
- 'TRUE', # reflect
89
- ],
90
- :READ_WRITE) }.to raise_error(/Invalid endianness/)
98
+ it "accepts a string for bit offset" do
99
+ %w(0 32 -32).each do |offset|
100
+ @interface.add_protocol(CrcProtocol, [
101
+ nil, # item name
102
+ 'TRUE', # strip crc
103
+ 'ERROR', # bad strategy
104
+ offset, # bit offset
105
+ 16], # bit size
106
+ :READ_WRITE)
107
+ expect(@interface.read_protocols[-1].instance_variable_get(:@bit_offset)).to eq Integer(offset)
108
+ end
109
+ end
110
+
111
+ it "complains if the endianness is not BIG_ENDIAN or LITTLE_ENDIAN" do
112
+ ['ENDIAN', 0, nil].each do |endianness|
113
+ expect { @interface.add_protocol(CrcProtocol, [
114
+ nil, # item name
115
+ 'FALSE', # strip crc
116
+ 'ERROR', # bad strategy
117
+ -16, # bit offset
118
+ 16, # bit size
119
+ endianness, # endianness
120
+ 0xDEAD, # poly
121
+ 0x0, # seed
122
+ 'TRUE', # xor
123
+ 'TRUE', # reflect
124
+ ],
125
+ :READ_WRITE) }.to raise_error(/Invalid endianness/)
126
+ end
91
127
  end
92
128
 
93
129
  it "complains if the poly is not a number" do
94
- expect { @interface.add_protocol(CrcProtocol, [
95
- nil, # item name
96
- 'FALSE', # strip crc
97
- 'ERROR', # bad strategy
98
- -16, # bit offset
99
- 16, # bit size
100
- 'BIG_ENDIAN', # endianness
101
- 'TRUE', # poly
102
- 0x0, # seed
103
- 'TRUE', # xor
104
- 'TRUE', # reflect
105
- ],
106
- :READ_WRITE) }.to raise_error(/invalid value/)
130
+ ['TRUE', '123abc'].each do |poly|
131
+ expect { @interface.add_protocol(CrcProtocol, [
132
+ nil, # item name
133
+ 'FALSE', # strip crc
134
+ 'ERROR', # bad strategy
135
+ -16, # bit offset
136
+ 16, # bit size
137
+ 'BIG_ENDIAN', # endianness
138
+ poly, # poly
139
+ 0x0, # seed
140
+ 'TRUE', # xor
141
+ 'TRUE', # reflect
142
+ ],
143
+ :READ_WRITE) }.to raise_error(/Invalid poly/)
144
+ end
145
+ end
146
+
147
+ it "accepts nil and numeric polynomials" do
148
+ ['0xABCD', 0xABCD, nil, '', 'NIL', 'NULL'].each do |poly|
149
+ expect { @interface.add_protocol(CrcProtocol, [
150
+ nil, # item name
151
+ 'FALSE', # strip crc
152
+ 'ERROR', # bad strategy
153
+ -16, # bit offset
154
+ 16, # bit size
155
+ 'BIG_ENDIAN', # endianness
156
+ poly, # poly
157
+ 0x0, # seed
158
+ 'TRUE', # xor
159
+ 'TRUE', # reflect
160
+ ],
161
+ :READ_WRITE) }.to_not raise_error
162
+ end
107
163
  end
108
164
 
109
165
  it "complains if the seed is not a number" do
110
- expect { @interface.add_protocol(CrcProtocol, [
111
- nil, # item name
112
- 'FALSE', # strip crc
113
- 'ERROR', # bad strategy
114
- -16, # bit offset
115
- 16, # bit size
116
- 'LITTLE_ENDIAN', # endianness
117
- 0xABCD, # poly
118
- 'TRUE', # seed
119
- 'TRUE', # xor
120
- 'TRUE', # reflect
121
- ],
122
- :READ_WRITE) }.to raise_error(/invalid value/)
166
+ ['TRUE', '123abc'].each do |seed|
167
+ expect { @interface.add_protocol(CrcProtocol, [
168
+ nil, # item name
169
+ 'FALSE', # strip crc
170
+ 'ERROR', # bad strategy
171
+ -16, # bit offset
172
+ 16, # bit size
173
+ 'LITTLE_ENDIAN', # endianness
174
+ 0xABCD, # poly
175
+ seed, # seed
176
+ 'TRUE', # xor
177
+ 'TRUE', # reflect
178
+ ],
179
+ :READ_WRITE) }.to raise_error(/Invalid seed/)
180
+ end
181
+ end
182
+
183
+ it "accepts nil and numeric seeds" do
184
+ ['0xABCD', 0xABCD, nil, '', 'NIL', 'NULL'].each do |seed|
185
+ expect { @interface.add_protocol(CrcProtocol, [
186
+ nil, # item name
187
+ 'FALSE', # strip crc
188
+ 'ERROR', # bad strategy
189
+ -16, # bit offset
190
+ 16, # bit size
191
+ 'BIG_ENDIAN', # endianness
192
+ nil, # poly
193
+ seed, # seed
194
+ 'TRUE', # xor
195
+ 'TRUE', # reflect
196
+ ],
197
+ :READ_WRITE) }.to_not raise_error
198
+ end
199
+ end
200
+
201
+ it "accepts nil TRUE FALSE for xor" do
202
+ [nil, '', 'NIL', 'NULL', 'TRUE', 'FALSE'].each do |xor|
203
+ expect { @interface.add_protocol(CrcProtocol, [
204
+ nil, # item name
205
+ 'FALSE', # strip crc
206
+ 'ERROR', # bad strategy
207
+ -16, # bit offset
208
+ 16, # bit size
209
+ 'BIG_ENDIAN', # endianness
210
+ 0xABCD, # poly
211
+ 0, # seed
212
+ xor, # xor
213
+ 'TRUE', # reflect
214
+ ],
215
+ :READ_WRITE) }.to_not raise_error
216
+ end
123
217
  end
124
218
 
125
219
  it "complains if the xor is not boolean" do
126
- expect { @interface.add_protocol(CrcProtocol, [
127
- nil, # item name
128
- 'FALSE', # strip crc
129
- 'ERROR', # bad strategy
130
- -16, # bit offset
131
- 16, # bit size
132
- 'BIG_ENDIAN', # endianness
133
- 0xABCD, # poly
134
- 0, # seed
135
- 0, # xor
136
- 'TRUE', # reflect
137
- ],
138
- :READ_WRITE) }.to raise_error(/Invalid XOR value/)
220
+ ['ERROR', 0].each do |xor|
221
+ expect { @interface.add_protocol(CrcProtocol, [
222
+ nil, # item name
223
+ 'FALSE', # strip crc
224
+ 'ERROR', # bad strategy
225
+ -16, # bit offset
226
+ 16, # bit size
227
+ 'BIG_ENDIAN', # endianness
228
+ 0xABCD, # poly
229
+ 0, # seed
230
+ xor, # xor
231
+ 'TRUE', # reflect
232
+ ],
233
+ :READ_WRITE) }.to raise_error(/Invalid XOR value/)
234
+ end
235
+ end
236
+
237
+ it "accepts nil TRUE FALSE for reflect" do
238
+ [nil, '', 'NIL', 'NULL', 'TRUE', 'FALSE'].each do |reflect|
239
+ expect { @interface.add_protocol(CrcProtocol, [
240
+ nil, # item name
241
+ 'FALSE', # strip crc
242
+ 'ERROR', # bad strategy
243
+ -16, # bit offset
244
+ 16, # bit size
245
+ 'BIG_ENDIAN', # endianness
246
+ 0xABCD, # poly
247
+ 0, # seed
248
+ 'TRUE', # xor
249
+ reflect, # reflect
250
+ ],
251
+ :READ_WRITE) }.to_not raise_error
252
+ end
139
253
  end
140
254
 
141
255
  it "complains if the reflect is not boolean" do
142
- expect { @interface.add_protocol(CrcProtocol, [
256
+ ['ERROR', 0].each do |reflect|
257
+ expect { @interface.add_protocol(CrcProtocol, [
143
258
  nil, # item name
144
259
  'FALSE', # strip crc
145
260
  'ERROR', # bad strategy
@@ -149,9 +264,10 @@ module Cosmos
149
264
  0xABCD, # poly
150
265
  0, # seed
151
266
  'TRUE', # xor
152
- 0, # reflect
267
+ reflect, # reflect
153
268
  ],
154
269
  :READ_WRITE) }.to raise_error(/Invalid reflect value/)
270
+ end
155
271
  end
156
272
  end
157
273
 
@@ -378,7 +494,7 @@ module Cosmos
378
494
  $buffer[0] = "\x01"
379
495
 
380
496
  expect(Logger).to receive(:error) do |msg|
381
- expect(msg).to match "Invalid CRC detected!"
497
+ expect(msg).to match("Invalid CRC detected!")
382
498
  end
383
499
  packet = @interface.read
384
500
  expect(packet.buffer.length).to eql 8
@@ -406,7 +522,7 @@ module Cosmos
406
522
  $buffer[0] = "\x01"
407
523
 
408
524
  expect(Logger).to receive(:error) do |msg|
409
- expect(msg).to match "Invalid CRC detected!"
525
+ expect(msg).to match("Invalid CRC detected!")
410
526
  end
411
527
  packet = @interface.read
412
528
  expect(packet).to be_nil # thread disconnects when packet is nil