cosmos 4.1.1-java → 4.2.0-java

Sign up to get free protection for your applications and to get access to all the features.
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