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,208 +1,223 @@
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/tools/cmd_tlm_server/routers'
14
- require 'tempfile'
15
-
16
- module Cosmos
17
-
18
- describe Routers do
19
- after(:all) do
20
- clean_config()
21
- end
22
-
23
- describe "start" do
24
- it "should connect each router" do
25
- tf = Tempfile.new('unittest')
26
- tf.puts 'ROUTER MY_ROUTER interface.rb'
27
- tf.close
28
- capture_io do |stdout|
29
- routers = Routers.new(CmdTlmServerConfig.new(tf.path))
30
- routers.all['MY_ROUTER'].connect_on_startup = false
31
-
32
- allow_any_instance_of(Interface).to receive(:connected?)
33
- allow_any_instance_of(Interface).to receive(:connect)
34
- allow_any_instance_of(Interface).to receive(:disconnect)
35
- allow_any_instance_of(Interface).to receive(:read)
36
-
37
- routers.all['MY_ROUTER'].connect_on_startup = true
38
- routers.start
39
-
40
- stdout.string.should match "Creating thread for router MY_ROUTER"
41
- routers.stop
42
- end
43
- tf.unlink
44
- sleep(0.2)
45
- end
46
- end
47
-
48
- describe "stop" do
49
- it "should disconnect each router" do
50
- tf = Tempfile.new('unittest')
51
- tf.puts 'ROUTER MY_ROUTER interface.rb'
52
- tf.close
53
- capture_io do |stdout|
54
- routers = Routers.new(CmdTlmServerConfig.new(tf.path))
55
-
56
- allow_any_instance_of(Interface).to receive(:connected?).and_return(false, false, true, false)
57
- allow_any_instance_of(Interface).to receive(:connect)
58
- allow_any_instance_of(Interface).to receive(:disconnect)
59
- allow_any_instance_of(Interface).to receive(:read)
60
-
61
- routers.all['MY_ROUTER'].connect_on_startup = true
62
- routers.start
63
- sleep 0.1
64
- routers.state("MY_ROUTER").should eql "ATTEMPTING"
65
- routers.state("MY_ROUTER").should eql "CONNECTED"
66
- routers.stop
67
- sleep 0.1
68
- routers.state("MY_ROUTER").should eql "DISCONNECTED"
69
-
70
- stdout.string.should match "Disconnected from router MY_ROUTER"
71
- end
72
- tf.unlink
73
- sleep(0.2)
74
- end
75
- end
76
-
77
- describe "add_preidentified" do
78
- it "should add a preidentified router to all interfaces" do
79
- tf = Tempfile.new('unittest')
80
- tf.puts 'INTERFACE DEST1 tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
81
- tf.puts 'INTERFACE DEST2 tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
82
- tf.close
83
- config = CmdTlmServerConfig.new(tf.path)
84
- config.interfaces.keys.should eql %w(DEST1 DEST2)
85
- config.interfaces['DEST1'].routers.should be_empty
86
- config.interfaces['DEST2'].routers.should be_empty
87
-
88
- routers = Routers.new(config)
89
- routers.all.keys.should be_empty
90
- routers.add_preidentified("PRE", 9999)
91
- routers.all.keys.should eql %w(PRE)
92
-
93
- config.interfaces['DEST1'].routers[0].name.should eql "PRE"
94
- config.interfaces['DEST2'].routers[0].name.should eql "PRE"
95
- tf.unlink
96
- end
97
- end
98
-
99
- describe "recreate" do
100
- it "should complain about unknown routers" do
101
- tf = Tempfile.new('unittest')
102
- tf.puts 'ROUTER MY_ROUTER interface.rb'
103
- tf.close
104
- routers = Routers.new(CmdTlmServerConfig.new(tf.path))
105
- expect { routers.recreate("BLAH") }.to raise_error("Unknown router: BLAH")
106
- tf.unlink
107
- end
108
- end
109
-
110
- describe "connect" do
111
- it "should complain about unknown routers" do
112
- tf = Tempfile.new('unittest')
113
- tf.puts 'ROUTER MY_ROUTER interface.rb'
114
- tf.close
115
- routers = Routers.new(CmdTlmServerConfig.new(tf.path))
116
- expect { routers.connect("TEST") }.to raise_error("Unknown router: TEST")
117
- tf.unlink
118
- end
119
-
120
- it "should connect a router" do
121
- tf = Tempfile.new('unittest')
122
- tf.puts 'INTERFACE DEST1 tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
123
- tf.puts 'INTERFACE DEST2 tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
124
- tf.puts 'ROUTER MY_ROUTER tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
125
- tf.puts 'ROUTE DEST1'
126
- tf.puts 'ROUTE DEST2'
127
- tf.close
128
- capture_io do |stdout|
129
- server = TCPServer.new('127.0.0.1', 8888)
130
- clients = []
131
- server_thread = Thread.new do
132
- loop do
133
- clients << server.accept
134
- end
135
- end
136
-
137
- config = CmdTlmServerConfig.new(tf.path)
138
- routers = Routers.new(config)
139
- routers.all["MY_ROUTER"].interfaces[0].name.should eql "DEST1"
140
- routers.all["MY_ROUTER"].interfaces[1].name.should eql "DEST2"
141
- config.interfaces['DEST1'].routers[0].name.should eql "MY_ROUTER"
142
- config.interfaces['DEST2'].routers[0].name.should eql "MY_ROUTER"
143
- routers.connect("MY_ROUTER")
144
- sleep 0.1
145
- stdout.string.should match "Connecting to MY_ROUTER"
146
- routers.disconnect("MY_ROUTER")
147
- routers.connect("MY_ROUTER",'localhost',8888,8888,6,6,'length')
148
- sleep 0.1
149
- stdout.string.should match "Disconnected from router MY_ROUTER"
150
- stdout.string.should match "Connecting to MY_ROUTER"
151
- routers.all["MY_ROUTER"].interfaces[0].name.should eql "DEST1"
152
- routers.all["MY_ROUTER"].interfaces[1].name.should eql "DEST2"
153
- config.interfaces['DEST1'].routers[0].name.should eql "MY_ROUTER"
154
- config.interfaces['DEST2'].routers[0].name.should eql "MY_ROUTER"
155
- routers.disconnect("MY_ROUTER")
156
- routers.stop
157
-
158
- server_thread.kill
159
- server.close
160
- clients.each do |c|
161
- c.close
162
- end
163
- end
164
- tf.unlink
165
- sleep(0.2)
166
- end
167
- end
168
-
169
- describe "names" do
170
- it "should list all the router names" do
171
- tf = Tempfile.new('unittest')
172
- tf.puts 'ROUTER ROUTER1 interface.rb'
173
- tf.puts 'ROUTER ROUTER2 interface.rb'
174
- tf.puts 'ROUTER ROUTER3 interface.rb'
175
- tf.close
176
- routers = Routers.new(CmdTlmServerConfig.new(tf.path))
177
- routers.names.should eql %w(ROUTER1 ROUTER2 ROUTER3)
178
- tf.unlink
179
- end
180
- end
181
-
182
- describe "clear_counters" do
183
- it "should clear all router counters" do
184
- tf = Tempfile.new('unittest')
185
- tf.puts 'ROUTER ROUTER1 interface.rb'
186
- tf.puts 'ROUTER ROUTER2 interface.rb'
187
- tf.puts 'ROUTER ROUTER3 interface.rb'
188
- tf.close
189
- routers = Routers.new(CmdTlmServerConfig.new(tf.path))
190
- routers.all.each do |name, router|
191
- router.bytes_written = 100
192
- router.bytes_read = 200
193
- router.write_count = 10
194
- router.read_count = 20
195
- end
196
- routers.clear_counters
197
- routers.all.each do |name, router|
198
- router.bytes_written.should eql 0
199
- router.bytes_read.should eql 0
200
- router.write_count.should eql 0
201
- router.read_count.should eql 0
202
- end
203
- tf.unlink
204
- end
205
- end
206
- end
207
- end
208
-
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/tools/cmd_tlm_server/routers'
14
+ require 'tempfile'
15
+
16
+ module Cosmos
17
+
18
+ describe Routers do
19
+ after(:all) do
20
+ clean_config()
21
+ end
22
+
23
+ describe "start" do
24
+ it "should connect each router" do
25
+ tf = Tempfile.new('unittest')
26
+ tf.puts 'ROUTER MY_ROUTER interface.rb'
27
+ tf.close
28
+ capture_io do |stdout|
29
+ routers = Routers.new(CmdTlmServerConfig.new(tf.path))
30
+ routers.all['MY_ROUTER'].connect_on_startup = false
31
+
32
+ allow_any_instance_of(Interface).to receive(:connected?)
33
+ allow_any_instance_of(Interface).to receive(:connect)
34
+ allow_any_instance_of(Interface).to receive(:disconnect)
35
+ allow_any_instance_of(Interface).to receive(:read)
36
+
37
+ routers.all['MY_ROUTER'].connect_on_startup = true
38
+ routers.start
39
+
40
+ stdout.string.should match "Creating thread for router MY_ROUTER"
41
+ routers.stop
42
+ end
43
+ tf.unlink
44
+ sleep(0.2)
45
+ end
46
+ end
47
+
48
+ describe "stop" do
49
+ it "should disconnect each router" do
50
+ tf = Tempfile.new('unittest')
51
+ tf.puts 'ROUTER MY_ROUTER interface.rb'
52
+ tf.close
53
+ capture_io do |stdout|
54
+ routers = Routers.new(CmdTlmServerConfig.new(tf.path))
55
+
56
+ allow_any_instance_of(Interface).to receive(:connected?).and_return(false, false, true, false)
57
+ allow_any_instance_of(Interface).to receive(:connect)
58
+ allow_any_instance_of(Interface).to receive(:disconnect)
59
+ allow_any_instance_of(Interface).to receive(:read)
60
+
61
+ routers.all['MY_ROUTER'].connect_on_startup = true
62
+ routers.start
63
+ sleep 0.1
64
+ routers.state("MY_ROUTER").should eql "ATTEMPTING"
65
+ routers.state("MY_ROUTER").should eql "CONNECTED"
66
+ routers.stop
67
+ sleep 0.1
68
+ routers.state("MY_ROUTER").should eql "DISCONNECTED"
69
+
70
+ stdout.string.should match "Disconnected from router MY_ROUTER"
71
+ end
72
+ tf.unlink
73
+ sleep(0.2)
74
+ end
75
+ end
76
+
77
+ describe "add_preidentified" do
78
+ it "should add a preidentified router to all interfaces" do
79
+ tf = Tempfile.new('unittest')
80
+ tf.puts 'INTERFACE DEST1 tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
81
+ tf.puts 'INTERFACE DEST2 tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
82
+ tf.close
83
+ config = CmdTlmServerConfig.new(tf.path)
84
+ config.interfaces.keys.should eql %w(DEST1 DEST2)
85
+ config.interfaces['DEST1'].routers.should be_empty
86
+ config.interfaces['DEST2'].routers.should be_empty
87
+
88
+ routers = Routers.new(config)
89
+ routers.all.keys.should be_empty
90
+ routers.add_preidentified("PRE", 9999)
91
+ routers.all.keys.should eql %w(PRE)
92
+
93
+ config.interfaces['DEST1'].routers[0].name.should eql "PRE"
94
+ config.interfaces['DEST2'].routers[0].name.should eql "PRE"
95
+ tf.unlink
96
+ end
97
+ end
98
+
99
+ describe "recreate" do
100
+ it "should complain about unknown routers" do
101
+ tf = Tempfile.new('unittest')
102
+ tf.puts 'ROUTER MY_ROUTER interface.rb'
103
+ tf.close
104
+ routers = Routers.new(CmdTlmServerConfig.new(tf.path))
105
+ expect { routers.recreate("BLAH") }.to raise_error("Unknown router: BLAH")
106
+ tf.unlink
107
+ end
108
+ end
109
+
110
+ describe "connect" do
111
+ it "should complain about unknown routers" do
112
+ tf = Tempfile.new('unittest')
113
+ tf.puts 'ROUTER MY_ROUTER interface.rb'
114
+ tf.close
115
+ routers = Routers.new(CmdTlmServerConfig.new(tf.path))
116
+ expect { routers.connect("TEST") }.to raise_error("Unknown router: TEST")
117
+ tf.unlink
118
+ end
119
+
120
+ it "should connect a router" do
121
+ tf = Tempfile.new('unittest')
122
+ tf.puts 'INTERFACE DEST1 tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
123
+ tf.puts 'INTERFACE DEST2 tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
124
+ tf.puts 'ROUTER MY_ROUTER tcpip_client_interface.rb localhost 8888 8888 5 5 burst'
125
+ tf.puts 'ROUTE DEST1'
126
+ tf.puts 'ROUTE DEST2'
127
+ tf.close
128
+ capture_io do |stdout|
129
+ server = TCPServer.new('127.0.0.1', 8888)
130
+ def server.graceful_kill
131
+ end
132
+ clients = []
133
+ pipe_reader, pipe_writer = IO.pipe
134
+ server_thread = Thread.new do
135
+ loop do
136
+ clients << server.accept
137
+ begin
138
+ clients << server.accept_nonblock
139
+ rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EINTR, Errno::EWOULDBLOCK
140
+ read_ready, _ = IO.select([server, pipe_reader])
141
+ if read_ready.include?(pipe_reader)
142
+ break
143
+ else
144
+ retry
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+
151
+ config = CmdTlmServerConfig.new(tf.path)
152
+ routers = Routers.new(config)
153
+ routers.all["MY_ROUTER"].interfaces[0].name.should eql "DEST1"
154
+ routers.all["MY_ROUTER"].interfaces[1].name.should eql "DEST2"
155
+ config.interfaces['DEST1'].routers[0].name.should eql "MY_ROUTER"
156
+ config.interfaces['DEST2'].routers[0].name.should eql "MY_ROUTER"
157
+ routers.connect("MY_ROUTER")
158
+ sleep 0.1
159
+ stdout.string.should match "Connecting to MY_ROUTER"
160
+ routers.disconnect("MY_ROUTER")
161
+ routers.connect("MY_ROUTER",'localhost',8888,8888,6,6,'length')
162
+ sleep 0.1
163
+ stdout.string.should match "Disconnected from router MY_ROUTER"
164
+ stdout.string.should match "Connecting to MY_ROUTER"
165
+ routers.all["MY_ROUTER"].interfaces[0].name.should eql "DEST1"
166
+ routers.all["MY_ROUTER"].interfaces[1].name.should eql "DEST2"
167
+ config.interfaces['DEST1'].routers[0].name.should eql "MY_ROUTER"
168
+ config.interfaces['DEST2'].routers[0].name.should eql "MY_ROUTER"
169
+ routers.disconnect("MY_ROUTER")
170
+ routers.stop
171
+
172
+ pipe_writer.write('.')
173
+ Cosmos.kill_thread(server, server_thread)
174
+ server.close
175
+ clients.each do |c|
176
+ c.close
177
+ end
178
+ end
179
+ tf.unlink
180
+ sleep(0.2)
181
+ end
182
+ end
183
+
184
+ describe "names" do
185
+ it "should list all the router names" do
186
+ tf = Tempfile.new('unittest')
187
+ tf.puts 'ROUTER ROUTER1 interface.rb'
188
+ tf.puts 'ROUTER ROUTER2 interface.rb'
189
+ tf.puts 'ROUTER ROUTER3 interface.rb'
190
+ tf.close
191
+ routers = Routers.new(CmdTlmServerConfig.new(tf.path))
192
+ routers.names.should eql %w(ROUTER1 ROUTER2 ROUTER3)
193
+ tf.unlink
194
+ end
195
+ end
196
+
197
+ describe "clear_counters" do
198
+ it "should clear all router counters" do
199
+ tf = Tempfile.new('unittest')
200
+ tf.puts 'ROUTER ROUTER1 interface.rb'
201
+ tf.puts 'ROUTER ROUTER2 interface.rb'
202
+ tf.puts 'ROUTER ROUTER3 interface.rb'
203
+ tf.close
204
+ routers = Routers.new(CmdTlmServerConfig.new(tf.path))
205
+ routers.all.each do |name, router|
206
+ router.bytes_written = 100
207
+ router.bytes_read = 200
208
+ router.write_count = 10
209
+ router.read_count = 20
210
+ end
211
+ routers.clear_counters
212
+ routers.all.each do |name, router|
213
+ router.bytes_written.should eql 0
214
+ router.bytes_read.should eql 0
215
+ router.write_count.should eql 0
216
+ router.read_count.should eql 0
217
+ end
218
+ tf.unlink
219
+ end
220
+ end
221
+ end
222
+ end
223
+
@@ -1,321 +1,334 @@
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/top_level'
13
- require 'fileutils'
14
-
15
- describe "HazardousError" do
16
- it "should have accessors" do
17
- error = HazardousError.new
18
- error.target_name = "TGT"
19
- error.target_name.should eql "TGT"
20
- error.cmd_name = "CMD"
21
- error.cmd_name.should eql "CMD"
22
- error.cmd_params = ["ID","BLAH"]
23
- error.cmd_params.should eql ["ID","BLAH"]
24
- error.hazardous_description = "Description"
25
- error.hazardous_description.should eql "Description"
26
- end
27
- end
28
-
29
- module Cosmos
30
- def self.cleanup_exceptions
31
- # Delete the 'exception' files
32
- Dir[File.join(System.paths['LOGS'], '*')].each {|file| FileUtils.rm_f file }
33
- Dir[File.join(File.dirname(__FILE__),"*exception.txt")].each {|file| FileUtils.rm_f file }
34
- end
35
-
36
- describe "FatalError" do
37
- it "should be a StandardError" do
38
- FatalError.new.should be_a StandardError
39
- end
40
- end
41
-
42
- describe "self.disable_warnings" do
43
- it "should disable Ruby warnings" do
44
- stderr = StringIO.new('', 'r+')
45
- $stderr = stderr
46
- save = Cosmos::PATH
47
- Cosmos::PATH = "HI"
48
- stderr.string.should match /warning\: already initialized constant/
49
- Cosmos::PATH = save
50
-
51
- save_mutex = Cosmos::COSMOS_MUTEX
52
- Cosmos.disable_warnings do
53
- Cosmos::COSMOS_MUTEX = "HI"
54
- Cosmos::COSMOS_MUTEX = save_mutex
55
- end
56
- stderr.string.should_not match "warning: already initialized constant COSMOS_MUTEX"
57
- $stderr = STDERR
58
- end
59
- end
60
-
61
- describe "self.define_user_path" do
62
- after(:each) do
63
- Cosmos.disable_warnings do
64
- Cosmos.const_set(:USERPATH, DEFAULT_USERPATH)
65
- end
66
- ENV.delete('COSMOS_USERPATH')
67
- end
68
-
69
- it "should be initially set" do
70
- Cosmos::USERPATH.should_not be_nil
71
- end
72
-
73
- context "when searching for userpath.txt" do
74
- it "should giveup if it can't be found" do
75
- old = Cosmos::USERPATH
76
- Cosmos.define_user_path(Dir.home)
77
- Cosmos::USERPATH.should eql old
78
- end
79
-
80
- it "should set the path to where userpath.txt is found" do
81
- ENV.delete('COSMOS_USERPATH')
82
- old = Cosmos::USERPATH
83
- old.should_not eql File.dirname(__FILE__)
84
- File.open(File.join(File.dirname(__FILE__), 'userpath.txt'),'w') {|f| f.puts '' }
85
- Cosmos.define_user_path(File.dirname(__FILE__))
86
- Cosmos::USERPATH.should eql File.dirname(__FILE__)
87
- File.delete(File.join(File.dirname(__FILE__), 'userpath.txt'))
88
- end
89
- end
90
- end
91
-
92
- describe "self.add_to_search_path" do
93
- it "should add a directory to the Ruby search path" do
94
- if Kernel.is_windows?
95
- $:.should_not include("C:/test/path")
96
- Cosmos.add_to_search_path("C:/test/path")
97
- $:.should include("C:/test/path")
98
- end
99
- end
100
- end
101
-
102
- describe "self.marshal_dump, self.marshal_load" do
103
- after(:each) do
104
- Cosmos.disable_warnings do
105
- Cosmos.const_set(:USERPATH, DEFAULT_USERPATH)
106
- end
107
- ENV.delete('COSMOS_USERPATH')
108
- end
109
-
110
- it "should dump and load a Ruby object" do
111
- capture_io do |stdout|
112
- # Configure the user path to be local
113
- ENV['COSMOS_USERPATH'] = File.dirname(__FILE__)
114
- Cosmos.define_user_path
115
-
116
- array = [1,2,3,4]
117
- Cosmos.marshal_dump('marshal_test', array)
118
- array_load = Cosmos.marshal_load('marshal_test')
119
- File.exist?(File.join(Cosmos::USERPATH,'marshal_test')).should be_truthy
120
- array.should eql array_load
121
- File.delete(File.join(Cosmos::USERPATH,'marshal_test'))
122
- end
123
- end
124
-
125
- it "should rescue marshal dump errors" do
126
- capture_io do |stdout|
127
- system_exit_count = $system_exit_count
128
- Cosmos.marshal_dump('marshal_test', Proc.new { '' })
129
- $system_exit_count.should be > system_exit_count
130
- stdout.string.should match "no _dump_data is defined for class Proc"
131
- end
132
- Cosmos.cleanup_exceptions()
133
- end
134
-
135
- it "should rescue marshal load errors" do
136
- # Attempt to load something that doesn't exist
137
- Cosmos.marshal_load('blah').should be_nil
138
-
139
- # Attempt to load something that doesn't have the marshal header
140
- File.open(File.join(Cosmos::USERPATH,'marshal_test'),'wb') {|f| f.puts "marshal!" }
141
- Cosmos.marshal_load('marshal_test').should be_nil
142
-
143
- # Attempt to load something that has a bad marshal
144
- File.open(File.join(Cosmos::USERPATH,'marshal_test'),'wb') do |file|
145
- file.write(Cosmos::COSMOS_MARSHAL_HEADER)
146
- file.write("\x00\x01")
147
- end
148
-
149
- capture_io do |stdout|
150
- Cosmos.marshal_load('marshal_test')
151
- stdout.string.should match "Marshal load failed with exception"
152
- end
153
- Cosmos.cleanup_exceptions()
154
- end
155
- end
156
-
157
- describe "run_process" do
158
- it "should return a Thread" do
159
- if Kernel.is_windows?
160
- capture_io do |stdout|
161
- thread = Cosmos.run_process("ping 192.0.0.234 -n 1 -w 1000 > nul")
162
- sleep 0.1
163
- thread.should be_a Thread
164
- thread.alive?.should be_truthy
165
- sleep 2
166
- thread.alive?.should be_falsey
167
- end
168
- end
169
- end
170
- end
171
-
172
- describe "run_process_check_output" do
173
- it "should execute a command while capturing output" do
174
- if Kernel.is_windows?
175
- require 'Qt'
176
- allow(Qt::Application).to receive(:instance).and_return(nil)
177
- output = ''
178
- allow(Logger).to receive(:error) {|str| output = str}
179
- thread = Cosmos.run_process_check_output("ping 192.0.0.234 -n 1 -w 1000")
180
- sleep 0.1 while thread.alive?
181
- output.should match "Pinging 192.0.0.234"
182
- end
183
- end
184
- end
185
-
186
- describe "md5_files" do
187
- it "should calculate a MD5 sum across files" do
188
- File.open(File.join(Cosmos::USERPATH,'test1.txt'),'w') {|f| f.puts "test1" }
189
- File.open(File.join(Cosmos::USERPATH,'test2.txt'),'w') {|f| f.puts "test2" }
190
- digest = Cosmos.md5_files(["test1.txt", "test2.txt"])
191
- digest.digest.length.should be 16
192
- digest.hexdigest.should eql 'e51dfbea83de9c7e6b49560089d8a170'
193
- File.delete(File.join(Cosmos::USERPATH, 'test1.txt'))
194
- File.delete(File.join(Cosmos::USERPATH, 'test2.txt'))
195
- end
196
- end
197
-
198
- describe "create_log_file" do
199
- it "should create a log file even if System LOGS doesn't exist" do
200
- filename = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
201
- File.exist?(filename).should be_truthy
202
- File.delete(filename)
203
-
204
- Cosmos.set_working_dir do
205
- # Move the defaults output dir out of the way for this test
206
- FileUtils.mv('outputs', 'outputs_bak')
207
-
208
- # Create a logs directory as the first order backup
209
- FileUtils.mkdir('logs')
210
- filename = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
211
- File.exist?(filename).should be_truthy
212
- File.delete(filename)
213
-
214
- # Delete logs and see if we still get a log file
215
- FileUtils.rm_rf('logs')
216
- filename = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
217
- File.exist?(filename).should be_truthy
218
- File.delete(filename)
219
-
220
- # Restore outputs
221
- FileUtils.mv('outputs_bak', 'outputs')
222
- end
223
- end
224
- end
225
-
226
- describe "write_exception_file" do
227
- it "should write an exception file" do
228
- file = Cosmos.write_exception_file(nil, 'test1_exception', File.dirname(__FILE__))
229
- File.exist?(file).should be_truthy
230
- file = Cosmos.write_exception_file(RuntimeError.new, 'test2_exception', File.dirname(__FILE__))
231
- File.exist?(file).should be_truthy
232
- Cosmos.cleanup_exceptions()
233
- end
234
- end
235
-
236
- describe "catch_fatal_exception" do
237
- it "should catch exceptions before the GUI is available" do
238
- capture_io do |stdout|
239
- system_exit_count = $system_exit_count
240
- Cosmos.catch_fatal_exception do
241
- raise "AHHH!!!"
242
- end
243
- $system_exit_count.should eql(system_exit_count + 1)
244
- stdout.string.should match "Fatal Exception! Exiting..."
245
- end
246
- Cosmos.cleanup_exceptions()
247
- end
248
- end
249
-
250
- describe "handle_fatal_exception" do
251
- it "should write to the Logger and exit" do
252
- capture_io do |stdout|
253
- system_exit_count = $system_exit_count
254
- Cosmos.handle_fatal_exception(RuntimeError.new)
255
- $system_exit_count.should eql(system_exit_count + 1)
256
- stdout.string.should match "Fatal Exception! Exiting..."
257
- end
258
- Cosmos.cleanup_exceptions()
259
- end
260
- end
261
-
262
- describe "handle_critical_exception" do
263
- it "should write to the Logger" do
264
- capture_io do |stdout|
265
- system_exit_count = $system_exit_count
266
- Cosmos.handle_critical_exception(RuntimeError.new)
267
- $system_exit_count.should eql(system_exit_count)
268
- stdout.string.should match "Critical Exception!"
269
- end
270
- Cosmos.cleanup_exceptions()
271
- end
272
- end
273
-
274
- describe "safe_thread" do
275
- it "should handle exceptions" do
276
- capture_io do |stdout|
277
- thread = Cosmos.safe_thread("Test", 1) do
278
- raise "TestError"
279
- end
280
- sleep 1
281
- stdout.string.should match "Test thread unexpectedly died."
282
- thread.kill
283
- sleep(0.2)
284
- end
285
- Cosmos.cleanup_exceptions()
286
- end
287
- end
288
-
289
- describe "require_class" do
290
- it "should require the class represented by the filename" do
291
- # Explicitly load cosmos.rb to ensure the Cosmos::USERPATH/lib
292
- # directory is in the path
293
- load 'cosmos.rb'
294
-
295
- expect { Cosmos.require_class("my_test_class.rb") }.to raise_error(/Unable to require my_test_class.rb/)
296
- filename = File.join(Cosmos::USERPATH,"lib","my_test_class.rb")
297
- File.open(filename,'w') do |file|
298
- file.puts "class MyTestClass"
299
- file.puts "end"
300
- end
301
-
302
- Cosmos.require_class("my_test_class.rb")
303
- File.delete(filename)
304
- end
305
- end
306
-
307
- describe "open_in_text_editor" do
308
- it "should open the file in a text editor" do
309
- expect(Cosmos).to receive(:system).with(/#{File.basename(__FILE__)}/)
310
- Cosmos.open_in_text_editor(__FILE__)
311
- end
312
- end
313
-
314
- describe "open_in_web_browser" do
315
- it "should open the file in a web browser" do
316
- expect(Cosmos).to receive(:system).with(/#{File.basename(__FILE__)}/)
317
- Cosmos.open_in_web_browser(__FILE__)
318
- end
319
- end
320
- end
321
-
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/top_level'
13
+ require 'fileutils'
14
+
15
+ describe "HazardousError" do
16
+ it "should have accessors" do
17
+ error = HazardousError.new
18
+ error.target_name = "TGT"
19
+ error.target_name.should eql "TGT"
20
+ error.cmd_name = "CMD"
21
+ error.cmd_name.should eql "CMD"
22
+ error.cmd_params = ["ID","BLAH"]
23
+ error.cmd_params.should eql ["ID","BLAH"]
24
+ error.hazardous_description = "Description"
25
+ error.hazardous_description.should eql "Description"
26
+ end
27
+ end
28
+
29
+ module Cosmos
30
+ def self.cleanup_exceptions
31
+ # Delete the 'exception' files
32
+ Dir[File.join(System.paths['LOGS'], '*')].each {|file| FileUtils.rm_f file }
33
+ Dir[File.join(File.dirname(__FILE__),"*exception.txt")].each {|file| FileUtils.rm_f file }
34
+ end
35
+
36
+ describe "FatalError" do
37
+ it "should be a StandardError" do
38
+ FatalError.new.should be_a StandardError
39
+ end
40
+ end
41
+
42
+ describe "self.disable_warnings" do
43
+ it "should disable Ruby warnings" do
44
+ stderr = StringIO.new('', 'r+')
45
+ $stderr = stderr
46
+ save = Cosmos::PATH
47
+ Cosmos::PATH = "HI"
48
+ stderr.string.should match /warning\: already initialized constant/
49
+ Cosmos::PATH = save
50
+
51
+ save_mutex = Cosmos::COSMOS_MUTEX
52
+ Cosmos.disable_warnings do
53
+ Cosmos::COSMOS_MUTEX = "HI"
54
+ Cosmos::COSMOS_MUTEX = save_mutex
55
+ end
56
+ stderr.string.should_not match "warning: already initialized constant COSMOS_MUTEX"
57
+ $stderr = STDERR
58
+ end
59
+ end
60
+
61
+ describe "self.define_user_path" do
62
+ after(:each) do
63
+ Cosmos.disable_warnings do
64
+ Cosmos.const_set(:USERPATH, DEFAULT_USERPATH)
65
+ end
66
+ ENV.delete('COSMOS_USERPATH')
67
+ end
68
+
69
+ it "should be initially set" do
70
+ Cosmos::USERPATH.should_not be_nil
71
+ end
72
+
73
+ context "when searching for userpath.txt" do
74
+ it "should giveup if it can't be found" do
75
+ old = Cosmos::USERPATH
76
+ Cosmos.define_user_path(Dir.home)
77
+ Cosmos::USERPATH.should eql old
78
+ end
79
+
80
+ it "should set the path to where userpath.txt is found" do
81
+ ENV.delete('COSMOS_USERPATH')
82
+ old = Cosmos::USERPATH
83
+ old.should_not eql File.dirname(__FILE__)
84
+ File.open(File.join(File.dirname(__FILE__), 'userpath.txt'),'w') {|f| f.puts '' }
85
+ Cosmos.define_user_path(File.dirname(__FILE__))
86
+ Cosmos::USERPATH.should eql File.dirname(__FILE__)
87
+ File.delete(File.join(File.dirname(__FILE__), 'userpath.txt'))
88
+ end
89
+ end
90
+ end
91
+
92
+ describe "self.add_to_search_path" do
93
+ it "should add a directory to the Ruby search path" do
94
+ if Kernel.is_windows?
95
+ $:.should_not include("C:/test/path")
96
+ Cosmos.add_to_search_path("C:/test/path")
97
+ $:.should include("C:/test/path")
98
+ end
99
+ end
100
+ end
101
+
102
+ describe "self.marshal_dump, self.marshal_load" do
103
+ after(:each) do
104
+ Cosmos.disable_warnings do
105
+ Cosmos.const_set(:USERPATH, DEFAULT_USERPATH)
106
+ end
107
+ ENV.delete('COSMOS_USERPATH')
108
+ end
109
+
110
+ it "should dump and load a Ruby object" do
111
+ capture_io do |stdout|
112
+ # Configure the user path to be local
113
+ ENV['COSMOS_USERPATH'] = File.dirname(__FILE__)
114
+ Cosmos.define_user_path
115
+
116
+ array = [1,2,3,4]
117
+ Cosmos.marshal_dump('marshal_test', array)
118
+ array_load = Cosmos.marshal_load('marshal_test')
119
+ File.exist?(File.join(Cosmos::USERPATH,'marshal_test')).should be_truthy
120
+ array.should eql array_load
121
+ File.delete(File.join(Cosmos::USERPATH,'marshal_test'))
122
+ end
123
+ end
124
+
125
+ it "should rescue marshal dump errors" do
126
+ capture_io do |stdout|
127
+ system_exit_count = $system_exit_count
128
+ Cosmos.marshal_dump('marshal_test', Proc.new { '' })
129
+ $system_exit_count.should be > system_exit_count
130
+ stdout.string.should match "no _dump_data is defined for class Proc"
131
+ end
132
+ Cosmos.cleanup_exceptions()
133
+ end
134
+
135
+ it "should rescue marshal load errors" do
136
+ # Attempt to load something that doesn't exist
137
+ Cosmos.marshal_load('blah').should be_nil
138
+
139
+ # Attempt to load something that doesn't have the marshal header
140
+ File.open(File.join(Cosmos::USERPATH,'marshal_test'),'wb') {|f| f.puts "marshal!" }
141
+ Cosmos.marshal_load('marshal_test').should be_nil
142
+
143
+ # Attempt to load something that has a bad marshal
144
+ File.open(File.join(Cosmos::USERPATH,'marshal_test'),'wb') do |file|
145
+ file.write(Cosmos::COSMOS_MARSHAL_HEADER)
146
+ file.write("\x00\x01")
147
+ end
148
+
149
+ capture_io do |stdout|
150
+ Cosmos.marshal_load('marshal_test')
151
+ stdout.string.should match "Marshal load failed with exception"
152
+ end
153
+ Cosmos.cleanup_exceptions()
154
+ end
155
+ end
156
+
157
+ describe "run_process" do
158
+ it "should return a Thread" do
159
+ if Kernel.is_windows?
160
+ capture_io do |stdout|
161
+ thread = Cosmos.run_process("ping 192.0.0.234 -n 1 -w 1000 > nul")
162
+ sleep 0.1
163
+ thread.should be_a Thread
164
+ thread.alive?.should be_truthy
165
+ sleep 2
166
+ thread.alive?.should be_falsey
167
+ end
168
+ end
169
+ end
170
+ end
171
+
172
+ describe "run_process_check_output" do
173
+ it "should execute a command while capturing output" do
174
+ if Kernel.is_windows?
175
+ require 'Qt'
176
+ allow(Qt::Application).to receive(:instance).and_return(nil)
177
+ output = ''
178
+ allow(Logger).to receive(:error) {|str| output = str}
179
+ thread = Cosmos.run_process_check_output("ping 192.0.0.234 -n 1 -w 1000")
180
+ sleep 0.1 while thread.alive?
181
+ output.should match "Pinging 192.0.0.234"
182
+ end
183
+ end
184
+ end
185
+
186
+ describe "md5_files" do
187
+ it "should calculate a MD5 sum across files" do
188
+ File.open(File.join(Cosmos::USERPATH,'test1.txt'),'w') {|f| f.puts "test1" }
189
+ File.open(File.join(Cosmos::USERPATH,'test2.txt'),'w') {|f| f.puts "test2" }
190
+ digest = Cosmos.md5_files(["test1.txt", "test2.txt"])
191
+ digest.digest.length.should be 16
192
+ digest.hexdigest.should eql 'e51dfbea83de9c7e6b49560089d8a170'
193
+ File.delete(File.join(Cosmos::USERPATH, 'test1.txt'))
194
+ File.delete(File.join(Cosmos::USERPATH, 'test2.txt'))
195
+ end
196
+ end
197
+
198
+ describe "create_log_file" do
199
+ it "should create a log file even if System LOGS doesn't exist" do
200
+ filename = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
201
+ File.exist?(filename).should be_truthy
202
+ File.delete(filename)
203
+
204
+ Cosmos.set_working_dir do
205
+ # Move the defaults output dir out of the way for this test
206
+ begin
207
+ FileUtils.mv('outputs', 'outputs_bak')
208
+ rescue => err
209
+ Dir.entries('outputs/logs').each do |entry|
210
+ next if entry[0] == '.'
211
+ begin
212
+ FileUtils.rm(File.join('outputs', 'logs', entry))
213
+ rescue
214
+ STDOUT.puts entry
215
+ end
216
+ end
217
+ raise err
218
+ end
219
+
220
+ # Create a logs directory as the first order backup
221
+ FileUtils.mkdir('logs')
222
+ filename = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
223
+ File.exist?(filename).should be_truthy
224
+ File.delete(filename)
225
+
226
+ # Delete logs and see if we still get a log file
227
+ FileUtils.rm_rf('logs')
228
+ filename = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
229
+ File.exist?(filename).should be_truthy
230
+ File.delete(filename)
231
+
232
+ # Restore outputs
233
+ FileUtils.mv('outputs_bak', 'outputs')
234
+ end
235
+ end
236
+ end
237
+
238
+ describe "write_exception_file" do
239
+ it "should write an exception file" do
240
+ file = Cosmos.write_exception_file(nil, 'test1_exception', File.dirname(__FILE__))
241
+ File.exist?(file).should be_truthy
242
+ file = Cosmos.write_exception_file(RuntimeError.new, 'test2_exception', File.dirname(__FILE__))
243
+ File.exist?(file).should be_truthy
244
+ Cosmos.cleanup_exceptions()
245
+ end
246
+ end
247
+
248
+ describe "catch_fatal_exception" do
249
+ it "should catch exceptions before the GUI is available" do
250
+ capture_io do |stdout|
251
+ system_exit_count = $system_exit_count
252
+ Cosmos.catch_fatal_exception do
253
+ raise "AHHH!!!"
254
+ end
255
+ $system_exit_count.should eql(system_exit_count + 1)
256
+ stdout.string.should match "Fatal Exception! Exiting..."
257
+ end
258
+ Cosmos.cleanup_exceptions()
259
+ end
260
+ end
261
+
262
+ describe "handle_fatal_exception" do
263
+ it "should write to the Logger and exit" do
264
+ capture_io do |stdout|
265
+ system_exit_count = $system_exit_count
266
+ Cosmos.handle_fatal_exception(RuntimeError.new)
267
+ $system_exit_count.should eql(system_exit_count + 1)
268
+ stdout.string.should match "Fatal Exception! Exiting..."
269
+ end
270
+ Cosmos.cleanup_exceptions()
271
+ end
272
+ end
273
+
274
+ describe "handle_critical_exception" do
275
+ it "should write to the Logger" do
276
+ capture_io do |stdout|
277
+ system_exit_count = $system_exit_count
278
+ Cosmos.handle_critical_exception(RuntimeError.new)
279
+ $system_exit_count.should eql(system_exit_count)
280
+ stdout.string.should match "Critical Exception!"
281
+ end
282
+ Cosmos.cleanup_exceptions()
283
+ end
284
+ end
285
+
286
+ describe "safe_thread" do
287
+ it "should handle exceptions" do
288
+ capture_io do |stdout|
289
+ thread = Cosmos.safe_thread("Test", 1) do
290
+ raise "TestError"
291
+ end
292
+ def thread.graceful_kill
293
+ end
294
+ sleep 1
295
+ stdout.string.should match "Test thread unexpectedly died."
296
+ Cosmos.kill_thread(thread, thread)
297
+ end
298
+ Cosmos.cleanup_exceptions()
299
+ end
300
+ end
301
+
302
+ describe "require_class" do
303
+ it "should require the class represented by the filename" do
304
+ # Explicitly load cosmos.rb to ensure the Cosmos::USERPATH/lib
305
+ # directory is in the path
306
+ load 'cosmos.rb'
307
+
308
+ expect { Cosmos.require_class("my_test_class.rb") }.to raise_error(/Unable to require my_test_class.rb/)
309
+ filename = File.join(Cosmos::USERPATH,"lib","my_test_class.rb")
310
+ File.open(filename,'w') do |file|
311
+ file.puts "class MyTestClass"
312
+ file.puts "end"
313
+ end
314
+
315
+ Cosmos.require_class("my_test_class.rb")
316
+ File.delete(filename)
317
+ end
318
+ end
319
+
320
+ describe "open_in_text_editor" do
321
+ it "should open the file in a text editor" do
322
+ expect(Cosmos).to receive(:system).with(/#{File.basename(__FILE__)}/)
323
+ Cosmos.open_in_text_editor(__FILE__)
324
+ end
325
+ end
326
+
327
+ describe "open_in_web_browser" do
328
+ it "should open the file in a web browser" do
329
+ expect(Cosmos).to receive(:system).with(/#{File.basename(__FILE__)}/)
330
+ Cosmos.open_in_web_browser(__FILE__)
331
+ end
332
+ end
333
+ end
334
+