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.
Files changed (912) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +48 -48
  4. data/.travis.yml +7 -7
  5. data/CONTRIBUTING.txt +50 -50
  6. data/Gemfile +6 -6
  7. data/Guardfile +27 -27
  8. data/LICENSE.txt +879 -879
  9. data/Manifest.txt +1116 -1114
  10. data/README.md +109 -107
  11. data/Rakefile +214 -214
  12. data/autohotkey/config/data/diamond.STL +57 -57
  13. data/autohotkey/config/system/system.txt +34 -34
  14. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  17. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  18. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  20. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  21. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  22. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -294
  23. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  24. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  25. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  26. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  27. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  28. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  29. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  30. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  31. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  32. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  33. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  34. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  37. data/autohotkey/config/targets/INST/target.txt +26 -26
  38. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  40. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  41. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  42. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  43. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  44. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  45. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  46. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  47. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  48. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  49. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  50. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  51. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  52. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  55. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  57. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  58. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  59. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  60. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  61. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  62. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  63. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  64. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  65. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  66. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  67. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  69. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  70. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  71. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  72. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  75. data/autohotkey/lib/example_background_task.rb +42 -42
  76. data/autohotkey/lib/user_version.rb +3 -3
  77. data/autohotkey/procedures/clear_util.rb +7 -7
  78. data/autohotkey/procedures/collect.rb +18 -18
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +20 -20
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/Replay.bat +59 -59
  101. data/autohotkey/tools/ReplayAHK +17 -17
  102. data/autohotkey/tools/ScriptRunner +14 -14
  103. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  104. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  105. data/autohotkey/tools/TableManager +14 -14
  106. data/autohotkey/tools/TableManagerAHK +30 -30
  107. data/autohotkey/tools/TestRunner +15 -15
  108. data/autohotkey/tools/TestRunnerAHK +17 -17
  109. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  112. data/autohotkey/tools/TlmExtractor +15 -15
  113. data/autohotkey/tools/TlmExtractorAHK +19 -19
  114. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  115. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  116. data/autohotkey/tools/TlmGrapher +14 -14
  117. data/autohotkey/tools/TlmGrapherAHK +19 -19
  118. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  119. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  120. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  121. data/autohotkey/tools/TlmViewer +14 -14
  122. data/autohotkey/tools/TlmViewerAHK +28 -28
  123. data/autohotkey/tools/TlmViewerAHK2 +18 -18
  124. data/autohotkey/tools/TlmViewerAHK3 +18 -18
  125. data/autohotkey/tools/TlmViewerAHK4 +18 -18
  126. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  127. data/autohotkey/tools/autohotkey.rb +37 -37
  128. data/autohotkey/tools/cmd_extractor.ahk +27 -27
  129. data/autohotkey/tools/cmd_sender.ahk +182 -162
  130. data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
  131. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  132. data/autohotkey/tools/data_viewer.ahk +135 -135
  133. data/autohotkey/tools/handbook_creator.ahk +23 -23
  134. data/autohotkey/tools/launcher.ahk +41 -41
  135. data/autohotkey/tools/limits_monitor.ahk +70 -70
  136. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  137. data/autohotkey/tools/packet_viewer.ahk +143 -143
  138. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  139. data/autohotkey/tools/replay.ahk +98 -98
  140. data/autohotkey/tools/script_runner.ahk +589 -589
  141. data/autohotkey/tools/script_runner2.ahk +34 -31
  142. data/autohotkey/tools/table_manager.ahk +220 -220
  143. data/autohotkey/tools/test_runner.ahk +262 -259
  144. data/autohotkey/tools/test_runner2.ahk +52 -52
  145. data/autohotkey/tools/test_runner3.ahk +13 -13
  146. data/autohotkey/tools/tlm_extractor.ahk +272 -272
  147. data/autohotkey/tools/tlm_grapher.ahk +642 -642
  148. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  149. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  150. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  151. data/autohotkey/tools/tlm_viewer2.ahk +50 -49
  152. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  153. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  154. data/bin/cosmos +96 -96
  155. data/bin/cstol_converter +1166 -1166
  156. data/bin/rubysloc +85 -85
  157. data/cosmos.gemspec +98 -97
  158. data/data/about.txt +4 -4
  159. data/data/crc.txt +306 -305
  160. data/data/diamond.STL +57 -57
  161. data/data/legal.txt +9 -9
  162. data/demo/Gemfile +6 -6
  163. data/demo/Launcher +15 -15
  164. data/demo/Launcher.bat +59 -59
  165. data/demo/Rakefile +61 -61
  166. data/demo/config/data/crc.txt +222 -206
  167. data/demo/config/data/diamond.STL +57 -57
  168. data/demo/config/data/meta_init.txt +4 -4
  169. data/demo/config/system/system.txt +34 -34
  170. data/demo/config/system/system2.txt +33 -33
  171. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  172. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  173. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  174. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  175. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  176. data/demo/config/targets/COSMOS/target.txt +11 -11
  177. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  178. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -3
  179. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  180. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  181. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  182. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  183. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  184. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  185. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  186. data/demo/config/targets/INST/lib/sim_inst.rb +305 -294
  187. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  188. data/demo/config/targets/INST/screens/array.txt +15 -15
  189. data/demo/config/targets/INST/screens/block.txt +8 -8
  190. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  191. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  192. data/demo/config/targets/INST/screens/ground.txt +25 -25
  193. data/demo/config/targets/INST/screens/hs.txt +44 -44
  194. data/demo/config/targets/INST/screens/latest.txt +23 -23
  195. data/demo/config/targets/INST/screens/other.txt +29 -29
  196. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  197. data/demo/config/targets/INST/target.txt +33 -33
  198. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  199. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  200. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  201. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  202. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  203. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -12
  204. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  205. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  206. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +54 -48
  207. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  208. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
  209. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
  210. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  211. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  212. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  213. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  214. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  215. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  216. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  217. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  218. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  219. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  220. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  221. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  222. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  223. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  224. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  225. data/demo/config/tools/launcher/launcher.txt +45 -45
  226. data/demo/config/tools/launcher/launcher2.txt +45 -45
  227. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  228. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  229. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  230. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  231. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  232. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  233. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  234. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  235. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  236. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  237. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  238. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  239. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  240. data/demo/lib/example_background_task.rb +57 -52
  241. data/demo/lib/example_target.rb +113 -108
  242. data/demo/lib/scpi_target.rb +74 -74
  243. data/demo/lib/user_version.rb +3 -3
  244. data/demo/procedures/checks.rb +11 -11
  245. data/demo/procedures/clear_util.rb +7 -7
  246. data/demo/procedures/collect.rb +18 -18
  247. data/demo/procedures/collect_util.rb +14 -14
  248. data/demo/procedures/cosmos_api_test.rb +293 -293
  249. data/demo/procedures/disconnect.rb +29 -29
  250. data/demo/procedures/example_test.rb +182 -182
  251. data/demo/procedures/plot_test.rb +8 -8
  252. data/demo/procedures/run_example_test.rb +3 -3
  253. data/demo/procedures/test.rb +51 -51
  254. data/demo/tools/CmdExtractor +15 -15
  255. data/demo/tools/CmdExtractor.bat +59 -59
  256. data/demo/tools/CmdSender +15 -15
  257. data/demo/tools/CmdSender.bat +59 -59
  258. data/demo/tools/CmdTlmServer +15 -15
  259. data/demo/tools/CmdTlmServer.bat +59 -59
  260. data/demo/tools/DataViewer +15 -15
  261. data/demo/tools/DataViewer.bat +59 -59
  262. data/demo/tools/ExampleTarget +15 -15
  263. data/demo/tools/ExampleTarget.bat +59 -59
  264. data/demo/tools/HandbookCreator +15 -15
  265. data/demo/tools/HandbookCreator.bat +61 -61
  266. data/demo/tools/Launcher +15 -15
  267. data/demo/tools/Launcher.bat +59 -59
  268. data/demo/tools/LimitsMonitor +15 -15
  269. data/demo/tools/LimitsMonitor.bat +59 -59
  270. data/demo/tools/OpenGLBuilder +15 -15
  271. data/demo/tools/OpenGLBuilder.bat +59 -59
  272. data/demo/tools/PacketViewer +15 -15
  273. data/demo/tools/PacketViewer.bat +59 -59
  274. data/demo/tools/Replay +15 -15
  275. data/demo/tools/Replay.bat +59 -59
  276. data/demo/tools/ScpiTarget +15 -15
  277. data/demo/tools/ScpiTarget.bat +59 -59
  278. data/demo/tools/ScriptRunner +15 -15
  279. data/demo/tools/ScriptRunner.bat +59 -59
  280. data/demo/tools/TableManager +15 -15
  281. data/demo/tools/TableManager.bat +59 -59
  282. data/demo/tools/TestRunner +15 -15
  283. data/demo/tools/TestRunner.bat +59 -59
  284. data/demo/tools/TlmExtractor +15 -15
  285. data/demo/tools/TlmExtractor.bat +59 -59
  286. data/demo/tools/TlmGrapher +15 -15
  287. data/demo/tools/TlmGrapher.bat +59 -59
  288. data/demo/tools/TlmViewer +15 -15
  289. data/demo/tools/TlmViewer.bat +59 -59
  290. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  291. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  292. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  293. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  294. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  295. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  296. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  297. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  298. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  299. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  300. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  301. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  302. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  304. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  305. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  306. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  307. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  308. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  309. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  310. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  311. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  312. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  313. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  314. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  316. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  317. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  318. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  319. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  320. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  321. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  322. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  323. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  324. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  325. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  326. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  328. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  329. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  330. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  331. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  332. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  333. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  334. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  335. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  336. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  337. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  338. data/ext/cosmos/ext/array/array.c +111 -111
  339. data/ext/cosmos/ext/array/extconf.rb +13 -13
  340. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  341. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  342. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  343. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  344. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  345. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  346. data/ext/cosmos/ext/crc/crc.c +341 -341
  347. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  348. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  349. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  350. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  351. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -261
  352. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  353. data/ext/cosmos/ext/packet/packet.c +339 -339
  354. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  355. data/ext/cosmos/ext/platform/platform.c +81 -81
  356. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  357. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  358. data/ext/cosmos/ext/string/extconf.rb +13 -13
  359. data/ext/cosmos/ext/string/string.c +49 -49
  360. data/ext/cosmos/ext/structure/structure.c +894 -894
  361. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  362. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  363. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  364. data/ext/cosmos/ext/telemetry/telemetry.c +306 -306
  365. data/ext/mkrf_conf.rb +40 -40
  366. data/install/Gemfile +6 -6
  367. data/install/Launcher +14 -14
  368. data/install/Launcher.bat +59 -59
  369. data/install/Rakefile +61 -61
  370. data/install/config/data/crc.txt +134 -133
  371. data/install/config/system/system.txt +29 -29
  372. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  373. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  374. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  375. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  376. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  377. data/install/config/targets/COSMOS/target.txt +8 -8
  378. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  379. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  380. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  381. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  382. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  383. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  384. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  385. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  386. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  387. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  388. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  389. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  390. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  391. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  392. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  393. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  394. data/install/config/tools/launcher/launcher.txt +39 -39
  395. data/install/config/tools/script_runner/script_runner.txt +3 -3
  396. data/install/config/tools/test_runner/test_runner.txt +8 -8
  397. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  398. data/install/lib/user_version.rb +3 -3
  399. data/install/tools/CmdExtractor +15 -15
  400. data/install/tools/CmdExtractor.bat +59 -59
  401. data/install/tools/CmdSender +15 -15
  402. data/install/tools/CmdSender.bat +59 -59
  403. data/install/tools/CmdTlmServer +15 -15
  404. data/install/tools/CmdTlmServer.bat +59 -59
  405. data/install/tools/DataViewer +15 -15
  406. data/install/tools/DataViewer.bat +59 -59
  407. data/install/tools/HandbookCreator +15 -15
  408. data/install/tools/HandbookCreator.bat +61 -61
  409. data/install/tools/Launcher +15 -15
  410. data/install/tools/Launcher.bat +59 -59
  411. data/install/tools/LimitsMonitor +15 -15
  412. data/install/tools/LimitsMonitor.bat +59 -59
  413. data/install/tools/OpenGLBuilder +15 -15
  414. data/install/tools/OpenGLBuilder.bat +59 -59
  415. data/install/tools/PacketViewer +15 -15
  416. data/install/tools/PacketViewer.bat +59 -59
  417. data/install/tools/Replay +15 -15
  418. data/install/tools/Replay.bat +59 -59
  419. data/install/tools/ScriptRunner +15 -15
  420. data/install/tools/ScriptRunner.bat +59 -59
  421. data/install/tools/TableManager +15 -15
  422. data/install/tools/TableManager.bat +59 -59
  423. data/install/tools/TestRunner +15 -15
  424. data/install/tools/TestRunner.bat +59 -59
  425. data/install/tools/TlmExtractor +15 -15
  426. data/install/tools/TlmExtractor.bat +59 -59
  427. data/install/tools/TlmGrapher +15 -15
  428. data/install/tools/TlmGrapher.bat +59 -59
  429. data/install/tools/TlmViewer +15 -15
  430. data/install/tools/TlmViewer.bat +59 -59
  431. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  432. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  433. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  434. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  435. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  436. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  437. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  438. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  439. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  440. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  441. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  442. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  443. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  444. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  445. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  446. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  447. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  448. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  449. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  450. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  451. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  452. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  453. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  454. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  455. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  456. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  457. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  458. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  459. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  460. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  461. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  463. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  464. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  465. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  466. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  467. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  468. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  469. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  470. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  471. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  472. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  473. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  475. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  476. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  477. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  478. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  479. data/lib/cosmos.rb +63 -63
  480. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  481. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  482. data/lib/cosmos/config/config_parser.rb +324 -324
  483. data/lib/cosmos/conversions.rb +13 -13
  484. data/lib/cosmos/conversions/conversion.rb +47 -47
  485. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  486. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  487. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  488. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  489. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  490. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  491. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  492. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  493. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  494. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  495. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  496. data/lib/cosmos/core_ext.rb +18 -18
  497. data/lib/cosmos/core_ext/array.rb +354 -354
  498. data/lib/cosmos/core_ext/class.rb +51 -51
  499. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  500. data/lib/cosmos/core_ext/exception.rb +52 -52
  501. data/lib/cosmos/core_ext/file.rb +75 -75
  502. data/lib/cosmos/core_ext/hash.rb +28 -28
  503. data/lib/cosmos/core_ext/io.rb +75 -75
  504. data/lib/cosmos/core_ext/kernel.rb +38 -38
  505. data/lib/cosmos/core_ext/math.rb +119 -119
  506. data/lib/cosmos/core_ext/matrix.rb +146 -146
  507. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  508. data/lib/cosmos/core_ext/range.rb +22 -22
  509. data/lib/cosmos/core_ext/socket.rb +32 -32
  510. data/lib/cosmos/core_ext/string.rb +310 -310
  511. data/lib/cosmos/core_ext/stringio.rb +24 -24
  512. data/lib/cosmos/core_ext/time.rb +446 -446
  513. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  514. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  515. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  516. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  517. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  518. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -317
  519. data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
  520. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  521. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  522. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  523. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  524. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  525. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  526. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -196
  527. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
  528. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  529. data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
  530. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
  531. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  532. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  533. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  534. data/lib/cosmos/gui/dialogs/splash.rb +113 -113
  535. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  536. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  537. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  538. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  539. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -494
  540. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  541. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
  542. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  543. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  544. data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -459
  545. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  546. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  547. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  548. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  549. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  550. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  551. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -712
  552. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  553. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  554. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  555. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  556. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  557. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  558. data/lib/cosmos/gui/qt.rb +813 -786
  559. data/lib/cosmos/gui/qt_tool.rb +378 -373
  560. data/lib/cosmos/gui/text/completion.rb +381 -381
  561. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  562. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  563. data/lib/cosmos/gui/text/ruby_editor.rb +395 -395
  564. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  565. data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
  566. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  567. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  568. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  569. data/lib/cosmos/interfaces.rb +11 -11
  570. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -149
  571. data/lib/cosmos/interfaces/interface.rb +213 -213
  572. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  573. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  574. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -128
  575. data/lib/cosmos/interfaces/stream_interface.rb +156 -156
  576. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  577. data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
  578. data/lib/cosmos/interfaces/udp_interface.rb +173 -173
  579. data/lib/cosmos/io/buffered_file.rb +11 -11
  580. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  581. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  582. data/lib/cosmos/io/json_drb.rb +344 -320
  583. data/lib/cosmos/io/json_drb_object.rb +137 -137
  584. data/lib/cosmos/io/json_rpc.rb +365 -365
  585. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  586. data/lib/cosmos/io/raw_logger.rb +174 -174
  587. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  588. data/lib/cosmos/io/serial_driver.rb +85 -85
  589. data/lib/cosmos/io/stderr.rb +36 -36
  590. data/lib/cosmos/io/stdout.rb +36 -36
  591. data/lib/cosmos/io/tcpip_server.rb +583 -532
  592. data/lib/cosmos/io/udp_sockets.rb +152 -152
  593. data/lib/cosmos/io/win32_serial_driver.rb +147 -147
  594. data/lib/cosmos/packet_logs.rb +6 -6
  595. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  596. data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
  597. data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
  598. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  599. data/lib/cosmos/packets/binary_accessor.rb +921 -921
  600. data/lib/cosmos/packets/commands.rb +291 -291
  601. data/lib/cosmos/packets/limits.rb +263 -263
  602. data/lib/cosmos/packets/limits_response.rb +38 -38
  603. data/lib/cosmos/packets/packet.rb +714 -699
  604. data/lib/cosmos/packets/packet_config.rb +1034 -1034
  605. data/lib/cosmos/packets/packet_item.rb +317 -317
  606. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  607. data/lib/cosmos/packets/structure.rb +421 -386
  608. data/lib/cosmos/packets/structure_item.rb +233 -233
  609. data/lib/cosmos/packets/telemetry.rb +317 -317
  610. data/lib/cosmos/processors.rb +6 -6
  611. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  612. data/lib/cosmos/processors/processor.rb +71 -71
  613. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  614. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  615. data/lib/cosmos/script.rb +9 -9
  616. data/lib/cosmos/script/extract.rb +115 -115
  617. data/lib/cosmos/script/script.rb +1513 -1493
  618. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  619. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  620. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  621. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  622. data/lib/cosmos/streams/serial_stream.rb +152 -143
  623. data/lib/cosmos/streams/stream.rb +57 -57
  624. data/lib/cosmos/streams/stream_protocol.rb +369 -369
  625. data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
  626. data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
  627. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  628. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  629. data/lib/cosmos/system.rb +4 -4
  630. data/lib/cosmos/system/system.rb +558 -558
  631. data/lib/cosmos/system/target.rb +178 -178
  632. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
  633. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
  634. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  635. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  636. data/lib/cosmos/tools/cmd_tlm_server/api.rb +936 -940
  637. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  638. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
  639. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
  640. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
  641. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
  642. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  643. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
  644. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
  645. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  646. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  647. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  648. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  649. data/lib/cosmos/tools/data_viewer/data_viewer.rb +628 -600
  650. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
  651. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  652. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
  653. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
  654. data/lib/cosmos/tools/launcher/launcher.rb +184 -184
  655. data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
  656. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
  657. data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
  658. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
  659. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  660. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  661. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -525
  662. data/lib/cosmos/tools/replay/replay.rb +495 -488
  663. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  664. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
  665. data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
  666. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  667. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
  668. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  669. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  670. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  671. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  672. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  673. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  674. data/lib/cosmos/tools/test_runner/test.rb +480 -480
  675. data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
  676. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
  677. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  678. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
  679. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  680. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  681. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  682. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  683. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -94
  684. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  685. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -180
  686. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  687. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  688. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -173
  689. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
  690. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
  691. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  692. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  693. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -320
  694. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  695. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  696. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  697. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  698. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  699. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  700. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  701. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  702. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  703. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  704. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  705. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -1278
  706. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  707. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  708. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +111 -95
  709. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  710. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +72 -66
  711. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  712. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  713. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  714. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -458
  715. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
  716. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
  717. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  718. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  719. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -70
  720. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
  721. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  722. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  723. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  724. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  725. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  726. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  727. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  728. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  729. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  730. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  731. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  732. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  733. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  734. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  735. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  736. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  737. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  738. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  739. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  740. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  741. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  742. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  743. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  744. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  745. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  746. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  747. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  748. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  749. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  750. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  751. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  752. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  753. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  754. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  755. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  756. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  757. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  758. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  759. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  760. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  761. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  762. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  763. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  764. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  765. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  766. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  767. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  768. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  769. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  770. data/lib/cosmos/top_level.rb +647 -596
  771. data/lib/cosmos/utilities.rb +11 -10
  772. data/lib/cosmos/utilities/crc.rb +166 -166
  773. data/lib/cosmos/utilities/csv.rb +83 -83
  774. data/lib/cosmos/utilities/logger.rb +137 -137
  775. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  776. data/lib/cosmos/utilities/message_log.rb +74 -74
  777. data/lib/cosmos/utilities/quaternion.rb +258 -258
  778. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  779. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  780. data/lib/cosmos/utilities/sleeper.rb +44 -0
  781. data/lib/cosmos/version.rb +12 -12
  782. data/lib/cosmos/win32/excel.rb +66 -66
  783. data/lib/cosmos/win32/win32.rb +387 -387
  784. data/lib/cosmos/win32/win32_main.rb +311 -311
  785. data/roodi.yml +24 -24
  786. data/run_gui_tests.bat +32 -32
  787. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  788. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  789. data/spec/config/config_parser_spec.rb +322 -322
  790. data/spec/conversions/conversion_spec.rb +31 -31
  791. data/spec/conversions/generic_conversion_spec.rb +45 -45
  792. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  793. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  794. data/spec/conversions/processor_conversion_spec.rb +45 -45
  795. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  796. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  797. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  798. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  799. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  800. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  801. data/spec/core_ext/array_spec.rb +186 -186
  802. data/spec/core_ext/class_spec.rb +36 -36
  803. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  804. data/spec/core_ext/exception_spec.rb +91 -91
  805. data/spec/core_ext/file_spec.rb +72 -72
  806. data/spec/core_ext/hash_spec.rb +24 -24
  807. data/spec/core_ext/io_spec.rb +46 -46
  808. data/spec/core_ext/kernel_spec.rb +54 -54
  809. data/spec/core_ext/math_spec.rb +116 -116
  810. data/spec/core_ext/matrix_spec.rb +66 -66
  811. data/spec/core_ext/objectspace_spec.rb +29 -29
  812. data/spec/core_ext/range_spec.rb +21 -21
  813. data/spec/core_ext/socket_spec.rb +32 -32
  814. data/spec/core_ext/string_spec.rb +223 -223
  815. data/spec/core_ext/stringio_spec.rb +21 -21
  816. data/spec/core_ext/time_spec.rb +151 -151
  817. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  818. data/spec/install/config/system/system.txt +33 -33
  819. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  820. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  821. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  822. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  823. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  824. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  825. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  826. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  827. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  828. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  829. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  830. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -294
  831. data/spec/install/config/targets/INST/target.txt +10 -10
  832. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  833. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  834. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  835. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  836. data/spec/interfaces/interface_spec.rb +130 -131
  837. data/spec/interfaces/linc_interface_spec.rb +199 -199
  838. data/spec/interfaces/serial_interface_spec.rb +56 -56
  839. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  840. data/spec/interfaces/stream_interface_spec.rb +157 -157
  841. data/spec/interfaces/tcpip_client_interface_spec.rb +54 -54
  842. data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
  843. data/spec/interfaces/udp_interface_spec.rb +175 -177
  844. data/spec/io/buffered_file_spec.rb +113 -113
  845. data/spec/io/io_multiplexer_spec.rb +94 -94
  846. data/spec/io/json_drb_object_spec.rb +99 -99
  847. data/spec/io/json_drb_spec.rb +311 -311
  848. data/spec/io/json_rpc_spec.rb +264 -264
  849. data/spec/io/raw_logger_pair_spec.rb +76 -76
  850. data/spec/io/raw_logger_spec.rb +133 -133
  851. data/spec/io/serial_driver_spec.rb +61 -61
  852. data/spec/io/stderr_spec.rb +32 -32
  853. data/spec/io/stdout_spec.rb +32 -32
  854. data/spec/io/tcpip_server_spec.rb +338 -338
  855. data/spec/io/udp_sockets_spec.rb +94 -94
  856. data/spec/io/win32_serial_driver_spec.rb +88 -88
  857. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  858. data/spec/packet_logs/packet_log_reader_spec.rb +408 -408
  859. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  860. data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
  861. data/spec/packets/binary_accessor_spec.rb +2073 -2073
  862. data/spec/packets/commands_spec.rb +369 -369
  863. data/spec/packets/limits_response_spec.rb +25 -25
  864. data/spec/packets/limits_spec.rb +326 -326
  865. data/spec/packets/packet_config_spec.rb +1620 -1620
  866. data/spec/packets/packet_item_limits_spec.rb +161 -161
  867. data/spec/packets/packet_item_spec.rb +386 -386
  868. data/spec/packets/packet_spec.rb +1057 -949
  869. data/spec/packets/structure_item_spec.rb +195 -195
  870. data/spec/packets/structure_spec.rb +419 -419
  871. data/spec/packets/telemetry_spec.rb +535 -535
  872. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  873. data/spec/processors/processor_spec.rb +55 -55
  874. data/spec/processors/statistics_processor_spec.rb +60 -60
  875. data/spec/processors/watermark_processor_spec.rb +51 -51
  876. data/spec/script/script_spec.rb +654 -654
  877. data/spec/spec_helper.rb +154 -148
  878. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  879. data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
  880. data/spec/streams/length_stream_protocol_spec.rb +297 -297
  881. data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
  882. data/spec/streams/serial_stream_spec.rb +105 -105
  883. data/spec/streams/stream_protocol_spec.rb +332 -332
  884. data/spec/streams/stream_spec.rb +29 -29
  885. data/spec/streams/tcpip_client_stream_spec.rb +54 -54
  886. data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
  887. data/spec/streams/template_stream_protocol_spec.rb +151 -151
  888. data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
  889. data/spec/system/system_spec.rb +645 -645
  890. data/spec/system/target_spec.rb +248 -248
  891. data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
  892. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  893. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  894. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +411 -411
  895. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  896. data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
  897. data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
  898. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  899. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
  900. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  901. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
  902. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
  903. data/spec/top_level/top_level_spec.rb +334 -321
  904. data/spec/utilities/crc_spec.rb +45 -45
  905. data/spec/utilities/csv_spec.rb +97 -97
  906. data/spec/utilities/logger_spec.rb +102 -102
  907. data/spec/utilities/message_log_spec.rb +89 -89
  908. data/spec/utilities/quaternion_spec.rb +107 -107
  909. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  910. data/tasks/manifest.rake +22 -22
  911. data/tasks/spec.rake +23 -23
  912. metadata +18 -2
@@ -1,39 +1,39 @@
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/processors/processor'
13
-
14
- module Cosmos
15
-
16
- describe NewPacketLogProcessor do
17
-
18
- describe "initialize" do
19
- it "should take a packet log writer name" do
20
- a = NewPacketLogProcessor.new('MINE')
21
- a.value_type.should eql :CONVERTED
22
- end
23
- end
24
-
25
- describe "call" do
26
- it "should start logging" do
27
- log_name = nil
28
- allow(CmdTlmServer).to receive_message_chain(:instance,:start_logging) do |name|
29
- log_name = name
30
- end
31
- a = NewPacketLogProcessor.new()
32
- a.call(nil, nil)
33
- log_name.should eql('ALL')
34
- end
35
- end
36
-
37
- end
38
- end
39
-
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/processors/processor'
13
+
14
+ module Cosmos
15
+
16
+ describe NewPacketLogProcessor do
17
+
18
+ describe "initialize" do
19
+ it "should take a packet log writer name" do
20
+ a = NewPacketLogProcessor.new('MINE')
21
+ a.value_type.should eql :CONVERTED
22
+ end
23
+ end
24
+
25
+ describe "call" do
26
+ it "should start logging" do
27
+ log_name = nil
28
+ allow(CmdTlmServer).to receive_message_chain(:instance,:start_logging) do |name|
29
+ log_name = name
30
+ end
31
+ a = NewPacketLogProcessor.new()
32
+ a.call(nil, nil)
33
+ log_name.should eql('ALL')
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+
@@ -1,55 +1,55 @@
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/processors/processor'
13
-
14
- module Cosmos
15
-
16
- describe Processor do
17
-
18
- describe "initialize" do
19
- it "should store an optional value_type" do
20
- a = Processor.new(:RAW)
21
- a.value_type.should eql :RAW
22
- b = Processor.new
23
- b.value_type.should eql :CONVERTED
24
- end
25
- end
26
-
27
- describe "call" do
28
- it "should raise an exception" do
29
- expect { Processor.new.call(0, 0) }.to raise_error("call method must be defined by subclass")
30
- end
31
- end
32
-
33
- describe "to_s" do
34
- it "should return a String" do
35
- Processor.new.to_s.should eql "Processor"
36
- end
37
- end
38
-
39
- describe "name" do
40
- it "should have an assignable name" do
41
- a = Processor.new
42
- a.name = "Test"
43
- a.name.should eql "TEST"
44
- end
45
- end
46
-
47
- describe "reset" do
48
- it "should have a reset method" do
49
- a = Processor.new
50
- expect { a.reset }.not_to raise_error
51
- end
52
- end
53
- end
54
- end
55
-
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/processors/processor'
13
+
14
+ module Cosmos
15
+
16
+ describe Processor do
17
+
18
+ describe "initialize" do
19
+ it "should store an optional value_type" do
20
+ a = Processor.new(:RAW)
21
+ a.value_type.should eql :RAW
22
+ b = Processor.new
23
+ b.value_type.should eql :CONVERTED
24
+ end
25
+ end
26
+
27
+ describe "call" do
28
+ it "should raise an exception" do
29
+ expect { Processor.new.call(0, 0) }.to raise_error("call method must be defined by subclass")
30
+ end
31
+ end
32
+
33
+ describe "to_s" do
34
+ it "should return a String" do
35
+ Processor.new.to_s.should eql "Processor"
36
+ end
37
+ end
38
+
39
+ describe "name" do
40
+ it "should have an assignable name" do
41
+ a = Processor.new
42
+ a.name = "Test"
43
+ a.name.should eql "TEST"
44
+ end
45
+ end
46
+
47
+ describe "reset" do
48
+ it "should have a reset method" do
49
+ a = Processor.new
50
+ expect { a.reset }.not_to raise_error
51
+ end
52
+ end
53
+ end
54
+ end
55
+
@@ -1,60 +1,60 @@
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/processors/statistics_processor'
14
-
15
- module Cosmos
16
-
17
- describe StatisticsProcessor do
18
-
19
- describe "initialize" do
20
- it "should take an item_name, samples_to_average, and value_type" do
21
- p = StatisticsProcessor.new('TEST', '5', 'RAW')
22
- p.value_type.should eql :RAW
23
- p.instance_variable_get("@item_name").should eql 'TEST'
24
- p.instance_variable_get("@samples_to_average").should eql 5
25
- end
26
- end
27
-
28
- describe "call and reset" do
29
- it "should generate statistics" do
30
- p = StatisticsProcessor.new('TEST', '5', 'RAW')
31
- packet = Packet.new("tgt","pkt")
32
- packet.append_item("TEST", 8, :UINT)
33
- packet.buffer= "\x01"
34
- p.call(packet, packet.buffer)
35
- p.results[:MAX].should eql 1
36
- p.results[:MIN].should eql 1
37
- p.results[:MEAN].should be_within(0.001).of(1.0)
38
- p.results[:STDDEV].should be_within(0.001).of(0.0)
39
- packet.buffer= "\x02"
40
- p.call(packet, packet.buffer)
41
- p.results[:MAX].should eql 2
42
- p.results[:MIN].should eql 1
43
- p.results[:MEAN].should be_within(0.001).of(1.5)
44
- p.results[:STDDEV].should be_within(0.001).of(0.7071)
45
- packet.buffer= "\x00"
46
- p.call(packet, packet.buffer)
47
- p.results[:MAX].should eql 2
48
- p.results[:MIN].should eql 0
49
- p.results[:MEAN].should be_within(0.001).of(1.0)
50
- p.results[:STDDEV].should be_within(0.001).of(1.0)
51
- p.reset
52
- p.results[:MAX].should eql nil
53
- p.results[:MIN].should eql nil
54
- p.results[:MEAN].should eql nil
55
- p.results[:STDDEV].should eql nil
56
- end
57
- end
58
- end
59
- end
60
-
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/processors/statistics_processor'
14
+
15
+ module Cosmos
16
+
17
+ describe StatisticsProcessor do
18
+
19
+ describe "initialize" do
20
+ it "should take an item_name, samples_to_average, and value_type" do
21
+ p = StatisticsProcessor.new('TEST', '5', 'RAW')
22
+ p.value_type.should eql :RAW
23
+ p.instance_variable_get("@item_name").should eql 'TEST'
24
+ p.instance_variable_get("@samples_to_average").should eql 5
25
+ end
26
+ end
27
+
28
+ describe "call and reset" do
29
+ it "should generate statistics" do
30
+ p = StatisticsProcessor.new('TEST', '5', 'RAW')
31
+ packet = Packet.new("tgt","pkt")
32
+ packet.append_item("TEST", 8, :UINT)
33
+ packet.buffer= "\x01"
34
+ p.call(packet, packet.buffer)
35
+ p.results[:MAX].should eql 1
36
+ p.results[:MIN].should eql 1
37
+ p.results[:MEAN].should be_within(0.001).of(1.0)
38
+ p.results[:STDDEV].should be_within(0.001).of(0.0)
39
+ packet.buffer= "\x02"
40
+ p.call(packet, packet.buffer)
41
+ p.results[:MAX].should eql 2
42
+ p.results[:MIN].should eql 1
43
+ p.results[:MEAN].should be_within(0.001).of(1.5)
44
+ p.results[:STDDEV].should be_within(0.001).of(0.7071)
45
+ packet.buffer= "\x00"
46
+ p.call(packet, packet.buffer)
47
+ p.results[:MAX].should eql 2
48
+ p.results[:MIN].should eql 0
49
+ p.results[:MEAN].should be_within(0.001).of(1.0)
50
+ p.results[:STDDEV].should be_within(0.001).of(1.0)
51
+ p.reset
52
+ p.results[:MAX].should eql nil
53
+ p.results[:MIN].should eql nil
54
+ p.results[:MEAN].should eql nil
55
+ p.results[:STDDEV].should eql nil
56
+ end
57
+ end
58
+ end
59
+ end
60
+
@@ -1,51 +1,51 @@
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/processors/watermark_processor'
14
-
15
- module Cosmos
16
-
17
- describe WatermarkProcessor do
18
-
19
- describe "initialize" do
20
- it "should take an item_name and value_type" do
21
- p = WatermarkProcessor.new('TEST', 'RAW')
22
- p.value_type.should eql :RAW
23
- p.instance_variable_get("@item_name").should eql 'TEST'
24
- end
25
- end
26
-
27
- describe "call and reset" do
28
- it "should generate a high and low water mark" do
29
- p = WatermarkProcessor.new('TEST', 'RAW')
30
- packet = Packet.new("tgt","pkt")
31
- packet.append_item("TEST", 8, :UINT)
32
- packet.buffer= "\x01"
33
- p.call(packet, packet.buffer)
34
- p.results[:HIGH_WATER].should eql 1
35
- p.results[:LOW_WATER].should eql 1
36
- packet.buffer= "\x02"
37
- p.call(packet, packet.buffer)
38
- p.results[:HIGH_WATER].should eql 2
39
- p.results[:LOW_WATER].should eql 1
40
- packet.buffer= "\x00"
41
- p.call(packet, packet.buffer)
42
- p.results[:HIGH_WATER].should eql 2
43
- p.results[:LOW_WATER].should eql 0
44
- p.reset
45
- p.results[:HIGH_WATER].should eql nil
46
- p.results[:LOW_WATER].should eql nil
47
- end
48
- end
49
- end
50
- end
51
-
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/processors/watermark_processor'
14
+
15
+ module Cosmos
16
+
17
+ describe WatermarkProcessor do
18
+
19
+ describe "initialize" do
20
+ it "should take an item_name and value_type" do
21
+ p = WatermarkProcessor.new('TEST', 'RAW')
22
+ p.value_type.should eql :RAW
23
+ p.instance_variable_get("@item_name").should eql 'TEST'
24
+ end
25
+ end
26
+
27
+ describe "call and reset" do
28
+ it "should generate a high and low water mark" do
29
+ p = WatermarkProcessor.new('TEST', 'RAW')
30
+ packet = Packet.new("tgt","pkt")
31
+ packet.append_item("TEST", 8, :UINT)
32
+ packet.buffer= "\x01"
33
+ p.call(packet, packet.buffer)
34
+ p.results[:HIGH_WATER].should eql 1
35
+ p.results[:LOW_WATER].should eql 1
36
+ packet.buffer= "\x02"
37
+ p.call(packet, packet.buffer)
38
+ p.results[:HIGH_WATER].should eql 2
39
+ p.results[:LOW_WATER].should eql 1
40
+ packet.buffer= "\x00"
41
+ p.call(packet, packet.buffer)
42
+ p.results[:HIGH_WATER].should eql 2
43
+ p.results[:LOW_WATER].should eql 0
44
+ p.reset
45
+ p.results[:HIGH_WATER].should eql nil
46
+ p.results[:LOW_WATER].should eql nil
47
+ end
48
+ end
49
+ end
50
+ end
51
+
@@ -1,654 +1,654 @@
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/script/script'
14
- require 'tempfile'
15
-
16
- module Cosmos
17
-
18
- describe Script do
19
-
20
- before(:all) do
21
- cts = File.join(Cosmos::USERPATH,'config','tools','cmd_tlm_server','cmd_tlm_server.txt')
22
- FileUtils.mkdir_p(File.dirname(cts))
23
- File.open(cts,'w') do |file|
24
- file.puts 'INTERFACE INST_INT interface.rb'
25
- file.puts 'TARGET INST'
26
- end
27
- System.class_eval('@@instance = nil')
28
-
29
- require 'cosmos/script'
30
- end
31
-
32
- after(:all) do
33
- clean_config()
34
- FileUtils.rm_rf File.join(Cosmos::USERPATH,'config','tools')
35
- end
36
-
37
- before(:each) do
38
- allow_any_instance_of(Interface).to receive(:connected?).and_return(true)
39
- allow_any_instance_of(Interface).to receive(:disconnect)
40
- allow_any_instance_of(Interface).to receive(:write)
41
- allow_any_instance_of(Interface).to receive(:read)
42
-
43
- @server = CmdTlmServer.new
44
- shutdown_cmd_tlm()
45
- initialize_script_module()
46
- sleep 0.1
47
- end
48
-
49
- after(:each) do
50
- @server.stop
51
- shutdown_cmd_tlm()
52
- sleep(0.1)
53
- end
54
-
55
- describe "cmd" do
56
- it "should send a command" do
57
- capture_io do |stdout|
58
- cmd("INST ABORT")
59
- stdout.string.should match /cmd\(\'INST ABORT\'\)/ #'
60
- end
61
- end
62
-
63
- it "should check parameter ranges" do
64
- expect { cmd("INST COLLECT with TYPE NORMAL, DURATION 20") }.to raise_error(/Command parameter 'INST COLLECT DURATION' = 20 not in valid range/)
65
- end
66
-
67
- it "should prompt for a hazardous command" do
68
- capture_io do |stdout|
69
- expect(self).to receive(:gets) { 'y' } # Send hazardous command
70
- cmd("INST COLLECT with TYPE SPECIAL")
71
-
72
- stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
73
- stdout.string.should match /cmd\(\'INST COLLECT/
74
- stdout.rewind
75
-
76
- expect(self).to receive(:gets) { 'n' } # Don't send hazardous
77
- expect(self).to receive(:gets) { 'n' } # Don't stop running script
78
- cmd("INST COLLECT with TYPE SPECIAL")
79
- stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
80
- stdout.string.should match "WARN: Hazardous command not sent"
81
- end
82
- end
83
- end
84
-
85
- describe "cmd_no_range_check" do
86
- it "should send an out of range command" do
87
- expect { cmd_no_range_check("INST COLLECT with TYPE NORMAL, DURATION 20") }.to_not raise_error
88
- end
89
-
90
- it "should prompt for a hazardous command" do
91
- capture_io do |stdout|
92
- expect(self).to receive(:gets) { 'y' } # Send hazardous command
93
- cmd_no_range_check("INST COLLECT with TYPE SPECIAL")
94
-
95
- stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
96
- stdout.string.should match /cmd\(\'INST COLLECT/
97
- stdout.rewind
98
-
99
- expect(self).to receive(:gets) { 'n' } # Don't send hazardous
100
- expect(self).to receive(:gets) { 'n' } # Don't stop running script
101
- cmd_no_range_check("INST COLLECT with TYPE SPECIAL")
102
- stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
103
- stdout.string.should match "WARN: Hazardous command not sent"
104
- end
105
- end
106
- end
107
-
108
- describe "cmd_no_hazardous_check" do
109
- it "should check parameter ranges" do
110
- expect { cmd_no_hazardous_check("INST COLLECT with TYPE SPECIAL, DURATION 20") }.to raise_error(/Command parameter 'INST COLLECT DURATION' = 20 not in valid range/)
111
- end
112
-
113
- it "should send a hazardous command without prompting" do
114
- capture_io do |stdout|
115
- cmd_no_hazardous_check("INST COLLECT with TYPE SPECIAL")
116
-
117
- stdout.string.should match "Command INST COLLECT being sent ignoring hazardous warnings"
118
- stdout.string.should match /cmd\(\'INST COLLECT/
119
- end
120
- end
121
- end
122
-
123
- describe "cmd_no_checks" do
124
- it "should send an out of range hazardous command without prompting" do
125
- capture_io do |stdout|
126
- cmd_no_checks("INST COLLECT with TYPE SPECIAL, DURATION 20")
127
-
128
- stdout.string.should match "Command INST COLLECT being sent ignoring hazardous warnings"
129
- stdout.string.should match /cmd\(\'INST COLLECT/
130
- end
131
- end
132
- end
133
-
134
- describe "cmd_raw" do
135
- it "should send a command" do
136
- capture_io do |stdout|
137
- cmd_raw("INST ABORT")
138
- stdout.string.should match /cmd_raw\(\'INST ABORT\'\)/
139
- end
140
- end
141
-
142
- it "should check parameter ranges" do
143
- expect { cmd_raw("INST COLLECT with TYPE 0, DURATION 20") }.to raise_error(/Command parameter 'INST COLLECT DURATION' = 20 not in valid range/) #'
144
- end
145
-
146
- it "should prompt for a hazardous command" do
147
- capture_io do |stdout|
148
- expect(self).to receive(:gets) { 'y' } # Send hazardous command
149
- cmd_raw("INST COLLECT with TYPE 1")
150
-
151
- stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
152
- stdout.string.should match /cmd_raw\(\'INST COLLECT/
153
- stdout.rewind
154
-
155
- expect(self).to receive(:gets) { 'n' } # Don't send hazardous
156
- expect(self).to receive(:gets) { 'n' } # Don't stop running script
157
- cmd_raw("INST COLLECT with TYPE 1")
158
- stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
159
- stdout.string.should match "WARN: Hazardous command not sent"
160
- end
161
- end
162
- end
163
-
164
- describe "cmd_raw_no_range_check" do
165
- it "should send an out of range command" do
166
- expect { cmd_raw_no_range_check("INST COLLECT with TYPE 0, DURATION 20") }.to_not raise_error
167
- end
168
-
169
- it "should prompt for a hazardous command" do
170
- capture_io do |stdout|
171
- expect(self).to receive(:gets) { 'y' } # Send hazardous command
172
- cmd_raw_no_range_check("INST COLLECT with TYPE 1")
173
-
174
- stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
175
- stdout.string.should match /cmd_raw\(\'INST COLLECT/
176
- stdout.rewind
177
-
178
- expect(self).to receive(:gets) { 'n' } # Don't send hazardous
179
- expect(self).to receive(:gets) { 'n' } # Don't stop running script
180
- cmd_raw_no_range_check("INST COLLECT with TYPE 1")
181
- stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
182
- stdout.string.should match "WARN: Hazardous command not sent"
183
- end
184
- end
185
- end
186
-
187
- describe "cmd_raw_no_hazardous_check" do
188
- it "should check parameter ranges" do
189
- expect { cmd_raw_no_hazardous_check("INST COLLECT with TYPE 1, DURATION 20") }.to raise_error(/Command parameter 'INST COLLECT DURATION' = 20 not in valid range/)
190
- end
191
-
192
- it "should send a hazardous command without prompting" do
193
- capture_io do |stdout|
194
- cmd_raw_no_hazardous_check("INST COLLECT with TYPE 1")
195
- stdout.string.should match "Command INST COLLECT being sent ignoring hazardous warnings"
196
- stdout.string.should match /cmd_raw\(\'INST COLLECT/ #'
197
- end
198
- end
199
- end
200
-
201
- describe "cmd_raw_no_checks" do
202
- it "should send an out of range hazardous command without prompting" do
203
- capture_io do |stdout|
204
- cmd_raw_no_checks("INST COLLECT with TYPE 1, DURATION 20")
205
- stdout.string.should match "Command INST COLLECT being sent ignoring hazardous warnings"
206
- stdout.string.should match /cmd_raw\(\'INST COLLECT/ #'
207
- end
208
- end
209
- end
210
-
211
- describe "send_raw" do
212
- it "should send data to the write_raw interface method" do
213
- expect_any_instance_of(Interface).to receive(:write_raw).with('\x00')
214
- send_raw('INST_INT', '\x00')
215
- end
216
- end
217
-
218
- describe "send_raw_file" do
219
- it "should send file data to the write_raw interface method" do
220
- file = File.open('raw_test_file.bin','wb')
221
- file.write '\x00\x01\x02\x03'
222
- file.close
223
-
224
- expect_any_instance_of(Interface).to receive(:write_raw).with('\x00\x01\x02\x03')
225
-
226
- send_raw_file('INST_INT', 'raw_test_file.bin')
227
-
228
- File.delete('raw_test_file.bin')
229
- end
230
- end
231
-
232
- describe "get_cmd_list" do
233
- it "should return all the target commands" do
234
- list = get_cmd_list("INST")
235
- # Only check for the collect command to make this test list dependent
236
- # on the demo INST command definition file
237
- list.should include(["COLLECT", "Starts a collect on the instrument"])
238
- end
239
- end
240
-
241
- describe "get_cmd_param_list" do
242
- it "should return all the parameters for a command" do
243
- list = get_cmd_param_list("INST", "COLLECT")
244
- list.should include(["TYPE", 0, {"NORMAL"=>0, "SPECIAL"=>1}, "Collect type", nil, nil, true])
245
- end
246
- end
247
-
248
- describe "get_cmd_hazardous" do
249
- it "should return whether a command is hazardous" do
250
- get_cmd_hazardous("INST", "COLLECT", {"TYPE"=>"NORMAL"}).should be_falsey
251
- get_cmd_hazardous("INST", "COLLECT", {"TYPE"=>"SPECIAL"}).should be_truthy
252
- end
253
- end
254
-
255
- describe "tlm, tlm_raw, tlm_formatted, tlm_with_units, tlm_variable, set_tlm, set_tlm_raw" do
256
- it "should pass through to the cmd_tlm_server" do
257
- expect {
258
- tlm("INST HEALTH_STATUS TEMP1").should eql -100.0
259
- tlm_raw("INST HEALTH_STATUS TEMP1").should eql 0
260
- tlm_formatted("INST HEALTH_STATUS TEMP1").should eql "-100.000"
261
- tlm_with_units("INST HEALTH_STATUS TEMP1").should eql "-100.000 C"
262
- tlm_variable("INST HEALTH_STATUS TEMP1", :RAW).should eql 0
263
- set_tlm("INST HEALTH_STATUS TEMP1 = 1")
264
- set_tlm_raw("INST HEALTH_STATUS TEMP1 = 0")
265
- }.to_not raise_error
266
- end
267
- end
268
-
269
- describe "get_tlm_packet" do
270
- it "should get the packet values" do
271
- get_tlm_packet("INST", "HEALTH_STATUS", :RAW).should include(["TEMP1", 0, :RED_LOW])
272
- end
273
- end
274
-
275
- describe "get_tlm_values" do
276
- it "should get the given values" do
277
- vals = get_tlm_values([["INST", "HEALTH_STATUS", "TEMP1"], ["INST", "HEALTH_STATUS", "TEMP2"]])
278
- vals[0][0].should eql -100.0
279
- vals[1][0].should eql :RED_LOW
280
- vals[2][0].should eql [-80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
281
- vals[3].should eql :DEFAULT
282
- end
283
- end
284
-
285
- describe "get_tlm_list" do
286
- it "should get packets for a given target" do
287
- get_tlm_list("INST").should include(["HEALTH_STATUS", "Health and status from the instrument"])
288
- end
289
- end
290
-
291
- describe "get_tlm_item_list" do
292
- it "should get telemetry for a given packet" do
293
- get_tlm_item_list("INST", "HEALTH_STATUS").should include(["TEMP1",nil,"Temperature #1"])
294
- end
295
- end
296
-
297
- describe "get_tlm_details" do
298
- it "should get telemetry for a given packet" do
299
- details = get_tlm_details([["INST", "HEALTH_STATUS", "TEMP1"], ["INST", "HEALTH_STATUS", "TEMP2"]])
300
- details[0]["name"].should eql "TEMP1"
301
- details[1]["name"].should eql "TEMP2"
302
- end
303
- end
304
-
305
- describe "get_out_of_limits" do
306
- it "should get all out of limits items" do
307
- get_out_of_limits.should include(["INST","HEALTH_STATUS","TEMP1",:RED_LOW])
308
- end
309
- end
310
-
311
- describe "limits_enabled?, disable_limits, enable_limits" do
312
- it "should enable, disable, and check limits for an item" do
313
- limits_enabled?("INST HEALTH_STATUS TEMP1").should be_truthy
314
- disable_limits("INST HEALTH_STATUS TEMP1")
315
- limits_enabled?("INST HEALTH_STATUS TEMP1").should be_falsey
316
- enable_limits("INST HEALTH_STATUS TEMP1")
317
- limits_enabled?("INST HEALTH_STATUS TEMP1").should be_truthy
318
- end
319
- end
320
-
321
- describe "get_limits, set_limits" do
322
- it "should get and set limits for an item" do
323
- get_limits("INST", "HEALTH_STATUS", "TEMP1").should eql [:DEFAULT, 1, true, -80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
324
- set_limits("INST", "HEALTH_STATUS", "TEMP1", 1, 2, 5, 6, 3, 4).should eql [:CUSTOM, 1, true, 1.0, 2.0, 5.0, 6.0, 3.0, 4.0]
325
- end
326
- end
327
-
328
- describe "get_limits_groups, enable_limits_group, disable_limits_group" do
329
- it "should enable, disable, and get groups" do
330
- get_limits_groups.should include("FIRST")
331
- enable_limits_group("FIRST")
332
- disable_limits_group("FIRST")
333
- end
334
- end
335
-
336
- describe "get_limits_sets, enable_limits_set, disable_limits_set" do
337
- it "should enable, disable, and get sets CTS-16" do
338
- if get_limits_sets.include?(:CUSTOM)
339
- get_limits_sets.should eql [:DEFAULT,:TVAC,:CUSTOM]
340
- else
341
- get_limits_sets.should eql [:DEFAULT,:TVAC]
342
- end
343
- set_limits_set(:TVAC)
344
- get_limits_set.should eql :TVAC
345
- set_limits_set(:DEFAULT)
346
- get_limits_set.should eql :DEFAULT
347
- end
348
- end
349
-
350
- describe "get_target_list" do
351
- it "should return the list of targets" do
352
- get_target_list.should include("INST")
353
- end
354
- end
355
-
356
- describe "subscribe_limits_events, get_limits_event, unsubscribe_limits_events" do
357
- it "should raise an error if non_block and the queue is empty" do
358
- id = subscribe_limits_events
359
- expect { get_limits_event(id, true) }.to raise_error(ThreadError, "queue empty")
360
- unsubscribe_limits_events(id)
361
- end
362
-
363
- it "should subscribe and get limits change events" do
364
- id = subscribe_limits_events
365
- CmdTlmServer.instance.post_limits_event(:LIMITS_CHANGE, ['TGT','PKT','ITEM',:YELLOW,:RED])
366
- result = get_limits_event(id, true)
367
- result[0].should eql :LIMITS_CHANGE
368
- unsubscribe_limits_events(id)
369
- end
370
-
371
- it "should subscribe and get limits settings events" do
372
- id = subscribe_limits_events
373
- CmdTlmServer.instance.post_limits_event(:LIMITS_SETTINGS, ['TGT','PKT','ITEM',:DEFAULT])
374
- result = get_limits_event(id, true)
375
- result[0].should eql :LIMITS_SETTINGS
376
- unsubscribe_limits_events(id)
377
- end
378
- end
379
-
380
- describe "subscribe_packet_data, get_packet, unsubscribe_packet_data" do
381
- it "should raise an error if non_block and the queue is empty" do
382
- id = subscribe_packet_data([["INST","HEALTH_STATUS"]])
383
- expect { get_packet(id, true) }.to raise_error(ThreadError, "queue empty")
384
- unsubscribe_packet_data(id)
385
- end
386
-
387
- it "should subscribe and get limits events" do
388
- id = subscribe_packet_data([["INST","HEALTH_STATUS"]])
389
- CmdTlmServer.instance.post_packet(System.telemetry.packet("INST","HEALTH_STATUS"))
390
- packet = get_packet(id, true)
391
- packet.target_name.should eql "INST"
392
- packet.packet_name.should eql "HEALTH_STATUS"
393
- unsubscribe_packet_data(id)
394
- end
395
- end
396
-
397
- describe "status_bar" do
398
- it "should set the ScriptRunner status bar" do
399
- class ScriptRunner; end
400
- sc = ScriptRunner.new
401
- expect(sc).to receive(:script_set_status).with("HI")
402
- status_bar("HI")
403
- end
404
- end
405
-
406
- describe "ask_string, ask" do
407
- it "should get user input" do
408
- $stdout = StringIO.new
409
- expect(self).to receive(:gets) { '10' }
410
- ask_string("").should eql '10'
411
- expect(self).to receive(:gets) { '10' }
412
- ask("").should eql 10
413
- $stdout = STDOUT
414
- end
415
- end
416
-
417
- describe "prompt, prompt_message_box" do
418
- it "should prompt the user for input" do
419
- $stdout = StringIO.new
420
- expect(self).to receive(:gets) { 'message' }
421
- prompt("").should eql 'message'
422
- expect(self).to receive(:gets) { 'b1' }
423
- message_box("",["b1","b2"]).should eql 'b1'
424
- $stdout = STDOUT
425
- end
426
- end
427
-
428
- describe "check, check_formatted, check_with_units, check_raw" do
429
- it "should check a telemetry item vs a condition" do
430
- capture_io do |stdout|
431
- check("INST HEALTH_STATUS TEMP1 == -100")
432
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == -100 success"
433
- stdout.rewind
434
-
435
- check("INST","HEALTH_STATUS","TEMP1","== -100")
436
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == -100 success"
437
- stdout.rewind
438
-
439
- check_formatted("INST HEALTH_STATUS TEMP1 == '-100.000'")
440
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == '-100.000' success"
441
- stdout.rewind
442
-
443
- check_formatted("INST","HEALTH_STATUS","TEMP1","== '-100.000'")
444
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == '-100.000' success"
445
- stdout.rewind
446
-
447
- check_with_units("INST HEALTH_STATUS TEMP1 == '-100.000 C'")
448
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == '-100.000 C' success"
449
- stdout.rewind
450
-
451
- check_with_units("INST","HEALTH_STATUS","TEMP1","== '-100.000 C'")
452
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == '-100.000 C' success"
453
- stdout.rewind
454
-
455
- check_raw("INST HEALTH_STATUS TEMP1")
456
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == 0"
457
- end
458
-
459
- check("INST HEALTH_STATUS TEMP1 < 0")
460
- expect { check("INST HEALTH_STATUS TEMP1 > 0") }.to raise_error(Cosmos::CheckError)
461
- end
462
- end
463
-
464
- describe "check_tolerance, check_tolerance_raw" do
465
- it "should check a telemetry item vs tolerance" do
466
- capture_io do |stdout|
467
- check_tolerance("INST HEALTH_STATUS TEMP1", -100.0, 1)
468
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 was within range"
469
- stdout.rewind
470
-
471
- expect { check_tolerance("INST HEALTH_STATUS TEMP1", -200.0, 1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 failed to be within range/)
472
- stdout.rewind
473
-
474
- check_tolerance_raw("INST HEALTH_STATUS TEMP1", 0, 1)
475
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 was within range"
476
- stdout.rewind
477
-
478
- expect { check_tolerance_raw("INST HEALTH_STATUS TEMP1", 100, 1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 failed to be within range/)
479
- stdout.rewind
480
- end
481
- end
482
- end
483
-
484
- describe "check_expression" do
485
- it "should check an arbitrary expression" do
486
- capture_io do |stdout|
487
- check_expression("true == true")
488
- stdout.string.should match "CHECK: true == true is TRUE"
489
- end
490
-
491
- expect { check_expression("true == false") }.to raise_error(CheckError, "CHECK: true == false is FALSE")
492
- end
493
- end
494
-
495
- describe "wait, wait_raw, wait_tolerance, wait_tolerance_raw" do
496
- it "should wait for telemetry check to be true" do
497
- capture_io do |stdout|
498
- # Success
499
- wait("INST HEALTH_STATUS TEMP1 == -100.0", 5)
500
- stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 == -100.0"
501
- stdout.rewind
502
- wait_raw("INST HEALTH_STATUS TEMP1 == 0", 5)
503
- stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 == 0"
504
- stdout.rewind
505
- wait_tolerance("INST HEALTH_STATUS TEMP1", -100.0, 1, 5)
506
- stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 was within"
507
- stdout.rewind
508
- wait_tolerance_raw("INST HEALTH_STATUS TEMP1", 0, 1, 5)
509
- stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 was within"
510
- stdout.rewind
511
-
512
- # Failure
513
- wait("INST HEALTH_STATUS TEMP1 == -200.0", 0.1)
514
- stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 == -200.0 failed"
515
- stdout.rewind
516
- wait_raw("INST HEALTH_STATUS TEMP1 == 100", 0.1)
517
- stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 == 100 failed"
518
- stdout.rewind
519
- wait_tolerance("INST HEALTH_STATUS TEMP1", -200.0, 1, 0.1)
520
- stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 failed to be within"
521
- stdout.rewind
522
- wait_tolerance_raw("INST HEALTH_STATUS TEMP1", 100, 1, 0.1)
523
- stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 failed to be within"
524
- stdout.rewind
525
- end
526
- end
527
- end
528
-
529
- describe "wait_expression" do
530
- it "should wait for an expression to be true" do
531
- capture_io do |stdout|
532
- # Success
533
- wait_expression("true == true", 5)
534
- stdout.string.should match "WAIT: true == true is TRUE"
535
- stdout.rewind
536
-
537
- # Failure
538
- wait_expression("true == false", 0.1)
539
- stdout.string.should match "WAIT: true == false is FALSE"
540
- stdout.rewind
541
- end
542
- end
543
- end
544
-
545
- describe "wait_check, wait_check_raw, wait_check_tolerance, wait_check_tolerance_raw" do
546
- it "should wait for telemetry check to be true" do
547
- capture_io do |stdout|
548
- # Success
549
- wait_check("INST HEALTH_STATUS TEMP1 == -100.0", 5)
550
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == -100.0"
551
- stdout.rewind
552
- wait_check_raw("INST HEALTH_STATUS TEMP1 == 0", 5)
553
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == 0"
554
- stdout.rewind
555
- wait_check_tolerance("INST HEALTH_STATUS TEMP1", -100.0, 1, 5)
556
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 was within"
557
- stdout.rewind
558
- wait_check_tolerance_raw("INST HEALTH_STATUS TEMP1", 0, 1, 5)
559
- stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 was within"
560
- stdout.rewind
561
- end
562
-
563
- # Failure
564
- expect { wait_check("INST HEALTH_STATUS TEMP1 == -200.0", 0.1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 == -200.0 failed/)
565
- expect { wait_check_raw("INST HEALTH_STATUS TEMP1 == 100", 0.1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 == 100 failed/)
566
- expect { wait_check_tolerance("INST HEALTH_STATUS TEMP1", -200.0, 1, 0.1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 failed to be within/)
567
-
568
- expect { wait_check_tolerance_raw("INST HEALTH_STATUS TEMP1", 100, 1, 0.1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 failed to be within/)
569
-
570
- end
571
- end
572
-
573
- describe "wait_check_expression" do
574
- it "should wait for an expression to be true" do
575
- capture_io do |stdout|
576
- # Success
577
- wait_check_expression("true == true", 5)
578
- stdout.string.should match "CHECK: true == true is TRUE"
579
- stdout.rewind
580
- end
581
-
582
- # Failure
583
- expect { wait_check_expression("true == false", 0.1) }.to raise_error(CheckError, /CHECK: true == false is FALSE/)
584
- end
585
- end
586
-
587
- describe "wait_packet, wait_check_packet" do
588
- it "should wait for a certain number of packets" do
589
- capture_io do |stdout|
590
- wait_packet("INST","HEALTH_STATUS",1,0.1)
591
- end
592
-
593
- expect { wait_check_packet("INST","HEALTH_STATUS",1,0.1) }.to raise_error(CheckError, /INST HEALTH_STATUS expected to be received 1 times but only received 0 times/)
594
- end
595
- end
596
-
597
- describe "get_interface_names" do
598
- it "should return all interfaces" do
599
- get_interface_names.should include("INST_INT")
600
- end
601
- end
602
-
603
- describe "connect_interface, disconnect_interface, interface_state" do
604
- it "should connect, disconnect and return the state of the interface CTS-3" do
605
- connect_interface("INST_INT")
606
- interface_state("INST_INT").should eql "CONNECTED"
607
- disconnect_interface("INST_INT")
608
- end
609
- end
610
-
611
- describe "map_target_to_interface" do
612
- it "should map a target name to an interface" do
613
- map_target_to_interface("INST","INST_INT")
614
- end
615
- end
616
-
617
- describe "connect_router, disconnect_router, get_router_names, router_state" do
618
- it "should return connect, disconnect, and list the routers CTS-11" do
619
- get_router_names.should include("PREIDENTIFIED_ROUTER")
620
- connect_router("PREIDENTIFIED_ROUTER")
621
- router_state("PREIDENTIFIED_ROUTER").should eql "CONNECTED"
622
- disconnect_router("PREIDENTIFIED_ROUTER")
623
- end
624
- end
625
-
626
- describe "logging methods" do
627
- it "should start and stop logging and get filenames CTS-14" do
628
- start_logging
629
- stop_logging
630
- get_cmd_log_filename
631
- get_tlm_log_filename
632
- start_cmd_log
633
- start_tlm_log
634
- get_cmd_log_filename
635
- get_tlm_log_filename
636
- stop_cmd_log
637
- stop_tlm_log
638
- get_cmd_log_filename
639
- get_tlm_log_filename
640
- start_raw_logging_interface
641
- start_raw_logging_router
642
- stop_raw_logging_interface
643
- stop_raw_logging_router
644
-
645
- start_new_server_message_log
646
- sleep 0.1
647
- filename = get_server_message_log_filename
648
- filename.should match /server_messages.txt/
649
- end
650
- end
651
-
652
- end
653
- end
654
-
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/script/script'
14
+ require 'tempfile'
15
+
16
+ module Cosmos
17
+
18
+ describe Script do
19
+
20
+ before(:all) do
21
+ cts = File.join(Cosmos::USERPATH,'config','tools','cmd_tlm_server','cmd_tlm_server.txt')
22
+ FileUtils.mkdir_p(File.dirname(cts))
23
+ File.open(cts,'w') do |file|
24
+ file.puts 'INTERFACE INST_INT interface.rb'
25
+ file.puts 'TARGET INST'
26
+ end
27
+ System.class_eval('@@instance = nil')
28
+
29
+ require 'cosmos/script'
30
+ end
31
+
32
+ after(:all) do
33
+ clean_config()
34
+ FileUtils.rm_rf File.join(Cosmos::USERPATH,'config','tools')
35
+ end
36
+
37
+ before(:each) do
38
+ allow_any_instance_of(Interface).to receive(:connected?).and_return(true)
39
+ allow_any_instance_of(Interface).to receive(:disconnect)
40
+ allow_any_instance_of(Interface).to receive(:write)
41
+ allow_any_instance_of(Interface).to receive(:read)
42
+
43
+ @server = CmdTlmServer.new
44
+ shutdown_cmd_tlm()
45
+ initialize_script_module()
46
+ sleep 0.1
47
+ end
48
+
49
+ after(:each) do
50
+ @server.stop
51
+ shutdown_cmd_tlm()
52
+ sleep(0.1)
53
+ end
54
+
55
+ describe "cmd" do
56
+ it "should send a command" do
57
+ capture_io do |stdout|
58
+ cmd("INST ABORT")
59
+ stdout.string.should match /cmd\(\'INST ABORT\'\)/ #'
60
+ end
61
+ end
62
+
63
+ it "should check parameter ranges" do
64
+ expect { cmd("INST COLLECT with TYPE NORMAL, DURATION 20") }.to raise_error(/Command parameter 'INST COLLECT DURATION' = 20 not in valid range/)
65
+ end
66
+
67
+ it "should prompt for a hazardous command" do
68
+ capture_io do |stdout|
69
+ expect(self).to receive(:gets) { 'y' } # Send hazardous command
70
+ cmd("INST COLLECT with TYPE SPECIAL")
71
+
72
+ stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
73
+ stdout.string.should match /cmd\(\'INST COLLECT/
74
+ stdout.rewind
75
+
76
+ expect(self).to receive(:gets) { 'n' } # Don't send hazardous
77
+ expect(self).to receive(:gets) { 'n' } # Don't stop running script
78
+ cmd("INST COLLECT with TYPE SPECIAL")
79
+ stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
80
+ stdout.string.should match "WARN: Hazardous command not sent"
81
+ end
82
+ end
83
+ end
84
+
85
+ describe "cmd_no_range_check" do
86
+ it "should send an out of range command" do
87
+ expect { cmd_no_range_check("INST COLLECT with TYPE NORMAL, DURATION 20") }.to_not raise_error
88
+ end
89
+
90
+ it "should prompt for a hazardous command" do
91
+ capture_io do |stdout|
92
+ expect(self).to receive(:gets) { 'y' } # Send hazardous command
93
+ cmd_no_range_check("INST COLLECT with TYPE SPECIAL")
94
+
95
+ stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
96
+ stdout.string.should match /cmd\(\'INST COLLECT/
97
+ stdout.rewind
98
+
99
+ expect(self).to receive(:gets) { 'n' } # Don't send hazardous
100
+ expect(self).to receive(:gets) { 'n' } # Don't stop running script
101
+ cmd_no_range_check("INST COLLECT with TYPE SPECIAL")
102
+ stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
103
+ stdout.string.should match "WARN: Hazardous command not sent"
104
+ end
105
+ end
106
+ end
107
+
108
+ describe "cmd_no_hazardous_check" do
109
+ it "should check parameter ranges" do
110
+ expect { cmd_no_hazardous_check("INST COLLECT with TYPE SPECIAL, DURATION 20") }.to raise_error(/Command parameter 'INST COLLECT DURATION' = 20 not in valid range/)
111
+ end
112
+
113
+ it "should send a hazardous command without prompting" do
114
+ capture_io do |stdout|
115
+ cmd_no_hazardous_check("INST COLLECT with TYPE SPECIAL")
116
+
117
+ stdout.string.should match "Command INST COLLECT being sent ignoring hazardous warnings"
118
+ stdout.string.should match /cmd\(\'INST COLLECT/
119
+ end
120
+ end
121
+ end
122
+
123
+ describe "cmd_no_checks" do
124
+ it "should send an out of range hazardous command without prompting" do
125
+ capture_io do |stdout|
126
+ cmd_no_checks("INST COLLECT with TYPE SPECIAL, DURATION 20")
127
+
128
+ stdout.string.should match "Command INST COLLECT being sent ignoring hazardous warnings"
129
+ stdout.string.should match /cmd\(\'INST COLLECT/
130
+ end
131
+ end
132
+ end
133
+
134
+ describe "cmd_raw" do
135
+ it "should send a command" do
136
+ capture_io do |stdout|
137
+ cmd_raw("INST ABORT")
138
+ stdout.string.should match /cmd_raw\(\'INST ABORT\'\)/
139
+ end
140
+ end
141
+
142
+ it "should check parameter ranges" do
143
+ expect { cmd_raw("INST COLLECT with TYPE 0, DURATION 20") }.to raise_error(/Command parameter 'INST COLLECT DURATION' = 20 not in valid range/) #'
144
+ end
145
+
146
+ it "should prompt for a hazardous command" do
147
+ capture_io do |stdout|
148
+ expect(self).to receive(:gets) { 'y' } # Send hazardous command
149
+ cmd_raw("INST COLLECT with TYPE 1")
150
+
151
+ stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
152
+ stdout.string.should match /cmd_raw\(\'INST COLLECT/
153
+ stdout.rewind
154
+
155
+ expect(self).to receive(:gets) { 'n' } # Don't send hazardous
156
+ expect(self).to receive(:gets) { 'n' } # Don't stop running script
157
+ cmd_raw("INST COLLECT with TYPE 1")
158
+ stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
159
+ stdout.string.should match "WARN: Hazardous command not sent"
160
+ end
161
+ end
162
+ end
163
+
164
+ describe "cmd_raw_no_range_check" do
165
+ it "should send an out of range command" do
166
+ expect { cmd_raw_no_range_check("INST COLLECT with TYPE 0, DURATION 20") }.to_not raise_error
167
+ end
168
+
169
+ it "should prompt for a hazardous command" do
170
+ capture_io do |stdout|
171
+ expect(self).to receive(:gets) { 'y' } # Send hazardous command
172
+ cmd_raw_no_range_check("INST COLLECT with TYPE 1")
173
+
174
+ stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
175
+ stdout.string.should match /cmd_raw\(\'INST COLLECT/
176
+ stdout.rewind
177
+
178
+ expect(self).to receive(:gets) { 'n' } # Don't send hazardous
179
+ expect(self).to receive(:gets) { 'n' } # Don't stop running script
180
+ cmd_raw_no_range_check("INST COLLECT with TYPE 1")
181
+ stdout.string.should match "Warning: Command INST COLLECT is Hazardous"
182
+ stdout.string.should match "WARN: Hazardous command not sent"
183
+ end
184
+ end
185
+ end
186
+
187
+ describe "cmd_raw_no_hazardous_check" do
188
+ it "should check parameter ranges" do
189
+ expect { cmd_raw_no_hazardous_check("INST COLLECT with TYPE 1, DURATION 20") }.to raise_error(/Command parameter 'INST COLLECT DURATION' = 20 not in valid range/)
190
+ end
191
+
192
+ it "should send a hazardous command without prompting" do
193
+ capture_io do |stdout|
194
+ cmd_raw_no_hazardous_check("INST COLLECT with TYPE 1")
195
+ stdout.string.should match "Command INST COLLECT being sent ignoring hazardous warnings"
196
+ stdout.string.should match /cmd_raw\(\'INST COLLECT/ #'
197
+ end
198
+ end
199
+ end
200
+
201
+ describe "cmd_raw_no_checks" do
202
+ it "should send an out of range hazardous command without prompting" do
203
+ capture_io do |stdout|
204
+ cmd_raw_no_checks("INST COLLECT with TYPE 1, DURATION 20")
205
+ stdout.string.should match "Command INST COLLECT being sent ignoring hazardous warnings"
206
+ stdout.string.should match /cmd_raw\(\'INST COLLECT/ #'
207
+ end
208
+ end
209
+ end
210
+
211
+ describe "send_raw" do
212
+ it "should send data to the write_raw interface method" do
213
+ expect_any_instance_of(Interface).to receive(:write_raw).with('\x00')
214
+ send_raw('INST_INT', '\x00')
215
+ end
216
+ end
217
+
218
+ describe "send_raw_file" do
219
+ it "should send file data to the write_raw interface method" do
220
+ file = File.open('raw_test_file.bin','wb')
221
+ file.write '\x00\x01\x02\x03'
222
+ file.close
223
+
224
+ expect_any_instance_of(Interface).to receive(:write_raw).with('\x00\x01\x02\x03')
225
+
226
+ send_raw_file('INST_INT', 'raw_test_file.bin')
227
+
228
+ File.delete('raw_test_file.bin')
229
+ end
230
+ end
231
+
232
+ describe "get_cmd_list" do
233
+ it "should return all the target commands" do
234
+ list = get_cmd_list("INST")
235
+ # Only check for the collect command to make this test list dependent
236
+ # on the demo INST command definition file
237
+ list.should include(["COLLECT", "Starts a collect on the instrument"])
238
+ end
239
+ end
240
+
241
+ describe "get_cmd_param_list" do
242
+ it "should return all the parameters for a command" do
243
+ list = get_cmd_param_list("INST", "COLLECT")
244
+ list.should include(["TYPE", 0, {"NORMAL"=>0, "SPECIAL"=>1}, "Collect type", nil, nil, true])
245
+ end
246
+ end
247
+
248
+ describe "get_cmd_hazardous" do
249
+ it "should return whether a command is hazardous" do
250
+ get_cmd_hazardous("INST", "COLLECT", {"TYPE"=>"NORMAL"}).should be_falsey
251
+ get_cmd_hazardous("INST", "COLLECT", {"TYPE"=>"SPECIAL"}).should be_truthy
252
+ end
253
+ end
254
+
255
+ describe "tlm, tlm_raw, tlm_formatted, tlm_with_units, tlm_variable, set_tlm, set_tlm_raw" do
256
+ it "should pass through to the cmd_tlm_server" do
257
+ expect {
258
+ tlm("INST HEALTH_STATUS TEMP1").should eql -100.0
259
+ tlm_raw("INST HEALTH_STATUS TEMP1").should eql 0
260
+ tlm_formatted("INST HEALTH_STATUS TEMP1").should eql "-100.000"
261
+ tlm_with_units("INST HEALTH_STATUS TEMP1").should eql "-100.000 C"
262
+ tlm_variable("INST HEALTH_STATUS TEMP1", :RAW).should eql 0
263
+ set_tlm("INST HEALTH_STATUS TEMP1 = 1")
264
+ set_tlm_raw("INST HEALTH_STATUS TEMP1 = 0")
265
+ }.to_not raise_error
266
+ end
267
+ end
268
+
269
+ describe "get_tlm_packet" do
270
+ it "should get the packet values" do
271
+ get_tlm_packet("INST", "HEALTH_STATUS", :RAW).should include(["TEMP1", 0, :RED_LOW])
272
+ end
273
+ end
274
+
275
+ describe "get_tlm_values" do
276
+ it "should get the given values" do
277
+ vals = get_tlm_values([["INST", "HEALTH_STATUS", "TEMP1"], ["INST", "HEALTH_STATUS", "TEMP2"]])
278
+ vals[0][0].should eql -100.0
279
+ vals[1][0].should eql :RED_LOW
280
+ vals[2][0].should eql [-80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
281
+ vals[3].should eql :DEFAULT
282
+ end
283
+ end
284
+
285
+ describe "get_tlm_list" do
286
+ it "should get packets for a given target" do
287
+ get_tlm_list("INST").should include(["HEALTH_STATUS", "Health and status from the instrument"])
288
+ end
289
+ end
290
+
291
+ describe "get_tlm_item_list" do
292
+ it "should get telemetry for a given packet" do
293
+ get_tlm_item_list("INST", "HEALTH_STATUS").should include(["TEMP1",nil,"Temperature #1"])
294
+ end
295
+ end
296
+
297
+ describe "get_tlm_details" do
298
+ it "should get telemetry for a given packet" do
299
+ details = get_tlm_details([["INST", "HEALTH_STATUS", "TEMP1"], ["INST", "HEALTH_STATUS", "TEMP2"]])
300
+ details[0]["name"].should eql "TEMP1"
301
+ details[1]["name"].should eql "TEMP2"
302
+ end
303
+ end
304
+
305
+ describe "get_out_of_limits" do
306
+ it "should get all out of limits items" do
307
+ get_out_of_limits.should include(["INST","HEALTH_STATUS","TEMP1",:RED_LOW])
308
+ end
309
+ end
310
+
311
+ describe "limits_enabled?, disable_limits, enable_limits" do
312
+ it "should enable, disable, and check limits for an item" do
313
+ limits_enabled?("INST HEALTH_STATUS TEMP1").should be_truthy
314
+ disable_limits("INST HEALTH_STATUS TEMP1")
315
+ limits_enabled?("INST HEALTH_STATUS TEMP1").should be_falsey
316
+ enable_limits("INST HEALTH_STATUS TEMP1")
317
+ limits_enabled?("INST HEALTH_STATUS TEMP1").should be_truthy
318
+ end
319
+ end
320
+
321
+ describe "get_limits, set_limits" do
322
+ it "should get and set limits for an item" do
323
+ get_limits("INST", "HEALTH_STATUS", "TEMP1").should eql [:DEFAULT, 1, true, -80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
324
+ set_limits("INST", "HEALTH_STATUS", "TEMP1", 1, 2, 5, 6, 3, 4).should eql [:CUSTOM, 1, true, 1.0, 2.0, 5.0, 6.0, 3.0, 4.0]
325
+ end
326
+ end
327
+
328
+ describe "get_limits_groups, enable_limits_group, disable_limits_group" do
329
+ it "should enable, disable, and get groups" do
330
+ get_limits_groups.should include("FIRST")
331
+ enable_limits_group("FIRST")
332
+ disable_limits_group("FIRST")
333
+ end
334
+ end
335
+
336
+ describe "get_limits_sets, enable_limits_set, disable_limits_set" do
337
+ it "should enable, disable, and get sets CTS-16" do
338
+ if get_limits_sets.include?(:CUSTOM)
339
+ get_limits_sets.should eql [:DEFAULT,:TVAC,:CUSTOM]
340
+ else
341
+ get_limits_sets.should eql [:DEFAULT,:TVAC]
342
+ end
343
+ set_limits_set(:TVAC)
344
+ get_limits_set.should eql :TVAC
345
+ set_limits_set(:DEFAULT)
346
+ get_limits_set.should eql :DEFAULT
347
+ end
348
+ end
349
+
350
+ describe "get_target_list" do
351
+ it "should return the list of targets" do
352
+ get_target_list.should include("INST")
353
+ end
354
+ end
355
+
356
+ describe "subscribe_limits_events, get_limits_event, unsubscribe_limits_events" do
357
+ it "should raise an error if non_block and the queue is empty" do
358
+ id = subscribe_limits_events
359
+ expect { get_limits_event(id, true) }.to raise_error(ThreadError, "queue empty")
360
+ unsubscribe_limits_events(id)
361
+ end
362
+
363
+ it "should subscribe and get limits change events" do
364
+ id = subscribe_limits_events
365
+ CmdTlmServer.instance.post_limits_event(:LIMITS_CHANGE, ['TGT','PKT','ITEM',:YELLOW,:RED])
366
+ result = get_limits_event(id, true)
367
+ result[0].should eql :LIMITS_CHANGE
368
+ unsubscribe_limits_events(id)
369
+ end
370
+
371
+ it "should subscribe and get limits settings events" do
372
+ id = subscribe_limits_events
373
+ CmdTlmServer.instance.post_limits_event(:LIMITS_SETTINGS, ['TGT','PKT','ITEM',:DEFAULT])
374
+ result = get_limits_event(id, true)
375
+ result[0].should eql :LIMITS_SETTINGS
376
+ unsubscribe_limits_events(id)
377
+ end
378
+ end
379
+
380
+ describe "subscribe_packet_data, get_packet, unsubscribe_packet_data" do
381
+ it "should raise an error if non_block and the queue is empty" do
382
+ id = subscribe_packet_data([["INST","HEALTH_STATUS"]])
383
+ expect { get_packet(id, true) }.to raise_error(ThreadError, "queue empty")
384
+ unsubscribe_packet_data(id)
385
+ end
386
+
387
+ it "should subscribe and get limits events" do
388
+ id = subscribe_packet_data([["INST","HEALTH_STATUS"]])
389
+ CmdTlmServer.instance.post_packet(System.telemetry.packet("INST","HEALTH_STATUS"))
390
+ packet = get_packet(id, true)
391
+ packet.target_name.should eql "INST"
392
+ packet.packet_name.should eql "HEALTH_STATUS"
393
+ unsubscribe_packet_data(id)
394
+ end
395
+ end
396
+
397
+ describe "status_bar" do
398
+ it "should set the ScriptRunner status bar" do
399
+ class ScriptRunner; end
400
+ sc = ScriptRunner.new
401
+ expect(sc).to receive(:script_set_status).with("HI")
402
+ status_bar("HI")
403
+ end
404
+ end
405
+
406
+ describe "ask_string, ask" do
407
+ it "should get user input" do
408
+ $stdout = StringIO.new
409
+ expect(self).to receive(:gets) { '10' }
410
+ ask_string("").should eql '10'
411
+ expect(self).to receive(:gets) { '10' }
412
+ ask("").should eql 10
413
+ $stdout = STDOUT
414
+ end
415
+ end
416
+
417
+ describe "prompt, prompt_message_box" do
418
+ it "should prompt the user for input" do
419
+ $stdout = StringIO.new
420
+ expect(self).to receive(:gets) { 'message' }
421
+ prompt("").should eql 'message'
422
+ expect(self).to receive(:gets) { 'b1' }
423
+ message_box("",["b1","b2"]).should eql 'b1'
424
+ $stdout = STDOUT
425
+ end
426
+ end
427
+
428
+ describe "check, check_formatted, check_with_units, check_raw" do
429
+ it "should check a telemetry item vs a condition" do
430
+ capture_io do |stdout|
431
+ check("INST HEALTH_STATUS TEMP1 == -100")
432
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == -100 success"
433
+ stdout.rewind
434
+
435
+ check("INST","HEALTH_STATUS","TEMP1","== -100")
436
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == -100 success"
437
+ stdout.rewind
438
+
439
+ check_formatted("INST HEALTH_STATUS TEMP1 == '-100.000'")
440
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == '-100.000' success"
441
+ stdout.rewind
442
+
443
+ check_formatted("INST","HEALTH_STATUS","TEMP1","== '-100.000'")
444
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == '-100.000' success"
445
+ stdout.rewind
446
+
447
+ check_with_units("INST HEALTH_STATUS TEMP1 == '-100.000 C'")
448
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == '-100.000 C' success"
449
+ stdout.rewind
450
+
451
+ check_with_units("INST","HEALTH_STATUS","TEMP1","== '-100.000 C'")
452
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == '-100.000 C' success"
453
+ stdout.rewind
454
+
455
+ check_raw("INST HEALTH_STATUS TEMP1")
456
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == 0"
457
+ end
458
+
459
+ check("INST HEALTH_STATUS TEMP1 < 0")
460
+ expect { check("INST HEALTH_STATUS TEMP1 > 0") }.to raise_error(Cosmos::CheckError)
461
+ end
462
+ end
463
+
464
+ describe "check_tolerance, check_tolerance_raw" do
465
+ it "should check a telemetry item vs tolerance" do
466
+ capture_io do |stdout|
467
+ check_tolerance("INST HEALTH_STATUS TEMP1", -100.0, 1)
468
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 was within range"
469
+ stdout.rewind
470
+
471
+ expect { check_tolerance("INST HEALTH_STATUS TEMP1", -200.0, 1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 failed to be within range/)
472
+ stdout.rewind
473
+
474
+ check_tolerance_raw("INST HEALTH_STATUS TEMP1", 0, 1)
475
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 was within range"
476
+ stdout.rewind
477
+
478
+ expect { check_tolerance_raw("INST HEALTH_STATUS TEMP1", 100, 1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 failed to be within range/)
479
+ stdout.rewind
480
+ end
481
+ end
482
+ end
483
+
484
+ describe "check_expression" do
485
+ it "should check an arbitrary expression" do
486
+ capture_io do |stdout|
487
+ check_expression("true == true")
488
+ stdout.string.should match "CHECK: true == true is TRUE"
489
+ end
490
+
491
+ expect { check_expression("true == false") }.to raise_error(CheckError, "CHECK: true == false is FALSE")
492
+ end
493
+ end
494
+
495
+ describe "wait, wait_raw, wait_tolerance, wait_tolerance_raw" do
496
+ it "should wait for telemetry check to be true" do
497
+ capture_io do |stdout|
498
+ # Success
499
+ wait("INST HEALTH_STATUS TEMP1 == -100.0", 5)
500
+ stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 == -100.0"
501
+ stdout.rewind
502
+ wait_raw("INST HEALTH_STATUS TEMP1 == 0", 5)
503
+ stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 == 0"
504
+ stdout.rewind
505
+ wait_tolerance("INST HEALTH_STATUS TEMP1", -100.0, 1, 5)
506
+ stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 was within"
507
+ stdout.rewind
508
+ wait_tolerance_raw("INST HEALTH_STATUS TEMP1", 0, 1, 5)
509
+ stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 was within"
510
+ stdout.rewind
511
+
512
+ # Failure
513
+ wait("INST HEALTH_STATUS TEMP1 == -200.0", 0.1)
514
+ stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 == -200.0 failed"
515
+ stdout.rewind
516
+ wait_raw("INST HEALTH_STATUS TEMP1 == 100", 0.1)
517
+ stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 == 100 failed"
518
+ stdout.rewind
519
+ wait_tolerance("INST HEALTH_STATUS TEMP1", -200.0, 1, 0.1)
520
+ stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 failed to be within"
521
+ stdout.rewind
522
+ wait_tolerance_raw("INST HEALTH_STATUS TEMP1", 100, 1, 0.1)
523
+ stdout.string.should match "WAIT: INST HEALTH_STATUS TEMP1 failed to be within"
524
+ stdout.rewind
525
+ end
526
+ end
527
+ end
528
+
529
+ describe "wait_expression" do
530
+ it "should wait for an expression to be true" do
531
+ capture_io do |stdout|
532
+ # Success
533
+ wait_expression("true == true", 5)
534
+ stdout.string.should match "WAIT: true == true is TRUE"
535
+ stdout.rewind
536
+
537
+ # Failure
538
+ wait_expression("true == false", 0.1)
539
+ stdout.string.should match "WAIT: true == false is FALSE"
540
+ stdout.rewind
541
+ end
542
+ end
543
+ end
544
+
545
+ describe "wait_check, wait_check_raw, wait_check_tolerance, wait_check_tolerance_raw" do
546
+ it "should wait for telemetry check to be true" do
547
+ capture_io do |stdout|
548
+ # Success
549
+ wait_check("INST HEALTH_STATUS TEMP1 == -100.0", 5)
550
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == -100.0"
551
+ stdout.rewind
552
+ wait_check_raw("INST HEALTH_STATUS TEMP1 == 0", 5)
553
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 == 0"
554
+ stdout.rewind
555
+ wait_check_tolerance("INST HEALTH_STATUS TEMP1", -100.0, 1, 5)
556
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 was within"
557
+ stdout.rewind
558
+ wait_check_tolerance_raw("INST HEALTH_STATUS TEMP1", 0, 1, 5)
559
+ stdout.string.should match "CHECK: INST HEALTH_STATUS TEMP1 was within"
560
+ stdout.rewind
561
+ end
562
+
563
+ # Failure
564
+ expect { wait_check("INST HEALTH_STATUS TEMP1 == -200.0", 0.1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 == -200.0 failed/)
565
+ expect { wait_check_raw("INST HEALTH_STATUS TEMP1 == 100", 0.1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 == 100 failed/)
566
+ expect { wait_check_tolerance("INST HEALTH_STATUS TEMP1", -200.0, 1, 0.1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 failed to be within/)
567
+
568
+ expect { wait_check_tolerance_raw("INST HEALTH_STATUS TEMP1", 100, 1, 0.1) }.to raise_error(CheckError, /CHECK: INST HEALTH_STATUS TEMP1 failed to be within/)
569
+
570
+ end
571
+ end
572
+
573
+ describe "wait_check_expression" do
574
+ it "should wait for an expression to be true" do
575
+ capture_io do |stdout|
576
+ # Success
577
+ wait_check_expression("true == true", 5)
578
+ stdout.string.should match "CHECK: true == true is TRUE"
579
+ stdout.rewind
580
+ end
581
+
582
+ # Failure
583
+ expect { wait_check_expression("true == false", 0.1) }.to raise_error(CheckError, /CHECK: true == false is FALSE/)
584
+ end
585
+ end
586
+
587
+ describe "wait_packet, wait_check_packet" do
588
+ it "should wait for a certain number of packets" do
589
+ capture_io do |stdout|
590
+ wait_packet("INST","HEALTH_STATUS",1,0.1)
591
+ end
592
+
593
+ expect { wait_check_packet("INST","HEALTH_STATUS",1,0.1) }.to raise_error(CheckError, /INST HEALTH_STATUS expected to be received 1 times but only received 0 times/)
594
+ end
595
+ end
596
+
597
+ describe "get_interface_names" do
598
+ it "should return all interfaces" do
599
+ get_interface_names.should include("INST_INT")
600
+ end
601
+ end
602
+
603
+ describe "connect_interface, disconnect_interface, interface_state" do
604
+ it "should connect, disconnect and return the state of the interface CTS-3" do
605
+ connect_interface("INST_INT")
606
+ interface_state("INST_INT").should eql "CONNECTED"
607
+ disconnect_interface("INST_INT")
608
+ end
609
+ end
610
+
611
+ describe "map_target_to_interface" do
612
+ it "should map a target name to an interface" do
613
+ map_target_to_interface("INST","INST_INT")
614
+ end
615
+ end
616
+
617
+ describe "connect_router, disconnect_router, get_router_names, router_state" do
618
+ it "should return connect, disconnect, and list the routers CTS-11" do
619
+ get_router_names.should include("PREIDENTIFIED_ROUTER")
620
+ connect_router("PREIDENTIFIED_ROUTER")
621
+ router_state("PREIDENTIFIED_ROUTER").should eql "CONNECTED"
622
+ disconnect_router("PREIDENTIFIED_ROUTER")
623
+ end
624
+ end
625
+
626
+ describe "logging methods" do
627
+ it "should start and stop logging and get filenames CTS-14" do
628
+ start_logging
629
+ stop_logging
630
+ get_cmd_log_filename
631
+ get_tlm_log_filename
632
+ start_cmd_log
633
+ start_tlm_log
634
+ get_cmd_log_filename
635
+ get_tlm_log_filename
636
+ stop_cmd_log
637
+ stop_tlm_log
638
+ get_cmd_log_filename
639
+ get_tlm_log_filename
640
+ start_raw_logging_interface
641
+ start_raw_logging_router
642
+ stop_raw_logging_interface
643
+ stop_raw_logging_router
644
+
645
+ start_new_server_message_log
646
+ sleep 0.1
647
+ filename = get_server_message_log_filename
648
+ filename.should match /server_messages.txt/
649
+ end
650
+ end
651
+
652
+ end
653
+ end
654
+