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
@@ -15,12 +15,12 @@ module Cosmos
15
15
 
16
16
  describe PacketLogWriter do
17
17
  before(:each) do
18
- System.class_eval('@@instance = nil')
19
18
  System.load_configuration
20
19
  @log_path = System.paths['LOGS']
21
20
  end
22
21
 
23
22
  after(:each) do
23
+ # Clean config after each so we can check for individual log files
24
24
  clean_config()
25
25
  end
26
26
 
@@ -170,7 +170,7 @@ module Cosmos
170
170
  plw.write(pkt)
171
171
  sleep 0.1
172
172
  plw.stop
173
- expect(stdout.string).to match "Error opening"
173
+ expect(stdout.string).to match("Error opening")
174
174
  plw.shutdown
175
175
  sleep(0.1)
176
176
  end
@@ -185,7 +185,7 @@ module Cosmos
185
185
  plw.write(pkt)
186
186
  sleep 0.1
187
187
  plw.stop
188
- expect(stdout.string).to match "Error closing"
188
+ expect(stdout.string).to match("Error closing")
189
189
  plw.shutdown
190
190
  sleep(0.1)
191
191
  end
@@ -214,7 +214,7 @@ module Cosmos
214
214
 
215
215
  it "ignores bad label formats" do
216
216
  plw = PacketLogWriter.new(:TLM,nil,false,nil,10000000,nil,false)
217
- plw.start('my_test')
217
+ plw.start('mytest!')
218
218
  plw.write(Packet.new('',''))
219
219
  plw.shutdown
220
220
  expect(Dir[File.join(@log_path,"*.bin")][-1]).to match("_tlm.bin")
@@ -503,7 +503,7 @@ module Cosmos
503
503
  end
504
504
 
505
505
  it "complains with an array_size not a multiple of bit_size" do
506
- data = @data.unpack('C*')
506
+ @data.unpack('C*')
507
507
  expect { BinaryAccessor.read_array(0, 8, :UINT, 10, @data, :LITTLE_ENDIAN) }.to raise_error(ArgumentError, "array_size 10 not a multiple of bit_size 8")
508
508
  end
509
509
 
@@ -518,12 +518,12 @@ module Cosmos
518
518
  end
519
519
 
520
520
  it "returns an empty array if the offset equals the negative array size" do
521
- data = @data.unpack('C*')
521
+ @data.unpack('C*')
522
522
  expect(BinaryAccessor.read_array(@data.length*8-32, 8, :UINT, -32, @data, :LITTLE_ENDIAN)).to eql([])
523
523
  end
524
524
 
525
525
  it "complains if the offset is greater than the negative array size" do
526
- data = @data.unpack('C*')
526
+ @data.unpack('C*')
527
527
  offset = @data.length * 8 - 16
528
528
  expect { BinaryAccessor.read_array(offset, 8, :UINT, -32, @data, :LITTLE_ENDIAN) }.to raise_error(ArgumentError, "16 byte buffer insufficient to read UINT at bit_offset #{offset} with bit_size 8")
529
529
  end
@@ -1777,12 +1777,12 @@ module Cosmos
1777
1777
  end
1778
1778
 
1779
1779
  it "complains with an array_size not a multiple of bit_size" do
1780
- data = @data.unpack('C*')
1780
+ @data.unpack('C*')
1781
1781
  expect { BinaryAccessor.write_array([1,2], 0, 8, :UINT, 10, @data, :BIG_ENDIAN, :ERROR) }.to raise_error(ArgumentError, "array_size 10 not a multiple of bit_size 8")
1782
1782
  end
1783
1783
 
1784
1784
  it "complains with an array_size not a multiple of bit_size" do
1785
- data = @data.unpack('C*')
1785
+ @data.unpack('C*')
1786
1786
  expect { BinaryAccessor.write_array([1,2], 0, 8, :UINT, -10, @data, :BIG_ENDIAN, :ERROR) }.to raise_error(ArgumentError, "array_size -10 not a multiple of bit_size 8")
1787
1787
  end
1788
1788
 
@@ -1861,13 +1861,11 @@ module Cosmos
1861
1861
  end
1862
1862
 
1863
1863
  it "writes aligned 8-bit unsigned integers" do
1864
- data = @data.clone
1865
1864
  BinaryAccessor.write_array([0,1,2,3,4,5,255,255], 0, 8, :UINT, 0, @data, :BIG_ENDIAN, :ERROR)
1866
1865
  expect(@data).to eql("\x00\x01\x02\x03\x04\x05\xFF\xFF")
1867
1866
  end
1868
1867
 
1869
1868
  it "writes aligned 8-bit signed integers" do
1870
- data = @data.clone
1871
1869
  BinaryAccessor.write_array([0,1,2,3,4,5,-1,127], 0, 8, :INT, 0, @data, :BIG_ENDIAN, :ERROR)
1872
1870
  expect(@data).to eql("\x00\x01\x02\x03\x04\x05\xFF\x7F")
1873
1871
  end
@@ -1877,7 +1875,6 @@ module Cosmos
1877
1875
  end
1878
1876
 
1879
1877
  it "writes STRING items" do
1880
- data = @baseline_data.clone
1881
1878
  BinaryAccessor.write_array(['a'], 0, 64, :STRING, 0, @baseline_data, :BIG_ENDIAN, :ERROR)
1882
1879
  expect(@baseline_data).to eql("a\x00\x00\x00\x00\x00\x00\x00")
1883
1880
  end
@@ -218,7 +218,7 @@ module Cosmos
218
218
  end
219
219
 
220
220
  it "complains about non-existant items" do
221
- expect { cmd = @cmd.build_cmd("tgt1","pkt1",{"itemX"=>1}) }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
221
+ expect { @cmd.build_cmd("tgt1","pkt1",{"itemX"=>1}) }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
222
222
  end
223
223
 
224
224
  it "creates a populated command packet with default values" do
@@ -329,7 +329,7 @@ module Cosmos
329
329
  end
330
330
 
331
331
  it "complains about non-existant items" do
332
- expect { cmd = @cmd.cmd_hazardous?("tgt1","pkt1",{"itemX"=>1}) }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
332
+ expect { @cmd.cmd_hazardous?("tgt1","pkt1",{"itemX"=>1}) }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
333
333
  end
334
334
 
335
335
  it "returns true if the command overall is hazardous" do
@@ -272,7 +272,7 @@ module Cosmos
272
272
  end
273
273
 
274
274
  it "enables limits for an item" do
275
- pkt = @tlm.packet("TGT1","PKT1")
275
+ @tlm.packet("TGT1","PKT1")
276
276
  expect(@limits.enabled?("TGT1","PKT1","ITEM5")).to be false
277
277
  @limits.enable("TGT1","PKT1","ITEM5")
278
278
  expect(@limits.enabled?("TGT1","PKT1","ITEM5")).to be true
@@ -293,7 +293,7 @@ module Cosmos
293
293
  end
294
294
 
295
295
  it "disables limits for an item" do
296
- pkt = @tlm.packet("TGT1","PKT1")
296
+ @tlm.packet("TGT1","PKT1")
297
297
  @limits.enable("TGT1","PKT1","ITEM1")
298
298
  expect(@limits.enabled?("TGT1","PKT1","ITEM1")).to be true
299
299
  @limits.disable("TGT1","PKT1","ITEM1")
@@ -832,6 +832,18 @@ module Cosmos
832
832
  end
833
833
  end
834
834
 
835
+ context "with APPEND" do
836
+ it "allows appending derived items" do
837
+ tf = Tempfile.new('unittest')
838
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
839
+ tf.puts ' APPEND_ITEM item1 0 DERIVED'
840
+ tf.close
841
+ @pc.process_file(tf.path, "TGT1")
842
+ expect(@pc.telemetry["TGT1"]["PKT1"].items["ITEM1"].data_type).to be :DERIVED
843
+ tf.unlink
844
+ end
845
+ end
846
+
835
847
  end # describe "process_file"
836
848
  end
837
849
  end
@@ -162,7 +162,7 @@ module Cosmos
162
162
  expect(hash["enabled"]).to be true
163
163
  expect(hash["values"]).to include(:DEFAULT => [0,1,2,3,4,5])
164
164
  expect(hash["state"]).to eql :RED_LOW
165
- expect(hash["response"]).to match "LimitsResponse"
165
+ expect(hash["response"]).to match("LimitsResponse")
166
166
  expect(hash["persistence_setting"]).to eql 1
167
167
  expect(hash["persistence_count"]).to eql 2
168
168
  end
@@ -24,7 +24,7 @@ module Cosmos
24
24
  it "sets the format_string" do
25
25
  @pi.format_string = "%5.1f"
26
26
  expect(@pi.format_string).to eql "%5.1f"
27
- expect(@pi.to_config(:TELEMETRY, :BIG_ENDIAN)).to match /FORMAT_STRING %5.1f/
27
+ expect(@pi.to_config(:TELEMETRY, :BIG_ENDIAN)).to match(/FORMAT_STRING %5.1f/)
28
28
  end
29
29
 
30
30
  it "sets the format_string to nil" do
@@ -49,9 +49,9 @@ module Cosmos
49
49
  @pi.read_conversion = c
50
50
  expect(@pi.read_conversion.to_s == c.to_s).to be true
51
51
  config = @pi.to_config(:TELEMETRY, :BIG_ENDIAN)
52
- expect(config).to match /GENERIC_READ_CONVERSION_START/
53
- expect(config).to match /value \/ 2/
54
- expect(config).to match /GENERIC_READ_CONVERSION_END/
52
+ expect(config).to match(/GENERIC_READ_CONVERSION_START/)
53
+ expect(config).to match(/value \/ 2/)
54
+ expect(config).to match(/GENERIC_READ_CONVERSION_END/)
55
55
  end
56
56
 
57
57
  it "sets the read_conversion to nil" do
@@ -70,9 +70,9 @@ module Cosmos
70
70
  @pi.write_conversion = c
71
71
  expect(@pi.write_conversion.to_s == c.to_s).to be true
72
72
  config = @pi.to_config(:TELEMETRY, :BIG_ENDIAN)
73
- expect(config).to match /GENERIC_WRITE_CONVERSION_START/
74
- expect(config).to match /value \/ 2/
75
- expect(config).to match /GENERIC_WRITE_CONVERSION_END/
73
+ expect(config).to match(/GENERIC_WRITE_CONVERSION_START/)
74
+ expect(config).to match(/value \/ 2/)
75
+ expect(config).to match(/GENERIC_WRITE_CONVERSION_END/)
76
76
  end
77
77
 
78
78
  it "sets the write_conversion to nil" do
@@ -423,8 +423,8 @@ module Cosmos
423
423
  # Check the unique PacketItem values
424
424
  expect(hash.keys).to include('format_string','read_conversion','write_conversion','id_value','states','description','units_full','units','default','range','required','hazardous','state_colors','limits')
425
425
  expect(hash["format_string"]).to eql "%5.1f"
426
- expect(hash["read_conversion"]).to match "value / 2"
427
- expect(hash["write_conversion"]).to match /value \* 2/
426
+ expect(hash["read_conversion"]).to match("value / 2")
427
+ expect(hash["write_conversion"]).to match(/value \* 2/)
428
428
  expect(hash["id_value"]).to eql 10
429
429
  expect(hash["states"]).to include("TRUE"=>1,"FALSE"=>0)
430
430
  expect(hash["description"]).to eql "description"
@@ -1411,8 +1411,8 @@ module Cosmos
1411
1411
  describe "clone" do
1412
1412
  it "duplicates the packet" do
1413
1413
  p = Packet.new("tgt","pkt")
1414
- p.processors['processor'] = Processor.new
1415
- p.processors['processor'].name = "TestProcessor"
1414
+ p.processors['PROCESSOR'] = Processor.new
1415
+ p.processors['PROCESSOR'].name = "TestProcessor"
1416
1416
  p2 = p.clone
1417
1417
  # No comparison operator
1418
1418
  # expect(p).to eql p2
@@ -1420,13 +1420,23 @@ module Cosmos
1420
1420
  expect(p2.target_name).to eql "TGT"
1421
1421
  expect(p2.packet_name).to eql "PKT"
1422
1422
  # No comparison operator
1423
- # expect(p2.processors['processor']).to eql p.processors['processor']
1424
- expect(p2.processors['processor']).to_not be p.processors['processor']
1425
- expect(p2.processors['processor'].name).to eql p.processors['processor'].name
1423
+ # expect(p2.processors['PROCESSOR']).to eql p.processors['PROCESSOR']
1424
+ expect(p2.processors['PROCESSOR']).to_not be p.processors['PROCESSOR']
1425
+ expect(p2.processors['PROCESSOR'].name).to eql p.processors['PROCESSOR'].name
1426
1426
  end
1427
1427
  end
1428
1428
 
1429
1429
  describe "reset" do
1430
+ it "does nothing to the SYSTEM META packet" do
1431
+ p = Packet.new("SYSTEM","META")
1432
+ time = Time.now
1433
+ p.received_time = time
1434
+ p.received_count = 50
1435
+ p.reset
1436
+ expect(p.received_time).to eql time
1437
+ expect(p.received_count).to eql 50
1438
+ end
1439
+
1430
1440
  it "resets the received_time and received_count" do
1431
1441
  p = Packet.new("tgt","pkt")
1432
1442
  p.processors['processor'] = double("reset", :reset => true)
@@ -166,6 +166,20 @@ module Cosmos
166
166
  expect(packet.read("ITEM60")).to eql [0x00000001, 0x00000001]
167
167
  tf.unlink
168
168
  end
169
+
170
+ it "complains if an ITEM is redefined" do
171
+ tf = Tempfile.new('unittest')
172
+ tf.puts 'TELEMETRY TGT1 PKT1 BIG_ENDIAN "Description"'
173
+ tf.puts ' APPEND_ITEM ITEM1 16 UINT "Item 1"'
174
+ tf.puts ' APPEND_ITEM ITEM1 16 UINT "Another item"'
175
+ tf.close
176
+ @pc.process_file(tf.path, "TGT1")
177
+ packet = @pc.telemetry["TGT1"]["PKT1"]
178
+ packet.buffer = "\xDE\xAD\xBE\xEF"
179
+ expect(packet.read("ITEM1")).to eql 0xBEEF
180
+ expect(@pc.warnings).to include("TGT1 PKT1 ITEM1 redefined.")
181
+ tf.unlink
182
+ end
169
183
  end
170
184
 
171
185
  context "with keywords including PARAMETER" do
@@ -371,6 +385,19 @@ module Cosmos
371
385
  end
372
386
  end
373
387
 
388
+ it "complains if a PARAMETER is redefined" do
389
+ tf = Tempfile.new('unittest')
390
+ tf.puts 'COMMAND TGT1 PKT1 BIG_ENDIAN "Description"'
391
+ tf.puts ' APPEND_PARAMETER PARAM1 16 UINT MIN MAX 1 "Param 1"'
392
+ tf.puts ' APPEND_PARAMETER PARAM1 16 UINT MIN MAX 2 "Another param"'
393
+ tf.close
394
+ @pc.process_file(tf.path, "TGT1")
395
+ packet = @pc.commands["TGT1"]["PKT1"]
396
+ packet.buffer = "\xDE\xAD\xBE\xEF"
397
+ expect(packet.read("PARAM1")).to eql 0xBEEF
398
+ expect(@pc.warnings).to include("TGT1 PKT1 PARAM1 redefined.")
399
+ tf.unlink
400
+ end
374
401
  end
375
402
 
376
403
  end # describe "process_file"
@@ -48,10 +48,6 @@ END
48
48
  module Cosmos
49
49
 
50
50
  describe XtceParser do
51
- after(:all) do
52
- #clean_config()
53
- end
54
-
55
51
  def xml_file(target)
56
52
  tf = Tempfile.new(['unittest', '.xtce'])
57
53
  tf.puts '<?xml version="1.0" encoding="UTF-8"?>'
@@ -63,11 +59,12 @@ module Cosmos
63
59
  end
64
60
 
65
61
  def telemetry_file(target)
66
- xml_file(target) do |tf|
62
+ file = xml_file(target) do |tf|
67
63
  tf.puts ' <xtce:TelemetryMetaData>'
68
64
  yield tf
69
65
  tf.puts ' </xtce:TelemetryMetaData>'
70
66
  end
67
+ file
71
68
  end
72
69
 
73
70
  def add_tlm_packet_item(tf, packet, item)
@@ -94,11 +91,12 @@ module Cosmos
94
91
  end
95
92
 
96
93
  def command_file(target)
97
- xml_file(target) do |tf|
94
+ file = xml_file(target) do |tf|
98
95
  tf.puts ' <xtce:CommandMetaData>'
99
96
  yield tf
100
97
  tf.puts ' </xtce:CommandMetaData>'
101
98
  end
99
+ file
102
100
  end
103
101
 
104
102
  def add_cmd_packet_item(tf, packet, item)
@@ -150,9 +148,8 @@ module Cosmos
150
148
  end
151
149
 
152
150
  it "processes xtce commands" do
153
- tf = Tempfile.new(['unittest', '.xtce'])
154
- tf = command_file("TGT") do |tf|
155
- add_cmd_packet_item(tf, "PKT", "PARAM1")
151
+ tf = command_file("TGT") do |file|
152
+ add_cmd_packet_item(file, "PKT", "PARAM1")
156
153
  end
157
154
 
158
155
  @pc.process_file(tf.path, 'TGT')
@@ -167,11 +164,11 @@ module Cosmos
167
164
 
168
165
  context "with units" do
169
166
  it "processes description and value" do
170
- tf = telemetry_file("TGT") do |tf|
171
- add_tlm_packet_item(tf, "PKT", "TEMP1") do |tf|
172
- tf.puts '<xtce:UnitSet>'
173
- tf.puts '<xtce:Unit description="Volts">V</xtce:Unit>'
174
- tf.puts '</xtce:UnitSet>'
167
+ tf = telemetry_file("TGT") do |file|
168
+ add_tlm_packet_item(file, "PKT", "TEMP1") do |file2|
169
+ file2.puts '<xtce:UnitSet>'
170
+ file2.puts '<xtce:Unit description="Volts">V</xtce:Unit>'
171
+ file2.puts '</xtce:UnitSet>'
175
172
  end
176
173
  end
177
174
 
@@ -184,11 +181,11 @@ module Cosmos
184
181
  end
185
182
 
186
183
  it "processes description only" do
187
- tf = telemetry_file("TGT") do |tf|
188
- add_tlm_packet_item(tf, "PKT", "TEMP1") do |tf|
189
- tf.puts '<xtce:UnitSet>'
190
- tf.puts '<xtce:Unit description="Volts"/>'
191
- tf.puts '</xtce:UnitSet>'
184
+ tf = telemetry_file("TGT") do |file|
185
+ add_tlm_packet_item(file, "PKT", "TEMP1") do |file2|
186
+ file2.puts '<xtce:UnitSet>'
187
+ file2.puts '<xtce:Unit description="Volts"/>'
188
+ file2.puts '</xtce:UnitSet>'
192
189
  end
193
190
  end
194
191
 
@@ -201,11 +198,11 @@ module Cosmos
201
198
  end
202
199
 
203
200
  it "processes value only" do
204
- tf = telemetry_file("TGT") do |tf|
205
- add_tlm_packet_item(tf, "PKT", "TEMP1") do |tf|
206
- tf.puts '<xtce:UnitSet>'
207
- tf.puts '<xtce:Unit>V</xtce:Unit>'
208
- tf.puts '</xtce:UnitSet>'
201
+ tf = telemetry_file("TGT") do |file|
202
+ add_tlm_packet_item(file, "PKT", "TEMP1") do |file2|
203
+ file2.puts '<xtce:UnitSet>'
204
+ file2.puts '<xtce:Unit>V</xtce:Unit>'
205
+ file2.puts '</xtce:UnitSet>'
209
206
  end
210
207
  end
211
208
 
@@ -218,12 +215,12 @@ module Cosmos
218
215
  end
219
216
 
220
217
  it "processes multiple units" do
221
- tf = telemetry_file("TGT") do |tf|
222
- add_tlm_packet_item(tf, "PKT", "TEMP1") do |tf|
223
- tf.puts '<xtce:UnitSet>'
224
- tf.puts '<xtce:Unit description="Volts">V</xtce:Unit>'
225
- tf.puts '<xtce:Unit description="Mega">M</xtce:Unit>'
226
- tf.puts '</xtce:UnitSet>'
218
+ tf = telemetry_file("TGT") do |file|
219
+ add_tlm_packet_item(file, "PKT", "TEMP1") do |file2|
220
+ file2.puts '<xtce:UnitSet>'
221
+ file2.puts '<xtce:Unit description="Volts">V</xtce:Unit>'
222
+ file2.puts '<xtce:Unit description="Mega">M</xtce:Unit>'
223
+ file2.puts '</xtce:UnitSet>'
227
224
  end
228
225
  end
229
226
 
@@ -249,7 +249,8 @@ module Cosmos
249
249
 
250
250
  it "complains if appending after a variably sized item" do
251
251
  @s.define_item("test1", 0, 0, :BLOCK)
252
- expect { @s.append(@item) }.to raise_error(ArgumentError, "Can't append an item after a variably sized item")
252
+ item = StructureItem.new("test2", 0, 16, :UINT, :BIG_ENDIAN)
253
+ expect { @s.append(item) }.to raise_error(ArgumentError, "Can't append an item after a variably sized item")
253
254
  end
254
255
  end
255
256
 
@@ -149,7 +149,7 @@ module Cosmos
149
149
  end
150
150
 
151
151
  it "returns the packet and item" do
152
- pkt,item = @tlm.packet_and_item("TGT1","PKT1","ITEM1")
152
+ _, item = @tlm.packet_and_item("TGT1","PKT1","ITEM1")
153
153
  expect(item.name).to eql "ITEM1"
154
154
  end
155
155
 
@@ -386,10 +386,8 @@ module Cosmos
386
386
  end
387
387
 
388
388
  it "returns the list of stale packets for a given target" do
389
- p1 = @tlm.packet("TGT1","PKT1")
390
- p2 = @tlm.packet("TGT1","PKT2")
391
- p3 = @tlm.packet("TGT2","PKT1")
392
- expect(@tlm.stale(false, "TGT2")).to include(p3)
389
+ pkt = @tlm.packet("TGT2","PKT1")
390
+ expect(@tlm.stale(false, "TGT2")).to include(pkt)
393
391
  @tlm.packet("TGT2","PKT1").check_limits
394
392
  expect(@tlm.stale(false, "TGT2").size).to eql 0
395
393
  expect(@tlm.stale(false, "TGT1").size).to eql 2
@@ -54,6 +54,41 @@ module Cosmos
54
54
  expect(p.results[:MEAN]).to eql nil
55
55
  expect(p.results[:STDDEV]).to eql nil
56
56
  end
57
+
58
+ it "handles nil and infinity" do
59
+ p = StatisticsProcessor.new('TEST', '5')
60
+ packet = Packet.new("tgt","pkt")
61
+ packet.append_item("TEST", 32, :FLOAT)
62
+ packet.write("TEST", 1)
63
+ p.call(packet, packet.buffer)
64
+ expect(p.results[:MAX]).to eql 1.0
65
+ expect(p.results[:MIN]).to eql 1.0
66
+ expect(p.results[:MEAN]).to be_within(0.001).of(1.0)
67
+ expect(p.results[:STDDEV]).to be_within(0.001).of(0.0)
68
+ packet.write("TEST", Float::NAN)
69
+ p.call(packet, packet.buffer)
70
+ expect(p.results[:MAX]).to eql 1.0
71
+ expect(p.results[:MIN]).to eql 1.0
72
+ expect(p.results[:MEAN]).to be_within(0.001).of(1.0)
73
+ expect(p.results[:STDDEV]).to be_within(0.001).of(0.0)
74
+ packet.write("TEST", 2)
75
+ p.call(packet, packet.buffer)
76
+ expect(p.results[:MAX]).to eql 2.0
77
+ expect(p.results[:MIN]).to eql 1.0
78
+ expect(p.results[:MEAN]).to be_within(0.001).of(1.5)
79
+ expect(p.results[:STDDEV]).to be_within(0.001).of(0.7071)
80
+ packet.write("TEST", Float::INFINITY)
81
+ p.call(packet, packet.buffer)
82
+ expect(p.results[:MAX]).to eql 2.0
83
+ expect(p.results[:MIN]).to eql 1.0
84
+ expect(p.results[:MEAN]).to be_within(0.001).of(1.5)
85
+ expect(p.results[:STDDEV]).to be_within(0.001).of(0.7071)
86
+ p.reset
87
+ expect(p.results[:MAX]).to eql nil
88
+ expect(p.results[:MIN]).to eql nil
89
+ expect(p.results[:MEAN]).to eql nil
90
+ expect(p.results[:STDDEV]).to eql nil
91
+ end
57
92
  end
58
93
  end
59
94
  end