cosmos 3.0.1 → 3.1.0
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/.coveralls.yml +1 -0
- data/.gitignore +48 -48
- data/.travis.yml +7 -7
- data/CONTRIBUTING.txt +50 -50
- data/Gemfile +6 -6
- data/Guardfile +27 -27
- data/LICENSE.txt +879 -879
- data/Manifest.txt +1116 -1114
- data/README.md +109 -107
- data/Rakefile +214 -214
- data/autohotkey/config/data/diamond.STL +57 -57
- data/autohotkey/config/system/system.txt +34 -34
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/autohotkey/config/targets/COSMOS/target.txt +5 -5
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
- data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -294
- data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
- data/autohotkey/config/targets/INST/screens/array.txt +7 -7
- data/autohotkey/config/targets/INST/screens/block.txt +8 -8
- data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
- data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
- data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
- data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
- data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
- data/autohotkey/config/targets/INST/screens/image.txt +21 -21
- data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
- data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
- data/autohotkey/config/targets/INST/screens/other.txt +25 -25
- data/autohotkey/config/targets/INST/screens/params.txt +25 -25
- data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
- data/autohotkey/config/targets/INST/target.txt +26 -26
- data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
- data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
- data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/autohotkey/config/tools/launcher/launcher.txt +38 -38
- data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
- data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
- data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
- data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
- data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
- data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
- data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
- data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
- data/autohotkey/lib/example_background_task.rb +42 -42
- data/autohotkey/lib/user_version.rb +3 -3
- data/autohotkey/procedures/clear_util.rb +7 -7
- data/autohotkey/procedures/collect.rb +18 -18
- data/autohotkey/procedures/collect_util.rb +14 -14
- data/autohotkey/procedures/example_test.rb +67 -67
- data/autohotkey/procedures/example_test2.rb +74 -74
- data/autohotkey/procedures/script_test.rb +17 -17
- data/autohotkey/procedures/syntax_error.rb +18 -18
- data/autohotkey/tools/CmdExtractorAHK +16 -16
- data/autohotkey/tools/CmdSender +14 -14
- data/autohotkey/tools/CmdSenderAHK +18 -18
- data/autohotkey/tools/CmdTlmServer +14 -14
- data/autohotkey/tools/CmdTlmServerAHK +28 -28
- data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
- data/autohotkey/tools/DataViewer +14 -14
- data/autohotkey/tools/DataViewerAHK +17 -17
- data/autohotkey/tools/HandbookCreatorAHK +20 -20
- data/autohotkey/tools/LauncherAHK +17 -17
- data/autohotkey/tools/LimitsMonitorAHK +20 -20
- data/autohotkey/tools/OpenGLBuilderAHK +20 -20
- data/autohotkey/tools/PacketViewer +14 -14
- data/autohotkey/tools/PacketViewerAHK +18 -18
- data/autohotkey/tools/PacketViewerAHK2 +17 -17
- data/autohotkey/tools/Replay +14 -14
- data/autohotkey/tools/Replay.bat +59 -59
- data/autohotkey/tools/ReplayAHK +17 -17
- data/autohotkey/tools/ScriptRunner +14 -14
- data/autohotkey/tools/ScriptRunnerAHK +20 -20
- data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
- data/autohotkey/tools/TableManager +14 -14
- data/autohotkey/tools/TableManagerAHK +30 -30
- data/autohotkey/tools/TestRunner +15 -15
- data/autohotkey/tools/TestRunnerAHK +17 -17
- data/autohotkey/tools/TestRunnerAHK2 +17 -17
- data/autohotkey/tools/TestRunnerAHK3 +17 -17
- data/autohotkey/tools/TestRunnerAHK4 +17 -17
- data/autohotkey/tools/TlmExtractor +15 -15
- data/autohotkey/tools/TlmExtractorAHK +19 -19
- data/autohotkey/tools/TlmExtractorAHK2 +16 -16
- data/autohotkey/tools/TlmExtractorAHK3 +16 -16
- data/autohotkey/tools/TlmGrapher +14 -14
- data/autohotkey/tools/TlmGrapherAHK +19 -19
- data/autohotkey/tools/TlmGrapherAHK2 +23 -23
- data/autohotkey/tools/TlmGrapherAHK3 +17 -17
- data/autohotkey/tools/TlmGrapherAHK4 +17 -17
- data/autohotkey/tools/TlmViewer +14 -14
- data/autohotkey/tools/TlmViewerAHK +28 -28
- data/autohotkey/tools/TlmViewerAHK2 +18 -18
- data/autohotkey/tools/TlmViewerAHK3 +18 -18
- data/autohotkey/tools/TlmViewerAHK4 +18 -18
- data/autohotkey/tools/TlmViewerAHK5 +18 -18
- data/autohotkey/tools/autohotkey.rb +37 -37
- data/autohotkey/tools/cmd_extractor.ahk +27 -27
- data/autohotkey/tools/cmd_sender.ahk +182 -162
- data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
- data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
- data/autohotkey/tools/data_viewer.ahk +135 -135
- data/autohotkey/tools/handbook_creator.ahk +23 -23
- data/autohotkey/tools/launcher.ahk +41 -41
- data/autohotkey/tools/limits_monitor.ahk +70 -70
- data/autohotkey/tools/open_gl_builder.ahk +134 -134
- data/autohotkey/tools/packet_viewer.ahk +143 -143
- data/autohotkey/tools/packet_viewer2.ahk +9 -9
- data/autohotkey/tools/replay.ahk +98 -98
- data/autohotkey/tools/script_runner.ahk +589 -589
- data/autohotkey/tools/script_runner2.ahk +34 -31
- data/autohotkey/tools/table_manager.ahk +220 -220
- data/autohotkey/tools/test_runner.ahk +262 -259
- data/autohotkey/tools/test_runner2.ahk +52 -52
- data/autohotkey/tools/test_runner3.ahk +13 -13
- data/autohotkey/tools/tlm_extractor.ahk +272 -272
- data/autohotkey/tools/tlm_grapher.ahk +642 -642
- data/autohotkey/tools/tlm_grapher2.ahk +115 -115
- data/autohotkey/tools/tlm_grapher3.ahk +24 -24
- data/autohotkey/tools/tlm_viewer.ahk +133 -133
- data/autohotkey/tools/tlm_viewer2.ahk +50 -49
- data/autohotkey/tools/tlm_viewer4.ahk +4 -4
- data/autohotkey/tools/tlm_viewer5.ahk +20 -20
- data/bin/cosmos +96 -96
- data/bin/cstol_converter +1166 -1166
- data/bin/rubysloc +85 -85
- data/cosmos.gemspec +98 -97
- data/data/about.txt +4 -4
- data/data/crc.txt +306 -305
- data/data/diamond.STL +57 -57
- data/data/legal.txt +9 -9
- data/demo/Gemfile +6 -6
- data/demo/Launcher +15 -15
- data/demo/Launcher.bat +59 -59
- data/demo/Rakefile +61 -61
- data/demo/config/data/crc.txt +222 -206
- data/demo/config/data/diamond.STL +57 -57
- data/demo/config/data/meta_init.txt +4 -4
- data/demo/config/system/system.txt +34 -34
- data/demo/config/system/system2.txt +33 -33
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/demo/config/targets/COSMOS/screens/version.txt +19 -19
- data/demo/config/targets/COSMOS/target.txt +11 -11
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -3
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
- data/demo/config/targets/EXAMPLE/target.txt +6 -6
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
- data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/demo/config/targets/INST/lib/sim_inst.rb +305 -294
- data/demo/config/targets/INST/screens/adcs.txt +46 -46
- data/demo/config/targets/INST/screens/array.txt +15 -15
- data/demo/config/targets/INST/screens/block.txt +8 -8
- data/demo/config/targets/INST/screens/commanding.txt +30 -30
- data/demo/config/targets/INST/screens/graphs.txt +14 -14
- data/demo/config/targets/INST/screens/ground.txt +25 -25
- data/demo/config/targets/INST/screens/hs.txt +44 -44
- data/demo/config/targets/INST/screens/latest.txt +23 -23
- data/demo/config/targets/INST/screens/other.txt +29 -29
- data/demo/config/targets/INST/screens/tabs.txt +70 -70
- data/demo/config/targets/INST/target.txt +33 -33
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
- data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -12
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +54 -48
- data/demo/config/targets/TEMPLATED/target.txt +6 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
- data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
- data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
- data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/demo/config/tools/launcher/launcher.txt +45 -45
- data/demo/config/tools/launcher/launcher2.txt +45 -45
- data/demo/config/tools/script_runner/script_runner.txt +3 -3
- data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
- data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
- data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
- data/demo/config/tools/test_runner/test_runner.txt +17 -17
- data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
- data/demo/lib/example_background_task.rb +57 -52
- data/demo/lib/example_target.rb +113 -108
- data/demo/lib/scpi_target.rb +74 -74
- data/demo/lib/user_version.rb +3 -3
- data/demo/procedures/checks.rb +11 -11
- data/demo/procedures/clear_util.rb +7 -7
- data/demo/procedures/collect.rb +18 -18
- data/demo/procedures/collect_util.rb +14 -14
- data/demo/procedures/cosmos_api_test.rb +293 -293
- data/demo/procedures/disconnect.rb +29 -29
- data/demo/procedures/example_test.rb +182 -182
- data/demo/procedures/plot_test.rb +8 -8
- data/demo/procedures/run_example_test.rb +3 -3
- data/demo/procedures/test.rb +51 -51
- data/demo/tools/CmdExtractor +15 -15
- data/demo/tools/CmdExtractor.bat +59 -59
- data/demo/tools/CmdSender +15 -15
- data/demo/tools/CmdSender.bat +59 -59
- data/demo/tools/CmdTlmServer +15 -15
- data/demo/tools/CmdTlmServer.bat +59 -59
- data/demo/tools/DataViewer +15 -15
- data/demo/tools/DataViewer.bat +59 -59
- data/demo/tools/ExampleTarget +15 -15
- data/demo/tools/ExampleTarget.bat +59 -59
- data/demo/tools/HandbookCreator +15 -15
- data/demo/tools/HandbookCreator.bat +61 -61
- data/demo/tools/Launcher +15 -15
- data/demo/tools/Launcher.bat +59 -59
- data/demo/tools/LimitsMonitor +15 -15
- data/demo/tools/LimitsMonitor.bat +59 -59
- data/demo/tools/OpenGLBuilder +15 -15
- data/demo/tools/OpenGLBuilder.bat +59 -59
- data/demo/tools/PacketViewer +15 -15
- data/demo/tools/PacketViewer.bat +59 -59
- data/demo/tools/Replay +15 -15
- data/demo/tools/Replay.bat +59 -59
- data/demo/tools/ScpiTarget +15 -15
- data/demo/tools/ScpiTarget.bat +59 -59
- data/demo/tools/ScriptRunner +15 -15
- data/demo/tools/ScriptRunner.bat +59 -59
- data/demo/tools/TableManager +15 -15
- data/demo/tools/TableManager.bat +59 -59
- data/demo/tools/TestRunner +15 -15
- data/demo/tools/TestRunner.bat +59 -59
- data/demo/tools/TlmExtractor +15 -15
- data/demo/tools/TlmExtractor.bat +59 -59
- data/demo/tools/TlmGrapher +15 -15
- data/demo/tools/TlmGrapher.bat +59 -59
- data/demo/tools/TlmViewer +15 -15
- data/demo/tools/TlmViewer.bat +59 -59
- data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- data/ext/cosmos/ext/array/array.c +111 -111
- data/ext/cosmos/ext/array/extconf.rb +13 -13
- data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
- data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
- data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
- data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
- data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
- data/ext/cosmos/ext/crc/crc.c +341 -341
- data/ext/cosmos/ext/crc/extconf.rb +12 -12
- data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
- data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
- data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
- data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -261
- data/ext/cosmos/ext/packet/extconf.rb +13 -13
- data/ext/cosmos/ext/packet/packet.c +339 -339
- data/ext/cosmos/ext/platform/extconf.rb +13 -13
- data/ext/cosmos/ext/platform/platform.c +81 -81
- data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
- data/ext/cosmos/ext/string/extconf.rb +13 -13
- data/ext/cosmos/ext/string/string.c +49 -49
- data/ext/cosmos/ext/structure/structure.c +894 -894
- data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
- data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
- data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
- data/ext/cosmos/ext/telemetry/telemetry.c +306 -306
- data/ext/mkrf_conf.rb +40 -40
- data/install/Gemfile +6 -6
- data/install/Launcher +14 -14
- data/install/Launcher.bat +59 -59
- data/install/Rakefile +61 -61
- data/install/config/data/crc.txt +134 -133
- data/install/config/system/system.txt +29 -29
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/install/config/targets/COSMOS/target.txt +8 -8
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/install/config/tools/data_viewer/data_viewer.txt +3 -3
- data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/install/config/tools/launcher/launcher.txt +39 -39
- data/install/config/tools/script_runner/script_runner.txt +3 -3
- data/install/config/tools/test_runner/test_runner.txt +8 -8
- data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
- data/install/lib/user_version.rb +3 -3
- data/install/tools/CmdExtractor +15 -15
- data/install/tools/CmdExtractor.bat +59 -59
- data/install/tools/CmdSender +15 -15
- data/install/tools/CmdSender.bat +59 -59
- data/install/tools/CmdTlmServer +15 -15
- data/install/tools/CmdTlmServer.bat +59 -59
- data/install/tools/DataViewer +15 -15
- data/install/tools/DataViewer.bat +59 -59
- data/install/tools/HandbookCreator +15 -15
- data/install/tools/HandbookCreator.bat +61 -61
- data/install/tools/Launcher +15 -15
- data/install/tools/Launcher.bat +59 -59
- data/install/tools/LimitsMonitor +15 -15
- data/install/tools/LimitsMonitor.bat +59 -59
- data/install/tools/OpenGLBuilder +15 -15
- data/install/tools/OpenGLBuilder.bat +59 -59
- data/install/tools/PacketViewer +15 -15
- data/install/tools/PacketViewer.bat +59 -59
- data/install/tools/Replay +15 -15
- data/install/tools/Replay.bat +59 -59
- data/install/tools/ScriptRunner +15 -15
- data/install/tools/ScriptRunner.bat +59 -59
- data/install/tools/TableManager +15 -15
- data/install/tools/TableManager.bat +59 -59
- data/install/tools/TestRunner +15 -15
- data/install/tools/TestRunner.bat +59 -59
- data/install/tools/TlmExtractor +15 -15
- data/install/tools/TlmExtractor.bat +59 -59
- data/install/tools/TlmGrapher +15 -15
- data/install/tools/TlmGrapher.bat +59 -59
- data/install/tools/TlmViewer +15 -15
- data/install/tools/TlmViewer.bat +59 -59
- data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- data/lib/cosmos.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
- data/lib/cosmos/config/config_parser.rb +324 -324
- data/lib/cosmos/conversions.rb +13 -13
- data/lib/cosmos/conversions/conversion.rb +47 -47
- data/lib/cosmos/conversions/generic_conversion.rb +55 -55
- data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
- data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
- data/lib/cosmos/conversions/processor_conversion.rb +46 -46
- data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
- data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
- data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
- data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
- data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
- data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
- data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
- data/lib/cosmos/core_ext.rb +18 -18
- data/lib/cosmos/core_ext/array.rb +354 -354
- data/lib/cosmos/core_ext/class.rb +51 -51
- data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
- data/lib/cosmos/core_ext/exception.rb +52 -52
- data/lib/cosmos/core_ext/file.rb +75 -75
- data/lib/cosmos/core_ext/hash.rb +28 -28
- data/lib/cosmos/core_ext/io.rb +75 -75
- data/lib/cosmos/core_ext/kernel.rb +38 -38
- data/lib/cosmos/core_ext/math.rb +119 -119
- data/lib/cosmos/core_ext/matrix.rb +146 -146
- data/lib/cosmos/core_ext/objectspace.rb +29 -29
- data/lib/cosmos/core_ext/range.rb +22 -22
- data/lib/cosmos/core_ext/socket.rb +32 -32
- data/lib/cosmos/core_ext/string.rb +310 -310
- data/lib/cosmos/core_ext/stringio.rb +24 -24
- data/lib/cosmos/core_ext/time.rb +446 -446
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
- data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
- data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
- data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
- data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -317
- data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
- data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
- data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -196
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
- data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
- data/lib/cosmos/gui/dialogs/splash.rb +113 -113
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
- data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
- data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -494
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
- data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
- data/lib/cosmos/gui/line_graph/lines.rb +290 -290
- data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -459
- data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
- data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
- data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
- data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
- data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
- data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
- data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -712
- data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
- data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
- data/lib/cosmos/gui/opengl/opengl.rb +8 -8
- data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
- data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
- data/lib/cosmos/gui/qt.rb +813 -786
- data/lib/cosmos/gui/qt_tool.rb +378 -373
- data/lib/cosmos/gui/text/completion.rb +381 -381
- data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
- data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
- data/lib/cosmos/gui/text/ruby_editor.rb +395 -395
- data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
- data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
- data/lib/cosmos/interfaces.rb +11 -11
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -149
- data/lib/cosmos/interfaces/interface.rb +213 -213
- data/lib/cosmos/interfaces/linc_interface.rb +360 -360
- data/lib/cosmos/interfaces/serial_interface.rb +76 -76
- data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -128
- data/lib/cosmos/interfaces/stream_interface.rb +156 -156
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
- data/lib/cosmos/interfaces/udp_interface.rb +173 -173
- data/lib/cosmos/io/buffered_file.rb +11 -11
- data/lib/cosmos/io/cosmos_snmp.rb +50 -50
- data/lib/cosmos/io/io_multiplexer.rb +89 -89
- data/lib/cosmos/io/json_drb.rb +344 -320
- data/lib/cosmos/io/json_drb_object.rb +137 -137
- data/lib/cosmos/io/json_rpc.rb +365 -365
- data/lib/cosmos/io/posix_serial_driver.rb +145 -145
- data/lib/cosmos/io/raw_logger.rb +174 -174
- data/lib/cosmos/io/raw_logger_pair.rb +71 -71
- data/lib/cosmos/io/serial_driver.rb +85 -85
- data/lib/cosmos/io/stderr.rb +36 -36
- data/lib/cosmos/io/stdout.rb +36 -36
- data/lib/cosmos/io/tcpip_server.rb +583 -532
- data/lib/cosmos/io/udp_sockets.rb +152 -152
- data/lib/cosmos/io/win32_serial_driver.rb +147 -147
- data/lib/cosmos/packet_logs.rb +6 -6
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
- data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
- data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
- data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
- data/lib/cosmos/packets/binary_accessor.rb +921 -921
- data/lib/cosmos/packets/commands.rb +291 -291
- data/lib/cosmos/packets/limits.rb +263 -263
- data/lib/cosmos/packets/limits_response.rb +38 -38
- data/lib/cosmos/packets/packet.rb +714 -699
- data/lib/cosmos/packets/packet_config.rb +1034 -1034
- data/lib/cosmos/packets/packet_item.rb +317 -317
- data/lib/cosmos/packets/packet_item_limits.rb +128 -128
- data/lib/cosmos/packets/structure.rb +421 -386
- data/lib/cosmos/packets/structure_item.rb +233 -233
- data/lib/cosmos/packets/telemetry.rb +317 -317
- data/lib/cosmos/processors.rb +6 -6
- data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
- data/lib/cosmos/processors/processor.rb +71 -71
- data/lib/cosmos/processors/statistics_processor.rb +65 -65
- data/lib/cosmos/processors/watermark_processor.rb +44 -44
- data/lib/cosmos/script.rb +9 -9
- data/lib/cosmos/script/extract.rb +115 -115
- data/lib/cosmos/script/script.rb +1513 -1493
- data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
- data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
- data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
- data/lib/cosmos/streams/serial_stream.rb +152 -143
- data/lib/cosmos/streams/stream.rb +57 -57
- data/lib/cosmos/streams/stream_protocol.rb +369 -369
- data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
- data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
- data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
- data/lib/cosmos/system.rb +4 -4
- data/lib/cosmos/system/system.rb +558 -558
- data/lib/cosmos/system/target.rb +178 -178
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
- data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
- data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +936 -940
- data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
- data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
- data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +628 -600
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
- data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
- data/lib/cosmos/tools/launcher/launcher.rb +184 -184
- data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
- data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
- data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
- data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -525
- data/lib/cosmos/tools/replay/replay.rb +495 -488
- data/lib/cosmos/tools/replay/replay_server.rb +91 -91
- data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
- data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
- data/lib/cosmos/tools/table_manager/table.rb +70 -70
- data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
- data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
- data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
- data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
- data/lib/cosmos/tools/test_runner/test.rb +480 -480
- data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
- data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -94
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -180
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -173
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -320
- data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
- data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
- data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
- data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
- data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
- data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
- data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -1278
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +111 -95
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +72 -66
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
- data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -458
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -70
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
- data/lib/cosmos/top_level.rb +647 -596
- data/lib/cosmos/utilities.rb +11 -10
- data/lib/cosmos/utilities/crc.rb +166 -166
- data/lib/cosmos/utilities/csv.rb +83 -83
- data/lib/cosmos/utilities/logger.rb +137 -137
- data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
- data/lib/cosmos/utilities/message_log.rb +74 -74
- data/lib/cosmos/utilities/quaternion.rb +258 -258
- data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
- data/lib/cosmos/utilities/simulated_target.rb +99 -99
- data/lib/cosmos/utilities/sleeper.rb +44 -0
- data/lib/cosmos/version.rb +12 -12
- data/lib/cosmos/win32/excel.rb +66 -66
- data/lib/cosmos/win32/win32.rb +387 -387
- data/lib/cosmos/win32/win32_main.rb +311 -311
- data/roodi.yml +24 -24
- data/run_gui_tests.bat +32 -32
- data/spec/ccsds/ccsds_packet_spec.rb +67 -67
- data/spec/ccsds/ccsds_parser_spec.rb +148 -148
- data/spec/config/config_parser_spec.rb +322 -322
- data/spec/conversions/conversion_spec.rb +31 -31
- data/spec/conversions/generic_conversion_spec.rb +45 -45
- data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
- data/spec/conversions/polynomial_conversion_spec.rb +40 -40
- data/spec/conversions/processor_conversion_spec.rb +45 -45
- data/spec/conversions/received_count_conversion_spec.rb +43 -43
- data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
- data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
- data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
- data/spec/core_ext/array_spec.rb +186 -186
- data/spec/core_ext/class_spec.rb +36 -36
- data/spec/core_ext/cosmos_io_spec.rb +77 -77
- data/spec/core_ext/exception_spec.rb +91 -91
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +24 -24
- data/spec/core_ext/io_spec.rb +46 -46
- data/spec/core_ext/kernel_spec.rb +54 -54
- data/spec/core_ext/math_spec.rb +116 -116
- data/spec/core_ext/matrix_spec.rb +66 -66
- data/spec/core_ext/objectspace_spec.rb +29 -29
- data/spec/core_ext/range_spec.rb +21 -21
- data/spec/core_ext/socket_spec.rb +32 -32
- data/spec/core_ext/string_spec.rb +223 -223
- data/spec/core_ext/stringio_spec.rb +21 -21
- data/spec/core_ext/time_spec.rb +151 -151
- data/spec/gui/line_graph/line_clip_spec.rb +322 -322
- data/spec/install/config/system/system.txt +33 -33
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/spec/install/config/targets/COSMOS/target.txt +5 -5
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
- data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -294
- data/spec/install/config/targets/INST/target.txt +10 -10
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
- data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
- data/spec/interfaces/interface_spec.rb +130 -131
- data/spec/interfaces/linc_interface_spec.rb +199 -199
- data/spec/interfaces/serial_interface_spec.rb +56 -56
- data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
- data/spec/interfaces/stream_interface_spec.rb +157 -157
- data/spec/interfaces/tcpip_client_interface_spec.rb +54 -54
- data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
- data/spec/interfaces/udp_interface_spec.rb +175 -177
- data/spec/io/buffered_file_spec.rb +113 -113
- data/spec/io/io_multiplexer_spec.rb +94 -94
- data/spec/io/json_drb_object_spec.rb +99 -99
- data/spec/io/json_drb_spec.rb +311 -311
- data/spec/io/json_rpc_spec.rb +264 -264
- data/spec/io/raw_logger_pair_spec.rb +76 -76
- data/spec/io/raw_logger_spec.rb +133 -133
- data/spec/io/serial_driver_spec.rb +61 -61
- data/spec/io/stderr_spec.rb +32 -32
- data/spec/io/stdout_spec.rb +32 -32
- data/spec/io/tcpip_server_spec.rb +338 -338
- data/spec/io/udp_sockets_spec.rb +94 -94
- data/spec/io/win32_serial_driver_spec.rb +88 -88
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
- data/spec/packet_logs/packet_log_reader_spec.rb +408 -408
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
- data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
- data/spec/packets/binary_accessor_spec.rb +2073 -2073
- data/spec/packets/commands_spec.rb +369 -369
- data/spec/packets/limits_response_spec.rb +25 -25
- data/spec/packets/limits_spec.rb +326 -326
- data/spec/packets/packet_config_spec.rb +1620 -1620
- data/spec/packets/packet_item_limits_spec.rb +161 -161
- data/spec/packets/packet_item_spec.rb +386 -386
- data/spec/packets/packet_spec.rb +1057 -949
- data/spec/packets/structure_item_spec.rb +195 -195
- data/spec/packets/structure_spec.rb +419 -419
- data/spec/packets/telemetry_spec.rb +535 -535
- data/spec/processors/new_packet_log_processor_spec.rb +39 -39
- data/spec/processors/processor_spec.rb +55 -55
- data/spec/processors/statistics_processor_spec.rb +60 -60
- data/spec/processors/watermark_processor_spec.rb +51 -51
- data/spec/script/script_spec.rb +654 -654
- data/spec/spec_helper.rb +154 -148
- data/spec/streams/burst_stream_protocol_spec.rb +32 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
- data/spec/streams/length_stream_protocol_spec.rb +297 -297
- data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
- data/spec/streams/serial_stream_spec.rb +105 -105
- data/spec/streams/stream_protocol_spec.rb +332 -332
- data/spec/streams/stream_spec.rb +29 -29
- data/spec/streams/tcpip_client_stream_spec.rb +54 -54
- data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
- data/spec/streams/template_stream_protocol_spec.rb +151 -151
- data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
- data/spec/system/system_spec.rb +645 -645
- data/spec/system/target_spec.rb +248 -248
- data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +411 -411
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
- data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
- data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
- data/spec/top_level/top_level_spec.rb +334 -321
- data/spec/utilities/crc_spec.rb +45 -45
- data/spec/utilities/csv_spec.rb +97 -97
- data/spec/utilities/logger_spec.rb +102 -102
- data/spec/utilities/message_log_spec.rb +89 -89
- data/spec/utilities/quaternion_spec.rb +107 -107
- data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
- data/tasks/manifest.rake +22 -22
- data/tasks/spec.rake +23 -23
- metadata +18 -2
data/spec/system/system_spec.rb
CHANGED
|
@@ -1,645 +1,645 @@
|
|
|
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 'spec_helper'
|
|
12
|
-
require 'cosmos'
|
|
13
|
-
require 'cosmos/system/system'
|
|
14
|
-
require 'tempfile'
|
|
15
|
-
|
|
16
|
-
module Cosmos
|
|
17
|
-
|
|
18
|
-
describe System do
|
|
19
|
-
before(:all) do
|
|
20
|
-
clean_config()
|
|
21
|
-
System.class_eval('@@instance = nil')
|
|
22
|
-
|
|
23
|
-
# Save system.txt
|
|
24
|
-
@config_file = File.join(Cosmos::USERPATH,'config','system','system.txt')
|
|
25
|
-
FileUtils.mv @config_file, Cosmos::USERPATH
|
|
26
|
-
|
|
27
|
-
# Create a dummy system.txt
|
|
28
|
-
File.open(@config_file,'w') {|file| file.puts "# This is a comment" }
|
|
29
|
-
@config_targets = File.join(Cosmos::USERPATH,'config','targets')
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
after(:all) do
|
|
33
|
-
# Restore system.txt
|
|
34
|
-
FileUtils.mv File.join(Cosmos::USERPATH, 'system.txt'),
|
|
35
|
-
File.join(Cosmos::USERPATH,'config','system')
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
after(:each) do
|
|
39
|
-
clean_config()
|
|
40
|
-
System.class_eval('@@instance = nil')
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
describe "instance" do
|
|
44
|
-
it "should create default ports" do
|
|
45
|
-
# Don't check the actual port numbers but just that they exist
|
|
46
|
-
System.ports.keys.should eql %w(CTS_API TLMVIEWER_API CTS_PREIDENTIFIED)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it "should create default paths" do
|
|
50
|
-
# Don't check the actual paths but just that they exist
|
|
51
|
-
System.paths.keys.should eql %w(LOGS TMP SAVED_CONFIG TABLES HANDBOOKS PROCEDURES)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
describe "System.commands" do
|
|
56
|
-
it "should only contain UNKNOWN" do
|
|
57
|
-
System.commands.target_names.should eql ["UNKNOWN"]
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should log errors saving the configuration" do
|
|
61
|
-
# Force a reload of the configuration
|
|
62
|
-
System.class_eval('@@instance = nil')
|
|
63
|
-
|
|
64
|
-
capture_io do |stdout|
|
|
65
|
-
allow(FileUtils).to receive(:mkdir_p) { raise "Error" }
|
|
66
|
-
System.commands.target_names.should eql ["UNKNOWN"]
|
|
67
|
-
stdout.string.should match "Problem saving configuration"
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
describe "System.telemetry" do
|
|
73
|
-
it "should only contain UNKNOWN" do
|
|
74
|
-
System.telemetry.target_names.should eql ["UNKNOWN"]
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
describe "System.limits" do
|
|
79
|
-
it "should include the DEFAULT limit set" do
|
|
80
|
-
System.limits.sets.should include :DEFAULT
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
context "with valid targets" do
|
|
85
|
-
before(:all) do
|
|
86
|
-
# Write the system.txt file to auto declare targets
|
|
87
|
-
File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
describe "System.clear_counters" do
|
|
91
|
-
it "should clear the target, command and telemetry counters" do
|
|
92
|
-
System.targets.each do |name, tgt|
|
|
93
|
-
tgt.cmd_cnt = 100
|
|
94
|
-
tgt.tlm_cnt = 100
|
|
95
|
-
end
|
|
96
|
-
System.commands.all do |tgt, pkt|
|
|
97
|
-
pkt.received_count = 100
|
|
98
|
-
end
|
|
99
|
-
System.telemetry.all do |tgt, pkt|
|
|
100
|
-
pkt.received_count = 100
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
System.clear_counters
|
|
104
|
-
|
|
105
|
-
System.targets.each do |name, tgt|
|
|
106
|
-
tgt.cmd_cnt.should eql 0
|
|
107
|
-
tgt.tlm_cnt.should eql 0
|
|
108
|
-
end
|
|
109
|
-
System.commands.all do |tgt, pkt|
|
|
110
|
-
pkt.received_count.should eql 0
|
|
111
|
-
end
|
|
112
|
-
System.telemetry.all do |tgt, pkt|
|
|
113
|
-
pkt.received_count.should eql 0
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
describe "packets and System.packets" do
|
|
119
|
-
it "should calculate MD5s across all the target files" do
|
|
120
|
-
capture_io do |stdout|
|
|
121
|
-
# This line actually does the work of reading the configuration
|
|
122
|
-
System.telemetry.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
123
|
-
System.commands.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
124
|
-
|
|
125
|
-
stdout.string.should match "Marshal file does not exist"
|
|
126
|
-
|
|
127
|
-
# Reset stdout for another go at the processing
|
|
128
|
-
stdout.rewind
|
|
129
|
-
# Reset the instance variable so it will read the new configuration
|
|
130
|
-
System.class_eval('@@instance = nil')
|
|
131
|
-
# This line actually does the work of reading the configuration
|
|
132
|
-
System.telemetry.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
133
|
-
System.commands.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
134
|
-
|
|
135
|
-
stdout.string.should match "Marshal load success"
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "should handle target parsing errors" do
|
|
140
|
-
capture_io do |stdout|
|
|
141
|
-
allow_any_instance_of(PacketConfig).to receive(:process_file) { raise "ProcessError" }
|
|
142
|
-
# This line actually does the work of reading the configuration
|
|
143
|
-
expect { System.telemetry.target_names.should eql ['COSMOS','INST','META','UNKNOWN'] }.to raise_error("ProcessError")
|
|
144
|
-
|
|
145
|
-
stdout.string.should match "Problem processing"
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
describe "load_configuration" do
|
|
151
|
-
after(:all) do
|
|
152
|
-
File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'))
|
|
153
|
-
File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'))
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
it "should load the initial configuration" do
|
|
157
|
-
System.load_configuration
|
|
158
|
-
System.commands.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
159
|
-
System.telemetry.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
it "should load a named configuration" do
|
|
163
|
-
File.open(@config_file,'w') do |file|
|
|
164
|
-
file.puts "DECLARE_TARGET COSMOS"
|
|
165
|
-
file.puts "DECLARE_TARGET COSMOS OVERRIDE"
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
# Load the original configuration
|
|
169
|
-
original_config_name = System.load_configuration()
|
|
170
|
-
System.telemetry.target_names.should eql %w(COSMOS OVERRIDE UNKNOWN)
|
|
171
|
-
original_pkts = System.telemetry.packets('COSMOS').keys
|
|
172
|
-
|
|
173
|
-
# Create a new configuration by writing another telemetry file
|
|
174
|
-
File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'),'w') do |file|
|
|
175
|
-
file.puts "TELEMETRY COSMOS TEST1 BIG_ENDIAN"
|
|
176
|
-
file.puts " APPEND_ITEM DATA 240 STRING"
|
|
177
|
-
end
|
|
178
|
-
System.instance.process_file(@config_file)
|
|
179
|
-
# Verify the new telemetry packet is there
|
|
180
|
-
System.telemetry.packets('COSMOS').keys.should include "TEST1"
|
|
181
|
-
second_config_name = System.configuration_name
|
|
182
|
-
|
|
183
|
-
# Now load the original configuration
|
|
184
|
-
name = System.load_configuration(original_config_name)
|
|
185
|
-
original_config_name.should eql name
|
|
186
|
-
System.telemetry.packets('COSMOS').keys.should_not include "TEST1"
|
|
187
|
-
|
|
188
|
-
# Create yet another configuration by writing another telemetry file
|
|
189
|
-
File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'),'w') do |file|
|
|
190
|
-
file.puts "TELEMETRY COSMOS TEST2 BIG_ENDIAN"
|
|
191
|
-
file.puts " APPEND_ITEM DATA 240 STRING"
|
|
192
|
-
end
|
|
193
|
-
System.instance.process_file(@config_file)
|
|
194
|
-
names = []
|
|
195
|
-
# Verify the new telemetry packet is there as well as the second one
|
|
196
|
-
System.telemetry.packets('COSMOS').keys.should include("TEST1", "TEST2")
|
|
197
|
-
third_config_name = System.configuration_name
|
|
198
|
-
|
|
199
|
-
# Try loading something that doesn't exist
|
|
200
|
-
# It should fail and reload the original configuration
|
|
201
|
-
name = System.load_configuration("BLAH")
|
|
202
|
-
name.should eql original_config_name
|
|
203
|
-
|
|
204
|
-
# Now load the second configuration. It shouldn't have the most
|
|
205
|
-
# recently defined telemetry packet.
|
|
206
|
-
System.load_configuration(second_config_name)
|
|
207
|
-
System.telemetry.packets('COSMOS').keys.should include "TEST1"
|
|
208
|
-
System.telemetry.packets('COSMOS').keys.should_not include "TEST2"
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
describe "process_file" do
|
|
214
|
-
before(:all) do
|
|
215
|
-
begin
|
|
216
|
-
# Move the targets directory out of the way so we can make our own
|
|
217
|
-
FileUtils.mv @config_targets, Cosmos::USERPATH
|
|
218
|
-
FileUtils.mkdir_p(@config_targets)
|
|
219
|
-
File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
|
|
220
|
-
rescue
|
|
221
|
-
puts "Cannot move targets folder... probably due to open editor or explorer"
|
|
222
|
-
exit 1
|
|
223
|
-
end
|
|
224
|
-
end
|
|
225
|
-
after(:all) do
|
|
226
|
-
# Restore the targets directory
|
|
227
|
-
FileUtils.rm_rf @config_targets
|
|
228
|
-
FileUtils.mv File.join(Cosmos::USERPATH, 'targets'), File.join(Cosmos::USERPATH, 'config')
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
it "should complain about unknown keywords" do
|
|
232
|
-
tf = Tempfile.new('unittest')
|
|
233
|
-
tf.puts("BLAH")
|
|
234
|
-
tf.close
|
|
235
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Unknown keyword 'BLAH'")
|
|
236
|
-
tf.unlink
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
context "with AUTO_DECLARE_TARGETS" do
|
|
240
|
-
it "should take 0 parameters" do
|
|
241
|
-
tf = Tempfile.new('unittest')
|
|
242
|
-
tf.puts("AUTO_DECLARE_TARGETS TRUE")
|
|
243
|
-
tf.close
|
|
244
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for AUTO_DECLARE_TARGETS.")
|
|
245
|
-
tf.unlink
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
it "should complain if config/targets doesn't exist" do
|
|
249
|
-
tf = Tempfile.new('unittest')
|
|
250
|
-
tf.puts("AUTO_DECLARE_TARGETS")
|
|
251
|
-
tf.close
|
|
252
|
-
FileUtils.rm_rf(@config_targets)
|
|
253
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /\/config\/targets must exist/)
|
|
254
|
-
FileUtils.mkdir_p(@config_targets)
|
|
255
|
-
tf.unlink
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
it "should complain if target directories aren't uppercase" do
|
|
259
|
-
tf = Tempfile.new('unittest')
|
|
260
|
-
tf.puts("AUTO_DECLARE_TARGETS")
|
|
261
|
-
tf.close
|
|
262
|
-
FileUtils.mkdir_p(File.join(@config_targets, 'tgt'))
|
|
263
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Target folder must be uppercase: 'tgt'")
|
|
264
|
-
Dir.rmdir(File.join(@config_targets, 'tgt'))
|
|
265
|
-
tf.unlink
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
it "should process target directories with the SYSTEM directory last" do
|
|
269
|
-
tf = Tempfile.new('unittest')
|
|
270
|
-
tf.puts("AUTO_DECLARE_TARGETS")
|
|
271
|
-
tf.close
|
|
272
|
-
FileUtils.mkdir_p(File.join(@config_targets, 'ABC'))
|
|
273
|
-
FileUtils.mkdir_p(File.join(@config_targets, 'SYSTEM'))
|
|
274
|
-
FileUtils.mkdir_p(File.join(@config_targets, 'XYZ'))
|
|
275
|
-
System.instance.process_file(tf.path)
|
|
276
|
-
# Since Ruby 1.9+ uses ordered Hashes we can ask for the keys and
|
|
277
|
-
# SYSTEM should be last
|
|
278
|
-
System.instance.targets.keys.should eql %w(ABC XYZ SYSTEM)
|
|
279
|
-
Dir.rmdir(File.join(@config_targets, 'ABC'))
|
|
280
|
-
Dir.rmdir(File.join(@config_targets, 'SYSTEM'))
|
|
281
|
-
Dir.rmdir(File.join(@config_targets, 'XYZ'))
|
|
282
|
-
tf.unlink
|
|
283
|
-
end
|
|
284
|
-
end
|
|
285
|
-
|
|
286
|
-
context "with DECLARE_TARGET" do
|
|
287
|
-
it "should take 1 or 2 parameters" do
|
|
288
|
-
tf = Tempfile.new('unittest')
|
|
289
|
-
tf.puts("DECLARE_TARGET")
|
|
290
|
-
tf.close
|
|
291
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DECLARE_TARGET.")
|
|
292
|
-
tf.unlink
|
|
293
|
-
|
|
294
|
-
tf = Tempfile.new('unittest')
|
|
295
|
-
tf.puts("DECLARE_TARGET TGT TGT TGT TGT")
|
|
296
|
-
tf.close
|
|
297
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DECLARE_TARGET.")
|
|
298
|
-
tf.unlink
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
it "should complain if the target directory doesn't exist" do
|
|
302
|
-
tf = Tempfile.new('unittest')
|
|
303
|
-
tf.puts("DECLARE_TARGET TGT")
|
|
304
|
-
tf.close
|
|
305
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Target folder must exist/)
|
|
306
|
-
tf.unlink
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
it "should process the target directory" do
|
|
310
|
-
tf = Tempfile.new('unittest')
|
|
311
|
-
tf.puts("DECLARE_TARGET TGT")
|
|
312
|
-
tf.close
|
|
313
|
-
FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
|
|
314
|
-
System.instance.process_file(tf.path)
|
|
315
|
-
tf.unlink
|
|
316
|
-
end
|
|
317
|
-
|
|
318
|
-
it "should process the target directory with substitute name" do
|
|
319
|
-
tf = Tempfile.new('unittest')
|
|
320
|
-
tf.puts("DECLARE_TARGET TGT NEW")
|
|
321
|
-
tf.close
|
|
322
|
-
FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
|
|
323
|
-
System.instance.process_file(tf.path)
|
|
324
|
-
tf.unlink
|
|
325
|
-
end
|
|
326
|
-
|
|
327
|
-
it "should process the target directory with specified target.txt" do
|
|
328
|
-
tf = Tempfile.new('unittest')
|
|
329
|
-
tf.puts("DECLARE_TARGET TGT nil target.txt")
|
|
330
|
-
tf.close
|
|
331
|
-
FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
|
|
332
|
-
File.open(File.join(@config_targets, 'TGT', 'target.txt'), 'w') do |file|
|
|
333
|
-
file.puts "# target.txt"
|
|
334
|
-
end
|
|
335
|
-
System.instance.process_file(tf.path)
|
|
336
|
-
tf.unlink
|
|
337
|
-
end
|
|
338
|
-
end
|
|
339
|
-
|
|
340
|
-
context "with PORT" do
|
|
341
|
-
it "should take 2 parameters" do
|
|
342
|
-
tf = Tempfile.new('unittest')
|
|
343
|
-
tf.puts("PORT CTS_API")
|
|
344
|
-
tf.close
|
|
345
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for PORT.")
|
|
346
|
-
tf.unlink
|
|
347
|
-
|
|
348
|
-
tf = Tempfile.new('unittest')
|
|
349
|
-
tf.puts("PORT CTS_API 8888 TRUE")
|
|
350
|
-
tf.close
|
|
351
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for PORT.")
|
|
352
|
-
tf.unlink
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
it "should complain about unknown ports" do
|
|
356
|
-
tf = Tempfile.new('unittest')
|
|
357
|
-
tf.puts("PORT MYPORT 10")
|
|
358
|
-
tf.close
|
|
359
|
-
capture_io do |stdout|
|
|
360
|
-
System.instance.process_file(tf.path)
|
|
361
|
-
stdout.string.should match /WARN: Unknown port name given: MYPORT/
|
|
362
|
-
end
|
|
363
|
-
tf.unlink
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
it "should change known ports" do
|
|
367
|
-
tf = Tempfile.new('unittest')
|
|
368
|
-
tf.puts("PORT CTS_API 8888")
|
|
369
|
-
tf.close
|
|
370
|
-
System.ports['CTS_API'].should eql 7777
|
|
371
|
-
System.instance.process_file(tf.path)
|
|
372
|
-
System.ports['CTS_API'].should eql 8888
|
|
373
|
-
tf.unlink
|
|
374
|
-
end
|
|
375
|
-
end
|
|
376
|
-
|
|
377
|
-
context "with PATH" do
|
|
378
|
-
it "should take 2 parameters" do
|
|
379
|
-
tf = Tempfile.new('unittest')
|
|
380
|
-
tf.puts("PATH C:/")
|
|
381
|
-
tf.close
|
|
382
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for PATH.")
|
|
383
|
-
tf.unlink
|
|
384
|
-
|
|
385
|
-
tf = Tempfile.new('unittest')
|
|
386
|
-
tf.puts("PATH MYPATH C:/ TRUE")
|
|
387
|
-
tf.close
|
|
388
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for PATH.")
|
|
389
|
-
tf.unlink
|
|
390
|
-
end
|
|
391
|
-
|
|
392
|
-
it "should complain about unknown paths" do
|
|
393
|
-
tf = Tempfile.new('unittest')
|
|
394
|
-
tf.puts("PATH MYPATH C:/")
|
|
395
|
-
tf.close
|
|
396
|
-
capture_io do |stdout|
|
|
397
|
-
System.instance.process_file(tf.path)
|
|
398
|
-
stdout.string.should match /WARN: Unknown path name given: MYPATH/
|
|
399
|
-
end
|
|
400
|
-
tf.unlink
|
|
401
|
-
end
|
|
402
|
-
|
|
403
|
-
it "should change known paths" do
|
|
404
|
-
if Kernel.is_windows?
|
|
405
|
-
tf = Tempfile.new('unittest')
|
|
406
|
-
tf.puts("PATH LOGS C:/mylogs")
|
|
407
|
-
tf.close
|
|
408
|
-
System.paths['LOGS'].should match 'outputs/logs'
|
|
409
|
-
System.instance.process_file(tf.path)
|
|
410
|
-
System.paths['LOGS'].should eql 'C:/mylogs'
|
|
411
|
-
tf.unlink
|
|
412
|
-
end
|
|
413
|
-
end
|
|
414
|
-
end
|
|
415
|
-
|
|
416
|
-
context "with DEFAULT_PACKET_LOG_WRITER" do
|
|
417
|
-
it "should take 1 parameters" do
|
|
418
|
-
tf = Tempfile.new('unittest')
|
|
419
|
-
tf.puts("DEFAULT_PACKET_LOG_WRITER")
|
|
420
|
-
tf.close
|
|
421
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DEFAULT_PACKET_LOG_WRITER.")
|
|
422
|
-
tf.unlink
|
|
423
|
-
|
|
424
|
-
tf = Tempfile.new('unittest')
|
|
425
|
-
tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class TRUE")
|
|
426
|
-
tf.close
|
|
427
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DEFAULT_PACKET_LOG_WRITER.")
|
|
428
|
-
tf.unlink
|
|
429
|
-
end
|
|
430
|
-
|
|
431
|
-
it "should complain if the class doesn't exist" do
|
|
432
|
-
tf = Tempfile.new('unittest')
|
|
433
|
-
tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class")
|
|
434
|
-
tf.close
|
|
435
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
|
|
436
|
-
tf.unlink
|
|
437
|
-
end
|
|
438
|
-
|
|
439
|
-
it "should set the packet writer" do
|
|
440
|
-
filename = File.join(File.dirname(__FILE__),'..','..','lib','my_writer.rb')
|
|
441
|
-
File.open(filename, 'w') do |file|
|
|
442
|
-
file.puts "class MyWriter"
|
|
443
|
-
file.puts "end"
|
|
444
|
-
end
|
|
445
|
-
tf = Tempfile.new('unittest')
|
|
446
|
-
tf.puts("DEFAULT_PACKET_LOG_WRITER my_writer")
|
|
447
|
-
tf.close
|
|
448
|
-
System.instance.process_file(tf.path)
|
|
449
|
-
System.default_packet_log_writer.should eql MyWriter
|
|
450
|
-
File.delete filename
|
|
451
|
-
tf.unlink
|
|
452
|
-
end
|
|
453
|
-
end
|
|
454
|
-
|
|
455
|
-
context "with DEFAULT_PACKET_LOG_READER" do
|
|
456
|
-
it "should take 1 parameters" do
|
|
457
|
-
tf = Tempfile.new('unittest')
|
|
458
|
-
tf.puts("DEFAULT_PACKET_LOG_READER")
|
|
459
|
-
tf.close
|
|
460
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DEFAULT_PACKET_LOG_READER.")
|
|
461
|
-
tf.unlink
|
|
462
|
-
|
|
463
|
-
tf = Tempfile.new('unittest')
|
|
464
|
-
tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class TRUE")
|
|
465
|
-
tf.close
|
|
466
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DEFAULT_PACKET_LOG_READER.")
|
|
467
|
-
tf.unlink
|
|
468
|
-
end
|
|
469
|
-
|
|
470
|
-
it "should complain if the class doesn't exist" do
|
|
471
|
-
tf = Tempfile.new('unittest')
|
|
472
|
-
tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class")
|
|
473
|
-
tf.close
|
|
474
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
|
|
475
|
-
tf.unlink
|
|
476
|
-
end
|
|
477
|
-
|
|
478
|
-
it "should set the packet reader" do
|
|
479
|
-
filename = File.join(File.dirname(__FILE__),'..','..','lib','my_reader.rb')
|
|
480
|
-
File.open(filename, 'w') do |file|
|
|
481
|
-
file.puts "class MyReader"
|
|
482
|
-
file.puts "end"
|
|
483
|
-
end
|
|
484
|
-
tf = Tempfile.new('unittest')
|
|
485
|
-
tf.puts("DEFAULT_PACKET_LOG_READER my_reader")
|
|
486
|
-
tf.close
|
|
487
|
-
System.instance.process_file(tf.path)
|
|
488
|
-
System.default_packet_log_reader.should eql MyReader
|
|
489
|
-
File.delete filename
|
|
490
|
-
tf.unlink
|
|
491
|
-
end
|
|
492
|
-
end
|
|
493
|
-
|
|
494
|
-
context "with DISABLE_DNS" do
|
|
495
|
-
it "should take 0 parameters" do
|
|
496
|
-
tf = Tempfile.new('unittest')
|
|
497
|
-
tf.puts("DISABLE_DNS BLAH TRUE")
|
|
498
|
-
tf.close
|
|
499
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DISABLE_DNS.")
|
|
500
|
-
tf.unlink
|
|
501
|
-
end
|
|
502
|
-
|
|
503
|
-
it "should disable dns lookups" do
|
|
504
|
-
tf = Tempfile.new('unittest')
|
|
505
|
-
tf.puts("DISABLE_DNS")
|
|
506
|
-
tf.close
|
|
507
|
-
System.use_dns.should be_truthy
|
|
508
|
-
System.instance.process_file(tf.path)
|
|
509
|
-
System.use_dns.should be_falsey
|
|
510
|
-
tf.unlink
|
|
511
|
-
end
|
|
512
|
-
end
|
|
513
|
-
|
|
514
|
-
context "with ALLOW_ACCESS" do
|
|
515
|
-
it "should take 1 parameters" do
|
|
516
|
-
tf = Tempfile.new('unittest')
|
|
517
|
-
tf.puts("ALLOW_ACCESS")
|
|
518
|
-
tf.close
|
|
519
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for ALLOW_ACCESS.")
|
|
520
|
-
tf.unlink
|
|
521
|
-
|
|
522
|
-
tf = Tempfile.new('unittest')
|
|
523
|
-
tf.puts("ALLOW_ACCESS localhost true")
|
|
524
|
-
tf.close
|
|
525
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for ALLOW_ACCESS.")
|
|
526
|
-
tf.unlink
|
|
527
|
-
end
|
|
528
|
-
|
|
529
|
-
it "should complain about bad addresses" do
|
|
530
|
-
tf = Tempfile.new('unittest')
|
|
531
|
-
tf.puts("ALLOW_ACCESS blah")
|
|
532
|
-
tf.close
|
|
533
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
|
|
534
|
-
tf.unlink
|
|
535
|
-
|
|
536
|
-
tf = Tempfile.new('unittest')
|
|
537
|
-
tf.puts("ALLOW_ACCESS hopefully_this_is_not_a_valid_machine_name_XYZ")
|
|
538
|
-
tf.close
|
|
539
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
|
|
540
|
-
tf.unlink
|
|
541
|
-
end
|
|
542
|
-
|
|
543
|
-
it "should allow ALL" do
|
|
544
|
-
tf = Tempfile.new('unittest')
|
|
545
|
-
tf.puts("ALLOW_ACCESS ALL")
|
|
546
|
-
tf.close
|
|
547
|
-
System.instance.process_file(tf.path)
|
|
548
|
-
System.acl.should be_nil
|
|
549
|
-
tf.unlink
|
|
550
|
-
end
|
|
551
|
-
|
|
552
|
-
it "should store host by name" do
|
|
553
|
-
tf = Tempfile.new('unittest')
|
|
554
|
-
tf.puts("ALLOW_ACCESS localhost")
|
|
555
|
-
tf.close
|
|
556
|
-
System.instance.process_file(tf.path)
|
|
557
|
-
System.acl.allow_addr?(["AF_INET",0,"localhost","127.0.0.1"]).should be_truthy
|
|
558
|
-
tf.unlink
|
|
559
|
-
end
|
|
560
|
-
|
|
561
|
-
it "should store host by IP address" do
|
|
562
|
-
addr = IPSocket.getaddress("www.google.com")
|
|
563
|
-
if addr and !addr.index(':')
|
|
564
|
-
tf = Tempfile.new('unittest')
|
|
565
|
-
tf.puts("ALLOW_ACCESS #{addr}")
|
|
566
|
-
tf.close
|
|
567
|
-
System.instance.process_file(tf.path)
|
|
568
|
-
System.acl.allow_addr?(["AF_INET",0,"www.google.com",addr]).should be_truthy
|
|
569
|
-
tf.unlink
|
|
570
|
-
end
|
|
571
|
-
end
|
|
572
|
-
end
|
|
573
|
-
|
|
574
|
-
context "with STALENESS_SECONDS" do
|
|
575
|
-
it "should take 1 parameters" do
|
|
576
|
-
tf = Tempfile.new('unittest')
|
|
577
|
-
tf.puts("STALENESS_SECONDS")
|
|
578
|
-
tf.close
|
|
579
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for STALENESS_SECONDS.")
|
|
580
|
-
tf.unlink
|
|
581
|
-
|
|
582
|
-
tf = Tempfile.new('unittest')
|
|
583
|
-
tf.puts("STALENESS_SECONDS 1 2")
|
|
584
|
-
tf.close
|
|
585
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for STALENESS_SECONDS.")
|
|
586
|
-
tf.unlink
|
|
587
|
-
end
|
|
588
|
-
|
|
589
|
-
it "should set the number of seconds required to be stale" do
|
|
590
|
-
tf = Tempfile.new('unittest')
|
|
591
|
-
tf.puts("STALENESS_SECONDS 3")
|
|
592
|
-
tf.close
|
|
593
|
-
System.staleness_seconds.should eql 30
|
|
594
|
-
System.instance.process_file(tf.path)
|
|
595
|
-
System.staleness_seconds.should eql 3
|
|
596
|
-
tf.unlink
|
|
597
|
-
end
|
|
598
|
-
end
|
|
599
|
-
|
|
600
|
-
context "with CMD_TLM_VERSION" do
|
|
601
|
-
it "should take 1 parameters" do
|
|
602
|
-
tf = Tempfile.new('unittest')
|
|
603
|
-
tf.puts("CMD_TLM_VERSION")
|
|
604
|
-
tf.close
|
|
605
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for CMD_TLM_VERSION.")
|
|
606
|
-
tf.unlink
|
|
607
|
-
|
|
608
|
-
tf = Tempfile.new('unittest')
|
|
609
|
-
tf.puts("CMD_TLM_VERSION 1 2")
|
|
610
|
-
tf.close
|
|
611
|
-
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for CMD_TLM_VERSION.")
|
|
612
|
-
tf.unlink
|
|
613
|
-
end
|
|
614
|
-
|
|
615
|
-
it "should set the command and telemetry version" do
|
|
616
|
-
tf = Tempfile.new('unittest')
|
|
617
|
-
tf.puts("CMD_TLM_VERSION 2.1")
|
|
618
|
-
tf.close
|
|
619
|
-
System.cmd_tlm_version.should be_nil
|
|
620
|
-
System.instance.process_file(tf.path)
|
|
621
|
-
System.cmd_tlm_version.should eql "2.1"
|
|
622
|
-
tf.unlink
|
|
623
|
-
end
|
|
624
|
-
end
|
|
625
|
-
end
|
|
626
|
-
|
|
627
|
-
describe "Cosmos.write_exception_file" do
|
|
628
|
-
it "should write a file with the exception" do
|
|
629
|
-
filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
|
|
630
|
-
File.exist?(filename).should be_truthy
|
|
631
|
-
File.delete(filename)
|
|
632
|
-
end
|
|
633
|
-
|
|
634
|
-
it "should write a file without a defined LOGS directory" do
|
|
635
|
-
File.open(@config_file,'w') {|file| file.puts "PATH LOGS C:/this/is/not/a/real/path" }
|
|
636
|
-
# Reset the instance variable so it will read the new config file
|
|
637
|
-
System.instance_eval('@instance = nil')
|
|
638
|
-
filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
|
|
639
|
-
File.exist?(filename).should be_truthy
|
|
640
|
-
File.delete(filename)
|
|
641
|
-
end
|
|
642
|
-
end
|
|
643
|
-
end
|
|
644
|
-
end
|
|
645
|
-
|
|
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 'spec_helper'
|
|
12
|
+
require 'cosmos'
|
|
13
|
+
require 'cosmos/system/system'
|
|
14
|
+
require 'tempfile'
|
|
15
|
+
|
|
16
|
+
module Cosmos
|
|
17
|
+
|
|
18
|
+
describe System do
|
|
19
|
+
before(:all) do
|
|
20
|
+
clean_config()
|
|
21
|
+
System.class_eval('@@instance = nil')
|
|
22
|
+
|
|
23
|
+
# Save system.txt
|
|
24
|
+
@config_file = File.join(Cosmos::USERPATH,'config','system','system.txt')
|
|
25
|
+
FileUtils.mv @config_file, Cosmos::USERPATH
|
|
26
|
+
|
|
27
|
+
# Create a dummy system.txt
|
|
28
|
+
File.open(@config_file,'w') {|file| file.puts "# This is a comment" }
|
|
29
|
+
@config_targets = File.join(Cosmos::USERPATH,'config','targets')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
after(:all) do
|
|
33
|
+
# Restore system.txt
|
|
34
|
+
FileUtils.mv File.join(Cosmos::USERPATH, 'system.txt'),
|
|
35
|
+
File.join(Cosmos::USERPATH,'config','system')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
after(:each) do
|
|
39
|
+
clean_config()
|
|
40
|
+
System.class_eval('@@instance = nil')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe "instance" do
|
|
44
|
+
it "should create default ports" do
|
|
45
|
+
# Don't check the actual port numbers but just that they exist
|
|
46
|
+
System.ports.keys.should eql %w(CTS_API TLMVIEWER_API CTS_PREIDENTIFIED)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should create default paths" do
|
|
50
|
+
# Don't check the actual paths but just that they exist
|
|
51
|
+
System.paths.keys.should eql %w(LOGS TMP SAVED_CONFIG TABLES HANDBOOKS PROCEDURES)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe "System.commands" do
|
|
56
|
+
it "should only contain UNKNOWN" do
|
|
57
|
+
System.commands.target_names.should eql ["UNKNOWN"]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should log errors saving the configuration" do
|
|
61
|
+
# Force a reload of the configuration
|
|
62
|
+
System.class_eval('@@instance = nil')
|
|
63
|
+
|
|
64
|
+
capture_io do |stdout|
|
|
65
|
+
allow(FileUtils).to receive(:mkdir_p) { raise "Error" }
|
|
66
|
+
System.commands.target_names.should eql ["UNKNOWN"]
|
|
67
|
+
stdout.string.should match "Problem saving configuration"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe "System.telemetry" do
|
|
73
|
+
it "should only contain UNKNOWN" do
|
|
74
|
+
System.telemetry.target_names.should eql ["UNKNOWN"]
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe "System.limits" do
|
|
79
|
+
it "should include the DEFAULT limit set" do
|
|
80
|
+
System.limits.sets.should include :DEFAULT
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
context "with valid targets" do
|
|
85
|
+
before(:all) do
|
|
86
|
+
# Write the system.txt file to auto declare targets
|
|
87
|
+
File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe "System.clear_counters" do
|
|
91
|
+
it "should clear the target, command and telemetry counters" do
|
|
92
|
+
System.targets.each do |name, tgt|
|
|
93
|
+
tgt.cmd_cnt = 100
|
|
94
|
+
tgt.tlm_cnt = 100
|
|
95
|
+
end
|
|
96
|
+
System.commands.all do |tgt, pkt|
|
|
97
|
+
pkt.received_count = 100
|
|
98
|
+
end
|
|
99
|
+
System.telemetry.all do |tgt, pkt|
|
|
100
|
+
pkt.received_count = 100
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
System.clear_counters
|
|
104
|
+
|
|
105
|
+
System.targets.each do |name, tgt|
|
|
106
|
+
tgt.cmd_cnt.should eql 0
|
|
107
|
+
tgt.tlm_cnt.should eql 0
|
|
108
|
+
end
|
|
109
|
+
System.commands.all do |tgt, pkt|
|
|
110
|
+
pkt.received_count.should eql 0
|
|
111
|
+
end
|
|
112
|
+
System.telemetry.all do |tgt, pkt|
|
|
113
|
+
pkt.received_count.should eql 0
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
describe "packets and System.packets" do
|
|
119
|
+
it "should calculate MD5s across all the target files" do
|
|
120
|
+
capture_io do |stdout|
|
|
121
|
+
# This line actually does the work of reading the configuration
|
|
122
|
+
System.telemetry.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
123
|
+
System.commands.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
124
|
+
|
|
125
|
+
stdout.string.should match "Marshal file does not exist"
|
|
126
|
+
|
|
127
|
+
# Reset stdout for another go at the processing
|
|
128
|
+
stdout.rewind
|
|
129
|
+
# Reset the instance variable so it will read the new configuration
|
|
130
|
+
System.class_eval('@@instance = nil')
|
|
131
|
+
# This line actually does the work of reading the configuration
|
|
132
|
+
System.telemetry.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
133
|
+
System.commands.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
134
|
+
|
|
135
|
+
stdout.string.should match "Marshal load success"
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "should handle target parsing errors" do
|
|
140
|
+
capture_io do |stdout|
|
|
141
|
+
allow_any_instance_of(PacketConfig).to receive(:process_file) { raise "ProcessError" }
|
|
142
|
+
# This line actually does the work of reading the configuration
|
|
143
|
+
expect { System.telemetry.target_names.should eql ['COSMOS','INST','META','UNKNOWN'] }.to raise_error("ProcessError")
|
|
144
|
+
|
|
145
|
+
stdout.string.should match "Problem processing"
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
describe "load_configuration" do
|
|
151
|
+
after(:all) do
|
|
152
|
+
File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'))
|
|
153
|
+
File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'))
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "should load the initial configuration" do
|
|
157
|
+
System.load_configuration
|
|
158
|
+
System.commands.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
159
|
+
System.telemetry.target_names.should eql ['COSMOS','INST','META','UNKNOWN']
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "should load a named configuration" do
|
|
163
|
+
File.open(@config_file,'w') do |file|
|
|
164
|
+
file.puts "DECLARE_TARGET COSMOS"
|
|
165
|
+
file.puts "DECLARE_TARGET COSMOS OVERRIDE"
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Load the original configuration
|
|
169
|
+
original_config_name = System.load_configuration()
|
|
170
|
+
System.telemetry.target_names.should eql %w(COSMOS OVERRIDE UNKNOWN)
|
|
171
|
+
original_pkts = System.telemetry.packets('COSMOS').keys
|
|
172
|
+
|
|
173
|
+
# Create a new configuration by writing another telemetry file
|
|
174
|
+
File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'),'w') do |file|
|
|
175
|
+
file.puts "TELEMETRY COSMOS TEST1 BIG_ENDIAN"
|
|
176
|
+
file.puts " APPEND_ITEM DATA 240 STRING"
|
|
177
|
+
end
|
|
178
|
+
System.instance.process_file(@config_file)
|
|
179
|
+
# Verify the new telemetry packet is there
|
|
180
|
+
System.telemetry.packets('COSMOS').keys.should include "TEST1"
|
|
181
|
+
second_config_name = System.configuration_name
|
|
182
|
+
|
|
183
|
+
# Now load the original configuration
|
|
184
|
+
name = System.load_configuration(original_config_name)
|
|
185
|
+
original_config_name.should eql name
|
|
186
|
+
System.telemetry.packets('COSMOS').keys.should_not include "TEST1"
|
|
187
|
+
|
|
188
|
+
# Create yet another configuration by writing another telemetry file
|
|
189
|
+
File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'),'w') do |file|
|
|
190
|
+
file.puts "TELEMETRY COSMOS TEST2 BIG_ENDIAN"
|
|
191
|
+
file.puts " APPEND_ITEM DATA 240 STRING"
|
|
192
|
+
end
|
|
193
|
+
System.instance.process_file(@config_file)
|
|
194
|
+
names = []
|
|
195
|
+
# Verify the new telemetry packet is there as well as the second one
|
|
196
|
+
System.telemetry.packets('COSMOS').keys.should include("TEST1", "TEST2")
|
|
197
|
+
third_config_name = System.configuration_name
|
|
198
|
+
|
|
199
|
+
# Try loading something that doesn't exist
|
|
200
|
+
# It should fail and reload the original configuration
|
|
201
|
+
name = System.load_configuration("BLAH")
|
|
202
|
+
name.should eql original_config_name
|
|
203
|
+
|
|
204
|
+
# Now load the second configuration. It shouldn't have the most
|
|
205
|
+
# recently defined telemetry packet.
|
|
206
|
+
System.load_configuration(second_config_name)
|
|
207
|
+
System.telemetry.packets('COSMOS').keys.should include "TEST1"
|
|
208
|
+
System.telemetry.packets('COSMOS').keys.should_not include "TEST2"
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
describe "process_file" do
|
|
214
|
+
before(:all) do
|
|
215
|
+
begin
|
|
216
|
+
# Move the targets directory out of the way so we can make our own
|
|
217
|
+
FileUtils.mv @config_targets, Cosmos::USERPATH
|
|
218
|
+
FileUtils.mkdir_p(@config_targets)
|
|
219
|
+
File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
|
|
220
|
+
rescue
|
|
221
|
+
puts "Cannot move targets folder... probably due to open editor or explorer"
|
|
222
|
+
exit 1
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
after(:all) do
|
|
226
|
+
# Restore the targets directory
|
|
227
|
+
FileUtils.rm_rf @config_targets
|
|
228
|
+
FileUtils.mv File.join(Cosmos::USERPATH, 'targets'), File.join(Cosmos::USERPATH, 'config')
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
it "should complain about unknown keywords" do
|
|
232
|
+
tf = Tempfile.new('unittest')
|
|
233
|
+
tf.puts("BLAH")
|
|
234
|
+
tf.close
|
|
235
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Unknown keyword 'BLAH'")
|
|
236
|
+
tf.unlink
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
context "with AUTO_DECLARE_TARGETS" do
|
|
240
|
+
it "should take 0 parameters" do
|
|
241
|
+
tf = Tempfile.new('unittest')
|
|
242
|
+
tf.puts("AUTO_DECLARE_TARGETS TRUE")
|
|
243
|
+
tf.close
|
|
244
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for AUTO_DECLARE_TARGETS.")
|
|
245
|
+
tf.unlink
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
it "should complain if config/targets doesn't exist" do
|
|
249
|
+
tf = Tempfile.new('unittest')
|
|
250
|
+
tf.puts("AUTO_DECLARE_TARGETS")
|
|
251
|
+
tf.close
|
|
252
|
+
FileUtils.rm_rf(@config_targets)
|
|
253
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /\/config\/targets must exist/)
|
|
254
|
+
FileUtils.mkdir_p(@config_targets)
|
|
255
|
+
tf.unlink
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
it "should complain if target directories aren't uppercase" do
|
|
259
|
+
tf = Tempfile.new('unittest')
|
|
260
|
+
tf.puts("AUTO_DECLARE_TARGETS")
|
|
261
|
+
tf.close
|
|
262
|
+
FileUtils.mkdir_p(File.join(@config_targets, 'tgt'))
|
|
263
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Target folder must be uppercase: 'tgt'")
|
|
264
|
+
Dir.rmdir(File.join(@config_targets, 'tgt'))
|
|
265
|
+
tf.unlink
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
it "should process target directories with the SYSTEM directory last" do
|
|
269
|
+
tf = Tempfile.new('unittest')
|
|
270
|
+
tf.puts("AUTO_DECLARE_TARGETS")
|
|
271
|
+
tf.close
|
|
272
|
+
FileUtils.mkdir_p(File.join(@config_targets, 'ABC'))
|
|
273
|
+
FileUtils.mkdir_p(File.join(@config_targets, 'SYSTEM'))
|
|
274
|
+
FileUtils.mkdir_p(File.join(@config_targets, 'XYZ'))
|
|
275
|
+
System.instance.process_file(tf.path)
|
|
276
|
+
# Since Ruby 1.9+ uses ordered Hashes we can ask for the keys and
|
|
277
|
+
# SYSTEM should be last
|
|
278
|
+
System.instance.targets.keys.should eql %w(ABC XYZ SYSTEM)
|
|
279
|
+
Dir.rmdir(File.join(@config_targets, 'ABC'))
|
|
280
|
+
Dir.rmdir(File.join(@config_targets, 'SYSTEM'))
|
|
281
|
+
Dir.rmdir(File.join(@config_targets, 'XYZ'))
|
|
282
|
+
tf.unlink
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
context "with DECLARE_TARGET" do
|
|
287
|
+
it "should take 1 or 2 parameters" do
|
|
288
|
+
tf = Tempfile.new('unittest')
|
|
289
|
+
tf.puts("DECLARE_TARGET")
|
|
290
|
+
tf.close
|
|
291
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DECLARE_TARGET.")
|
|
292
|
+
tf.unlink
|
|
293
|
+
|
|
294
|
+
tf = Tempfile.new('unittest')
|
|
295
|
+
tf.puts("DECLARE_TARGET TGT TGT TGT TGT")
|
|
296
|
+
tf.close
|
|
297
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DECLARE_TARGET.")
|
|
298
|
+
tf.unlink
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
it "should complain if the target directory doesn't exist" do
|
|
302
|
+
tf = Tempfile.new('unittest')
|
|
303
|
+
tf.puts("DECLARE_TARGET TGT")
|
|
304
|
+
tf.close
|
|
305
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Target folder must exist/)
|
|
306
|
+
tf.unlink
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
it "should process the target directory" do
|
|
310
|
+
tf = Tempfile.new('unittest')
|
|
311
|
+
tf.puts("DECLARE_TARGET TGT")
|
|
312
|
+
tf.close
|
|
313
|
+
FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
|
|
314
|
+
System.instance.process_file(tf.path)
|
|
315
|
+
tf.unlink
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
it "should process the target directory with substitute name" do
|
|
319
|
+
tf = Tempfile.new('unittest')
|
|
320
|
+
tf.puts("DECLARE_TARGET TGT NEW")
|
|
321
|
+
tf.close
|
|
322
|
+
FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
|
|
323
|
+
System.instance.process_file(tf.path)
|
|
324
|
+
tf.unlink
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
it "should process the target directory with specified target.txt" do
|
|
328
|
+
tf = Tempfile.new('unittest')
|
|
329
|
+
tf.puts("DECLARE_TARGET TGT nil target.txt")
|
|
330
|
+
tf.close
|
|
331
|
+
FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
|
|
332
|
+
File.open(File.join(@config_targets, 'TGT', 'target.txt'), 'w') do |file|
|
|
333
|
+
file.puts "# target.txt"
|
|
334
|
+
end
|
|
335
|
+
System.instance.process_file(tf.path)
|
|
336
|
+
tf.unlink
|
|
337
|
+
end
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
context "with PORT" do
|
|
341
|
+
it "should take 2 parameters" do
|
|
342
|
+
tf = Tempfile.new('unittest')
|
|
343
|
+
tf.puts("PORT CTS_API")
|
|
344
|
+
tf.close
|
|
345
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for PORT.")
|
|
346
|
+
tf.unlink
|
|
347
|
+
|
|
348
|
+
tf = Tempfile.new('unittest')
|
|
349
|
+
tf.puts("PORT CTS_API 8888 TRUE")
|
|
350
|
+
tf.close
|
|
351
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for PORT.")
|
|
352
|
+
tf.unlink
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
it "should complain about unknown ports" do
|
|
356
|
+
tf = Tempfile.new('unittest')
|
|
357
|
+
tf.puts("PORT MYPORT 10")
|
|
358
|
+
tf.close
|
|
359
|
+
capture_io do |stdout|
|
|
360
|
+
System.instance.process_file(tf.path)
|
|
361
|
+
stdout.string.should match /WARN: Unknown port name given: MYPORT/
|
|
362
|
+
end
|
|
363
|
+
tf.unlink
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
it "should change known ports" do
|
|
367
|
+
tf = Tempfile.new('unittest')
|
|
368
|
+
tf.puts("PORT CTS_API 8888")
|
|
369
|
+
tf.close
|
|
370
|
+
System.ports['CTS_API'].should eql 7777
|
|
371
|
+
System.instance.process_file(tf.path)
|
|
372
|
+
System.ports['CTS_API'].should eql 8888
|
|
373
|
+
tf.unlink
|
|
374
|
+
end
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
context "with PATH" do
|
|
378
|
+
it "should take 2 parameters" do
|
|
379
|
+
tf = Tempfile.new('unittest')
|
|
380
|
+
tf.puts("PATH C:/")
|
|
381
|
+
tf.close
|
|
382
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for PATH.")
|
|
383
|
+
tf.unlink
|
|
384
|
+
|
|
385
|
+
tf = Tempfile.new('unittest')
|
|
386
|
+
tf.puts("PATH MYPATH C:/ TRUE")
|
|
387
|
+
tf.close
|
|
388
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for PATH.")
|
|
389
|
+
tf.unlink
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
it "should complain about unknown paths" do
|
|
393
|
+
tf = Tempfile.new('unittest')
|
|
394
|
+
tf.puts("PATH MYPATH C:/")
|
|
395
|
+
tf.close
|
|
396
|
+
capture_io do |stdout|
|
|
397
|
+
System.instance.process_file(tf.path)
|
|
398
|
+
stdout.string.should match /WARN: Unknown path name given: MYPATH/
|
|
399
|
+
end
|
|
400
|
+
tf.unlink
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
it "should change known paths" do
|
|
404
|
+
if Kernel.is_windows?
|
|
405
|
+
tf = Tempfile.new('unittest')
|
|
406
|
+
tf.puts("PATH LOGS C:/mylogs")
|
|
407
|
+
tf.close
|
|
408
|
+
System.paths['LOGS'].should match 'outputs/logs'
|
|
409
|
+
System.instance.process_file(tf.path)
|
|
410
|
+
System.paths['LOGS'].should eql 'C:/mylogs'
|
|
411
|
+
tf.unlink
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
context "with DEFAULT_PACKET_LOG_WRITER" do
|
|
417
|
+
it "should take 1 parameters" do
|
|
418
|
+
tf = Tempfile.new('unittest')
|
|
419
|
+
tf.puts("DEFAULT_PACKET_LOG_WRITER")
|
|
420
|
+
tf.close
|
|
421
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DEFAULT_PACKET_LOG_WRITER.")
|
|
422
|
+
tf.unlink
|
|
423
|
+
|
|
424
|
+
tf = Tempfile.new('unittest')
|
|
425
|
+
tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class TRUE")
|
|
426
|
+
tf.close
|
|
427
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DEFAULT_PACKET_LOG_WRITER.")
|
|
428
|
+
tf.unlink
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
it "should complain if the class doesn't exist" do
|
|
432
|
+
tf = Tempfile.new('unittest')
|
|
433
|
+
tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class")
|
|
434
|
+
tf.close
|
|
435
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
|
|
436
|
+
tf.unlink
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
it "should set the packet writer" do
|
|
440
|
+
filename = File.join(File.dirname(__FILE__),'..','..','lib','my_writer.rb')
|
|
441
|
+
File.open(filename, 'w') do |file|
|
|
442
|
+
file.puts "class MyWriter"
|
|
443
|
+
file.puts "end"
|
|
444
|
+
end
|
|
445
|
+
tf = Tempfile.new('unittest')
|
|
446
|
+
tf.puts("DEFAULT_PACKET_LOG_WRITER my_writer")
|
|
447
|
+
tf.close
|
|
448
|
+
System.instance.process_file(tf.path)
|
|
449
|
+
System.default_packet_log_writer.should eql MyWriter
|
|
450
|
+
File.delete filename
|
|
451
|
+
tf.unlink
|
|
452
|
+
end
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
context "with DEFAULT_PACKET_LOG_READER" do
|
|
456
|
+
it "should take 1 parameters" do
|
|
457
|
+
tf = Tempfile.new('unittest')
|
|
458
|
+
tf.puts("DEFAULT_PACKET_LOG_READER")
|
|
459
|
+
tf.close
|
|
460
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DEFAULT_PACKET_LOG_READER.")
|
|
461
|
+
tf.unlink
|
|
462
|
+
|
|
463
|
+
tf = Tempfile.new('unittest')
|
|
464
|
+
tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class TRUE")
|
|
465
|
+
tf.close
|
|
466
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DEFAULT_PACKET_LOG_READER.")
|
|
467
|
+
tf.unlink
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
it "should complain if the class doesn't exist" do
|
|
471
|
+
tf = Tempfile.new('unittest')
|
|
472
|
+
tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class")
|
|
473
|
+
tf.close
|
|
474
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
|
|
475
|
+
tf.unlink
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
it "should set the packet reader" do
|
|
479
|
+
filename = File.join(File.dirname(__FILE__),'..','..','lib','my_reader.rb')
|
|
480
|
+
File.open(filename, 'w') do |file|
|
|
481
|
+
file.puts "class MyReader"
|
|
482
|
+
file.puts "end"
|
|
483
|
+
end
|
|
484
|
+
tf = Tempfile.new('unittest')
|
|
485
|
+
tf.puts("DEFAULT_PACKET_LOG_READER my_reader")
|
|
486
|
+
tf.close
|
|
487
|
+
System.instance.process_file(tf.path)
|
|
488
|
+
System.default_packet_log_reader.should eql MyReader
|
|
489
|
+
File.delete filename
|
|
490
|
+
tf.unlink
|
|
491
|
+
end
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
context "with DISABLE_DNS" do
|
|
495
|
+
it "should take 0 parameters" do
|
|
496
|
+
tf = Tempfile.new('unittest')
|
|
497
|
+
tf.puts("DISABLE_DNS BLAH TRUE")
|
|
498
|
+
tf.close
|
|
499
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DISABLE_DNS.")
|
|
500
|
+
tf.unlink
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
it "should disable dns lookups" do
|
|
504
|
+
tf = Tempfile.new('unittest')
|
|
505
|
+
tf.puts("DISABLE_DNS")
|
|
506
|
+
tf.close
|
|
507
|
+
System.use_dns.should be_truthy
|
|
508
|
+
System.instance.process_file(tf.path)
|
|
509
|
+
System.use_dns.should be_falsey
|
|
510
|
+
tf.unlink
|
|
511
|
+
end
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
context "with ALLOW_ACCESS" do
|
|
515
|
+
it "should take 1 parameters" do
|
|
516
|
+
tf = Tempfile.new('unittest')
|
|
517
|
+
tf.puts("ALLOW_ACCESS")
|
|
518
|
+
tf.close
|
|
519
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for ALLOW_ACCESS.")
|
|
520
|
+
tf.unlink
|
|
521
|
+
|
|
522
|
+
tf = Tempfile.new('unittest')
|
|
523
|
+
tf.puts("ALLOW_ACCESS localhost true")
|
|
524
|
+
tf.close
|
|
525
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for ALLOW_ACCESS.")
|
|
526
|
+
tf.unlink
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
it "should complain about bad addresses" do
|
|
530
|
+
tf = Tempfile.new('unittest')
|
|
531
|
+
tf.puts("ALLOW_ACCESS blah")
|
|
532
|
+
tf.close
|
|
533
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
|
|
534
|
+
tf.unlink
|
|
535
|
+
|
|
536
|
+
tf = Tempfile.new('unittest')
|
|
537
|
+
tf.puts("ALLOW_ACCESS hopefully_this_is_not_a_valid_machine_name_XYZ")
|
|
538
|
+
tf.close
|
|
539
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
|
|
540
|
+
tf.unlink
|
|
541
|
+
end
|
|
542
|
+
|
|
543
|
+
it "should allow ALL" do
|
|
544
|
+
tf = Tempfile.new('unittest')
|
|
545
|
+
tf.puts("ALLOW_ACCESS ALL")
|
|
546
|
+
tf.close
|
|
547
|
+
System.instance.process_file(tf.path)
|
|
548
|
+
System.acl.should be_nil
|
|
549
|
+
tf.unlink
|
|
550
|
+
end
|
|
551
|
+
|
|
552
|
+
it "should store host by name" do
|
|
553
|
+
tf = Tempfile.new('unittest')
|
|
554
|
+
tf.puts("ALLOW_ACCESS localhost")
|
|
555
|
+
tf.close
|
|
556
|
+
System.instance.process_file(tf.path)
|
|
557
|
+
System.acl.allow_addr?(["AF_INET",0,"localhost","127.0.0.1"]).should be_truthy
|
|
558
|
+
tf.unlink
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
it "should store host by IP address" do
|
|
562
|
+
addr = IPSocket.getaddress("www.google.com")
|
|
563
|
+
if addr and !addr.index(':')
|
|
564
|
+
tf = Tempfile.new('unittest')
|
|
565
|
+
tf.puts("ALLOW_ACCESS #{addr}")
|
|
566
|
+
tf.close
|
|
567
|
+
System.instance.process_file(tf.path)
|
|
568
|
+
System.acl.allow_addr?(["AF_INET",0,"www.google.com",addr]).should be_truthy
|
|
569
|
+
tf.unlink
|
|
570
|
+
end
|
|
571
|
+
end
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
context "with STALENESS_SECONDS" do
|
|
575
|
+
it "should take 1 parameters" do
|
|
576
|
+
tf = Tempfile.new('unittest')
|
|
577
|
+
tf.puts("STALENESS_SECONDS")
|
|
578
|
+
tf.close
|
|
579
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for STALENESS_SECONDS.")
|
|
580
|
+
tf.unlink
|
|
581
|
+
|
|
582
|
+
tf = Tempfile.new('unittest')
|
|
583
|
+
tf.puts("STALENESS_SECONDS 1 2")
|
|
584
|
+
tf.close
|
|
585
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for STALENESS_SECONDS.")
|
|
586
|
+
tf.unlink
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
it "should set the number of seconds required to be stale" do
|
|
590
|
+
tf = Tempfile.new('unittest')
|
|
591
|
+
tf.puts("STALENESS_SECONDS 3")
|
|
592
|
+
tf.close
|
|
593
|
+
System.staleness_seconds.should eql 30
|
|
594
|
+
System.instance.process_file(tf.path)
|
|
595
|
+
System.staleness_seconds.should eql 3
|
|
596
|
+
tf.unlink
|
|
597
|
+
end
|
|
598
|
+
end
|
|
599
|
+
|
|
600
|
+
context "with CMD_TLM_VERSION" do
|
|
601
|
+
it "should take 1 parameters" do
|
|
602
|
+
tf = Tempfile.new('unittest')
|
|
603
|
+
tf.puts("CMD_TLM_VERSION")
|
|
604
|
+
tf.close
|
|
605
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for CMD_TLM_VERSION.")
|
|
606
|
+
tf.unlink
|
|
607
|
+
|
|
608
|
+
tf = Tempfile.new('unittest')
|
|
609
|
+
tf.puts("CMD_TLM_VERSION 1 2")
|
|
610
|
+
tf.close
|
|
611
|
+
expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for CMD_TLM_VERSION.")
|
|
612
|
+
tf.unlink
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
it "should set the command and telemetry version" do
|
|
616
|
+
tf = Tempfile.new('unittest')
|
|
617
|
+
tf.puts("CMD_TLM_VERSION 2.1")
|
|
618
|
+
tf.close
|
|
619
|
+
System.cmd_tlm_version.should be_nil
|
|
620
|
+
System.instance.process_file(tf.path)
|
|
621
|
+
System.cmd_tlm_version.should eql "2.1"
|
|
622
|
+
tf.unlink
|
|
623
|
+
end
|
|
624
|
+
end
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
describe "Cosmos.write_exception_file" do
|
|
628
|
+
it "should write a file with the exception" do
|
|
629
|
+
filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
|
|
630
|
+
File.exist?(filename).should be_truthy
|
|
631
|
+
File.delete(filename)
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
it "should write a file without a defined LOGS directory" do
|
|
635
|
+
File.open(@config_file,'w') {|file| file.puts "PATH LOGS C:/this/is/not/a/real/path" }
|
|
636
|
+
# Reset the instance variable so it will read the new config file
|
|
637
|
+
System.instance_eval('@instance = nil')
|
|
638
|
+
filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
|
|
639
|
+
File.exist?(filename).should be_truthy
|
|
640
|
+
File.delete(filename)
|
|
641
|
+
end
|
|
642
|
+
end
|
|
643
|
+
end
|
|
644
|
+
end
|
|
645
|
+
|