cosmos 4.1.1-java → 4.2.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -2
  3. data/.travis.yml +2 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +1 -0
  6. data/Manifest.txt +130 -0
  7. data/autohotkey/tools/ConfigEditorAHK +19 -0
  8. data/autohotkey/tools/cmd_extractor.ahk +4 -4
  9. data/autohotkey/tools/cmd_sequence.ahk +9 -5
  10. data/autohotkey/tools/config_editor.ahk +197 -0
  11. data/autohotkey/tools/packet_viewer.ahk +12 -6
  12. data/autohotkey/tools/replay.ahk +29 -29
  13. data/autohotkey/tools/script_runner.ahk +10 -2
  14. data/autohotkey/tools/tlm_extractor.ahk +7 -8
  15. data/autohotkey/tools/tlm_grapher.ahk +21 -9
  16. data/bin/dart_import +2 -0
  17. data/cosmos.gemspec +18 -16
  18. data/data/config/cmd_tlm_server.yaml +9 -0
  19. data/data/config/interface_modifiers.yaml +17 -0
  20. data/data/config/item_modifiers.yaml +3 -3
  21. data/data/crc.txt +184 -90
  22. data/data/dart.png +0 -0
  23. data/demo/Gemfile +1 -0
  24. data/demo/Rakefile +4 -0
  25. data/demo/config/dart/Gemfile +54 -0
  26. data/demo/config/data/crc.txt +28 -21
  27. data/demo/config/system/system.txt +3 -0
  28. data/demo/config/system/system2.txt +3 -0
  29. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +3 -3
  30. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -1
  31. data/demo/config/targets/INST/lib/sim_inst.rb +1 -1
  32. data/demo/config/targets/INST/screens/adcs.txt +2 -1
  33. data/demo/config/targets/INST/screens/array.txt +1 -1
  34. data/demo/config/targets/INST/screens/block.txt +1 -1
  35. data/demo/config/targets/INST/screens/commanding.txt +7 -2
  36. data/demo/config/targets/INST/screens/graphs.txt +1 -1
  37. data/demo/config/targets/INST/screens/ground.txt +1 -1
  38. data/demo/config/targets/INST/screens/hs.txt +2 -1
  39. data/demo/config/targets/INST/screens/latest.txt +1 -1
  40. data/demo/config/targets/INST/screens/limits.txt +1 -1
  41. data/demo/config/targets/INST/screens/other.txt +1 -1
  42. data/demo/config/targets/INST/screens/tabs.txt +1 -1
  43. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  44. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +3 -1
  45. data/demo/config/tools/launcher/launcher.txt +3 -2
  46. data/demo/tools/Dart +16 -0
  47. data/demo/tools/Dart.bat +9 -0
  48. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  49. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  50. data/install/Gemfile +1 -0
  51. data/install/Rakefile +4 -0
  52. data/install/config/dart/Gemfile +54 -0
  53. data/install/config/data/crc.txt +6 -3
  54. data/install/config/system/system.txt +3 -0
  55. data/install/config/tools/launcher/launcher.txt +3 -2
  56. data/install/tools/Dart +16 -0
  57. data/install/tools/Dart.bat +9 -0
  58. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  59. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  60. data/lib/cosmos/core_ext/time.rb +8 -8
  61. data/lib/cosmos/dart/.rspec +1 -0
  62. data/lib/cosmos/dart/Gemfile +69 -0
  63. data/lib/cosmos/dart/Rakefile +7 -0
  64. data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
  65. data/lib/cosmos/dart/app/assets/images/.keep +0 -0
  66. data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
  67. data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
  68. data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
  69. data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
  70. data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
  71. data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
  72. data/lib/cosmos/dart/app/helpers/application_helper.rb +2 -0
  73. data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
  74. data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
  75. data/lib/cosmos/dart/app/models/application_record.rb +3 -0
  76. data/lib/cosmos/dart/app/models/item.rb +6 -0
  77. data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
  78. data/lib/cosmos/dart/app/models/packet.rb +4 -0
  79. data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
  80. data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
  81. data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
  82. data/lib/cosmos/dart/app/models/system_config.rb +2 -0
  83. data/lib/cosmos/dart/app/models/target.rb +4 -0
  84. data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
  85. data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
  86. data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
  87. data/lib/cosmos/dart/bin/bundle +3 -0
  88. data/lib/cosmos/dart/bin/rails +4 -0
  89. data/lib/cosmos/dart/bin/rake +4 -0
  90. data/lib/cosmos/dart/bin/setup +34 -0
  91. data/lib/cosmos/dart/bin/update +29 -0
  92. data/lib/cosmos/dart/config.ru +5 -0
  93. data/lib/cosmos/dart/config/application.rb +29 -0
  94. data/lib/cosmos/dart/config/boot.rb +3 -0
  95. data/lib/cosmos/dart/config/cable.yml +9 -0
  96. data/lib/cosmos/dart/config/database.yml +23 -0
  97. data/lib/cosmos/dart/config/environment.rb +5 -0
  98. data/lib/cosmos/dart/config/environments/development.rb +62 -0
  99. data/lib/cosmos/dart/config/environments/production.rb +84 -0
  100. data/lib/cosmos/dart/config/environments/test.rb +42 -0
  101. data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
  102. data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
  103. data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
  104. data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
  105. data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
  106. data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
  107. data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
  108. data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
  109. data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
  110. data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
  111. data/lib/cosmos/dart/config/locales/en.yml +23 -0
  112. data/lib/cosmos/dart/config/puma.rb +47 -0
  113. data/lib/cosmos/dart/config/routes.rb +3 -0
  114. data/lib/cosmos/dart/config/secrets.yml +22 -0
  115. data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
  116. data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
  117. data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
  118. data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
  119. data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
  120. data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
  121. data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
  122. data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
  123. data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
  124. data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
  125. data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
  126. data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
  127. data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
  128. data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
  129. data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
  130. data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
  131. data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
  132. data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
  133. data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
  134. data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
  135. data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
  136. data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
  137. data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
  138. data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
  139. data/lib/cosmos/dart/db/schema.rb +103 -0
  140. data/lib/cosmos/dart/db/seeds.rb +7 -0
  141. data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
  142. data/lib/cosmos/dart/examples/dart_stream_client.rb +93 -0
  143. data/lib/cosmos/dart/lib/dart_common.rb +749 -0
  144. data/lib/cosmos/dart/lib/dart_database_cleaner.rb +172 -0
  145. data/lib/cosmos/dart/lib/dart_decom_query.rb +184 -0
  146. data/lib/cosmos/dart/lib/dart_decommutator.rb +235 -0
  147. data/lib/cosmos/dart/lib/dart_importer.rb +154 -0
  148. data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
  149. data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +139 -0
  150. data/lib/cosmos/dart/lib/dart_reducer_manager.rb +85 -0
  151. data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +263 -0
  152. data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
  153. data/lib/cosmos/dart/processes/dart.rb +145 -0
  154. data/lib/cosmos/dart/processes/dart_decom_server.rb +39 -0
  155. data/lib/cosmos/dart/processes/dart_import.rb +63 -0
  156. data/lib/cosmos/dart/processes/dart_ingester.rb +92 -0
  157. data/lib/cosmos/dart/processes/dart_reducer.rb +27 -0
  158. data/lib/cosmos/dart/processes/dart_stream_server.rb +31 -0
  159. data/lib/cosmos/dart/processes/dart_worker.rb +37 -0
  160. data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
  161. data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
  162. data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +153 -0
  163. data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +336 -0
  164. data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +83 -0
  165. data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
  166. data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +149 -0
  167. data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +289 -0
  168. data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +241 -0
  169. data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
  170. data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
  171. data/lib/cosmos/gui/dialogs/about_dialog.rb +1 -1
  172. data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
  173. data/lib/cosmos/gui/dialogs/legal_dialog.rb +1 -0
  174. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +0 -3
  175. data/lib/cosmos/gui/qt.rb +10 -1
  176. data/lib/cosmos/gui/text/completion.rb +10 -9
  177. data/lib/cosmos/gui/text/completion_text_edit.rb +16 -14
  178. data/lib/cosmos/gui/text/ruby_editor.rb +2 -2
  179. data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
  180. data/lib/cosmos/gui/widgets/dart_meta_frame.rb +119 -0
  181. data/lib/cosmos/gui/widgets/packet_log_frame.rb +42 -12
  182. data/lib/cosmos/interfaces/interface.rb +1 -2
  183. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +26 -8
  184. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +8 -2
  185. data/lib/cosmos/interfaces/protocols/protocol.rb +2 -1
  186. data/lib/cosmos/interfaces/protocols/template_protocol.rb +1 -1
  187. data/lib/cosmos/interfaces/stream_interface.rb +1 -0
  188. data/lib/cosmos/interfaces/tcpip_server_interface.rb +2 -3
  189. data/lib/cosmos/io/json_drb_object.rb +1 -1
  190. data/lib/cosmos/io/json_rpc.rb +2 -1
  191. data/lib/cosmos/io/win32_serial_driver.rb +2 -9
  192. data/lib/cosmos/packet_logs/packet_log_writer.rb +1 -1
  193. data/lib/cosmos/packets/packet.rb +22 -12
  194. data/lib/cosmos/packets/packet_config.rb +2 -1
  195. data/lib/cosmos/packets/packet_item.rb +26 -24
  196. data/lib/cosmos/packets/parsers/macro_parser.rb +5 -2
  197. data/lib/cosmos/packets/parsers/packet_item_parser.rb +35 -17
  198. data/lib/cosmos/packets/parsers/packet_parser.rb +3 -10
  199. data/lib/cosmos/packets/parsers/xtce_converter.rb +21 -35
  200. data/lib/cosmos/packets/parsers/xtce_parser.rb +54 -46
  201. data/lib/cosmos/packets/structure.rb +10 -2
  202. data/lib/cosmos/packets/structure_item.rb +22 -8
  203. data/lib/cosmos/processors/statistics_processor.rb +2 -0
  204. data/lib/cosmos/script/api_shared.rb +13 -12
  205. data/lib/cosmos/script/cmd_tlm_server.rb +4 -0
  206. data/lib/cosmos/script/commands.rb +3 -15
  207. data/lib/cosmos/script/script.rb +69 -23
  208. data/lib/cosmos/streams/tcpip_client_stream.rb +2 -2
  209. data/lib/cosmos/system/system.rb +42 -25
  210. data/lib/cosmos/system/target.rb +6 -2
  211. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +177 -36
  212. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +3 -2
  213. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +34 -8
  214. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +80 -25
  215. data/lib/cosmos/tools/cmd_tlm_server/api.rb +19 -4
  216. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +15 -14
  217. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +15 -9
  218. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +1 -9
  219. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -6
  220. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -3
  221. data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +84 -7
  222. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +0 -1
  223. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +1 -5
  224. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +3 -2
  225. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +159 -27
  226. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +1 -1
  227. data/lib/cosmos/tools/config_editor/config_editor.rb +17 -52
  228. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +0 -5
  229. data/lib/cosmos/tools/data_viewer/data_viewer.rb +111 -0
  230. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -18
  231. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +12 -3
  232. data/lib/cosmos/tools/script_runner/script_runner.rb +27 -14
  233. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +104 -37
  234. data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
  235. data/lib/cosmos/tools/table_manager/table_item_parser.rb +4 -2
  236. data/lib/cosmos/tools/table_manager/table_manager.rb +0 -5
  237. data/lib/cosmos/tools/table_manager/table_manager_core.rb +0 -1
  238. data/lib/cosmos/tools/test_runner/test.rb +1 -3
  239. data/lib/cosmos/tools/test_runner/test_runner.rb +26 -15
  240. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +290 -137
  241. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +122 -25
  242. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +67 -0
  243. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +28 -0
  244. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +36 -0
  245. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +42 -3
  246. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +88 -14
  247. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +2 -5
  248. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +2 -6
  249. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +74 -18
  250. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +3 -7
  251. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +159 -0
  252. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +49 -2
  253. data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -0
  254. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +0 -2
  255. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  256. data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
  257. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +5 -5
  258. data/lib/cosmos/top_level.rb +1 -0
  259. data/lib/cosmos/utilities/crc.rb +3 -0
  260. data/lib/cosmos/utilities/csv.rb +1 -0
  261. data/lib/cosmos/utilities/message_log.rb +2 -1
  262. data/lib/cosmos/utilities/simulated_target.rb +8 -8
  263. data/lib/cosmos/version.rb +5 -5
  264. data/lib/cosmos/win32/win32.rb +4 -10
  265. data/run_gui_tests.bat +2 -1
  266. data/spec/config/config_parser_spec.rb +4 -4
  267. data/spec/core_ext/array_spec.rb +1 -1
  268. data/spec/core_ext/exception_spec.rb +12 -12
  269. data/spec/core_ext/file_spec.rb +6 -6
  270. data/spec/core_ext/hash_spec.rb +1 -1
  271. data/spec/core_ext/socket_spec.rb +2 -2
  272. data/spec/core_ext/string_spec.rb +13 -13
  273. data/spec/core_ext/time_spec.rb +0 -2
  274. data/spec/gui/utilities/script_module_gui_spec.rb +3 -3
  275. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +6 -6
  276. data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
  277. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +6 -2
  278. data/spec/interfaces/interface_spec.rb +0 -1
  279. data/spec/interfaces/linc_interface_spec.rb +0 -5
  280. data/spec/interfaces/protocols/crc_protocol_spec.rb +201 -85
  281. data/spec/interfaces/protocols/fixed_protocol_spec.rb +33 -9
  282. data/spec/interfaces/protocols/length_protocol_spec.rb +1 -1
  283. data/spec/interfaces/protocols/override_protocol_spec.rb +6 -2
  284. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +1 -5
  285. data/spec/interfaces/protocols/template_protocol_spec.rb +0 -1
  286. data/spec/interfaces/simulated_target_interface_spec.rb +5 -5
  287. data/spec/interfaces/udp_interface_spec.rb +2 -4
  288. data/spec/io/buffered_file_spec.rb +8 -12
  289. data/spec/io/json_drb_spec.rb +9 -9
  290. data/spec/io/json_rpc_spec.rb +4 -4
  291. data/spec/io/raw_logger_spec.rb +4 -3
  292. data/spec/packet_logs/packet_log_reader_spec.rb +3 -6
  293. data/spec/packet_logs/packet_log_writer_spec.rb +4 -4
  294. data/spec/packets/binary_accessor_spec.rb +5 -8
  295. data/spec/packets/commands_spec.rb +2 -2
  296. data/spec/packets/limits_spec.rb +2 -2
  297. data/spec/packets/packet_config_spec.rb +12 -0
  298. data/spec/packets/packet_item_limits_spec.rb +1 -1
  299. data/spec/packets/packet_item_spec.rb +9 -9
  300. data/spec/packets/packet_spec.rb +15 -5
  301. data/spec/packets/parsers/packet_item_parser_spec.rb +27 -0
  302. data/spec/packets/parsers/xtce_parser_spec.rb +27 -30
  303. data/spec/packets/structure_spec.rb +2 -1
  304. data/spec/packets/telemetry_spec.rb +3 -5
  305. data/spec/processors/statistics_processor_spec.rb +35 -0
  306. data/spec/script/cmd_tlm_server_spec.rb +4 -21
  307. data/spec/script/commands_disconnect_spec.rb +46 -58
  308. data/spec/script/commands_spec.rb +40 -61
  309. data/spec/script/limits_spec.rb +1 -21
  310. data/spec/script/script_spec.rb +32 -41
  311. data/spec/script/scripting_spec.rb +166 -185
  312. data/spec/script/telemetry_spec.rb +10 -5
  313. data/spec/script/tools_spec.rb +2 -24
  314. data/spec/spec_helper.rb +11 -5
  315. data/spec/system/system_spec.rb +17 -12
  316. data/spec/tools/cmd_tlm_server/api_spec.rb +21 -10
  317. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -16
  318. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +0 -1
  319. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +16 -27
  320. data/spec/tools/cmd_tlm_server/commanding_spec.rb +2 -6
  321. data/spec/tools/cmd_tlm_server/connections_spec.rb +0 -4
  322. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +13 -13
  323. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +5 -9
  324. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +11 -3
  325. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +0 -4
  326. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +5 -5
  327. data/spec/tools/cmd_tlm_server/routers_spec.rb +5 -9
  328. data/spec/tools/table_manager/table_config_spec.rb +0 -1
  329. data/spec/tools/table_manager/tablemanager_core_spec.rb +23 -23
  330. data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +6 -4
  331. data/spec/top_level/top_level_spec.rb +9 -9
  332. data/spec/utilities/csv_spec.rb +2 -12
  333. data/spec/utilities/logger_spec.rb +6 -6
  334. data/spec/utilities/message_log_spec.rb +3 -11
  335. data/tasks/gemfile_stats.rake +2 -2
  336. metadata +167 -60
@@ -0,0 +1,153 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'rails_helper'
12
+ require 'dart_decom_query'
13
+ require 'packet_log_entry'
14
+ require 'dart_packet_log_writer'
15
+ require 'dart_decommutator'
16
+
17
+ describe DartDecomQuery do
18
+ before(:each) do
19
+ DatabaseCleaner.strategy = :truncation
20
+ DatabaseCleaner.clean
21
+ @query = DartDecomQuery.new
22
+ # Put all the known targets and packets into the DB
23
+ @query.sync_targets_and_packets
24
+ end
25
+
26
+ def load_db(num_pkts)
27
+ writer = DartPacketLogWriter.new(
28
+ :TLM, # Log telemetry
29
+ 'test_decom_', # File name suffix
30
+ true, # Enable logging
31
+ nil, # Don't cycle on time
32
+ 2_000_000_000, # Cycle the log at 2GB
33
+ Cosmos::System.paths['DART_DATA']) # Log into the DART_DATA dir
34
+
35
+ hs_packet = Cosmos::System.telemetry.packet("INST", "HEALTH_STATUS")
36
+ @hs_packets = []
37
+ # Write packets. The first packet is always SYSTEM META.
38
+ num_pkts.times do |x|
39
+ hs_packet.received_time = Time.now
40
+ hs_packet.write("COLLECT_TYPE", x, :RAW)
41
+ @hs_packets << hs_packet.clone
42
+ writer.write(hs_packet)
43
+ sleep 0.01
44
+ end
45
+ writer.shutdown
46
+ sleep 0.1
47
+
48
+ # Decommutate the DB
49
+ thread = Thread.new do
50
+ decom = DartDecommutator.new
51
+ decom.run
52
+ end
53
+ while true
54
+ break if 0 == PacketLogEntry.where("decom_state = #{PacketLogEntry::NOT_STARTED}").count
55
+ sleep 0.1
56
+ end
57
+ thread.kill
58
+ end
59
+
60
+ describe "query" do
61
+ it "raises if start time specified incorrectly" do
62
+ query = {"start_time_sec" => "SEC", "start_time_usec" => "USEC"}
63
+ expect { @query.query(query) }.to raise_error(/Query Error: Invalid start time/)
64
+ end
65
+
66
+ it "raises if end time specified incorrectly" do
67
+ query = {"end_time_sec" => "SEC", "end_time_usec" => "USEC"}
68
+ expect { @query.query(query) }.to raise_error(/Query Error: Invalid end time/)
69
+ end
70
+
71
+ it "raises if item specified incorrectly" do
72
+ expect { @query.query({"item" => []}) }.to raise_error(/Query Error: Item/)
73
+ expect { @query.query({"item" => ["TGT"]}) }.to raise_error(/Query Error: Item/)
74
+ expect { @query.query({"item" => ["TGT", "PKT"]}) }.to raise_error(/Query Error: Item/)
75
+ RSpec::Expectations.configuration.on_potential_false_positives = :nothing
76
+ expect { @query.query({"item" => ["TGT", "PKT", "ITEM"]}) }.not_to raise_error(/Query Error: Item/)
77
+ end
78
+
79
+ it "raises if item not found" do
80
+ query = {"item" => ["TGT", "PKT", "ITEM"], "reduction" => "NONE", "value_type" => "RAW"}
81
+ expect { @query.query(query) }.to raise_error(/Query Error: Target: TGT not found/)
82
+ query = {"item" => ["INST", "PKT", "ITEM"], "reduction" => "NONE", "value_type" => "RAW"}
83
+ expect { @query.query(query) }.to raise_error(/Query Error: Packet: PKT not found/)
84
+ query = {"item" => ["INST", "HEALTH_STATUS", "BLAH"], "reduction" => "NONE", "value_type" => "RAW"}
85
+ expect { @query.query(query) }.to raise_error(/Query Error: Item: BLAH not found/)
86
+ end
87
+
88
+ it "raises if reduction specified incorrectly" do
89
+ query = {"item" => ["INST", "HEALTH_STATUS", "TEMP1"], "reduction" => "BLAH"}
90
+ expect { @query.query(query) }.to raise_error(/Query Error: Unknown reduction: BLAH/)
91
+ end
92
+
93
+ it "raises if value_type specified incorrectly" do
94
+ query = {"item" => ["INST", "HEALTH_STATUS", "TEMP1"], "reduction" => "NONE", "value_type" => "BLAH"}
95
+ expect { @query.query(query) }.to raise_error(/Query Error: Unknown value_type: BLAH/)
96
+ end
97
+
98
+ it "raises if RAW value_type with anything but NONE reduction" do
99
+ %w(MINUTE HOUR DAY).each do |reduction|
100
+ query = {"item" => ["INST", "HEALTH_STATUS", "TEMP1"], "reduction" => reduction, "value_type" => "RAW"}
101
+ expect { @query.query(query) }.to raise_error(/Query Error: RAW value_type is only valid with NONE/)
102
+ end
103
+ end
104
+
105
+ it "raises if MIN, MAX, AVG value_type with NONE reduction" do
106
+ %w(RAW_MIN RAW_MAX RAW_AVG CONVERTED_MIN CONVERTED_MAX CONVERTED_AVG).each do |type|
107
+ query = {"item" => ["INST", "HEALTH_STATUS", "TEMP1"], "reduction" => "NONE", "value_type" => type}
108
+ expect { @query.query(query) }.to raise_error(/Query Error: #{type} value_type is not valid with NONE/)
109
+ end
110
+ end
111
+
112
+ it "raises if CONVERTED value_type with anything but NONE reduction" do
113
+ %w(MINUTE HOUR DAY).each do |reduction|
114
+ query = {"item" => ["INST", "HEALTH_STATUS", "TEMP1"], "reduction" => reduction, "value_type" => "CONVERTED"}
115
+ expect { @query.query(query) }.to raise_error(/Query Error: CONVERTED value_type is only valid with NONE/)
116
+ end
117
+ end
118
+
119
+ it "raises if cmd_tlm specified incorrectly" do
120
+ query = {"item" => ["INST", "HEALTH_STATUS", "TEMP1"], "reduction" => "NONE", "value_type" => "RAW"}
121
+ query["cmd_tlm"] = "BLAH"
122
+ expect { @query.query(query) }.to raise_error(/Query Error: Unknown cmd_tlm: BLAH/)
123
+ end
124
+
125
+ it "returns the raw values" do
126
+ load_db(3)
127
+ query = {"item" => ["INST", "HEALTH_STATUS", "COLLECT_TYPE"], "reduction" => "NONE", "value_type" => "RAW"}
128
+ query.merge({"cmd_tlm" => "TLM"})
129
+ data = @query.query(query)
130
+ i = 0
131
+ data.each do |val, time_sec, time_usec, samples, meta_id|
132
+ expect(val).to eql @hs_packets[i].read("COLLECT_TYPE", :RAW)
133
+ expect(time_sec).to eq @hs_packets[i].received_time.to_i
134
+ expect(time_usec).to eq ((@hs_packets[i].received_time.to_f - @hs_packets[i].received_time.to_i) * 1000000).round
135
+ i += 1
136
+ end
137
+ end
138
+
139
+ it "returns the converted values" do
140
+ load_db(3)
141
+ query = {"item" => ["INST", "HEALTH_STATUS", "COLLECT_TYPE"], "reduction" => "NONE", "value_type" => "CONVERTED"}
142
+ query.merge({"cmd_tlm" => "TLM"})
143
+ data = @query.query(query)
144
+ i = 0
145
+ data.each do |val, time_sec, time_usec, samples, meta_id|
146
+ expect(val).to eql @hs_packets[i].read("COLLECT_TYPE").to_s
147
+ expect(time_sec).to eq @hs_packets[i].received_time.to_i
148
+ expect(time_usec).to eq ((@hs_packets[i].received_time.to_f - @hs_packets[i].received_time.to_i) * 1000000).round
149
+ i += 1
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,336 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'rails_helper'
12
+ require 'dart_decommutator'
13
+ require 'packet_log_entry'
14
+ require 'dart_packet_log_writer'
15
+
16
+ describe DartDecommutator do
17
+ before(:each) do
18
+ DatabaseCleaner.strategy = :truncation
19
+ DatabaseCleaner.clean
20
+ end
21
+
22
+ describe "run" do
23
+ let(:common) { Object.new.extend(DartCommon) }
24
+
25
+ def check_val(val, expected)
26
+ case val
27
+ when Float
28
+ expect(val).to be_within(0.001).of expected
29
+ when String
30
+ expect(val).to eq expected.to_s
31
+ else
32
+ expect(val).to eq expected
33
+ end
34
+ end
35
+
36
+ it "decommutates packet log entries" do
37
+ meta_packet = Cosmos::System.telemetry.packet("SYSTEM","META")
38
+ meta_packet.received_count = 0
39
+
40
+ writer = DartPacketLogWriter.new(
41
+ :TLM, # Log telemetry
42
+ 'test_decom_', # File name suffix
43
+ true, # Enable logging
44
+ nil, # Don't cycle on time
45
+ 2_000_000_000, # Cycle the log at 2GB
46
+ Cosmos::System.paths['DART_DATA']) # Log into the DART_DATA dir
47
+
48
+ hs_packet = Cosmos::System.telemetry.packet("INST", "HEALTH_STATUS")
49
+ hs_packets = []
50
+ # Write three packets. The first packet is always SYSTEM META.
51
+ 3.times do
52
+ hs_packet.received_time = Time.now
53
+ hs_packets << hs_packet.clone
54
+ writer.write(hs_packet)
55
+ sleep 0.01
56
+ end
57
+ writer.shutdown
58
+ sleep 0.1
59
+
60
+ PacketLogEntry.all.each do |ple|
61
+ expect(ple.decom_state).to eq PacketLogEntry::NOT_STARTED
62
+ end
63
+
64
+ thread = Thread.new do
65
+ decom = DartDecommutator.new
66
+ decom.run
67
+ end
68
+ sleep 5 # Allow the decommutator to work
69
+ thread.kill
70
+
71
+ PacketLogEntry.all.each do |ple|
72
+ expect(ple.decom_state).to eq PacketLogEntry::COMPLETE
73
+ end
74
+
75
+ decom_tables = ActiveRecord::Base.connection.tables.select do |table_name|
76
+ table_name =~ /^t\d+_\d+/ # t1_0, t1_0_m, t1_0_h, t1_0_d, t2_0, etc
77
+ end
78
+ # There should be 8 tables, 4 each for SYSTEM META and INST HEALTH_STATUS
79
+ # The base decommutation table and three reduction tables
80
+ expect(decom_tables.length).to eq 8
81
+
82
+ system_target = Target.where("name = 'SYSTEM'").first
83
+ meta = Packet.where("target_id = ? AND name = 'META'", system_target.id).first
84
+ packet_config = PacketConfig.where("packet_id = ?", meta.id).first
85
+ model = writer.get_decom_table_model(packet_config.id, 0)
86
+
87
+ meta_packet = Cosmos::System.telemetry.packet("SYSTEM","META")
88
+ meta_item_names = meta_packet.sorted_items.collect {|item| item.name unless item.name == 'RECEIVED_COUNT'}.compact
89
+ expect(model.count).to eq 1 # One SYSTEM META packet
90
+ meta_row = model.first
91
+ expect(meta_row.reduced_state).to eq DartDecommutator::READY_TO_REDUCE
92
+ # Grab all the iXX column names which hold the actual data values
93
+ model.column_names.select {|name| name =~ /^i\d+/}.each_with_index do |item, index|
94
+ db_value = meta_row.send(item.intern)
95
+ check_val(db_value, meta_packet.read(meta_item_names[index]))
96
+ end
97
+
98
+ system_target = Target.where("name = 'INST'").first
99
+ hs = Packet.where("target_id = ? AND name = 'HEALTH_STATUS'", system_target.id).first
100
+ packet_config = PacketConfig.where("packet_id = ?", hs.id).first
101
+ model = writer.get_decom_table_model(packet_config.id, 0)
102
+ expect(model.count).to eq 3 # We wrote 3 INST HEALTH_STATUS packets
103
+ decom_column_names = model.column_names.select {|name| name =~ /^i\d+/}
104
+
105
+ hs_packets.each_with_index do |packet, packet_index|
106
+ row = model.find(packet_index + 1)
107
+ expect(row.reduced_state).to eq DartDecommutator::READY_TO_REDUCE
108
+ db_index = 0
109
+ packet.sorted_items.each do |item|
110
+ next if item.name == 'RECEIVED_COUNT'
111
+ next if item.read_conversion.class == Cosmos::ProcessorConversion
112
+ # Database skips DERIVED items that aren't well defined
113
+ if item.data_type == :DERIVED
114
+ next unless item.read_conversion && item.read_conversion.converted_type && item.read_conversion.converted_bit_size
115
+ end
116
+ name = decom_column_names[db_index].intern
117
+ db_value = row.send(name)
118
+ # puts "#{db_index} item:#{item.name} db:#{db_value} raw pkt:#{packet.read_item(item, :RAW)}"
119
+ check_val(db_value, packet.read_item(item, :RAW))
120
+ if writer.separate_raw_con?(item)
121
+ db_index += 1
122
+ name = decom_column_names[db_index].intern
123
+ db_value = row.send(name)
124
+ # puts "#{db_index} citem:#{item.name} db:#{db_value} type:#{db_value.class} conv pkt:#{packet.read_item(item)}"
125
+ check_val(db_value, packet.read_item(item))
126
+ end
127
+ db_index += 1
128
+ end
129
+ end
130
+ end
131
+
132
+ it "marks and skips entries with no SYSTEM META PacketLogEntry" do
133
+ common.sync_targets_and_packets
134
+ target_id, packet_id = common.lookup_target_and_packet_id("INST", "HEALTH_STATUS", true)
135
+ packet_log = PacketLog.create(:filename => "filename", :is_tlm => true)
136
+ ple = PacketLogEntry.new
137
+ ple.target_id = target_id
138
+ ple.packet_id = packet_id
139
+ ple.time = Time.now
140
+ ple.packet_log_id = packet_log.id
141
+ ple.data_offset = 0
142
+ ple.meta_id = 0
143
+ ple.is_tlm = true
144
+ ple.ready = true
145
+ ple.save!
146
+
147
+ thread = Thread.new do
148
+ decom = DartDecommutator.new
149
+ decom.run
150
+ end
151
+ sleep 1 # Allow the decommutator to work
152
+ thread.kill
153
+
154
+ PacketLogEntry.all.each do |ple|
155
+ expect(ple.decom_state).to eq PacketLogEntry::NO_META_PLE
156
+ end
157
+ decom_tables = ActiveRecord::Base.connection.tables.select do |table_name|
158
+ table_name =~ /^t\d/
159
+ end
160
+ expect(decom_tables.length).to eq 0
161
+ end
162
+
163
+ it "marks and skips entries if the SYSTEM META packet can't be read" do
164
+ common.sync_targets_and_packets
165
+ target_id, packet_id = common.lookup_target_and_packet_id("INST", "HEALTH_STATUS", true)
166
+ packet_log = PacketLog.create(:filename => "filename", :is_tlm => true)
167
+ ple = PacketLogEntry.new
168
+ ple.target_id = target_id
169
+ ple.packet_id = packet_id
170
+ ple.time = Time.now
171
+ ple.packet_log_id = packet_log.id
172
+ ple.data_offset = 0
173
+ ple.meta_id = 0
174
+ ple.is_tlm = true
175
+ ple.ready = true
176
+ ple.save!
177
+ # Set the meta_id to itself to act as the SYSTEM META PLE
178
+ ple.meta_id = ple.id
179
+ ple.save!
180
+
181
+ thread = Thread.new do
182
+ decom = DartDecommutator.new
183
+ decom.run
184
+ end
185
+ sleep 1 # Allow the decommutator to work
186
+ thread.kill
187
+
188
+ PacketLogEntry.all.each do |ple|
189
+ expect(ple.decom_state).to eq PacketLogEntry::NO_META_PACKET
190
+ end
191
+ decom_tables = ActiveRecord::Base.connection.tables.select do |table_name|
192
+ table_name =~ /^t\d/
193
+ end
194
+ expect(decom_tables.length).to eq 0
195
+ end
196
+
197
+ def setup_ples
198
+ meta = Cosmos::System.commands.packet("SYSTEM", "META")
199
+ hs_packet = Cosmos::System.telemetry.packet("INST", "HEALTH_STATUS")
200
+ # 128 byte file header, SYSTEM META has 14 byte header + length of SYSTEM & META
201
+ # INST HEALTH_STATUS has 14 byte header + length of INST & HEALTH_STATUS
202
+ length = 128 + 24 + meta.length + 31 + hs_packet.length
203
+
204
+ writer = DartPacketLogWriter.new(
205
+ :TLM, # Log telemetry
206
+ 'test_decom_', # File name suffix
207
+ true, # Enable logging
208
+ nil, # Don't cycle on time
209
+ length, # Cycle the log after a single INST HEALTH_STATUS packet
210
+ Cosmos::System.paths['DART_DATA']) # Log into the DART_DATA dir
211
+
212
+ # Write packet. The first packet is always SYSTEM META.
213
+ hs_packet.received_time = Time.now
214
+ writer.write(hs_packet)
215
+ sleep 0.1
216
+ writer.shutdown
217
+
218
+ # The first two entries (SYSTEM META and INST HEALTH_STATUS)
219
+ # should be flushed and ready for decommutation
220
+ (1..2).each do |id|
221
+ ple = PacketLogEntry.find(id)
222
+ expect(ple.ready).to eq true
223
+ expect(ple.decom_state).to eq PacketLogEntry::NOT_STARTED
224
+ end
225
+ end
226
+
227
+ it "marks and skips entries with no SystemConfig" do
228
+ setup_ples()
229
+ allow(SystemConfig).to receive(:create).and_return(nil)
230
+
231
+ thread = Thread.new do
232
+ decom = DartDecommutator.new
233
+ decom.run
234
+ end
235
+ sleep 1 # Allow the decommutator to work
236
+ thread.kill
237
+
238
+ (1..2).each do |id|
239
+ expect(PacketLogEntry.find(id).decom_state).to eq PacketLogEntry::NO_SYSTEM_CONFIG
240
+ end
241
+ decom_tables = ActiveRecord::Base.connection.tables.select do |table_name|
242
+ table_name =~ /^t\d/
243
+ end
244
+ expect(decom_tables.length).to eq 0
245
+ end
246
+
247
+ it "marks and skips entries with no actual system configuration" do
248
+ setup_ples()
249
+ allow_any_instance_of(DartCommon).to receive(:switch_and_get_system_config).and_raise("ERROR")
250
+
251
+ thread = Thread.new do
252
+ decom = DartDecommutator.new
253
+ decom.run
254
+ end
255
+ sleep 1 # Allow the decommutator to work
256
+ thread.kill
257
+
258
+ (1..2).each do |id|
259
+ expect(PacketLogEntry.find(id).decom_state).to eq PacketLogEntry::NO_CONFIG
260
+ end
261
+ decom_tables = ActiveRecord::Base.connection.tables.select do |table_name|
262
+ table_name =~ /^t\d/
263
+ end
264
+ expect(decom_tables.length).to eq 0
265
+ end
266
+
267
+ it "marks and skips entries with no packet" do
268
+ setup_ples()
269
+ packet_log = PacketLog.create(:filename => "filename", :is_tlm => true)
270
+ # Break the ability to read the HEALTH_STATUS packet
271
+ ple = PacketLogEntry.find(2)
272
+ ple.packet_log_id = packet_log.id
273
+ ple.save!
274
+
275
+ thread = Thread.new do
276
+ decom = DartDecommutator.new
277
+ decom.run
278
+ end
279
+ sleep 1 # Allow the decommutator to work
280
+ thread.kill
281
+
282
+ expect(PacketLogEntry.find(2).decom_state).to eq PacketLogEntry::NO_PACKET
283
+ decom_tables = ActiveRecord::Base.connection.tables.select do |table_name|
284
+ table_name =~ /^t\d/
285
+ end
286
+ # SYSTEM META was setup correctly so it should have 4 tables
287
+ expect(decom_tables.length).to eq 4
288
+ end
289
+
290
+ it "marks and skips entries with no PacketConfig" do
291
+ setup_ples()
292
+ allow(PacketConfig).to receive(:create).and_raise("PacketConfig ERROR!")
293
+
294
+ thread = Thread.new do
295
+ decom = DartDecommutator.new
296
+ decom.run
297
+ end
298
+ sleep 1 # Allow the decommutator to work
299
+ thread.kill
300
+
301
+ (1..2).each do |id|
302
+ expect(PacketLogEntry.find(id).decom_state).to eq PacketLogEntry::NO_PACKET_CONFIG
303
+ end
304
+ decom_tables = ActiveRecord::Base.connection.tables.select do |table_name|
305
+ table_name =~ /^t\d/
306
+ end
307
+ expect(decom_tables.length).to eq 0
308
+ end
309
+
310
+ it "waits for the PacketConfig to be ready" do
311
+ setup_ples()
312
+
313
+ # Remove the const to avoid a warning when we redefine it
314
+ DartDecommutator.send(:remove_const, "PACKET_CONFIG_READY_TIMEOUT")
315
+ DartDecommutator.const_set("PACKET_CONFIG_READY_TIMEOUT", 2)
316
+ # Don't allow the PacketConfig to be set ready
317
+ allow_any_instance_of(DartCommon).to receive(:setup_packet_config).and_return
318
+
319
+ thread = Thread.new do
320
+ decom = DartDecommutator.new
321
+ begin
322
+ decom.run
323
+ rescue SystemExit => e
324
+ expect(e.status).to eq 1
325
+ expect(e.success?).to eq false
326
+ end
327
+ end
328
+ thread.join
329
+
330
+ decom_tables = ActiveRecord::Base.connection.tables.select do |table_name|
331
+ table_name =~ /^t\d/
332
+ end
333
+ expect(decom_tables.length).to eq 0
334
+ end
335
+ end
336
+ end