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.
- checksums.yaml +4 -4
- data/.gitignore +0 -2
- data/.travis.yml +2 -0
- data/.yardopts +1 -0
- data/Gemfile +1 -0
- data/Manifest.txt +130 -0
- data/autohotkey/tools/ConfigEditorAHK +19 -0
- data/autohotkey/tools/cmd_extractor.ahk +4 -4
- data/autohotkey/tools/cmd_sequence.ahk +9 -5
- data/autohotkey/tools/config_editor.ahk +197 -0
- data/autohotkey/tools/packet_viewer.ahk +12 -6
- data/autohotkey/tools/replay.ahk +29 -29
- data/autohotkey/tools/script_runner.ahk +10 -2
- data/autohotkey/tools/tlm_extractor.ahk +7 -8
- data/autohotkey/tools/tlm_grapher.ahk +21 -9
- data/bin/dart_import +2 -0
- data/cosmos.gemspec +18 -16
- data/data/config/cmd_tlm_server.yaml +9 -0
- data/data/config/interface_modifiers.yaml +17 -0
- data/data/config/item_modifiers.yaml +3 -3
- data/data/crc.txt +184 -90
- data/data/dart.png +0 -0
- data/demo/Gemfile +1 -0
- data/demo/Rakefile +4 -0
- data/demo/config/dart/Gemfile +54 -0
- data/demo/config/data/crc.txt +28 -21
- data/demo/config/system/system.txt +3 -0
- data/demo/config/system/system2.txt +3 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +3 -3
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -1
- data/demo/config/targets/INST/lib/sim_inst.rb +1 -1
- data/demo/config/targets/INST/screens/adcs.txt +2 -1
- data/demo/config/targets/INST/screens/array.txt +1 -1
- data/demo/config/targets/INST/screens/block.txt +1 -1
- data/demo/config/targets/INST/screens/commanding.txt +7 -2
- data/demo/config/targets/INST/screens/graphs.txt +1 -1
- data/demo/config/targets/INST/screens/ground.txt +1 -1
- data/demo/config/targets/INST/screens/hs.txt +2 -1
- data/demo/config/targets/INST/screens/latest.txt +1 -1
- data/demo/config/targets/INST/screens/limits.txt +1 -1
- data/demo/config/targets/INST/screens/other.txt +1 -1
- data/demo/config/targets/INST/screens/tabs.txt +1 -1
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +3 -1
- data/demo/config/tools/launcher/launcher.txt +3 -2
- data/demo/tools/Dart +16 -0
- data/demo/tools/Dart.bat +9 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
- data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
- data/install/Gemfile +1 -0
- data/install/Rakefile +4 -0
- data/install/config/dart/Gemfile +54 -0
- data/install/config/data/crc.txt +6 -3
- data/install/config/system/system.txt +3 -0
- data/install/config/tools/launcher/launcher.txt +3 -2
- data/install/tools/Dart +16 -0
- data/install/tools/Dart.bat +9 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
- data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
- data/lib/cosmos/core_ext/time.rb +8 -8
- data/lib/cosmos/dart/.rspec +1 -0
- data/lib/cosmos/dart/Gemfile +69 -0
- data/lib/cosmos/dart/Rakefile +7 -0
- data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
- data/lib/cosmos/dart/app/assets/images/.keep +0 -0
- data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
- data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
- data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
- data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
- data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
- data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
- data/lib/cosmos/dart/app/helpers/application_helper.rb +2 -0
- data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
- data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
- data/lib/cosmos/dart/app/models/application_record.rb +3 -0
- data/lib/cosmos/dart/app/models/item.rb +6 -0
- data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
- data/lib/cosmos/dart/app/models/packet.rb +4 -0
- data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
- data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
- data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
- data/lib/cosmos/dart/app/models/system_config.rb +2 -0
- data/lib/cosmos/dart/app/models/target.rb +4 -0
- data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
- data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
- data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
- data/lib/cosmos/dart/bin/bundle +3 -0
- data/lib/cosmos/dart/bin/rails +4 -0
- data/lib/cosmos/dart/bin/rake +4 -0
- data/lib/cosmos/dart/bin/setup +34 -0
- data/lib/cosmos/dart/bin/update +29 -0
- data/lib/cosmos/dart/config.ru +5 -0
- data/lib/cosmos/dart/config/application.rb +29 -0
- data/lib/cosmos/dart/config/boot.rb +3 -0
- data/lib/cosmos/dart/config/cable.yml +9 -0
- data/lib/cosmos/dart/config/database.yml +23 -0
- data/lib/cosmos/dart/config/environment.rb +5 -0
- data/lib/cosmos/dart/config/environments/development.rb +62 -0
- data/lib/cosmos/dart/config/environments/production.rb +84 -0
- data/lib/cosmos/dart/config/environments/test.rb +42 -0
- data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
- data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
- data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
- data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
- data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
- data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
- data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
- data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
- data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
- data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
- data/lib/cosmos/dart/config/locales/en.yml +23 -0
- data/lib/cosmos/dart/config/puma.rb +47 -0
- data/lib/cosmos/dart/config/routes.rb +3 -0
- data/lib/cosmos/dart/config/secrets.yml +22 -0
- data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
- data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
- data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
- data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
- data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
- data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
- data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
- data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
- data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
- data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
- data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
- data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
- data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
- data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
- data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
- data/lib/cosmos/dart/db/schema.rb +103 -0
- data/lib/cosmos/dart/db/seeds.rb +7 -0
- data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
- data/lib/cosmos/dart/examples/dart_stream_client.rb +93 -0
- data/lib/cosmos/dart/lib/dart_common.rb +749 -0
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +172 -0
- data/lib/cosmos/dart/lib/dart_decom_query.rb +184 -0
- data/lib/cosmos/dart/lib/dart_decommutator.rb +235 -0
- data/lib/cosmos/dart/lib/dart_importer.rb +154 -0
- data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +139 -0
- data/lib/cosmos/dart/lib/dart_reducer_manager.rb +85 -0
- data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +263 -0
- data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
- data/lib/cosmos/dart/processes/dart.rb +145 -0
- data/lib/cosmos/dart/processes/dart_decom_server.rb +39 -0
- data/lib/cosmos/dart/processes/dart_import.rb +63 -0
- data/lib/cosmos/dart/processes/dart_ingester.rb +92 -0
- data/lib/cosmos/dart/processes/dart_reducer.rb +27 -0
- data/lib/cosmos/dart/processes/dart_stream_server.rb +31 -0
- data/lib/cosmos/dart/processes/dart_worker.rb +37 -0
- data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
- data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
- data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +153 -0
- data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +336 -0
- data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +83 -0
- data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
- data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +149 -0
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +289 -0
- data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +241 -0
- data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
- data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
- data/lib/cosmos/gui/dialogs/about_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +1 -0
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +0 -3
- data/lib/cosmos/gui/qt.rb +10 -1
- data/lib/cosmos/gui/text/completion.rb +10 -9
- data/lib/cosmos/gui/text/completion_text_edit.rb +16 -14
- data/lib/cosmos/gui/text/ruby_editor.rb +2 -2
- data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
- data/lib/cosmos/gui/widgets/dart_meta_frame.rb +119 -0
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +42 -12
- data/lib/cosmos/interfaces/interface.rb +1 -2
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +26 -8
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +8 -2
- data/lib/cosmos/interfaces/protocols/protocol.rb +2 -1
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +1 -1
- data/lib/cosmos/interfaces/stream_interface.rb +1 -0
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +2 -3
- data/lib/cosmos/io/json_drb_object.rb +1 -1
- data/lib/cosmos/io/json_rpc.rb +2 -1
- data/lib/cosmos/io/win32_serial_driver.rb +2 -9
- data/lib/cosmos/packet_logs/packet_log_writer.rb +1 -1
- data/lib/cosmos/packets/packet.rb +22 -12
- data/lib/cosmos/packets/packet_config.rb +2 -1
- data/lib/cosmos/packets/packet_item.rb +26 -24
- data/lib/cosmos/packets/parsers/macro_parser.rb +5 -2
- data/lib/cosmos/packets/parsers/packet_item_parser.rb +35 -17
- data/lib/cosmos/packets/parsers/packet_parser.rb +3 -10
- data/lib/cosmos/packets/parsers/xtce_converter.rb +21 -35
- data/lib/cosmos/packets/parsers/xtce_parser.rb +54 -46
- data/lib/cosmos/packets/structure.rb +10 -2
- data/lib/cosmos/packets/structure_item.rb +22 -8
- data/lib/cosmos/processors/statistics_processor.rb +2 -0
- data/lib/cosmos/script/api_shared.rb +13 -12
- data/lib/cosmos/script/cmd_tlm_server.rb +4 -0
- data/lib/cosmos/script/commands.rb +3 -15
- data/lib/cosmos/script/script.rb +69 -23
- data/lib/cosmos/streams/tcpip_client_stream.rb +2 -2
- data/lib/cosmos/system/system.rb +42 -25
- data/lib/cosmos/system/target.rb +6 -2
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +177 -36
- data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +3 -2
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +34 -8
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +80 -25
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +19 -4
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +15 -14
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +15 -9
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +1 -9
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -6
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -3
- data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +84 -7
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +0 -1
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +1 -5
- data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +3 -2
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +159 -27
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +1 -1
- data/lib/cosmos/tools/config_editor/config_editor.rb +17 -52
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +0 -5
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +111 -0
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -18
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +12 -3
- data/lib/cosmos/tools/script_runner/script_runner.rb +27 -14
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +104 -37
- data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
- data/lib/cosmos/tools/table_manager/table_item_parser.rb +4 -2
- data/lib/cosmos/tools/table_manager/table_manager.rb +0 -5
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +0 -1
- data/lib/cosmos/tools/test_runner/test.rb +1 -3
- data/lib/cosmos/tools/test_runner/test_runner.rb +26 -15
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +290 -137
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +122 -25
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +67 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +28 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +36 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +42 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +88 -14
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +2 -5
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +2 -6
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +74 -18
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +3 -7
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +159 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +49 -2
- data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +0 -2
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +5 -5
- data/lib/cosmos/top_level.rb +1 -0
- data/lib/cosmos/utilities/crc.rb +3 -0
- data/lib/cosmos/utilities/csv.rb +1 -0
- data/lib/cosmos/utilities/message_log.rb +2 -1
- data/lib/cosmos/utilities/simulated_target.rb +8 -8
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/win32.rb +4 -10
- data/run_gui_tests.bat +2 -1
- data/spec/config/config_parser_spec.rb +4 -4
- data/spec/core_ext/array_spec.rb +1 -1
- data/spec/core_ext/exception_spec.rb +12 -12
- data/spec/core_ext/file_spec.rb +6 -6
- data/spec/core_ext/hash_spec.rb +1 -1
- data/spec/core_ext/socket_spec.rb +2 -2
- data/spec/core_ext/string_spec.rb +13 -13
- data/spec/core_ext/time_spec.rb +0 -2
- data/spec/gui/utilities/script_module_gui_spec.rb +3 -3
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +6 -6
- data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +6 -2
- data/spec/interfaces/interface_spec.rb +0 -1
- data/spec/interfaces/linc_interface_spec.rb +0 -5
- data/spec/interfaces/protocols/crc_protocol_spec.rb +201 -85
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +33 -9
- data/spec/interfaces/protocols/length_protocol_spec.rb +1 -1
- data/spec/interfaces/protocols/override_protocol_spec.rb +6 -2
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +1 -5
- data/spec/interfaces/protocols/template_protocol_spec.rb +0 -1
- data/spec/interfaces/simulated_target_interface_spec.rb +5 -5
- data/spec/interfaces/udp_interface_spec.rb +2 -4
- data/spec/io/buffered_file_spec.rb +8 -12
- data/spec/io/json_drb_spec.rb +9 -9
- data/spec/io/json_rpc_spec.rb +4 -4
- data/spec/io/raw_logger_spec.rb +4 -3
- data/spec/packet_logs/packet_log_reader_spec.rb +3 -6
- data/spec/packet_logs/packet_log_writer_spec.rb +4 -4
- data/spec/packets/binary_accessor_spec.rb +5 -8
- data/spec/packets/commands_spec.rb +2 -2
- data/spec/packets/limits_spec.rb +2 -2
- data/spec/packets/packet_config_spec.rb +12 -0
- data/spec/packets/packet_item_limits_spec.rb +1 -1
- data/spec/packets/packet_item_spec.rb +9 -9
- data/spec/packets/packet_spec.rb +15 -5
- data/spec/packets/parsers/packet_item_parser_spec.rb +27 -0
- data/spec/packets/parsers/xtce_parser_spec.rb +27 -30
- data/spec/packets/structure_spec.rb +2 -1
- data/spec/packets/telemetry_spec.rb +3 -5
- data/spec/processors/statistics_processor_spec.rb +35 -0
- data/spec/script/cmd_tlm_server_spec.rb +4 -21
- data/spec/script/commands_disconnect_spec.rb +46 -58
- data/spec/script/commands_spec.rb +40 -61
- data/spec/script/limits_spec.rb +1 -21
- data/spec/script/script_spec.rb +32 -41
- data/spec/script/scripting_spec.rb +166 -185
- data/spec/script/telemetry_spec.rb +10 -5
- data/spec/script/tools_spec.rb +2 -24
- data/spec/spec_helper.rb +11 -5
- data/spec/system/system_spec.rb +17 -12
- data/spec/tools/cmd_tlm_server/api_spec.rb +21 -10
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -16
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +0 -1
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +16 -27
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +2 -6
- data/spec/tools/cmd_tlm_server/connections_spec.rb +0 -4
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +13 -13
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +5 -9
- data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +11 -3
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +0 -4
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +5 -5
- data/spec/tools/cmd_tlm_server/routers_spec.rb +5 -9
- data/spec/tools/table_manager/table_config_spec.rb +0 -1
- data/spec/tools/table_manager/tablemanager_core_spec.rb +23 -23
- data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +6 -4
- data/spec/top_level/top_level_spec.rb +9 -9
- data/spec/utilities/csv_spec.rb +2 -12
- data/spec/utilities/logger_spec.rb +6 -6
- data/spec/utilities/message_log_spec.rb +3 -11
- data/tasks/gemfile_stats.rake +2 -2
- 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
|