cosmos 3.2.1 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Manifest.txt +195 -0
- data/README.md +3 -3
- data/data/crc.txt +52 -52
- data/lib/cosmos.rb +1 -1
- data/lib/cosmos/core_ext/time.rb +11 -9
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +0 -2
- data/lib/cosmos/gui/dialogs/about_dialog.rb +2 -2
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +2 -2
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +11 -5
- data/lib/cosmos/gui/dialogs/splash.rb +32 -10
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +2 -2
- data/lib/cosmos/gui/qt.rb +22 -22
- data/lib/cosmos/io/json_drb.rb +4 -4
- data/lib/cosmos/io/json_rpc.rb +21 -21
- data/lib/cosmos/packet_logs/packet_log_writer.rb +18 -20
- data/lib/cosmos/packets/commands.rb +8 -6
- data/lib/cosmos/packets/limits.rb +3 -2
- data/lib/cosmos/packets/packet.rb +14 -11
- data/lib/cosmos/packets/parsers/limits_parser.rb +1 -1
- data/lib/cosmos/packets/parsers/macro_parser.rb +4 -4
- data/lib/cosmos/packets/parsers/state_parser.rb +1 -1
- data/lib/cosmos/packets/structure.rb +2 -2
- data/lib/cosmos/packets/telemetry.rb +5 -4
- data/lib/cosmos/script/script.rb +6 -6
- data/lib/cosmos/streams/tcpip_socket_stream.rb +2 -1
- data/lib/cosmos/streams/template_stream_protocol.rb +1 -1
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +1 -1
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +5 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +4 -3
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +9 -3
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +15 -11
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +1 -1
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +2 -2
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +2 -2
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +0 -2
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +1 -1
- data/lib/cosmos/tools/replay/replay.rb +2 -2
- data/lib/cosmos/tools/script_runner/script_audit.rb +1 -1
- data/lib/cosmos/tools/script_runner/script_runner.rb +1 -1
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +3 -7
- data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
- data/lib/cosmos/tools/test_runner/results_writer.rb +1 -1
- data/lib/cosmos/tools/test_runner/test_runner.rb +2 -2
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +2 -1
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +1 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +1 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +1 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +3 -3
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +1 -3
- data/lib/cosmos/top_level.rb +2 -6
- data/lib/cosmos/utilities/ruby_lex_utils.rb +1 -1
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/win32_main.rb +11 -7
- data/spec/ccsds/ccsds_packet_spec.rb +28 -28
- data/spec/ccsds/ccsds_parser_spec.rb +27 -27
- data/spec/config/config_parser_spec.rb +88 -88
- data/spec/conversions/conversion_spec.rb +3 -3
- data/spec/conversions/generic_conversion_spec.rb +9 -9
- data/spec/conversions/new_packet_log_conversion_spec.rb +4 -4
- data/spec/conversions/polynomial_conversion_spec.rb +7 -7
- data/spec/conversions/processor_conversion_spec.rb +9 -9
- data/spec/conversions/received_count_conversion_spec.rb +7 -7
- data/spec/conversions/received_time_formatted_conversion_spec.rb +9 -9
- data/spec/conversions/received_time_seconds_conversion_spec.rb +9 -9
- data/spec/conversions/segmented_polynomial_conversion_spec.rb +11 -11
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +13 -13
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +13 -13
- data/spec/core_ext/array_spec.rb +76 -76
- data/spec/core_ext/class_spec.rb +3 -3
- data/spec/core_ext/cosmos_io_spec.rb +16 -16
- data/spec/core_ext/exception_spec.rb +19 -19
- data/spec/core_ext/file_spec.rb +16 -16
- data/spec/core_ext/hash_spec.rb +3 -3
- data/spec/core_ext/io_spec.rb +2 -2
- data/spec/core_ext/kernel_spec.rb +2 -2
- data/spec/core_ext/math_spec.rb +43 -43
- data/spec/core_ext/matrix_spec.rb +22 -22
- data/spec/core_ext/objectspace_spec.rb +6 -6
- data/spec/core_ext/range_spec.rb +2 -2
- data/spec/core_ext/socket_spec.rb +4 -4
- data/spec/core_ext/string_spec.rb +67 -67
- data/spec/core_ext/stringio_spec.rb +2 -2
- data/spec/core_ext/time_spec.rb +82 -82
- data/spec/gui/line_graph/line_clip_spec.rb +34 -34
- data/spec/interfaces/interface_spec.rb +46 -46
- data/spec/interfaces/linc_interface_spec.rb +26 -26
- data/spec/interfaces/serial_interface_spec.rb +16 -16
- data/spec/interfaces/simulated_target_interface_spec.rb +21 -21
- data/spec/interfaces/stream_interface_spec.rb +22 -22
- data/spec/interfaces/tcpip_client_interface_spec.rb +14 -14
- data/spec/interfaces/tcpip_server_interface_spec.rb +41 -41
- data/spec/interfaces/udp_interface_spec.rb +46 -46
- data/spec/io/buffered_file_spec.rb +50 -50
- data/spec/io/io_multiplexer_spec.rb +9 -9
- data/spec/io/json_drb_object_spec.rb +7 -7
- data/spec/io/json_drb_spec.rb +55 -55
- data/spec/io/json_rpc_spec.rb +68 -68
- data/spec/io/raw_logger_pair_spec.rb +28 -28
- data/spec/io/raw_logger_spec.rb +22 -22
- data/spec/io/serial_driver_spec.rb +3 -3
- data/spec/io/stderr_spec.rb +2 -2
- data/spec/io/stdout_spec.rb +2 -2
- data/spec/io/tcpip_server_spec.rb +62 -62
- data/spec/io/udp_sockets_spec.rb +19 -19
- data/spec/io/win32_serial_driver_spec.rb +10 -10
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +32 -32
- data/spec/packet_logs/packet_log_reader_spec.rb +138 -138
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +3 -3
- data/spec/packet_logs/packet_log_writer_spec.rb +26 -26
- data/spec/packets/binary_accessor_spec.rb +672 -672
- data/spec/packets/commands_spec.rb +123 -123
- data/spec/packets/limits_response_spec.rb +1 -1
- data/spec/packets/limits_spec.rb +69 -69
- data/spec/packets/packet_config_spec.rb +93 -93
- data/spec/packets/packet_item_limits_spec.rb +46 -46
- data/spec/packets/packet_item_spec.rb +108 -108
- data/spec/packets/packet_spec.rb +364 -348
- data/spec/packets/parsers/format_string_parser_spec.rb +13 -13
- data/spec/packets/parsers/limits_parser_spec.rb +8 -8
- data/spec/packets/parsers/limits_response_parser_spec.rb +9 -9
- data/spec/packets/parsers/macro_parser_spec.rb +34 -6
- data/spec/packets/parsers/packet_parser_spec.rb +6 -6
- data/spec/packets/parsers/processor_parser_spec.rb +7 -7
- data/spec/packets/parsers/state_parser_spec.rb +23 -23
- data/spec/packets/structure_item_spec.rb +62 -62
- data/spec/packets/structure_spec.rb +183 -183
- data/spec/packets/telemetry_spec.rb +174 -174
- data/spec/processors/new_packet_log_processor_spec.rb +4 -4
- data/spec/processors/processor_spec.rb +9 -9
- data/spec/processors/statistics_processor_spec.rb +21 -21
- data/spec/processors/watermark_processor_spec.rb +12 -12
- data/spec/script/script_spec.rb +158 -158
- data/spec/spec_helper.rb +44 -13
- data/spec/streams/burst_stream_protocol_spec.rb +8 -8
- data/spec/streams/fixed_stream_protocol_spec.rb +26 -26
- data/spec/streams/length_stream_protocol_spec.rb +27 -27
- data/spec/streams/preidentified_stream_protocol_spec.rb +25 -25
- data/spec/streams/serial_stream_spec.rb +19 -19
- data/spec/streams/stream_protocol_spec.rb +52 -52
- data/spec/streams/stream_spec.rb +1 -1
- data/spec/streams/tcpip_client_stream_spec.rb +7 -7
- data/spec/streams/tcpip_socket_stream_spec.rb +84 -49
- data/spec/streams/template_stream_protocol_spec.rb +17 -17
- data/spec/streams/terminated_stream_protocol_spec.rb +19 -19
- data/spec/system/system_spec.rb +95 -95
- data/spec/system/target_spec.rb +32 -32
- data/spec/tools/cmd_tlm_server/api_spec.rb +386 -386
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +3 -3
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +8 -8
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +57 -57
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +85 -85
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +11 -11
- data/spec/tools/cmd_tlm_server/connections_spec.rb +23 -23
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +57 -57
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +32 -32
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +17 -17
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +15 -15
- data/spec/tools/cmd_tlm_server/routers_spec.rb +36 -36
- data/spec/top_level/top_level_spec.rb +60 -60
- data/spec/utilities/crc_spec.rb +6 -6
- data/spec/utilities/csv_spec.rb +13 -13
- data/spec/utilities/logger_spec.rb +20 -20
- data/spec/utilities/message_log_spec.rb +13 -13
- data/spec/utilities/quaternion_spec.rb +30 -30
- data/spec/utilities/ruby_lex_utils_spec.rb +14 -14
- data/test/benchmarks/binary_accessor_benchmark.rb +14 -0
- data/test/benchmarks/gsub_benchmark.rb +114 -0
- data/test/performance/PACKETS.bat +1 -0
- data/test/performance/Rakefile +77 -0
- data/test/performance/THREADS.bat +1 -0
- data/test/performance/config/data/attitude.bin +0 -0
- data/test/performance/config/data/crc.txt +206 -0
- data/test/performance/config/data/diamond.STL +58 -0
- data/test/performance/config/data/groundoff.gif +0 -0
- data/test/performance/config/data/groundon.gif +0 -0
- data/test/performance/config/data/hselectoff.gif +0 -0
- data/test/performance/config/data/hselecton.gif +0 -0
- data/test/performance/config/data/hswitchoff.gif +0 -0
- data/test/performance/config/data/hswitchon.gif +0 -0
- data/test/performance/config/data/meta_init.txt +4 -0
- data/test/performance/config/data/position.bin +0 -0
- data/test/performance/config/data/poweroff.gif +0 -0
- data/test/performance/config/data/poweron.gif +0 -0
- data/test/performance/config/data/satellite.gif +0 -0
- data/test/performance/config/data/tada.wav +0 -0
- data/test/performance/config/data/vswitchoff.gif +0 -0
- data/test/performance/config/data/vswitchon.gif +0 -0
- data/test/performance/config/system/system_packets.txt +39 -0
- data/test/performance/config/system/system_threads.txt +59 -0
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
- data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
- data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -0
- data/test/performance/config/targets/COSMOS/screens/version.txt +19 -0
- data/test/performance/config/targets/COSMOS/target.txt +11 -0
- data/test/performance/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +17 -0
- data/test/performance/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +18 -0
- data/test/performance/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
- data/test/performance/config/targets/EXAMPLE/lib/example_interface.rb +22 -0
- data/test/performance/config/targets/EXAMPLE/target.txt +7 -0
- data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -0
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +34 -0
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -0
- data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -0
- data/test/performance/config/tools/handbook_creator/default_toc.xsl +59 -0
- data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -0
- data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
- data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
- data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -0
- data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -0
- data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
- data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -0
- data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -0
- data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
- data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
- data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
- data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
- data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
- data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -0
- data/test/performance/config/tools/launcher/launcher_packets.txt +29 -0
- data/test/performance/config/tools/launcher/launcher_threads.txt +70 -0
- data/test/performance/config/tools/limits_monitor/README.txt +1 -0
- data/test/performance/config/tools/opengl_builder/README.txt +1 -0
- data/test/performance/config/tools/script_runner/script_runner.txt +3 -0
- data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -0
- data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
- data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
- data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
- data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
- data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
- data/test/performance/config/tools/test_runner/test_runner.txt +17 -0
- data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
- data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
- data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
- data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
- data/test/performance/config/tools/tlm_grapher/README.txt +1 -0
- data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
- data/test/performance/lib/example_background_task.rb +57 -0
- data/test/performance/lib/example_target.rb +120 -0
- data/test/performance/lib/scpi_target.rb +74 -0
- data/test/performance/lib/user_version.rb +3 -0
- data/test/performance/outputs/handbooks/README.txt +1 -0
- data/test/performance/outputs/logs/README.txt +1 -0
- data/test/performance/outputs/saved_config/README.txt +1 -0
- data/test/performance/outputs/tables/README.txt +1 -0
- data/test/performance/outputs/tmp/README.txt +1 -0
- data/test/performance/procedures/checks.rb +11 -0
- data/test/performance/procedures/clear_util.rb +7 -0
- data/test/performance/procedures/collect.rb +18 -0
- data/test/performance/procedures/collect_util.rb +14 -0
- data/test/performance/procedures/cosmos_api_test.rb +293 -0
- data/test/performance/procedures/disconnect.rb +29 -0
- data/test/performance/procedures/example_test.rb +182 -0
- data/test/performance/procedures/plot_test.rb +8 -0
- data/test/performance/procedures/procedure.rb +3 -0
- data/test/performance/procedures/run_example_test.rb +3 -0
- data/test/performance/procedures/test.rb +51 -0
- data/test/performance/tools/CmdExtractor +14 -0
- data/test/performance/tools/CmdExtractor.bat +59 -0
- data/test/performance/tools/CmdSender +14 -0
- data/test/performance/tools/CmdSender.bat +59 -0
- data/test/performance/tools/CmdTlmServer +16 -0
- data/test/performance/tools/CmdTlmServer.bat +59 -0
- data/test/performance/tools/CmdTlmServerMemProf +20 -0
- data/test/performance/tools/CmdTlmServerMemProf.bat +59 -0
- data/test/performance/tools/DataViewer +14 -0
- data/test/performance/tools/DataViewer.bat +59 -0
- data/test/performance/tools/ExampleTarget +14 -0
- data/test/performance/tools/ExampleTarget.bat +59 -0
- data/test/performance/tools/HandbookCreator +14 -0
- data/test/performance/tools/HandbookCreator.bat +61 -0
- data/test/performance/tools/Launcher +14 -0
- data/test/performance/tools/Launcher.bat +59 -0
- data/test/performance/tools/LimitsMonitor +14 -0
- data/test/performance/tools/LimitsMonitor.bat +59 -0
- data/test/performance/tools/OpenGLBuilder +14 -0
- data/test/performance/tools/OpenGLBuilder.bat +59 -0
- data/test/performance/tools/PacketViewer +14 -0
- data/test/performance/tools/PacketViewer.bat +59 -0
- data/test/performance/tools/Replay +14 -0
- data/test/performance/tools/Replay.bat +59 -0
- data/test/performance/tools/ScpiTarget +14 -0
- data/test/performance/tools/ScpiTarget.bat +59 -0
- data/test/performance/tools/ScriptRunner +14 -0
- data/test/performance/tools/ScriptRunner.bat +59 -0
- data/test/performance/tools/TableManager +14 -0
- data/test/performance/tools/TableManager.bat +59 -0
- data/test/performance/tools/TestRunner +14 -0
- data/test/performance/tools/TestRunner.bat +59 -0
- data/test/performance/tools/TlmExtractor +14 -0
- data/test/performance/tools/TlmExtractor.bat +59 -0
- data/test/performance/tools/TlmGrapher +14 -0
- data/test/performance/tools/TlmGrapher.bat +59 -0
- data/test/performance/tools/TlmViewer +14 -0
- data/test/performance/tools/TlmViewer.bat +59 -0
- data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
- data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
- data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
- data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
- data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
- data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
- data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
- data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
- data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
- data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
- data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
- data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
- data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
- data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
- data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
- data/test/performance/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/test/performance/userpath.txt +1 -0
- metadata +197 -2
data/spec/packets/packet_spec.rb
CHANGED
@@ -18,23 +18,23 @@ module Cosmos
|
|
18
18
|
describe Packet do
|
19
19
|
|
20
20
|
describe "buffer=" do
|
21
|
-
it "
|
21
|
+
it "sets the buffer" do
|
22
22
|
p = Packet.new("tgt", "pkt")
|
23
23
|
p.buffer = "\x00\x01\x02\x03"
|
24
|
-
p.buffer.
|
24
|
+
expect(p.buffer).to eql "\x00\x01\x02\x03"
|
25
25
|
end
|
26
26
|
|
27
|
-
it "
|
27
|
+
it "complains if the given buffer is too big" do
|
28
28
|
capture_io do |stdout|
|
29
29
|
p = Packet.new("tgt", "pkt")
|
30
30
|
p.append_item("test1", 16, :UINT)
|
31
31
|
|
32
32
|
p.buffer = "\x00\x00\x00"
|
33
|
-
stdout.string.
|
33
|
+
expect(stdout.string).to match(/TGT PKT received with actual packet length of 3 but defined length of 2/)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
it "
|
37
|
+
it "runs processors if present" do
|
38
38
|
p = Packet.new("tgt", "pkt")
|
39
39
|
p.processors['processor'] = double("call", :call => true)
|
40
40
|
p.buffer = "\x00\x01\x02\x03"
|
@@ -42,50 +42,50 @@ module Cosmos
|
|
42
42
|
end
|
43
43
|
|
44
44
|
describe "target_name=" do
|
45
|
-
it "
|
45
|
+
it "sets the target_name to an uppercase String" do
|
46
46
|
p = Packet.new("tgt", "pkt")
|
47
|
-
p.target_name.
|
47
|
+
expect(p.target_name).to eql "TGT"
|
48
48
|
end
|
49
49
|
|
50
|
-
it "
|
50
|
+
it "sets target_name to nil" do
|
51
51
|
p = Packet.new(nil,"pkt")
|
52
|
-
p.target_name.
|
52
|
+
expect(p.target_name).to be_nil
|
53
53
|
end
|
54
54
|
|
55
|
-
it "
|
55
|
+
it "complains about non String target_names" do
|
56
56
|
expect { Packet.new(5, "pkt") }.to raise_error(ArgumentError, "target_name must be a String but is a Fixnum")
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
60
|
describe "packet_name=" do
|
61
|
-
it "
|
61
|
+
it "sets the packet_name to an uppercase String" do
|
62
62
|
p = Packet.new("tgt", "pkt")
|
63
|
-
p.packet_name.
|
63
|
+
expect(p.packet_name).to eql "PKT"
|
64
64
|
end
|
65
65
|
|
66
|
-
it "
|
66
|
+
it "sets packet_name to nil" do
|
67
67
|
p = Packet.new("tgt",nil)
|
68
|
-
p.packet_name.
|
68
|
+
expect(p.packet_name).to be_nil
|
69
69
|
end
|
70
70
|
|
71
|
-
it "
|
71
|
+
it "complains about non String packet_names" do
|
72
72
|
expect { Packet.new("tgt", 5) }.to raise_error(ArgumentError, "packet_name must be a String but is a Fixnum")
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
76
|
describe "description=" do
|
77
|
-
it "
|
77
|
+
it "sets the description to a String" do
|
78
78
|
p = Packet.new("tgt", "pkt", :BIG_ENDIAN, "This is a description")
|
79
|
-
p.description.
|
79
|
+
expect(p.description).to eql "This is a description"
|
80
80
|
end
|
81
81
|
|
82
|
-
it "
|
82
|
+
it "sets description to nil" do
|
83
83
|
p = Packet.new("tgt","pkt")
|
84
84
|
p.description = nil
|
85
|
-
p.description.
|
85
|
+
expect(p.description).to be_nil
|
86
86
|
end
|
87
87
|
|
88
|
-
it "
|
88
|
+
it "complains about non String descriptions" do
|
89
89
|
p = Packet.new("tgt","pkt")
|
90
90
|
expect { p.description = 5 }.to raise_error(ArgumentError, "description must be a String but is a Fixnum")
|
91
91
|
end
|
@@ -99,143 +99,143 @@ module Cosmos
|
|
99
99
|
expect(p.received_time).to eql t
|
100
100
|
end
|
101
101
|
|
102
|
-
it "
|
102
|
+
it "sets received_time to nil" do
|
103
103
|
p = Packet.new("tgt","pkt")
|
104
104
|
p.received_time = nil
|
105
|
-
p.received_time.
|
105
|
+
expect(p.received_time).to be_nil
|
106
106
|
end
|
107
107
|
|
108
|
-
it "
|
108
|
+
it "complains about non Time received_times" do
|
109
109
|
p = Packet.new("tgt","pkt")
|
110
110
|
expect {p.received_time = "1pm" }.to raise_error(ArgumentError, "received_time must be a Time but is a String")
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
114
|
describe "received_time=" do
|
115
|
-
it "
|
115
|
+
it "sets the received_time to a Time" do
|
116
116
|
p = Packet.new("tgt", "pkt")
|
117
117
|
t = Time.now
|
118
118
|
p.received_time = t
|
119
|
-
p.received_time.
|
119
|
+
expect(p.received_time).to eql t
|
120
120
|
end
|
121
121
|
|
122
|
-
it "
|
122
|
+
it "sets received_time to nil" do
|
123
123
|
p = Packet.new("tgt","pkt")
|
124
124
|
p.received_time = nil
|
125
|
-
p.received_time.
|
125
|
+
expect(p.received_time).to be_nil
|
126
126
|
end
|
127
127
|
|
128
|
-
it "
|
128
|
+
it "complains about non Time received_times" do
|
129
129
|
p = Packet.new("tgt","pkt")
|
130
130
|
expect {p.received_time = "1pm" }.to raise_error(ArgumentError, "received_time must be a Time but is a String")
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
134
|
describe "received_count=" do
|
135
|
-
it "
|
135
|
+
it "sets the received_count to a Fixnum" do
|
136
136
|
p = Packet.new("tgt", "pkt")
|
137
137
|
p.received_count = 10
|
138
|
-
p.received_count.
|
138
|
+
expect(p.received_count).to eql 10
|
139
139
|
end
|
140
140
|
|
141
|
-
it "
|
141
|
+
it "complains about nil received_count" do
|
142
142
|
p = Packet.new("tgt","pkt")
|
143
143
|
expect {p.received_count = nil }.to raise_error(ArgumentError, "received_count must be a Fixnum but is a NilClass")
|
144
144
|
end
|
145
145
|
|
146
|
-
it "
|
146
|
+
it "complains about non Fixnum received_counts" do
|
147
147
|
p = Packet.new("tgt","pkt")
|
148
148
|
expect {p.received_count = "5" }.to raise_error(ArgumentError, "received_count must be a Fixnum but is a String")
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
152
152
|
describe "hazardous_description=" do
|
153
|
-
it "
|
153
|
+
it "sets the hazardous_description to a String" do
|
154
154
|
p = Packet.new("tgt", "pkt")
|
155
155
|
p.hazardous_description = "This is a description"
|
156
|
-
p.hazardous_description.
|
156
|
+
expect(p.hazardous_description).to eql "This is a description"
|
157
157
|
end
|
158
158
|
|
159
|
-
it "
|
159
|
+
it "sets hazardous_description to nil" do
|
160
160
|
p = Packet.new("tgt","pkt")
|
161
161
|
p.hazardous_description = nil
|
162
|
-
p.hazardous_description.
|
162
|
+
expect(p.hazardous_description).to be_nil
|
163
163
|
end
|
164
164
|
|
165
|
-
it "
|
165
|
+
it "complains about non String hazardous_descriptions" do
|
166
166
|
p = Packet.new("tgt","pkt")
|
167
167
|
expect {p.hazardous_description = 5 }.to raise_error(ArgumentError, "hazardous_description must be a String but is a Fixnum")
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
171
171
|
describe "given_values=" do
|
172
|
-
it "
|
172
|
+
it "sets the given_values to a Hash" do
|
173
173
|
p = Packet.new("tgt", "pkt")
|
174
174
|
gv = {}
|
175
175
|
p.given_values = gv
|
176
|
-
p.given_values.
|
176
|
+
expect(p.given_values).to eql gv
|
177
177
|
end
|
178
178
|
|
179
|
-
it "
|
179
|
+
it "sets given_values to nil" do
|
180
180
|
p = Packet.new("tgt","pkt")
|
181
181
|
p.given_values = nil
|
182
|
-
p.given_values.
|
182
|
+
expect(p.given_values).to be_nil
|
183
183
|
end
|
184
184
|
|
185
|
-
it "
|
185
|
+
it "complains about non Hash given_valuess" do
|
186
186
|
p = Packet.new("tgt","pkt")
|
187
187
|
expect {p.given_values = [] }.to raise_error(ArgumentError, "given_values must be a Hash but is a Array")
|
188
188
|
end
|
189
189
|
end
|
190
190
|
|
191
191
|
describe "meta" do
|
192
|
-
it "
|
192
|
+
it "allows adding items to the meta hash" do
|
193
193
|
p = Packet.new("tgt","pkt")
|
194
194
|
p.meta['TYPE'] = 'float32'
|
195
|
-
p.meta['TYPE'].
|
195
|
+
expect(p.meta['TYPE']).to eql 'float32'
|
196
196
|
end
|
197
197
|
end
|
198
198
|
|
199
199
|
describe "limits_change_callback=" do
|
200
|
-
it "
|
200
|
+
it "sets the limits_change_callback to something that responds to call" do
|
201
201
|
p = Packet.new("tgt", "pkt")
|
202
202
|
callback = Object.new
|
203
203
|
allow(callback).to receive(:call)
|
204
204
|
expect { p.limits_change_callback = callback }.to_not raise_error
|
205
205
|
end
|
206
206
|
|
207
|
-
it "
|
207
|
+
it "sets limits_change_callback to nil" do
|
208
208
|
p = Packet.new("tgt","pkt")
|
209
209
|
expect { p.limits_change_callback = nil }.to_not raise_error
|
210
210
|
end
|
211
211
|
|
212
|
-
it "
|
212
|
+
it "complains about non #call limits_change_callbacks" do
|
213
213
|
p = Packet.new("tgt","pkt")
|
214
214
|
expect {p.limits_change_callback = "" }.to raise_error(ArgumentError, "limits_change_callback must respond to call")
|
215
215
|
end
|
216
216
|
end
|
217
217
|
|
218
218
|
describe "define_item" do
|
219
|
-
it "
|
219
|
+
it "takes a format_string, read_conversion, write_conversion, and id_value" do
|
220
220
|
p = Packet.new("tgt","pkt")
|
221
221
|
rc = GenericConversion.new("value / 2")
|
222
222
|
wc = GenericConversion.new("value * 2")
|
223
223
|
p.define_item("item",0,32,:FLOAT,nil,:BIG_ENDIAN,:ERROR,"%5.1f",rc,wc,5)
|
224
224
|
i = p.get_item("ITEM")
|
225
|
-
i.format_string.
|
226
|
-
i.read_conversion.to_s.
|
227
|
-
i.write_conversion.to_s.
|
228
|
-
i.id_value.
|
225
|
+
expect(i.format_string).to eql "%5.1f"
|
226
|
+
expect(i.read_conversion.to_s).to eql rc.to_s
|
227
|
+
expect(i.write_conversion.to_s).to eql wc.to_s
|
228
|
+
expect(i.id_value).to eql 5.0
|
229
229
|
end
|
230
230
|
|
231
|
-
it "
|
231
|
+
it "initializes format_string, read_conversion, write_conversion, and id_value to nil" do
|
232
232
|
p = Packet.new("tgt","pkt")
|
233
233
|
p.define_item("item",0,32,:FLOAT)
|
234
234
|
i = p.get_item("ITEM")
|
235
|
-
i.format_string.
|
236
|
-
i.read_conversion.
|
237
|
-
i.write_conversion.
|
238
|
-
i.id_value.
|
235
|
+
expect(i.format_string).to be_nil
|
236
|
+
expect(i.read_conversion).to be_nil
|
237
|
+
expect(i.write_conversion).to be_nil
|
238
|
+
expect(i.id_value).to be_nil
|
239
239
|
end
|
240
240
|
end
|
241
241
|
|
@@ -252,14 +252,14 @@ module Cosmos
|
|
252
252
|
pi.id_value = 5
|
253
253
|
p.define(pi)
|
254
254
|
i = p.get_item("ITEM1")
|
255
|
-
i.format_string.
|
256
|
-
i.read_conversion.to_s.
|
257
|
-
i.write_conversion.to_s.
|
258
|
-
i.id_value.
|
255
|
+
expect(i.format_string).to eql "%5.1f"
|
256
|
+
expect(i.read_conversion.to_s).to eql rc.to_s
|
257
|
+
expect(i.write_conversion.to_s).to eql wc.to_s
|
258
|
+
expect(i.id_value).to eql 5.0
|
259
259
|
expect(p.id_items.length).to eq 1
|
260
260
|
expect(p.id_items[0].name).to eq 'ITEM1'
|
261
261
|
expect(p.limits_items[0].name).to eq 'ITEM1'
|
262
|
-
p.defined_length.
|
262
|
+
expect(p.defined_length).to eql 4
|
263
263
|
end
|
264
264
|
|
265
265
|
it "allows PacketItems to be defined on top of each other" do
|
@@ -268,34 +268,34 @@ module Cosmos
|
|
268
268
|
p.define(pi)
|
269
269
|
pi = PacketItem.new("item2",0,32,:UINT,:BIG_ENDIAN)
|
270
270
|
p.define(pi)
|
271
|
-
p.defined_length.
|
271
|
+
expect(p.defined_length).to eql 4
|
272
272
|
buffer = "\x01\x02\x03\x04"
|
273
|
-
p.read_item(p.get_item("item1"), :RAW, buffer).
|
274
|
-
p.read_item(p.get_item("item2"), :RAW, buffer).
|
273
|
+
expect(p.read_item(p.get_item("item1"), :RAW, buffer)).to eql 1
|
274
|
+
expect(p.read_item(p.get_item("item2"), :RAW, buffer)).to eql 0x1020304
|
275
275
|
end
|
276
276
|
end
|
277
277
|
|
278
278
|
describe "append_item" do
|
279
|
-
it "
|
279
|
+
it "takes a format_string, read_conversion, write_conversion, and id_value" do
|
280
280
|
p = Packet.new("tgt","pkt")
|
281
281
|
rc = GenericConversion.new("value / 2")
|
282
282
|
wc = GenericConversion.new("value * 2")
|
283
283
|
p.append_item("item",32,:FLOAT,nil,:BIG_ENDIAN,:ERROR,"%5.1f",rc,wc,5)
|
284
284
|
i = p.get_item("ITEM")
|
285
|
-
i.format_string.
|
286
|
-
i.read_conversion.to_s.
|
287
|
-
i.write_conversion.to_s.
|
288
|
-
i.id_value.
|
285
|
+
expect(i.format_string).to eql "%5.1f"
|
286
|
+
expect(i.read_conversion.to_s).to eql rc.to_s
|
287
|
+
expect(i.write_conversion.to_s).to eql wc.to_s
|
288
|
+
expect(i.id_value).to eql 5.0
|
289
289
|
end
|
290
290
|
|
291
|
-
it "
|
291
|
+
it "initializes format_string, read_conversion, write_conversion, and id_value to nil" do
|
292
292
|
p = Packet.new("tgt","pkt")
|
293
293
|
p.append_item("item",32,:FLOAT)
|
294
294
|
i = p.get_item("ITEM")
|
295
|
-
i.format_string.
|
296
|
-
i.read_conversion.
|
297
|
-
i.write_conversion.
|
298
|
-
i.id_value.
|
295
|
+
expect(i.format_string).to be_nil
|
296
|
+
expect(i.read_conversion).to be_nil
|
297
|
+
expect(i.write_conversion).to be_nil
|
298
|
+
expect(i.id_value).to be_nil
|
299
299
|
end
|
300
300
|
end
|
301
301
|
|
@@ -312,14 +312,14 @@ module Cosmos
|
|
312
312
|
pi.id_value = 5
|
313
313
|
p.append(pi)
|
314
314
|
i = p.get_item("ITEM1")
|
315
|
-
i.format_string.
|
316
|
-
i.read_conversion.to_s.
|
317
|
-
i.write_conversion.to_s.
|
318
|
-
i.id_value.
|
315
|
+
expect(i.format_string).to eql "%5.1f"
|
316
|
+
expect(i.read_conversion.to_s).to eql rc.to_s
|
317
|
+
expect(i.write_conversion.to_s).to eql wc.to_s
|
318
|
+
expect(i.id_value).to eql 5.0
|
319
319
|
expect(p.id_items.length).to eq 1
|
320
320
|
expect(p.id_items[0].name).to eq 'ITEM1'
|
321
321
|
expect(p.limits_items[0].name).to eq 'ITEM1'
|
322
|
-
p.defined_length.
|
322
|
+
expect(p.defined_length).to eql 4
|
323
323
|
|
324
324
|
pi = PacketItem.new("item2",0,32,:FLOAT,:BIG_ENDIAN,nil,:ERROR)
|
325
325
|
p.append(pi)
|
@@ -330,12 +330,12 @@ module Cosmos
|
|
330
330
|
expect(i.write_conversion).to be nil
|
331
331
|
expect(i.id_value).to be nil
|
332
332
|
expect(p.id_items.length).to eq 1
|
333
|
-
p.defined_length.
|
333
|
+
expect(p.defined_length).to eql 8
|
334
334
|
end
|
335
335
|
end
|
336
336
|
|
337
337
|
describe "get_item" do
|
338
|
-
it "
|
338
|
+
it "complains if an item doesn't exist" do
|
339
339
|
p = Packet.new("tgt","pkt")
|
340
340
|
expect { p.get_item("test") }.to raise_error(RuntimeError, "Packet item 'TGT PKT TEST' does not exist")
|
341
341
|
end
|
@@ -346,109 +346,109 @@ module Cosmos
|
|
346
346
|
@p = Packet.new("tgt","pkt")
|
347
347
|
end
|
348
348
|
|
349
|
-
it "
|
349
|
+
it "complains about unknown value_type" do
|
350
350
|
@p.append_item("item",32,:UINT)
|
351
351
|
i = @p.get_item("ITEM")
|
352
352
|
expect { @p.read("ITEM", :MINE, "\x01\x02\x03\x04") }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
|
353
353
|
expect { @p.read_item(i, :MINE, "\x01\x02\x03\x04") }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
|
354
354
|
end
|
355
355
|
|
356
|
-
it "
|
356
|
+
it "reads the RAW value" do
|
357
357
|
@p.append_item("item",32,:UINT)
|
358
358
|
i = @p.get_item("ITEM")
|
359
|
-
@p.read("ITEM", :RAW, "\x01\x02\x03\x04").
|
360
|
-
@p.read_item(i, :RAW, "\x01\x02\x03\x04").
|
359
|
+
expect(@p.read("ITEM", :RAW, "\x01\x02\x03\x04")).to eql 0x01020304
|
360
|
+
expect(@p.read_item(i, :RAW, "\x01\x02\x03\x04")).to eql 0x01020304
|
361
361
|
end
|
362
362
|
|
363
|
-
it "
|
363
|
+
it "reads the CONVERTED value" do
|
364
364
|
@p.append_item("item",8,:UINT)
|
365
365
|
i = @p.get_item("ITEM")
|
366
|
-
@p.read("ITEM", :CONVERTED, "\x02").
|
367
|
-
@p.read_item(i, :CONVERTED, "\x02").
|
366
|
+
expect(@p.read("ITEM", :CONVERTED, "\x02")).to eql 2
|
367
|
+
expect(@p.read_item(i, :CONVERTED, "\x02")).to eql 2
|
368
368
|
i.read_conversion = GenericConversion.new("value / 2")
|
369
|
-
@p.read("ITEM", :CONVERTED, "\x02").
|
370
|
-
@p.read_item(i, :CONVERTED, "\x02").
|
369
|
+
expect(@p.read("ITEM", :CONVERTED, "\x02")).to eql 1
|
370
|
+
expect(@p.read_item(i, :CONVERTED, "\x02")).to eql 1
|
371
371
|
end
|
372
372
|
|
373
|
-
it "
|
373
|
+
it "reads the CONVERTED value with states" do
|
374
374
|
@p.append_item("item",8,:UINT)
|
375
375
|
i = @p.get_item("ITEM")
|
376
376
|
i.states = {"TRUE"=>1, "FALSE"=>2}
|
377
|
-
@p.read("ITEM", :CONVERTED, "\x00").
|
378
|
-
@p.read_item(i, :CONVERTED, "\x00").
|
379
|
-
@p.read("ITEM", :CONVERTED, "\x01").
|
380
|
-
@p.read_item(i, :CONVERTED, "\x01").
|
377
|
+
expect(@p.read("ITEM", :CONVERTED, "\x00")).to eql 0
|
378
|
+
expect(@p.read_item(i, :CONVERTED, "\x00")).to eql 0
|
379
|
+
expect(@p.read("ITEM", :CONVERTED, "\x01")).to eql "TRUE"
|
380
|
+
expect(@p.read_item(i, :CONVERTED, "\x01")).to eql "TRUE"
|
381
381
|
i.read_conversion = GenericConversion.new("value / 2")
|
382
|
-
@p.read("ITEM", :CONVERTED, "\x04").
|
383
|
-
@p.read_item(i, :CONVERTED, "\x04").
|
382
|
+
expect(@p.read("ITEM", :CONVERTED, "\x04")).to eql "FALSE"
|
383
|
+
expect(@p.read_item(i, :CONVERTED, "\x04")).to eql "FALSE"
|
384
384
|
end
|
385
385
|
|
386
|
-
it "
|
386
|
+
it "reads the FORMATTED value" do
|
387
387
|
@p.append_item("item",8,:UINT)
|
388
388
|
i = @p.get_item("ITEM")
|
389
|
-
@p.read("ITEM", :FORMATTED, "\x02").
|
390
|
-
@p.read_item(i, :FORMATTED, "\x02").
|
389
|
+
expect(@p.read("ITEM", :FORMATTED, "\x02")).to eql "2"
|
390
|
+
expect(@p.read_item(i, :FORMATTED, "\x02")).to eql "2"
|
391
391
|
i.format_string = "0x%x"
|
392
|
-
@p.read("ITEM", :FORMATTED, "\x02").
|
393
|
-
@p.read_item(i, :FORMATTED, "\x02").
|
392
|
+
expect(@p.read("ITEM", :FORMATTED, "\x02")).to eql "0x2"
|
393
|
+
expect(@p.read_item(i, :FORMATTED, "\x02")).to eql "0x2"
|
394
394
|
i.states = {"TRUE"=>1, "FALSE"=>2}
|
395
|
-
@p.read("ITEM", :FORMATTED, "\x01").
|
396
|
-
@p.read_item(i, :FORMATTED, "\x01").
|
397
|
-
@p.read("ITEM", :FORMATTED, "\x02").
|
398
|
-
@p.read_item(i, :FORMATTED, "\x02").
|
399
|
-
@p.read("ITEM", :FORMATTED, "\x04").
|
400
|
-
@p.read_item(i, :FORMATTED, "\x04").
|
395
|
+
expect(@p.read("ITEM", :FORMATTED, "\x01")).to eql "TRUE"
|
396
|
+
expect(@p.read_item(i, :FORMATTED, "\x01")).to eql "TRUE"
|
397
|
+
expect(@p.read("ITEM", :FORMATTED, "\x02")).to eql "FALSE"
|
398
|
+
expect(@p.read_item(i, :FORMATTED, "\x02")).to eql "FALSE"
|
399
|
+
expect(@p.read("ITEM", :FORMATTED, "\x04")).to eql "0x4"
|
400
|
+
expect(@p.read_item(i, :FORMATTED, "\x04")).to eql "0x4"
|
401
401
|
i.read_conversion = GenericConversion.new("value / 2")
|
402
|
-
@p.read("ITEM", :FORMATTED, "\x04").
|
403
|
-
@p.read_item(i, :FORMATTED, "\x04").
|
402
|
+
expect(@p.read("ITEM", :FORMATTED, "\x04")).to eql "FALSE"
|
403
|
+
expect(@p.read_item(i, :FORMATTED, "\x04")).to eql "FALSE"
|
404
404
|
end
|
405
405
|
|
406
|
-
it "
|
406
|
+
it "reads the WITH_UNITS value" do
|
407
407
|
@p.append_item("item",8,:UINT)
|
408
408
|
i = @p.get_item("ITEM")
|
409
409
|
i.units = "V"
|
410
|
-
@p.read("ITEM", :WITH_UNITS, "\x02").
|
411
|
-
@p.read_item(i, :WITH_UNITS, "\x02").
|
410
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x02")).to eql "2 V"
|
411
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x02")).to eql "2 V"
|
412
412
|
i.format_string = "0x%x"
|
413
|
-
@p.read("ITEM", :WITH_UNITS, "\x02").
|
414
|
-
@p.read_item(i, :WITH_UNITS, "\x02").
|
413
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x02")).to eql "0x2 V"
|
414
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x02")).to eql "0x2 V"
|
415
415
|
i.states = {"TRUE"=>1, "FALSE"=>2}
|
416
|
-
@p.read("ITEM", :WITH_UNITS, "\x01").
|
417
|
-
@p.read_item(i, :WITH_UNITS, "\x01").
|
418
|
-
@p.read("ITEM", :WITH_UNITS, "\x02").
|
419
|
-
@p.read_item(i, :WITH_UNITS, "\x02").
|
420
|
-
@p.read("ITEM", :WITH_UNITS, "\x04").
|
421
|
-
@p.read_item(i, :WITH_UNITS, "\x04").
|
416
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x01")).to eql "TRUE"
|
417
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x01")).to eql "TRUE"
|
418
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x02")).to eql "FALSE"
|
419
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x02")).to eql "FALSE"
|
420
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x04")).to eql "0x4 V"
|
421
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x04")).to eql "0x4 V"
|
422
422
|
i.read_conversion = GenericConversion.new("value / 2")
|
423
|
-
@p.read("ITEM", :WITH_UNITS, "\x04").
|
424
|
-
@p.read_item(i, :WITH_UNITS, "\x04").
|
423
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x04")).to eql "FALSE"
|
424
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x04")).to eql "FALSE"
|
425
425
|
end
|
426
426
|
|
427
|
-
it "
|
427
|
+
it "reads the WITH_UNITS array value" do
|
428
428
|
@p.append_item("item",8,:UINT, 16)
|
429
429
|
i = @p.get_item("ITEM")
|
430
430
|
i.units = "V"
|
431
|
-
@p.read("ITEM", :WITH_UNITS, "\x01\x02").
|
432
|
-
@p.read_item(i, :WITH_UNITS, "\x01\x02").
|
431
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x01\x02")).to eql ["1 V", "2 V"]
|
432
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x01\x02")).to eql ["1 V", "2 V"]
|
433
433
|
i.format_string = "0x%x"
|
434
|
-
@p.read("ITEM", :WITH_UNITS, "\x01\x02").
|
435
|
-
@p.read_item(i, :WITH_UNITS, "\x01\x02").
|
434
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x01\x02")).to eql ["0x1 V", "0x2 V"]
|
435
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x01\x02")).to eql ["0x1 V", "0x2 V"]
|
436
436
|
i.states = {"TRUE"=>1, "FALSE"=>2}
|
437
|
-
@p.read("ITEM", :WITH_UNITS, "\x01\x02").
|
438
|
-
@p.read_item(i, :WITH_UNITS, "\x01\x02").
|
439
|
-
@p.read("ITEM", :WITH_UNITS, "\x00\x01").
|
440
|
-
@p.read_item(i, :WITH_UNITS, "\x00\x01").
|
441
|
-
@p.read("ITEM", :WITH_UNITS, "\x02\x03").
|
442
|
-
@p.read_item(i, :WITH_UNITS, "\x02\x03").
|
443
|
-
@p.read("ITEM", :WITH_UNITS, "\x04").
|
444
|
-
@p.read_item(i, :WITH_UNITS, "\x04").
|
445
|
-
@p.read("ITEM", :WITH_UNITS, "\x04").
|
446
|
-
@p.read_item(i, :WITH_UNITS, "\x04").
|
437
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x01\x02")).to eql ["TRUE", "FALSE"]
|
438
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x01\x02")).to eql ["TRUE", "FALSE"]
|
439
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x00\x01")).to eql ["0x0 V", "TRUE"]
|
440
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x00\x01")).to eql ["0x0 V", "TRUE"]
|
441
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x02\x03")).to eql ["FALSE", "0x3 V"]
|
442
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x02\x03")).to eql ["FALSE", "0x3 V"]
|
443
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x04")).to eql ["0x4 V"]
|
444
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x04")).to eql ["0x4 V"]
|
445
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x04")).to eql ["0x4 V"]
|
446
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x04")).to eql ["0x4 V"]
|
447
447
|
i.read_conversion = GenericConversion.new("value / 2")
|
448
|
-
@p.read("ITEM", :WITH_UNITS, "\x02\x04").
|
449
|
-
@p.read_item(i, :WITH_UNITS, "\x02\x04").
|
450
|
-
@p.read("ITEM", :WITH_UNITS, "\x08").
|
451
|
-
@p.read_item(i, :WITH_UNITS, "\x08").
|
448
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x02\x04")).to eql ["TRUE","FALSE"]
|
449
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x02\x04")).to eql ["TRUE","FALSE"]
|
450
|
+
expect(@p.read("ITEM", :WITH_UNITS, "\x08")).to eql ["0x4 V"]
|
451
|
+
expect(@p.read_item(i, :WITH_UNITS, "\x08")).to eql ["0x4 V"]
|
452
452
|
end
|
453
453
|
end
|
454
454
|
|
@@ -458,20 +458,20 @@ module Cosmos
|
|
458
458
|
@buffer = "\x00\x00\x00\x00"
|
459
459
|
end
|
460
460
|
|
461
|
-
it "
|
461
|
+
it "complains about unknown value_type" do
|
462
462
|
@p.append_item("item",32,:UINT)
|
463
463
|
i = @p.get_item("ITEM")
|
464
464
|
expect { @p.write("ITEM", 0, :MINE) }.to raise_error(ArgumentError, "Unknown value type on write: MINE")
|
465
465
|
expect { @p.write_item(i, 0, :MINE) }.to raise_error(ArgumentError, "Unknown value type on write: MINE")
|
466
466
|
end
|
467
467
|
|
468
|
-
it "
|
468
|
+
it "writes the RAW value" do
|
469
469
|
@p.append_item("item",32,:UINT)
|
470
470
|
i = @p.get_item("ITEM")
|
471
471
|
@p.write("ITEM", 0x01020304, :RAW, @buffer)
|
472
|
-
@buffer.
|
472
|
+
expect(@buffer).to eql "\x01\x02\x03\x04"
|
473
473
|
@p.write_item(i, 0x05060708, :RAW, @buffer)
|
474
|
-
@buffer.
|
474
|
+
expect(@buffer).to eql "\x05\x06\x07\x08"
|
475
475
|
end
|
476
476
|
|
477
477
|
it "clears the read cache" do
|
@@ -485,56 +485,56 @@ module Cosmos
|
|
485
485
|
cache = @p.instance_variable_get(:@read_conversion_cache)
|
486
486
|
expect(cache[i]).to be 2
|
487
487
|
@p.write("ITEM", 0x08, :RAW)
|
488
|
-
@p.buffer.
|
488
|
+
expect(@p.buffer).to eql "\x08"
|
489
489
|
expect(cache[i]).to be nil
|
490
490
|
expect(@p.read("ITEM")).to be 4
|
491
491
|
expect(cache[i]).to be 4
|
492
492
|
end
|
493
493
|
|
494
|
-
it "
|
494
|
+
it "writes the CONVERTED value" do
|
495
495
|
@p.append_item("item",8,:UINT)
|
496
496
|
i = @p.get_item("ITEM")
|
497
497
|
@p.write("ITEM", 1, :CONVERTED, @buffer)
|
498
|
-
@buffer.
|
498
|
+
expect(@buffer).to eql "\x01\x00\x00\x00"
|
499
499
|
@p.write_item(i, 2, :CONVERTED, @buffer)
|
500
|
-
@buffer.
|
500
|
+
expect(@buffer).to eql "\x02\x00\x00\x00"
|
501
501
|
i.write_conversion = GenericConversion.new("value / 2")
|
502
502
|
@p.write("ITEM", 1, :CONVERTED, @buffer)
|
503
|
-
@buffer.
|
503
|
+
expect(@buffer).to eql "\x00\x00\x00\x00"
|
504
504
|
@p.write_item(i, 2, :CONVERTED, @buffer)
|
505
|
-
@buffer.
|
505
|
+
expect(@buffer).to eql "\x01\x00\x00\x00"
|
506
506
|
end
|
507
507
|
|
508
|
-
it "
|
508
|
+
it "writes the CONVERTED value with states" do
|
509
509
|
@p.append_item("item",8,:UINT)
|
510
510
|
i = @p.get_item("ITEM")
|
511
511
|
i.states = {"TRUE"=>1, "FALSE"=>2}
|
512
512
|
@p.write("ITEM", 3, :CONVERTED, @buffer)
|
513
|
-
@buffer.
|
513
|
+
expect(@buffer).to eql "\x03\x00\x00\x00"
|
514
514
|
@p.write_item(i, 4, :CONVERTED, @buffer)
|
515
|
-
@buffer.
|
515
|
+
expect(@buffer).to eql "\x04\x00\x00\x00"
|
516
516
|
@p.write("ITEM", "TRUE", :CONVERTED, @buffer)
|
517
|
-
@buffer.
|
517
|
+
expect(@buffer).to eql "\x01\x00\x00\x00"
|
518
518
|
@p.write_item(i, "FALSE", :CONVERTED, @buffer)
|
519
|
-
@buffer.
|
519
|
+
expect(@buffer).to eql "\x02\x00\x00\x00"
|
520
520
|
expect { @p.write_item(i, "BLAH", :CONVERTED, @buffer) }.to raise_error(RuntimeError, "Unknown state BLAH for ITEM")
|
521
521
|
i.write_conversion = GenericConversion.new("value / 2")
|
522
522
|
@p.write("ITEM", 4, :CONVERTED, @buffer)
|
523
|
-
@buffer.
|
523
|
+
expect(@buffer).to eql "\x02\x00\x00\x00"
|
524
524
|
@p.write("ITEM", "TRUE", :CONVERTED, @buffer)
|
525
|
-
@buffer.
|
525
|
+
expect(@buffer).to eql "\x00\x00\x00\x00"
|
526
526
|
@p.write_item(i, "FALSE", :CONVERTED, @buffer)
|
527
|
-
@buffer.
|
527
|
+
expect(@buffer).to eql "\x01\x00\x00\x00"
|
528
528
|
end
|
529
529
|
|
530
|
-
it "
|
530
|
+
it "complains about the FORMATTED value_type" do
|
531
531
|
@p.append_item("item",8,:UINT)
|
532
532
|
i = @p.get_item("ITEM")
|
533
533
|
expect { @p.write("ITEM", 3, :FORMATTED, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: FORMATTED")
|
534
534
|
expect { @p.write_item(i, 3, :FORMATTED, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: FORMATTED")
|
535
535
|
end
|
536
536
|
|
537
|
-
it "
|
537
|
+
it "complains about the WITH_UNITS value_type" do
|
538
538
|
@p.append_item("item",8,:UINT)
|
539
539
|
i = @p.get_item("ITEM")
|
540
540
|
expect { @p.write("ITEM", 3, :WITH_UNITS, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: WITH_UNITS")
|
@@ -543,7 +543,7 @@ module Cosmos
|
|
543
543
|
end
|
544
544
|
|
545
545
|
describe "read_all" do
|
546
|
-
it "
|
546
|
+
it "defaults to read all CONVERTED items" do
|
547
547
|
p = Packet.new("tgt","pkt")
|
548
548
|
p.append_item("test1", 8, :UINT, 16)
|
549
549
|
p.append_item("test2", 16, :UINT)
|
@@ -556,22 +556,23 @@ module Cosmos
|
|
556
556
|
buffer = "\x01\x02\x03\x04\x04\x06\x08\x0A"
|
557
557
|
p.buffer = buffer
|
558
558
|
vals = p.read_all
|
559
|
-
vals[0][0].
|
560
|
-
vals[1][0].
|
561
|
-
vals[2][0].
|
562
|
-
vals[0][1].
|
563
|
-
vals[1][1].
|
564
|
-
vals[2][1].
|
559
|
+
expect(vals[0][0]).to eql "TEST1"
|
560
|
+
expect(vals[1][0]).to eql "TEST2"
|
561
|
+
expect(vals[2][0]).to eql "TEST3"
|
562
|
+
expect(vals[0][1]).to eql [1,2]
|
563
|
+
expect(vals[1][1]).to eql "TRUE"
|
564
|
+
expect(vals[2][1]).to eql 0x02030405
|
565
565
|
end
|
566
566
|
end
|
567
567
|
|
568
568
|
describe "read_all_with_limits_states" do
|
569
|
-
it "
|
569
|
+
it "returns an array of items with their limit states" do
|
570
570
|
p = Packet.new("tgt","pkt")
|
571
571
|
p.append_item("test1", 8, :UINT)
|
572
572
|
i = p.get_item("TEST1")
|
573
573
|
i.states = {"TRUE"=>1,"FALSE"=>0}
|
574
574
|
i.state_colors = {"TRUE"=>:GREEN,"FALSE"=>:RED}
|
575
|
+
p.update_limits_items_cache(i)
|
575
576
|
p.write("TEST1",0)
|
576
577
|
p.enable_limits("TEST1")
|
577
578
|
p.append_item("test2", 16, :UINT)
|
@@ -579,21 +580,21 @@ module Cosmos
|
|
579
580
|
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
580
581
|
p.write("TEST2",3)
|
581
582
|
p.enable_limits("TEST2")
|
582
|
-
p.update_limits_items_cache
|
583
|
+
p.update_limits_items_cache(i)
|
583
584
|
p.check_limits
|
584
585
|
|
585
586
|
vals = p.read_all_with_limits_states
|
586
|
-
vals[0][0].
|
587
|
-
vals[1][0].
|
588
|
-
vals[0][1].
|
589
|
-
vals[1][1].
|
590
|
-
vals[0][2].
|
591
|
-
vals[1][2].
|
587
|
+
expect(vals[0][0]).to eql "TEST1"
|
588
|
+
expect(vals[1][0]).to eql "TEST2"
|
589
|
+
expect(vals[0][1]).to eql "FALSE"
|
590
|
+
expect(vals[1][1]).to eql 3
|
591
|
+
expect(vals[0][2]).to eql :RED
|
592
|
+
expect(vals[1][2]).to eql :GREEN
|
592
593
|
end
|
593
594
|
end
|
594
595
|
|
595
596
|
describe "formatted" do
|
596
|
-
it "
|
597
|
+
it "prints out all the items and CONVERTED values" do
|
597
598
|
p = Packet.new("tgt","pkt")
|
598
599
|
p.append_item("test1", 8, :UINT, 16)
|
599
600
|
p.write("test1", [1,2])
|
@@ -605,21 +606,21 @@ module Cosmos
|
|
605
606
|
i = p.get_item("TEST3")
|
606
607
|
i.read_conversion = GenericConversion.new("value / 2")
|
607
608
|
p.write("test3", 0x0406080A)
|
608
|
-
p.formatted.
|
609
|
-
p.formatted.
|
610
|
-
p.formatted.
|
609
|
+
expect(p.formatted).to include("TEST1: [1, 2]")
|
610
|
+
expect(p.formatted).to include("TEST2: TRUE")
|
611
|
+
expect(p.formatted).to include("TEST3: #{0x02030405}")
|
611
612
|
end
|
612
613
|
end
|
613
614
|
|
614
615
|
describe "check_bit_offsets" do
|
615
|
-
it "
|
616
|
+
it "complains about overlapping items" do
|
616
617
|
p = Packet.new("tgt1","pkt1")
|
617
618
|
p.define_item("item1",0,8,:UINT)
|
618
619
|
p.define_item("item2",0,8,:UINT)
|
619
620
|
expect(p.check_bit_offsets[0]).to eql "Bit definition overlap at bit offset 0 for packet TGT1 PKT1 items ITEM2 and ITEM1"
|
620
621
|
end
|
621
622
|
|
622
|
-
it "
|
623
|
+
it "does not complain with non-overlapping negative offsets" do
|
623
624
|
p = Packet.new("tgt1","pkt1")
|
624
625
|
p.define_item("item1",0,8,:UINT)
|
625
626
|
p.define_item("item2",8,-16,:BLOCK)
|
@@ -627,7 +628,7 @@ module Cosmos
|
|
627
628
|
expect(p.check_bit_offsets[0]).to be_nil
|
628
629
|
end
|
629
630
|
|
630
|
-
it "
|
631
|
+
it "complains with overlapping negative offsets" do
|
631
632
|
p = Packet.new("tgt1","pkt1")
|
632
633
|
p.define_item("item1",0,8,:UINT)
|
633
634
|
p.define_item("item2",8,-16,:BLOCK)
|
@@ -635,21 +636,21 @@ module Cosmos
|
|
635
636
|
expect(p.check_bit_offsets[0]).to eql "Bit definition overlap at bit offset -17 for packet TGT1 PKT1 items ITEM3 and ITEM2"
|
636
637
|
end
|
637
638
|
|
638
|
-
it "
|
639
|
+
it "complains about intersecting items" do
|
639
640
|
p = Packet.new("tgt1","pkt1")
|
640
641
|
p.define_item("item1",0,32,:UINT)
|
641
642
|
p.define_item("item2",16,32,:UINT)
|
642
643
|
expect(p.check_bit_offsets[0]).to eql "Bit definition overlap at bit offset 16 for packet TGT1 PKT1 items ITEM2 and ITEM1"
|
643
644
|
end
|
644
645
|
|
645
|
-
it "
|
646
|
+
it "complains about array overlapping items" do
|
646
647
|
p = Packet.new("tgt1","pkt1")
|
647
648
|
p.define_item("item1",0,8,:UINT,32)
|
648
649
|
p.define_item("item2",0,8,:UINT,32)
|
649
650
|
expect(p.check_bit_offsets[0]).to eql "Bit definition overlap at bit offset 0 for packet TGT1 PKT1 items ITEM2 and ITEM1"
|
650
651
|
end
|
651
652
|
|
652
|
-
it "
|
653
|
+
it "does not complain with array non-overlapping negative offsets" do
|
653
654
|
p = Packet.new("tgt1","pkt1")
|
654
655
|
p.define_item("item1",0,8,:UINT)
|
655
656
|
p.define_item("item2",8,8,:INT,-16)
|
@@ -657,7 +658,7 @@ module Cosmos
|
|
657
658
|
expect(p.check_bit_offsets[0]).to be_nil
|
658
659
|
end
|
659
660
|
|
660
|
-
it "
|
661
|
+
it "complains with array overlapping negative offsets" do
|
661
662
|
p = Packet.new("tgt1","pkt1")
|
662
663
|
p.define_item("item1",0,8,:UINT)
|
663
664
|
p.define_item("item2",8,8,:INT,-16)
|
@@ -665,14 +666,14 @@ module Cosmos
|
|
665
666
|
expect(p.check_bit_offsets[0]).to eql "Bit definition overlap at bit offset -17 for packet TGT1 PKT1 items ITEM3 and ITEM2"
|
666
667
|
end
|
667
668
|
|
668
|
-
it "
|
669
|
+
it "complains about array intersecting items" do
|
669
670
|
p = Packet.new("tgt1","pkt1")
|
670
671
|
p.define_item("item1",0,8,:UINT,32)
|
671
672
|
p.define_item("item2",16,8,:UINT,32)
|
672
673
|
expect(p.check_bit_offsets[0]).to eql "Bit definition overlap at bit offset 16 for packet TGT1 PKT1 items ITEM2 and ITEM1"
|
673
674
|
end
|
674
675
|
|
675
|
-
it "
|
676
|
+
it "does not complain about nonoverlapping big endian bitfields" do
|
676
677
|
p = Packet.new("tgt1","pkt1")
|
677
678
|
p.define_item("item1",0,12,:UINT,nil,:BIG_ENDIAN)
|
678
679
|
p.define_item("item2",12,4,:UINT,nil,:BIG_ENDIAN)
|
@@ -680,7 +681,7 @@ module Cosmos
|
|
680
681
|
expect(p.check_bit_offsets[0]).to be_nil
|
681
682
|
end
|
682
683
|
|
683
|
-
it "
|
684
|
+
it "complains about overlapping big endian bitfields" do
|
684
685
|
p = Packet.new("tgt1","pkt1")
|
685
686
|
p.define_item("item1",0,12,:UINT,nil,:BIG_ENDIAN)
|
686
687
|
p.define_item("item2",10,6,:UINT,nil,:BIG_ENDIAN)
|
@@ -688,7 +689,7 @@ module Cosmos
|
|
688
689
|
expect(p.check_bit_offsets[0]).to eql "Bit definition overlap at bit offset 10 for packet TGT1 PKT1 items ITEM2 and ITEM1"
|
689
690
|
end
|
690
691
|
|
691
|
-
it "
|
692
|
+
it "does not complain about nonoverlapping little endian bitfields" do
|
692
693
|
p = Packet.new("tgt1","pkt1")
|
693
694
|
# bit offset in LITTLE_ENDIAN refers to MSB
|
694
695
|
p.define_item("item1",12,12,:UINT,nil,:LITTLE_ENDIAN)
|
@@ -696,7 +697,7 @@ module Cosmos
|
|
696
697
|
expect(p.check_bit_offsets[0]).to be_nil
|
697
698
|
end
|
698
699
|
|
699
|
-
it "
|
700
|
+
it "complains about overlapping little endian bitfields" do
|
700
701
|
p = Packet.new("tgt1","pkt1")
|
701
702
|
# bit offset in LITTLE_ENDIAN refers to MSB
|
702
703
|
p.define_item("item1",12,12,:UINT,nil,:LITTLE_ENDIAN)
|
@@ -719,43 +720,43 @@ module Cosmos
|
|
719
720
|
end
|
720
721
|
|
721
722
|
describe "identify?" do
|
722
|
-
it "
|
723
|
+
it "identifies a buffer based on id_items" do
|
723
724
|
p = Packet.new("tgt","pkt")
|
724
725
|
p.append_item("item1",8,:UINT)
|
725
726
|
p.append_item("item2",16,:UINT,nil,:BIG_ENDIAN,:ERROR,nil,nil,nil,5)
|
726
727
|
p.append_item("item3",32,:UINT)
|
727
|
-
p.identify?("\x00\x00\x05\x01\x02\x03\x04").
|
728
|
-
p.identify?("\x00\x00\x04\x01\x02\x03\x04").
|
729
|
-
p.identify?("\x00").
|
728
|
+
expect(p.identify?("\x00\x00\x05\x01\x02\x03\x04")).to be_truthy
|
729
|
+
expect(p.identify?("\x00\x00\x04\x01\x02\x03\x04")).to be_falsey
|
730
|
+
expect(p.identify?("\x00")).to be_falsey
|
730
731
|
end
|
731
732
|
|
732
|
-
it "
|
733
|
+
it "identifies if the buffer is too short" do
|
733
734
|
p = Packet.new("tgt","pkt")
|
734
735
|
p.append_item("item1",8,:UINT)
|
735
736
|
p.append_item("item2",16,:UINT,nil,:BIG_ENDIAN,:ERROR,nil,nil,nil,5)
|
736
737
|
p.append_item("item3",32,:UINT)
|
737
|
-
p.identify?("\x00\x00\x05\x01\x02\x03").
|
738
|
+
expect(p.identify?("\x00\x00\x05\x01\x02\x03")).to be_truthy
|
738
739
|
end
|
739
740
|
|
740
|
-
it "
|
741
|
+
it "identifies if the buffer is too long" do
|
741
742
|
p = Packet.new("tgt","pkt")
|
742
743
|
p.append_item("item1",8,:UINT)
|
743
744
|
p.append_item("item2",16,:UINT,nil,:BIG_ENDIAN,:ERROR,nil,nil,nil,5)
|
744
745
|
p.append_item("item3",32,:UINT)
|
745
|
-
p.identify?("\x00\x00\x05\x01\x02\x03\x04\x05").
|
746
|
+
expect(p.identify?("\x00\x00\x05\x01\x02\x03\x04\x05")).to be_truthy
|
746
747
|
end
|
747
748
|
end
|
748
749
|
|
749
750
|
describe "identified?" do
|
750
|
-
it "
|
751
|
-
Packet.new('TGT',nil).identified
|
752
|
-
Packet.new(nil,'PKT').identified
|
753
|
-
Packet.new('TGT','PKT').identified
|
751
|
+
it "returns true if the target name and packet name are set" do
|
752
|
+
expect(Packet.new('TGT',nil).identified?).to be_falsey
|
753
|
+
expect(Packet.new(nil,'PKT').identified?).to be_falsey
|
754
|
+
expect(Packet.new('TGT','PKT').identified?).to be_truthy
|
754
755
|
end
|
755
756
|
end
|
756
757
|
|
757
758
|
describe "restore_defaults" do
|
758
|
-
it "
|
759
|
+
it "writes all the items back to their default values" do
|
759
760
|
p = Packet.new("tgt","pkt")
|
760
761
|
p.append_item("test1", 8, :UINT, 16)
|
761
762
|
i = p.get_item("TEST1")
|
@@ -771,56 +772,59 @@ module Cosmos
|
|
771
772
|
i.default = 0x02030405
|
772
773
|
i.write_conversion = GenericConversion.new("value * 2")
|
773
774
|
p.write("test3", 0x01020304)
|
774
|
-
p.buffer.
|
775
|
+
expect(p.buffer).to eql "\x01\x02\x03\x04\x02\x04\x06\x08"
|
775
776
|
p.restore_defaults
|
776
|
-
p.buffer.
|
777
|
+
expect(p.buffer).to eql "\x03\x04\x01\x02\x04\x06\x08\x0A"
|
777
778
|
end
|
778
779
|
end
|
779
780
|
|
780
781
|
describe "enable_limits" do
|
781
|
-
it "
|
782
|
+
it "enables limits on each packet item" do
|
782
783
|
p = Packet.new("tgt","pkt")
|
783
784
|
p.append_item("test1", 8, :UINT, 16)
|
784
785
|
p.append_item("test2", 16, :UINT)
|
785
|
-
p.get_item("TEST1").limits.enabled.
|
786
|
-
p.get_item("TEST2").limits.enabled.
|
786
|
+
expect(p.get_item("TEST1").limits.enabled).to be_falsey
|
787
|
+
expect(p.get_item("TEST2").limits.enabled).to be_falsey
|
787
788
|
p.enable_limits("TEST1")
|
788
|
-
p.get_item("TEST1").limits.enabled.
|
789
|
-
p.get_item("TEST2").limits.enabled.
|
789
|
+
expect(p.get_item("TEST1").limits.enabled).to be_truthy
|
790
|
+
expect(p.get_item("TEST2").limits.enabled).to be_falsey
|
790
791
|
p.enable_limits("TEST2")
|
791
|
-
p.get_item("TEST1").limits.enabled.
|
792
|
-
p.get_item("TEST2").limits.enabled.
|
792
|
+
expect(p.get_item("TEST1").limits.enabled).to be_truthy
|
793
|
+
expect(p.get_item("TEST2").limits.enabled).to be_truthy
|
793
794
|
end
|
794
795
|
end
|
795
796
|
|
796
797
|
describe "disable_limits" do
|
797
|
-
it "
|
798
|
+
it "disables limits on each packet item" do
|
798
799
|
p = Packet.new("tgt","pkt")
|
799
800
|
p.append_item("test1", 8, :UINT)
|
800
801
|
p.append_item("test2", 16, :UINT)
|
801
802
|
p.enable_limits("TEST1")
|
802
803
|
p.enable_limits("TEST2")
|
803
|
-
p.get_item("TEST1").limits.enabled.
|
804
|
-
p.get_item("TEST2").limits.enabled.
|
804
|
+
expect(p.get_item("TEST1").limits.enabled).to be_truthy
|
805
|
+
expect(p.get_item("TEST2").limits.enabled).to be_truthy
|
805
806
|
p.disable_limits("TEST1")
|
806
|
-
p.get_item("TEST1").limits.enabled.
|
807
|
-
p.get_item("TEST2").limits.enabled.
|
807
|
+
expect(p.get_item("TEST1").limits.enabled).to be_falsey
|
808
|
+
expect(p.get_item("TEST2").limits.enabled).to be_truthy
|
808
809
|
p.disable_limits("TEST2")
|
809
|
-
p.get_item("TEST1").limits.enabled.
|
810
|
-
p.get_item("TEST2").limits.enabled.
|
810
|
+
expect(p.get_item("TEST1").limits.enabled).to be_falsey
|
811
|
+
expect(p.get_item("TEST2").limits.enabled).to be_falsey
|
811
812
|
end
|
812
813
|
|
813
|
-
it "
|
814
|
+
it "calls the limits_change_callback for all non STALE items" do
|
814
815
|
p = Packet.new("tgt","pkt")
|
815
816
|
p.append_item("test1", 8, :UINT)
|
816
|
-
p.get_item("TEST1")
|
817
|
+
i = p.get_item("TEST1")
|
818
|
+
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
819
|
+
p.update_limits_items_cache(i)
|
817
820
|
p.append_item("test2", 16, :UINT)
|
818
|
-
p.get_item("TEST2")
|
821
|
+
i = p.get_item("TEST2")
|
822
|
+
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
823
|
+
p.update_limits_items_cache(i)
|
819
824
|
p.write("TEST1",3)
|
820
825
|
p.write("TEST2",3)
|
821
826
|
p.enable_limits("TEST1")
|
822
827
|
p.enable_limits("TEST2")
|
823
|
-
p.update_limits_items_cache
|
824
828
|
|
825
829
|
callback = double("callback", :call => true)
|
826
830
|
p.limits_change_callback = callback
|
@@ -829,70 +833,76 @@ module Cosmos
|
|
829
833
|
p.check_limits
|
830
834
|
p.disable_limits("TEST1")
|
831
835
|
p.disable_limits("TEST2")
|
832
|
-
p.get_item("TEST1").limits.enabled.
|
833
|
-
p.get_item("TEST2").limits.enabled.
|
836
|
+
expect(p.get_item("TEST1").limits.enabled).to be_falsey
|
837
|
+
expect(p.get_item("TEST2").limits.enabled).to be_falsey
|
834
838
|
end
|
835
839
|
end
|
836
840
|
|
837
841
|
describe "limits_items" do
|
838
|
-
it "
|
842
|
+
it "returns all items with limits" do
|
839
843
|
p = Packet.new("tgt","pkt")
|
840
844
|
p.append_item("test1", 8, :UINT)
|
841
845
|
p.enable_limits("TEST1")
|
842
846
|
p.append_item("test2", 16, :UINT)
|
843
847
|
p.enable_limits("TEST2")
|
844
|
-
p.limits_items.
|
848
|
+
expect(p.limits_items).to eql []
|
845
849
|
|
846
850
|
test1 = p.get_item("TEST1")
|
847
851
|
test1.limits.values = {:DEFAULT=>[1,2,4,5]}
|
848
|
-
p.update_limits_items_cache
|
849
|
-
p.limits_items.
|
852
|
+
p.update_limits_items_cache(test1)
|
853
|
+
expect(p.limits_items).to eql [test1]
|
850
854
|
test2 = p.get_item("TEST2")
|
851
855
|
test2.limits.values = {:DEFAULT=>[1,2,4,5]}
|
852
|
-
p.update_limits_items_cache
|
853
|
-
p.limits_items.
|
856
|
+
p.update_limits_items_cache(test2)
|
857
|
+
expect(p.limits_items).to eql [test1, test2]
|
854
858
|
end
|
855
859
|
end
|
856
860
|
|
857
861
|
describe "out_of_limits" do
|
858
|
-
it "
|
862
|
+
it "returns an array indicating all items out of limits" do
|
859
863
|
p = Packet.new("tgt","pkt")
|
860
864
|
p.append_item("test1", 8, :UINT)
|
861
|
-
p.get_item("TEST1")
|
865
|
+
i = p.get_item("TEST1")
|
866
|
+
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
867
|
+
p.update_limits_items_cache(i)
|
862
868
|
p.enable_limits("TEST1")
|
863
869
|
p.write("TEST1",3)
|
864
870
|
p.append_item("test2", 16, :UINT)
|
865
|
-
p.get_item("TEST2")
|
871
|
+
i = p.get_item("TEST2")
|
872
|
+
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
873
|
+
p.update_limits_items_cache(i)
|
866
874
|
p.write("TEST2",3)
|
867
875
|
p.enable_limits("TEST2")
|
868
|
-
p.update_limits_items_cache
|
869
876
|
p.check_limits
|
870
|
-
p.out_of_limits.
|
877
|
+
expect(p.out_of_limits).to eql []
|
871
878
|
|
872
879
|
p.write("TEST1",6)
|
873
880
|
p.check_limits
|
874
|
-
p.out_of_limits.
|
881
|
+
expect(p.out_of_limits).to eql [["TGT","PKT","TEST1",:RED_HIGH]]
|
875
882
|
p.write("TEST2",2)
|
876
883
|
p.check_limits
|
877
|
-
p.out_of_limits.
|
884
|
+
expect(p.out_of_limits).to eql [["TGT","PKT","TEST1",:RED_HIGH],["TGT","PKT","TEST2",:YELLOW_LOW]]
|
878
885
|
end
|
879
886
|
end
|
880
887
|
|
881
888
|
describe "set_all_limits_states" do
|
882
|
-
it "
|
889
|
+
it "sets all limits states to the given state" do
|
883
890
|
p = Packet.new("tgt","pkt")
|
884
891
|
p.append_item("test1", 8, :UINT)
|
885
|
-
p.get_item("TEST1")
|
892
|
+
i = p.get_item("TEST1")
|
893
|
+
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
894
|
+
p.update_limits_items_cache(i)
|
886
895
|
p.enable_limits("TEST1")
|
887
896
|
p.append_item("test2", 16, :UINT)
|
888
|
-
p.get_item("TEST2")
|
897
|
+
i = p.get_item("TEST2")
|
898
|
+
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
899
|
+
p.update_limits_items_cache(i)
|
889
900
|
p.enable_limits("TEST2")
|
890
|
-
p.
|
891
|
-
p.out_of_limits.should eql []
|
901
|
+
expect(p.out_of_limits).to eql []
|
892
902
|
|
893
903
|
PacketItemLimits::OUT_OF_LIMITS_STATES.each do |state|
|
894
904
|
p.set_all_limits_states(state)
|
895
|
-
p.out_of_limits.
|
905
|
+
expect(p.out_of_limits).to eql [["TGT","PKT","TEST1",state],["TGT","PKT","TEST2",state]]
|
896
906
|
end
|
897
907
|
end
|
898
908
|
end
|
@@ -905,15 +915,15 @@ module Cosmos
|
|
905
915
|
@p.append_item("test3", 32, :FLOAT)
|
906
916
|
end
|
907
917
|
|
908
|
-
it "
|
909
|
-
@p.stale.
|
918
|
+
it "sets clear the stale flag" do
|
919
|
+
expect(@p.stale).to be_truthy
|
910
920
|
@p.check_limits
|
911
|
-
@p.stale.
|
921
|
+
expect(@p.stale).to be_falsey
|
912
922
|
end
|
913
923
|
|
914
|
-
it "
|
915
|
-
@p.get_item("TEST1").limits.enabled.
|
916
|
-
@p.get_item("TEST2").limits.enabled.
|
924
|
+
it "does not call the limits_change_callback if limits are disabled" do
|
925
|
+
expect(@p.get_item("TEST1").limits.enabled).to be_falsey
|
926
|
+
expect(@p.get_item("TEST2").limits.enabled).to be_falsey
|
917
927
|
callback = double("callback")
|
918
928
|
allow(callback).to receive(:call)
|
919
929
|
@p.limits_change_callback = callback
|
@@ -922,20 +932,21 @@ module Cosmos
|
|
922
932
|
end
|
923
933
|
|
924
934
|
context "with states" do
|
925
|
-
it "
|
935
|
+
it "calls the limits_change_callback" do
|
926
936
|
test1 = @p.get_item("TEST1")
|
927
|
-
test1.limits.enabled.
|
937
|
+
expect(test1.limits.enabled).to be_falsey
|
928
938
|
test1.states = {"TRUE"=>1,"FALSE"=>0}
|
929
939
|
test1.state_colors = {"TRUE"=>:GREEN,"FALSE"=>:RED}
|
940
|
+
@p.update_limits_items_cache(test1)
|
930
941
|
@p.write("TEST1", 0)
|
931
942
|
@p.enable_limits("TEST1")
|
932
943
|
test2 = @p.get_item("TEST2")
|
933
|
-
test2.limits.enabled.
|
944
|
+
expect(test2.limits.enabled).to be_falsey
|
934
945
|
test2.states = {"TRUE"=>1,"FALSE"=>0}
|
935
946
|
test2.state_colors = {"TRUE"=>:RED,"FALSE"=>:GREEN}
|
936
947
|
@p.write("TEST2", 0)
|
937
948
|
@p.enable_limits("TEST2")
|
938
|
-
@p.update_limits_items_cache
|
949
|
+
@p.update_limits_items_cache(test2)
|
939
950
|
|
940
951
|
# Mock the callback so we can see if it is called properly
|
941
952
|
callback = double("callback", :call => true)
|
@@ -961,68 +972,70 @@ module Cosmos
|
|
961
972
|
context "with values" do
|
962
973
|
before(:each) do
|
963
974
|
@test1 = @p.get_item("TEST1")
|
964
|
-
@test1.limits.enabled.
|
975
|
+
expect(@test1.limits.enabled).to be_falsey
|
965
976
|
@test1.limits.values = {:DEFAULT=>[1,2,4,5]} # red yellow
|
977
|
+
@p.update_limits_items_cache(@test1)
|
966
978
|
@p.enable_limits("TEST1")
|
967
979
|
|
968
980
|
@test2 = @p.get_item("TEST2")
|
969
|
-
@test2.limits.enabled.
|
981
|
+
expect(@test2.limits.enabled).to be_falsey
|
970
982
|
@test2.limits.values = {:DEFAULT=>[1,2,6,7,3,5]} # red yellow and blue
|
983
|
+
@p.update_limits_items_cache(@test2)
|
971
984
|
@p.enable_limits("TEST2")
|
972
985
|
|
973
986
|
@test3 = @p.get_item("TEST3")
|
974
|
-
@test3.limits.enabled.
|
987
|
+
expect(@test3.limits.enabled).to be_falsey
|
975
988
|
@test3.limits.values = {:DEFAULT=>[1,1.5,2.5,3]} # red yellow
|
989
|
+
@p.update_limits_items_cache(@test3)
|
976
990
|
@p.enable_limits("TEST3")
|
977
|
-
@p.update_limits_items_cache
|
978
991
|
|
979
992
|
# Mock the callback so we can see if it is called properly
|
980
993
|
@callback = double("callback", :call => true)
|
981
994
|
@p.limits_change_callback = @callback
|
982
995
|
end
|
983
996
|
|
984
|
-
it "
|
997
|
+
it "detects initial low states" do
|
985
998
|
@p.write("TEST1", 0)
|
986
999
|
@p.write("TEST2", 3)
|
987
1000
|
@p.write("TEST3", 1.25)
|
988
1001
|
@p.check_limits
|
989
|
-
@p.get_item("TEST1").limits.state.
|
990
|
-
@p.get_item("TEST2").limits.state.
|
991
|
-
@p.get_item("TEST3").limits.state.
|
1002
|
+
expect(@p.get_item("TEST1").limits.state).to eql :RED_LOW
|
1003
|
+
expect(@p.get_item("TEST2").limits.state).to eql :GREEN_LOW
|
1004
|
+
expect(@p.get_item("TEST3").limits.state).to eql :YELLOW_LOW
|
992
1005
|
end
|
993
1006
|
|
994
|
-
it "
|
1007
|
+
it "detects initial high states" do
|
995
1008
|
@p.write("TEST1", 6)
|
996
1009
|
@p.write("TEST2", 5)
|
997
1010
|
@p.write("TEST3", 2.75)
|
998
1011
|
@p.check_limits
|
999
|
-
@p.get_item("TEST1").limits.state.
|
1000
|
-
@p.get_item("TEST2").limits.state.
|
1001
|
-
@p.get_item("TEST3").limits.state.
|
1012
|
+
expect(@p.get_item("TEST1").limits.state).to eql :RED_HIGH
|
1013
|
+
expect(@p.get_item("TEST2").limits.state).to eql :GREEN_HIGH
|
1014
|
+
expect(@p.get_item("TEST3").limits.state).to eql :YELLOW_HIGH
|
1002
1015
|
end
|
1003
1016
|
|
1004
|
-
it "
|
1017
|
+
it "detects initial middle states" do
|
1005
1018
|
@p.write("TEST1", 3)
|
1006
1019
|
@p.write("TEST2", 4)
|
1007
1020
|
@p.write("TEST3", 2.0)
|
1008
1021
|
@p.check_limits
|
1009
|
-
@p.get_item("TEST1").limits.state.
|
1010
|
-
@p.get_item("TEST2").limits.state.
|
1011
|
-
@p.get_item("TEST3").limits.state.
|
1022
|
+
expect(@p.get_item("TEST1").limits.state).to eql :GREEN
|
1023
|
+
expect(@p.get_item("TEST2").limits.state).to eql :BLUE
|
1024
|
+
expect(@p.get_item("TEST3").limits.state).to eql :GREEN
|
1012
1025
|
end
|
1013
1026
|
|
1014
|
-
it "
|
1027
|
+
it "clears persistence when initial state is nil" do
|
1015
1028
|
@p.get_item("TEST1").limits.persistence_count = 2
|
1016
1029
|
@p.get_item("TEST2").limits.persistence_count = 3
|
1017
1030
|
@p.get_item("TEST3").limits.persistence_count = 4
|
1018
1031
|
@p.check_limits
|
1019
|
-
@p.get_item("TEST1").limits.persistence_count.
|
1020
|
-
@p.get_item("TEST2").limits.persistence_count.
|
1021
|
-
@p.get_item("TEST3").limits.persistence_count.
|
1032
|
+
expect(@p.get_item("TEST1").limits.persistence_count).to eql 0
|
1033
|
+
expect(@p.get_item("TEST2").limits.persistence_count).to eql 0
|
1034
|
+
expect(@p.get_item("TEST3").limits.persistence_count).to eql 0
|
1022
1035
|
end
|
1023
1036
|
|
1024
1037
|
context "when calling the limits_change_callback" do
|
1025
|
-
it "
|
1038
|
+
it "initiallies call only for out of limits" do
|
1026
1039
|
@p.write("TEST1", 0)
|
1027
1040
|
@p.write("TEST2", 4)
|
1028
1041
|
@p.write("TEST3", 1.25)
|
@@ -1034,7 +1047,7 @@ module Cosmos
|
|
1034
1047
|
@p.check_limits
|
1035
1048
|
end
|
1036
1049
|
|
1037
|
-
it "
|
1050
|
+
it "calls when limits change states" do
|
1038
1051
|
@p.write("TEST1", 0)
|
1039
1052
|
@p.write("TEST2", 4)
|
1040
1053
|
@p.write("TEST3", 1.25)
|
@@ -1046,7 +1059,7 @@ module Cosmos
|
|
1046
1059
|
@p.check_limits
|
1047
1060
|
end
|
1048
1061
|
|
1049
|
-
it "
|
1062
|
+
it "calls only when persistence is achieved" do
|
1050
1063
|
# First establish the green state when coming from nil
|
1051
1064
|
@p.get_item("TEST1").limits.persistence_setting = 1
|
1052
1065
|
@p.get_item("TEST2").limits.persistence_setting = 1
|
@@ -1058,9 +1071,9 @@ module Cosmos
|
|
1058
1071
|
expect(@callback).to receive(:call).with(@p, @test2,nil,4,true)
|
1059
1072
|
expect(@callback).to receive(:call).with(@p, @test3,nil,2.0,true)
|
1060
1073
|
@p.check_limits
|
1061
|
-
@test1.limits.state.
|
1062
|
-
@test2.limits.state.
|
1063
|
-
@test3.limits.state.
|
1074
|
+
expect(@test1.limits.state).to eql :GREEN
|
1075
|
+
expect(@test2.limits.state).to eql :BLUE
|
1076
|
+
expect(@test3.limits.state).to eql :GREEN
|
1064
1077
|
|
1065
1078
|
# Now test the persistence setting by going out of limits
|
1066
1079
|
@p.get_item("TEST1").limits.persistence_setting = 2
|
@@ -1071,75 +1084,75 @@ module Cosmos
|
|
1071
1084
|
@p.write("TEST2", 8)
|
1072
1085
|
@p.write("TEST3", 1.25)
|
1073
1086
|
@p.check_limits
|
1074
|
-
@test1.limits.state.
|
1075
|
-
@test2.limits.state.
|
1076
|
-
@test3.limits.state.
|
1087
|
+
expect(@test1.limits.state).to eql :GREEN
|
1088
|
+
expect(@test2.limits.state).to eql :BLUE
|
1089
|
+
expect(@test3.limits.state).to eql :GREEN
|
1077
1090
|
|
1078
1091
|
@p.write("TEST1", 0)
|
1079
1092
|
@p.write("TEST2", 8)
|
1080
1093
|
@p.write("TEST3", 1.25)
|
1081
1094
|
expect(@callback).to receive(:call).with(@p, @test1,:GREEN,0,true)
|
1082
1095
|
@p.check_limits
|
1083
|
-
@test1.limits.state.
|
1084
|
-
@test2.limits.state.
|
1085
|
-
@test3.limits.state.
|
1096
|
+
expect(@test1.limits.state).to eql :RED_LOW
|
1097
|
+
expect(@test2.limits.state).to eql :BLUE
|
1098
|
+
expect(@test3.limits.state).to eql :GREEN
|
1086
1099
|
|
1087
1100
|
@p.write("TEST1", 0)
|
1088
1101
|
@p.write("TEST2", 8)
|
1089
1102
|
@p.write("TEST3", 1.25)
|
1090
1103
|
expect(@callback).to receive(:call).with(@p, @test2,:BLUE,8,true)
|
1091
1104
|
@p.check_limits
|
1092
|
-
@test1.limits.state.
|
1093
|
-
@test2.limits.state.
|
1094
|
-
@test3.limits.state.
|
1105
|
+
expect(@test1.limits.state).to eql :RED_LOW
|
1106
|
+
expect(@test2.limits.state).to eql :RED_HIGH
|
1107
|
+
expect(@test3.limits.state).to eql :GREEN
|
1095
1108
|
|
1096
1109
|
@p.write("TEST1", 0)
|
1097
1110
|
@p.write("TEST2", 8)
|
1098
1111
|
@p.write("TEST3", 1.25)
|
1099
1112
|
expect(@callback).to receive(:call).with(@p, @test3,:GREEN,1.25,true)
|
1100
1113
|
@p.check_limits
|
1101
|
-
@test1.limits.state.
|
1102
|
-
@test2.limits.state.
|
1103
|
-
@test3.limits.state.
|
1114
|
+
expect(@test1.limits.state).to eql :RED_LOW
|
1115
|
+
expect(@test2.limits.state).to eql :RED_HIGH
|
1116
|
+
expect(@test3.limits.state).to eql :YELLOW_LOW
|
1104
1117
|
|
1105
1118
|
# Now go back to good on everything and verify persistence still applies
|
1106
1119
|
@p.write("TEST1", 3)
|
1107
1120
|
@p.write("TEST2", 4)
|
1108
1121
|
@p.write("TEST3", 2.0)
|
1109
1122
|
@p.check_limits
|
1110
|
-
@test1.limits.state.
|
1111
|
-
@test2.limits.state.
|
1112
|
-
@test3.limits.state.
|
1123
|
+
expect(@test1.limits.state).to eql :RED_LOW
|
1124
|
+
expect(@test2.limits.state).to eql :RED_HIGH
|
1125
|
+
expect(@test3.limits.state).to eql :YELLOW_LOW
|
1113
1126
|
|
1114
1127
|
@p.write("TEST1", 3)
|
1115
1128
|
@p.write("TEST2", 4)
|
1116
1129
|
@p.write("TEST3", 2.0)
|
1117
1130
|
expect(@callback).to receive(:call).with(@p, @test1,:RED_LOW,3,true)
|
1118
1131
|
@p.check_limits
|
1119
|
-
@test1.limits.state.
|
1120
|
-
@test2.limits.state.
|
1121
|
-
@test3.limits.state.
|
1132
|
+
expect(@test1.limits.state).to eql :GREEN
|
1133
|
+
expect(@test2.limits.state).to eql :RED_HIGH
|
1134
|
+
expect(@test3.limits.state).to eql :YELLOW_LOW
|
1122
1135
|
|
1123
1136
|
@p.write("TEST1", 3)
|
1124
1137
|
@p.write("TEST2", 4)
|
1125
1138
|
@p.write("TEST3", 2.0)
|
1126
1139
|
expect(@callback).to receive(:call).with(@p, @test2,:RED_HIGH,4,true)
|
1127
1140
|
@p.check_limits
|
1128
|
-
@test1.limits.state.
|
1129
|
-
@test2.limits.state.
|
1130
|
-
@test3.limits.state.
|
1141
|
+
expect(@test1.limits.state).to eql :GREEN
|
1142
|
+
expect(@test2.limits.state).to eql :BLUE
|
1143
|
+
expect(@test3.limits.state).to eql :YELLOW_LOW
|
1131
1144
|
|
1132
1145
|
@p.write("TEST1", 3)
|
1133
1146
|
@p.write("TEST2", 4)
|
1134
1147
|
@p.write("TEST3", 2.0)
|
1135
1148
|
expect(@callback).to receive(:call).with(@p, @test3,:YELLOW_LOW,2.0,true)
|
1136
1149
|
@p.check_limits
|
1137
|
-
@test1.limits.state.
|
1138
|
-
@test2.limits.state.
|
1139
|
-
@test3.limits.state.
|
1150
|
+
expect(@test1.limits.state).to eql :GREEN
|
1151
|
+
expect(@test2.limits.state).to eql :BLUE
|
1152
|
+
expect(@test3.limits.state).to eql :GREEN
|
1140
1153
|
end
|
1141
1154
|
|
1142
|
-
it "
|
1155
|
+
it "does not call when state changes before persistence is achieved" do
|
1143
1156
|
# First establish the green state when coming from nil
|
1144
1157
|
@p.get_item("TEST1").limits.persistence_setting = 1
|
1145
1158
|
@p.get_item("TEST2").limits.persistence_setting = 1
|
@@ -1151,9 +1164,9 @@ module Cosmos
|
|
1151
1164
|
expect(@callback).to receive(:call).with(@p, @test2,nil,4,true)
|
1152
1165
|
expect(@callback).to receive(:call).with(@p, @test3,nil,2.0,true)
|
1153
1166
|
@p.check_limits
|
1154
|
-
@test1.limits.state.
|
1155
|
-
@test2.limits.state.
|
1156
|
-
@test3.limits.state.
|
1167
|
+
expect(@test1.limits.state).to eql :GREEN
|
1168
|
+
expect(@test2.limits.state).to eql :BLUE
|
1169
|
+
expect(@test3.limits.state).to eql :GREEN
|
1157
1170
|
|
1158
1171
|
# Set all persistence the same
|
1159
1172
|
@p.get_item("TEST1").limits.persistence_setting = 3
|
@@ -1166,27 +1179,27 @@ module Cosmos
|
|
1166
1179
|
@p.write("TEST3", 1.25)
|
1167
1180
|
expect(@callback).to_not receive(:call)
|
1168
1181
|
@p.check_limits
|
1169
|
-
@test1.limits.state.
|
1170
|
-
@test2.limits.state.
|
1171
|
-
@test3.limits.state.
|
1182
|
+
expect(@test1.limits.state).to eql :GREEN
|
1183
|
+
expect(@test2.limits.state).to eql :BLUE
|
1184
|
+
expect(@test3.limits.state).to eql :GREEN
|
1172
1185
|
|
1173
1186
|
@p.write("TEST1", 0)
|
1174
1187
|
@p.write("TEST2", 8)
|
1175
1188
|
@p.write("TEST3", 1.25)
|
1176
1189
|
expect(@callback).to_not receive(:call)
|
1177
1190
|
@p.check_limits
|
1178
|
-
@test1.limits.state.
|
1179
|
-
@test2.limits.state.
|
1180
|
-
@test3.limits.state.
|
1191
|
+
expect(@test1.limits.state).to eql :GREEN
|
1192
|
+
expect(@test2.limits.state).to eql :BLUE
|
1193
|
+
expect(@test3.limits.state).to eql :GREEN
|
1181
1194
|
|
1182
1195
|
# Set the values back to good
|
1183
1196
|
@p.write("TEST1", 3)
|
1184
1197
|
@p.write("TEST2", 4)
|
1185
1198
|
@p.write("TEST3", 2.0)
|
1186
1199
|
@p.check_limits
|
1187
|
-
@test1.limits.state.
|
1188
|
-
@test2.limits.state.
|
1189
|
-
@test3.limits.state.
|
1200
|
+
expect(@test1.limits.state).to eql :GREEN
|
1201
|
+
expect(@test2.limits.state).to eql :BLUE
|
1202
|
+
expect(@test3.limits.state).to eql :GREEN
|
1190
1203
|
|
1191
1204
|
# Write bad values twice
|
1192
1205
|
@p.write("TEST1", 0)
|
@@ -1194,61 +1207,64 @@ module Cosmos
|
|
1194
1207
|
@p.write("TEST3", 1.25)
|
1195
1208
|
expect(@callback).to_not receive(:call)
|
1196
1209
|
@p.check_limits
|
1197
|
-
@test1.limits.state.
|
1198
|
-
@test2.limits.state.
|
1199
|
-
@test3.limits.state.
|
1210
|
+
expect(@test1.limits.state).to eql :GREEN
|
1211
|
+
expect(@test2.limits.state).to eql :BLUE
|
1212
|
+
expect(@test3.limits.state).to eql :GREEN
|
1200
1213
|
|
1201
1214
|
@p.write("TEST1", 0)
|
1202
1215
|
@p.write("TEST2", 8)
|
1203
1216
|
@p.write("TEST3", 1.25)
|
1204
1217
|
expect(@callback).to_not receive(:call)
|
1205
1218
|
@p.check_limits
|
1206
|
-
@test1.limits.state.
|
1207
|
-
@test2.limits.state.
|
1208
|
-
@test3.limits.state.
|
1219
|
+
expect(@test1.limits.state).to eql :GREEN
|
1220
|
+
expect(@test2.limits.state).to eql :BLUE
|
1221
|
+
expect(@test3.limits.state).to eql :GREEN
|
1209
1222
|
|
1210
1223
|
# Set the values back to good
|
1211
1224
|
@p.write("TEST1", 3)
|
1212
1225
|
@p.write("TEST2", 4)
|
1213
1226
|
@p.write("TEST3", 2.0)
|
1214
1227
|
@p.check_limits
|
1215
|
-
@test1.limits.state.
|
1216
|
-
@test2.limits.state.
|
1217
|
-
@test3.limits.state.
|
1228
|
+
expect(@test1.limits.state).to eql :GREEN
|
1229
|
+
expect(@test2.limits.state).to eql :BLUE
|
1230
|
+
expect(@test3.limits.state).to eql :GREEN
|
1218
1231
|
end
|
1219
1232
|
end
|
1220
1233
|
end
|
1221
1234
|
end
|
1222
1235
|
|
1223
1236
|
describe "stale" do
|
1224
|
-
it "
|
1237
|
+
it "sets all limits states to stale" do
|
1225
1238
|
p = Packet.new("tgt","pkt")
|
1226
1239
|
p.append_item("test1", 8, :UINT)
|
1227
|
-
p.get_item("TEST1")
|
1240
|
+
i = p.get_item("TEST1")
|
1241
|
+
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
1242
|
+
p.update_limits_items_cache(i)
|
1228
1243
|
p.enable_limits("TEST1")
|
1229
1244
|
p.append_item("test2", 16, :UINT)
|
1230
|
-
p.get_item("TEST2")
|
1245
|
+
i = p.get_item("TEST2")
|
1246
|
+
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
1247
|
+
p.update_limits_items_cache(i)
|
1231
1248
|
p.enable_limits("TEST2")
|
1232
|
-
p.
|
1233
|
-
p.out_of_limits.should eql []
|
1249
|
+
expect(p.out_of_limits).to eql []
|
1234
1250
|
|
1235
|
-
p.stale.
|
1236
|
-
p.get_item("TEST1").limits.state.
|
1237
|
-
p.get_item("TEST2").limits.state.
|
1251
|
+
expect(p.stale).to be_truthy
|
1252
|
+
expect(p.get_item("TEST1").limits.state).to eql :STALE
|
1253
|
+
expect(p.get_item("TEST2").limits.state).to eql :STALE
|
1238
1254
|
# Update the limits
|
1239
1255
|
p.check_limits
|
1240
|
-
p.stale.
|
1241
|
-
p.get_item("TEST1").limits.state.
|
1242
|
-
p.get_item("TEST2").limits.state.
|
1256
|
+
expect(p.stale).to be_falsey
|
1257
|
+
expect(p.get_item("TEST1").limits.state).not_to eql :STALE
|
1258
|
+
expect(p.get_item("TEST2").limits.state).not_to eql :STALE
|
1243
1259
|
# set them all back to stale
|
1244
1260
|
p.set_stale
|
1245
|
-
p.get_item("TEST1").limits.state.
|
1246
|
-
p.get_item("TEST2").limits.state.
|
1261
|
+
expect(p.get_item("TEST1").limits.state).to eql :STALE
|
1262
|
+
expect(p.get_item("TEST2").limits.state).to eql :STALE
|
1247
1263
|
end
|
1248
1264
|
end
|
1249
1265
|
|
1250
1266
|
describe "clone" do
|
1251
|
-
it "
|
1267
|
+
it "duplicates the packet" do
|
1252
1268
|
p = Packet.new("tgt","pkt")
|
1253
1269
|
p.processors['processor'] = Processor.new
|
1254
1270
|
p.processors['processor'].name = "TestProcessor"
|
@@ -1256,8 +1272,8 @@ module Cosmos
|
|
1256
1272
|
# No comparison operator
|
1257
1273
|
# expect(p).to eql p2
|
1258
1274
|
expect(p).to_not be p2
|
1259
|
-
p2.target_name.
|
1260
|
-
p2.packet_name.
|
1275
|
+
expect(p2.target_name).to eql "TGT"
|
1276
|
+
expect(p2.packet_name).to eql "PKT"
|
1261
1277
|
# No comparison operator
|
1262
1278
|
# expect(p2.processors['processor']).to eql p.processors['processor']
|
1263
1279
|
expect(p2.processors['processor']).to_not be p.processors['processor']
|
@@ -1272,8 +1288,8 @@ module Cosmos
|
|
1272
1288
|
p.received_time = Time.now
|
1273
1289
|
p.received_count = 50
|
1274
1290
|
p.reset
|
1275
|
-
p.received_time.
|
1276
|
-
p.received_count.
|
1291
|
+
expect(p.received_time).to eql nil
|
1292
|
+
expect(p.received_count).to eql 0
|
1277
1293
|
end
|
1278
1294
|
|
1279
1295
|
it "clears the read conversion cache" do
|