cosmos 3.5.1 → 3.5.2

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 (1158) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitattributes +3 -3
  4. data/.gitignore +48 -48
  5. data/.travis.yml +8 -8
  6. data/CONTRIBUTING.txt +50 -50
  7. data/Gemfile +10 -10
  8. data/Guardfile +27 -27
  9. data/LICENSE.txt +879 -879
  10. data/Manifest.txt +1414 -1414
  11. data/README.md +111 -111
  12. data/Rakefile +218 -214
  13. data/autohotkey/config/data/diamond.STL +57 -57
  14. data/autohotkey/config/system/system.txt +34 -34
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  17. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  18. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  20. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
  21. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  22. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  23. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
  24. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  25. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  26. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  27. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  28. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  29. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  30. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  31. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  32. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  33. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  34. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  37. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  38. data/autohotkey/config/targets/INST/target.txt +26 -26
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  40. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  41. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  42. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  43. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  44. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  45. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  46. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  47. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  48. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  49. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  50. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  51. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  52. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  55. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  57. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  58. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  59. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  60. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  61. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  62. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  63. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  64. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  65. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  66. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  67. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  69. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  70. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  71. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  72. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  75. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  76. data/autohotkey/lib/example_background_task.rb +42 -42
  77. data/autohotkey/lib/user_version.rb +3 -3
  78. data/autohotkey/procedures/clear_util.rb +7 -7
  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 +24 -24
  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/ReplayAHK +17 -17
  101. data/autohotkey/tools/ScriptRunner +14 -14
  102. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  103. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  104. data/autohotkey/tools/TableManager +14 -14
  105. data/autohotkey/tools/TableManagerAHK +30 -30
  106. data/autohotkey/tools/TestRunner +15 -15
  107. data/autohotkey/tools/TestRunnerAHK +17 -17
  108. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  109. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK5 +17 -17
  112. data/autohotkey/tools/TestRunnerAHK6 +17 -17
  113. data/autohotkey/tools/TlmExtractor +15 -15
  114. data/autohotkey/tools/TlmExtractorAHK +19 -19
  115. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  116. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  117. data/autohotkey/tools/TlmGrapher +14 -14
  118. data/autohotkey/tools/TlmGrapherAHK +19 -19
  119. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  120. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  121. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  122. data/autohotkey/tools/TlmViewer +14 -14
  123. data/autohotkey/tools/TlmViewerAHK +28 -28
  124. data/autohotkey/tools/TlmViewerAHK2 +22 -22
  125. data/autohotkey/tools/TlmViewerAHK3 +23 -23
  126. data/autohotkey/tools/TlmViewerAHK4 +22 -22
  127. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  128. data/autohotkey/tools/autohotkey.rb +37 -37
  129. data/autohotkey/tools/cmd_extractor.ahk +33 -33
  130. data/autohotkey/tools/cmd_sender.ahk +182 -182
  131. data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
  132. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  133. data/autohotkey/tools/data_viewer.ahk +141 -141
  134. data/autohotkey/tools/handbook_creator.ahk +32 -32
  135. data/autohotkey/tools/launcher.ahk +41 -41
  136. data/autohotkey/tools/limits_monitor.ahk +123 -123
  137. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  138. data/autohotkey/tools/packet_viewer.ahk +196 -196
  139. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  140. data/autohotkey/tools/replay.ahk +104 -104
  141. data/autohotkey/tools/script_runner.ahk +589 -589
  142. data/autohotkey/tools/script_runner2.ahk +38 -38
  143. data/autohotkey/tools/table_manager.ahk +220 -220
  144. data/autohotkey/tools/test_runner.ahk +262 -262
  145. data/autohotkey/tools/test_runner2.ahk +53 -53
  146. data/autohotkey/tools/test_runner3.ahk +13 -13
  147. data/autohotkey/tools/test_runner5.ahk +8 -8
  148. data/autohotkey/tools/test_runner6.ahk +5 -5
  149. data/autohotkey/tools/tlm_extractor.ahk +296 -296
  150. data/autohotkey/tools/tlm_grapher.ahk +660 -660
  151. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  152. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  153. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  154. data/autohotkey/tools/tlm_viewer2.ahk +50 -50
  155. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  156. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  157. data/bin/cosmos +96 -96
  158. data/bin/cstol_converter +1166 -1166
  159. data/bin/rubysloc +85 -85
  160. data/cosmos.gemspec +99 -99
  161. data/data/about.txt +4 -4
  162. data/data/crc.txt +326 -326
  163. data/data/diamond.STL +57 -57
  164. data/data/legal.txt +9 -9
  165. data/demo/Gemfile +10 -10
  166. data/demo/Launcher +16 -16
  167. data/demo/Launcher.bat +0 -0
  168. data/demo/Rakefile +77 -77
  169. data/demo/config/data/crc.txt +224 -226
  170. data/demo/config/data/diamond.STL +57 -57
  171. data/demo/config/data/meta_init.txt +4 -4
  172. data/demo/config/system/system.txt +35 -35
  173. data/demo/config/system/system2.txt +33 -33
  174. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  175. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  176. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  177. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  178. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  179. data/demo/config/targets/COSMOS/target.txt +11 -11
  180. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  181. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
  182. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  183. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  184. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  185. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  186. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  187. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  188. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  189. data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
  190. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  191. data/demo/config/targets/INST/screens/array.txt +15 -15
  192. data/demo/config/targets/INST/screens/block.txt +8 -8
  193. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  194. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  195. data/demo/config/targets/INST/screens/ground.txt +25 -25
  196. data/demo/config/targets/INST/screens/hs.txt +44 -44
  197. data/demo/config/targets/INST/screens/latest.txt +23 -23
  198. data/demo/config/targets/INST/screens/other.txt +29 -29
  199. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  200. data/demo/config/targets/INST/target.txt +33 -33
  201. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  202. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  203. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  204. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  205. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  206. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
  207. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  208. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  209. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
  210. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  211. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
  212. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
  213. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  214. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  215. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
  216. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  217. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  218. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  219. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  220. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  221. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  222. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  223. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  224. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  225. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
  226. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  227. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  228. data/demo/config/tools/launcher/launcher.txt +45 -45
  229. data/demo/config/tools/launcher/launcher2.txt +45 -45
  230. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  231. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  232. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  233. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  234. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  235. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  236. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  237. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  238. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  239. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  240. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  241. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  242. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  243. data/demo/lib/example_background_task.rb +57 -57
  244. data/demo/lib/example_target.rb +113 -113
  245. data/demo/lib/scpi_target.rb +74 -74
  246. data/demo/lib/user_version.rb +3 -3
  247. data/demo/procedures/checks.rb +11 -11
  248. data/demo/procedures/clear_util.rb +7 -7
  249. data/demo/procedures/collect.rb +18 -18
  250. data/demo/procedures/collect_util.rb +14 -14
  251. data/demo/procedures/cosmos_api_test.rb +293 -293
  252. data/demo/procedures/disconnect.rb +29 -29
  253. data/demo/procedures/example_test.rb +183 -183
  254. data/demo/procedures/plot_test.rb +8 -8
  255. data/demo/procedures/run_example_test.rb +3 -3
  256. data/demo/procedures/test.rb +51 -51
  257. data/demo/tools/CmdExtractor +16 -16
  258. data/demo/tools/CmdExtractor.bat +0 -0
  259. data/demo/tools/CmdSender +16 -16
  260. data/demo/tools/CmdSender.bat +0 -0
  261. data/demo/tools/CmdTlmServer +16 -16
  262. data/demo/tools/CmdTlmServer.bat +0 -0
  263. data/demo/tools/DataViewer +16 -16
  264. data/demo/tools/DataViewer.bat +0 -0
  265. data/demo/tools/ExampleTarget +16 -16
  266. data/demo/tools/ExampleTarget.bat +0 -0
  267. data/demo/tools/HandbookCreator +16 -16
  268. data/demo/tools/HandbookCreator.bat +0 -0
  269. data/demo/tools/Launcher +16 -16
  270. data/demo/tools/Launcher.bat +0 -0
  271. data/demo/tools/LimitsMonitor +16 -16
  272. data/demo/tools/LimitsMonitor.bat +0 -0
  273. data/demo/tools/OpenGLBuilder +16 -16
  274. data/demo/tools/OpenGLBuilder.bat +0 -0
  275. data/demo/tools/PacketViewer +16 -16
  276. data/demo/tools/PacketViewer.bat +0 -0
  277. data/demo/tools/Replay +16 -16
  278. data/demo/tools/Replay.bat +0 -0
  279. data/demo/tools/ScpiTarget +16 -16
  280. data/demo/tools/ScpiTarget.bat +0 -0
  281. data/demo/tools/ScriptRunner +16 -16
  282. data/demo/tools/ScriptRunner.bat +0 -0
  283. data/demo/tools/TableManager +16 -16
  284. data/demo/tools/TableManager.bat +0 -0
  285. data/demo/tools/TestRunner +16 -16
  286. data/demo/tools/TestRunner.bat +0 -0
  287. data/demo/tools/TlmExtractor +16 -16
  288. data/demo/tools/TlmExtractor.bat +0 -0
  289. data/demo/tools/TlmGrapher +16 -16
  290. data/demo/tools/TlmGrapher.bat +0 -0
  291. data/demo/tools/TlmViewer +16 -16
  292. data/demo/tools/TlmViewer.bat +0 -0
  293. data/demo/tools/ToolLaunch.bat +14 -5
  294. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  295. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  296. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  297. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  298. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  299. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  300. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  301. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  302. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  304. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  305. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  306. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  307. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  308. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  309. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  310. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  311. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  312. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  313. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  314. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  316. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  317. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  318. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  319. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  320. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  321. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  322. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  323. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  324. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  325. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  326. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  328. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  329. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  330. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  331. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  332. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  333. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  334. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  335. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  336. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  337. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  338. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  339. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  340. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  341. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  342. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  343. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  344. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  345. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  346. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  347. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  348. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  349. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  350. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  351. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  352. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  353. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  354. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  355. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  356. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  357. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  358. data/demo/tools/tool_launch.rb +38 -38
  359. data/ext/cosmos/ext/array/array.c +111 -111
  360. data/ext/cosmos/ext/array/extconf.rb +13 -13
  361. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  362. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  363. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  364. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  365. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  366. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  367. data/ext/cosmos/ext/crc/crc.c +341 -341
  368. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  369. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  370. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  371. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  372. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
  373. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  374. data/ext/cosmos/ext/packet/packet.c +339 -339
  375. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  376. data/ext/cosmos/ext/platform/platform.c +101 -101
  377. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  378. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  379. data/ext/cosmos/ext/string/extconf.rb +13 -13
  380. data/ext/cosmos/ext/string/string.c +49 -49
  381. data/ext/cosmos/ext/structure/structure.c +1428 -1428
  382. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  383. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  384. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  385. data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
  386. data/ext/mkrf_conf.rb +40 -40
  387. data/install/Gemfile +10 -10
  388. data/install/Launcher +16 -16
  389. data/install/Launcher.bat +0 -0
  390. data/install/Rakefile +77 -77
  391. data/install/config/data/crc.txt +151 -151
  392. data/install/config/system/system.txt +29 -29
  393. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  394. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  395. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  396. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  397. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  398. data/install/config/targets/COSMOS/target.txt +8 -8
  399. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  400. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  401. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  402. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  403. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  404. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  405. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  406. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  407. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  408. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  409. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  410. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  411. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  412. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  413. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  414. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  415. data/install/config/tools/launcher/launcher.txt +40 -40
  416. data/install/config/tools/script_runner/script_runner.txt +3 -3
  417. data/install/config/tools/test_runner/test_runner.txt +8 -8
  418. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  419. data/install/lib/user_version.rb +3 -3
  420. data/install/tools/CmdExtractor +16 -16
  421. data/install/tools/CmdExtractor.bat +0 -0
  422. data/install/tools/CmdSender +16 -16
  423. data/install/tools/CmdSender.bat +0 -0
  424. data/install/tools/CmdTlmServer +16 -16
  425. data/install/tools/CmdTlmServer.bat +0 -0
  426. data/install/tools/DataViewer +16 -16
  427. data/install/tools/DataViewer.bat +0 -0
  428. data/install/tools/HandbookCreator +16 -16
  429. data/install/tools/HandbookCreator.bat +0 -0
  430. data/install/tools/Launcher +16 -16
  431. data/install/tools/Launcher.bat +0 -0
  432. data/install/tools/LimitsMonitor +16 -16
  433. data/install/tools/LimitsMonitor.bat +0 -0
  434. data/install/tools/OpenGLBuilder +16 -16
  435. data/install/tools/OpenGLBuilder.bat +0 -0
  436. data/install/tools/PacketViewer +16 -16
  437. data/install/tools/PacketViewer.bat +0 -0
  438. data/install/tools/Replay +16 -16
  439. data/install/tools/Replay.bat +0 -0
  440. data/install/tools/ScriptRunner +16 -16
  441. data/install/tools/ScriptRunner.bat +0 -0
  442. data/install/tools/TableManager +16 -16
  443. data/install/tools/TableManager.bat +0 -0
  444. data/install/tools/TestRunner +16 -16
  445. data/install/tools/TestRunner.bat +0 -0
  446. data/install/tools/TlmExtractor +16 -16
  447. data/install/tools/TlmExtractor.bat +0 -0
  448. data/install/tools/TlmGrapher +16 -16
  449. data/install/tools/TlmGrapher.bat +0 -0
  450. data/install/tools/TlmViewer +16 -16
  451. data/install/tools/TlmViewer.bat +0 -0
  452. data/install/tools/ToolLaunch.bat +14 -5
  453. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  454. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  455. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  456. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  457. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  458. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  459. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  460. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  461. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  463. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  464. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  465. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  466. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  467. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  468. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  469. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  470. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  471. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  472. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  473. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  475. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  476. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  477. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  478. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  479. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  480. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  481. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  482. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  483. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  484. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  485. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  486. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  487. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  488. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  489. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  490. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  491. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  492. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  493. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  494. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  495. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  496. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  497. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  498. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  499. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  500. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  501. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  502. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  503. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  504. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  505. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  506. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  507. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  508. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  509. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  510. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  511. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  512. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  513. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  514. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  515. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  516. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  517. data/install/tools/tool_launch.rb +38 -38
  518. data/lib/cosmos.rb +63 -63
  519. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  520. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  521. data/lib/cosmos/config/config_parser.rb +324 -324
  522. data/lib/cosmos/conversions.rb +13 -13
  523. data/lib/cosmos/conversions/conversion.rb +47 -47
  524. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  525. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  526. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  527. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  528. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  529. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  530. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  531. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  532. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  533. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  534. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  535. data/lib/cosmos/core_ext.rb +18 -18
  536. data/lib/cosmos/core_ext/array.rb +354 -354
  537. data/lib/cosmos/core_ext/class.rb +51 -51
  538. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  539. data/lib/cosmos/core_ext/exception.rb +52 -52
  540. data/lib/cosmos/core_ext/file.rb +75 -75
  541. data/lib/cosmos/core_ext/hash.rb +28 -28
  542. data/lib/cosmos/core_ext/io.rb +75 -75
  543. data/lib/cosmos/core_ext/kernel.rb +38 -38
  544. data/lib/cosmos/core_ext/math.rb +119 -119
  545. data/lib/cosmos/core_ext/matrix.rb +146 -146
  546. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  547. data/lib/cosmos/core_ext/range.rb +22 -22
  548. data/lib/cosmos/core_ext/socket.rb +32 -32
  549. data/lib/cosmos/core_ext/string.rb +311 -311
  550. data/lib/cosmos/core_ext/stringio.rb +24 -24
  551. data/lib/cosmos/core_ext/time.rb +448 -448
  552. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  553. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  554. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  555. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  556. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  557. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
  558. data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
  559. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  560. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  561. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  562. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  563. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  564. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  565. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
  566. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
  567. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  568. data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
  569. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
  570. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  571. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  572. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  573. data/lib/cosmos/gui/dialogs/splash.rb +135 -135
  574. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  575. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  576. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  577. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  578. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
  579. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  580. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
  581. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  582. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  583. data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
  584. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  585. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  586. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  587. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  588. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  589. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  590. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
  591. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  592. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  593. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  594. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  595. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  596. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  597. data/lib/cosmos/gui/qt.rb +860 -860
  598. data/lib/cosmos/gui/qt_tool.rb +380 -380
  599. data/lib/cosmos/gui/text/completion.rb +381 -381
  600. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  601. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  602. data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
  603. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  604. data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
  605. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  606. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  607. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  608. data/lib/cosmos/interfaces.rb +11 -11
  609. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
  610. data/lib/cosmos/interfaces/interface.rb +225 -225
  611. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  612. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  613. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
  614. data/lib/cosmos/interfaces/stream_interface.rb +136 -136
  615. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  616. data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
  617. data/lib/cosmos/interfaces/udp_interface.rb +161 -161
  618. data/lib/cosmos/io/buffered_file.rb +11 -11
  619. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  620. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  621. data/lib/cosmos/io/json_drb.rb +376 -376
  622. data/lib/cosmos/io/json_drb_object.rb +198 -198
  623. data/lib/cosmos/io/json_rpc.rb +365 -365
  624. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  625. data/lib/cosmos/io/raw_logger.rb +174 -174
  626. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  627. data/lib/cosmos/io/serial_driver.rb +85 -85
  628. data/lib/cosmos/io/stderr.rb +36 -36
  629. data/lib/cosmos/io/stdout.rb +36 -36
  630. data/lib/cosmos/io/tcpip_server.rb +571 -571
  631. data/lib/cosmos/io/udp_sockets.rb +152 -152
  632. data/lib/cosmos/io/win32_serial_driver.rb +145 -145
  633. data/lib/cosmos/packet_logs.rb +7 -7
  634. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
  635. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  636. data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
  637. data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
  638. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  639. data/lib/cosmos/packets/binary_accessor.rb +634 -634
  640. data/lib/cosmos/packets/commands.rb +293 -293
  641. data/lib/cosmos/packets/limits.rb +267 -267
  642. data/lib/cosmos/packets/limits_response.rb +38 -38
  643. data/lib/cosmos/packets/packet.rb +786 -786
  644. data/lib/cosmos/packets/packet_config.rb +482 -482
  645. data/lib/cosmos/packets/packet_item.rb +317 -317
  646. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  647. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
  648. data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
  649. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
  650. data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
  651. data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
  652. data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
  653. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
  654. data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
  655. data/lib/cosmos/packets/structure.rb +458 -458
  656. data/lib/cosmos/packets/structure_item.rb +233 -233
  657. data/lib/cosmos/packets/telemetry.rb +350 -350
  658. data/lib/cosmos/processors.rb +6 -6
  659. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  660. data/lib/cosmos/processors/processor.rb +71 -71
  661. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  662. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  663. data/lib/cosmos/script.rb +9 -9
  664. data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
  665. data/lib/cosmos/script/commands.rb +184 -184
  666. data/lib/cosmos/script/extract.rb +123 -123
  667. data/lib/cosmos/script/limits.rb +114 -114
  668. data/lib/cosmos/script/script.rb +76 -76
  669. data/lib/cosmos/script/scripting.rb +897 -897
  670. data/lib/cosmos/script/telemetry.rb +174 -174
  671. data/lib/cosmos/script/tools.rb +138 -138
  672. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  673. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  674. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  675. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  676. data/lib/cosmos/streams/serial_stream.rb +157 -157
  677. data/lib/cosmos/streams/stream.rb +63 -63
  678. data/lib/cosmos/streams/stream_protocol.rb +373 -373
  679. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
  680. data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
  681. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  682. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  683. data/lib/cosmos/system.rb +4 -4
  684. data/lib/cosmos/system/system.rb +618 -618
  685. data/lib/cosmos/system/target.rb +197 -197
  686. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
  687. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
  688. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  689. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  690. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
  691. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  692. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
  693. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
  694. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
  695. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
  696. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  697. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
  698. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
  699. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
  700. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
  701. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
  702. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
  703. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
  704. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  705. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  706. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  707. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  708. data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
  709. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
  710. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  711. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
  712. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
  713. data/lib/cosmos/tools/launcher/launcher.rb +188 -188
  714. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
  715. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
  716. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
  717. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
  718. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  719. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  720. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
  721. data/lib/cosmos/tools/replay/replay.rb +501 -501
  722. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  723. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
  724. data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
  725. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  726. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
  727. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  728. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  729. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  730. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  731. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  732. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  733. data/lib/cosmos/tools/test_runner/test.rb +539 -539
  734. data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
  735. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
  736. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  737. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
  738. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  739. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  740. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  741. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  742. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
  743. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  744. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
  745. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  746. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  747. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
  748. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
  749. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
  750. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  751. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  752. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
  753. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  754. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  755. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  756. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  757. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  758. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  759. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  760. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  761. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  762. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  763. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  764. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
  765. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  766. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  767. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
  768. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  769. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
  770. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  771. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  772. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  773. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
  774. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
  775. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
  776. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  777. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  778. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
  779. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
  780. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  781. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  782. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  783. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  784. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  785. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  786. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  787. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  788. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  789. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  790. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  791. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  792. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  793. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  794. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  795. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  796. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  797. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  798. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  799. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  800. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  801. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  802. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  803. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  804. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  805. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  806. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  807. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  808. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  809. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  810. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  811. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  812. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  813. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  814. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  815. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  816. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  817. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  818. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  819. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  820. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  821. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  822. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  823. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  824. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  825. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  826. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  827. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  828. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  829. data/lib/cosmos/top_level.rb +759 -759
  830. data/lib/cosmos/utilities.rb +11 -11
  831. data/lib/cosmos/utilities/crc.rb +166 -166
  832. data/lib/cosmos/utilities/csv.rb +83 -83
  833. data/lib/cosmos/utilities/logger.rb +137 -137
  834. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  835. data/lib/cosmos/utilities/message_log.rb +79 -79
  836. data/lib/cosmos/utilities/quaternion.rb +258 -258
  837. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  838. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  839. data/lib/cosmos/utilities/sleeper.rb +44 -44
  840. data/lib/cosmos/version.rb +12 -12
  841. data/lib/cosmos/win32/excel.rb +66 -66
  842. data/lib/cosmos/win32/win32.rb +387 -387
  843. data/lib/cosmos/win32/win32_main.rb +321 -321
  844. data/roodi.yml +24 -24
  845. data/run_gui_tests.bat +0 -0
  846. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  847. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  848. data/spec/config/config_parser_spec.rb +322 -322
  849. data/spec/conversions/conversion_spec.rb +31 -31
  850. data/spec/conversions/generic_conversion_spec.rb +45 -45
  851. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  852. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  853. data/spec/conversions/processor_conversion_spec.rb +45 -45
  854. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  855. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  856. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  857. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  858. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  859. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  860. data/spec/core_ext/array_spec.rb +186 -186
  861. data/spec/core_ext/class_spec.rb +36 -36
  862. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  863. data/spec/core_ext/exception_spec.rb +91 -91
  864. data/spec/core_ext/file_spec.rb +72 -72
  865. data/spec/core_ext/hash_spec.rb +24 -24
  866. data/spec/core_ext/io_spec.rb +46 -46
  867. data/spec/core_ext/kernel_spec.rb +54 -54
  868. data/spec/core_ext/math_spec.rb +116 -116
  869. data/spec/core_ext/matrix_spec.rb +66 -66
  870. data/spec/core_ext/objectspace_spec.rb +29 -29
  871. data/spec/core_ext/range_spec.rb +21 -21
  872. data/spec/core_ext/socket_spec.rb +32 -32
  873. data/spec/core_ext/string_spec.rb +223 -223
  874. data/spec/core_ext/stringio_spec.rb +21 -21
  875. data/spec/core_ext/time_spec.rb +202 -202
  876. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  877. data/spec/gui/qt_spec.rb +102 -102
  878. data/spec/install/config/system/system.txt +33 -33
  879. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  880. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  881. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  882. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  883. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  884. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  885. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  886. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  887. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  888. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  889. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  890. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
  891. data/spec/install/config/targets/INST/target.txt +10 -10
  892. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  893. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  894. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  895. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  896. data/spec/interfaces/interface_spec.rb +130 -130
  897. data/spec/interfaces/linc_interface_spec.rb +259 -259
  898. data/spec/interfaces/serial_interface_spec.rb +56 -56
  899. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  900. data/spec/interfaces/stream_interface_spec.rb +157 -157
  901. data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
  902. data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
  903. data/spec/interfaces/udp_interface_spec.rb +175 -175
  904. data/spec/io/buffered_file_spec.rb +113 -113
  905. data/spec/io/io_multiplexer_spec.rb +94 -94
  906. data/spec/io/json_drb_object_spec.rb +119 -119
  907. data/spec/io/json_drb_spec.rb +311 -311
  908. data/spec/io/json_rpc_spec.rb +264 -264
  909. data/spec/io/raw_logger_pair_spec.rb +76 -76
  910. data/spec/io/raw_logger_spec.rb +133 -133
  911. data/spec/io/serial_driver_spec.rb +60 -60
  912. data/spec/io/stderr_spec.rb +32 -32
  913. data/spec/io/stdout_spec.rb +32 -32
  914. data/spec/io/tcpip_server_spec.rb +338 -338
  915. data/spec/io/udp_sockets_spec.rb +94 -94
  916. data/spec/io/win32_serial_driver_spec.rb +88 -88
  917. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  918. data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
  919. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  920. data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
  921. data/spec/packets/binary_accessor_spec.rb +2326 -2326
  922. data/spec/packets/commands_spec.rb +369 -369
  923. data/spec/packets/limits_response_spec.rb +25 -25
  924. data/spec/packets/limits_spec.rb +344 -344
  925. data/spec/packets/packet_config_spec.rb +805 -805
  926. data/spec/packets/packet_item_limits_spec.rb +161 -161
  927. data/spec/packets/packet_item_spec.rb +386 -386
  928. data/spec/packets/packet_spec.rb +1317 -1317
  929. data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
  930. data/spec/packets/parsers/limits_parser_spec.rb +282 -282
  931. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
  932. data/spec/packets/parsers/macro_parser_spec.rb +212 -212
  933. data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
  934. data/spec/packets/parsers/packet_parser_spec.rb +99 -99
  935. data/spec/packets/parsers/processor_parser_spec.rb +114 -114
  936. data/spec/packets/parsers/state_parser_spec.rb +156 -156
  937. data/spec/packets/structure_item_spec.rb +195 -195
  938. data/spec/packets/structure_spec.rb +565 -565
  939. data/spec/packets/telemetry_spec.rb +578 -578
  940. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  941. data/spec/processors/processor_spec.rb +55 -55
  942. data/spec/processors/statistics_processor_spec.rb +60 -60
  943. data/spec/processors/watermark_processor_spec.rb +51 -51
  944. data/spec/script/cmd_tlm_server_spec.rb +110 -110
  945. data/spec/script/commands_disconnect_spec.rb +270 -270
  946. data/spec/script/commands_spec.rb +302 -302
  947. data/spec/script/limits_spec.rb +153 -153
  948. data/spec/script/script_spec.rb +86 -86
  949. data/spec/script/scripting_spec.rb +440 -440
  950. data/spec/script/telemetry_spec.rb +165 -165
  951. data/spec/script/tools_spec.rb +117 -117
  952. data/spec/spec_helper.rb +190 -190
  953. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  954. data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
  955. data/spec/streams/length_stream_protocol_spec.rb +300 -300
  956. data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
  957. data/spec/streams/serial_stream_spec.rb +117 -117
  958. data/spec/streams/stream_protocol_spec.rb +346 -346
  959. data/spec/streams/stream_spec.rb +30 -30
  960. data/spec/streams/tcpip_client_stream_spec.rb +57 -57
  961. data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
  962. data/spec/streams/template_stream_protocol_spec.rb +156 -156
  963. data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
  964. data/spec/system/system_spec.rb +665 -665
  965. data/spec/system/target_spec.rb +250 -250
  966. data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
  967. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  968. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  969. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
  970. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  971. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
  972. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
  973. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  974. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
  975. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  976. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
  977. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
  978. data/spec/tools/launcher/launcher_config_spec.rb +464 -464
  979. data/spec/top_level/top_level_spec.rb +334 -334
  980. data/spec/utilities/crc_spec.rb +45 -45
  981. data/spec/utilities/csv_spec.rb +97 -97
  982. data/spec/utilities/logger_spec.rb +102 -102
  983. data/spec/utilities/message_log_spec.rb +89 -89
  984. data/spec/utilities/quaternion_spec.rb +107 -107
  985. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  986. data/tasks/manifest.rake +22 -22
  987. data/tasks/spec.rake +23 -23
  988. data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
  989. data/test/benchmarks/gsub_benchmark.rb +152 -152
  990. data/test/benchmarks/is_a_benchmark.rb +34 -34
  991. data/test/performance/PACKETS.bat +0 -0
  992. data/test/performance/Rakefile +77 -77
  993. data/test/performance/THREADS.bat +0 -0
  994. data/test/performance/config/data/crc.txt +196 -196
  995. data/test/performance/config/data/diamond.STL +57 -57
  996. data/test/performance/config/data/meta_init.txt +4 -4
  997. data/test/performance/config/system/system_packets.txt +39 -39
  998. data/test/performance/config/system/system_threads.txt +59 -59
  999. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
  1000. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  1001. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  1002. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
  1003. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
  1004. data/test/performance/config/targets/COSMOS/target.txt +11 -11
  1005. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
  1006. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
  1007. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
  1008. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
  1009. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
  1010. data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
  1011. data/test/performance/config/targets/PACKET/target.txt +28 -28
  1012. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
  1013. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
  1014. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
  1015. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
  1016. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
  1017. data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
  1018. data/test/performance/config/targets/THREAD/target.txt +6 -6
  1019. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
  1020. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
  1021. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
  1022. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
  1023. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  1024. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  1025. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  1026. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
  1027. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  1028. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  1029. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  1030. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  1031. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  1032. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  1033. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  1034. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  1035. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
  1036. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
  1037. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
  1038. data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
  1039. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
  1040. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  1041. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  1042. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  1043. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  1044. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  1045. data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
  1046. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  1047. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  1048. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  1049. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  1050. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
  1051. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
  1052. data/test/performance/lib/packet_target.rb +126 -126
  1053. data/test/performance/lib/thread_target.rb +120 -120
  1054. data/test/performance/lib/user_version.rb +3 -3
  1055. data/test/performance/procedures/checks.rb +11 -11
  1056. data/test/performance/procedures/clear_util.rb +7 -7
  1057. data/test/performance/procedures/collect.rb +18 -18
  1058. data/test/performance/procedures/collect_util.rb +14 -14
  1059. data/test/performance/procedures/cosmos_api_test.rb +293 -293
  1060. data/test/performance/procedures/disconnect.rb +29 -29
  1061. data/test/performance/procedures/example_test.rb +182 -182
  1062. data/test/performance/procedures/plot_test.rb +8 -8
  1063. data/test/performance/procedures/procedure.rb +2 -2
  1064. data/test/performance/procedures/run_example_test.rb +3 -3
  1065. data/test/performance/procedures/test.rb +51 -51
  1066. data/test/performance/tools/CmdExtractor +14 -14
  1067. data/test/performance/tools/CmdExtractor.bat +0 -0
  1068. data/test/performance/tools/CmdSender +14 -14
  1069. data/test/performance/tools/CmdSender.bat +0 -0
  1070. data/test/performance/tools/CmdTlmServer +16 -16
  1071. data/test/performance/tools/CmdTlmServer.bat +0 -0
  1072. data/test/performance/tools/CmdTlmServerMemProf +20 -20
  1073. data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
  1074. data/test/performance/tools/DataViewer +14 -14
  1075. data/test/performance/tools/DataViewer.bat +0 -0
  1076. data/test/performance/tools/HandbookCreator +14 -14
  1077. data/test/performance/tools/HandbookCreator.bat +0 -0
  1078. data/test/performance/tools/Launcher +14 -14
  1079. data/test/performance/tools/Launcher.bat +0 -0
  1080. data/test/performance/tools/LimitsMonitor +14 -14
  1081. data/test/performance/tools/LimitsMonitor.bat +0 -0
  1082. data/test/performance/tools/OpenGLBuilder +14 -14
  1083. data/test/performance/tools/OpenGLBuilder.bat +0 -0
  1084. data/test/performance/tools/PacketTarget +14 -14
  1085. data/test/performance/tools/PacketTarget.bat +0 -0
  1086. data/test/performance/tools/PacketViewer +14 -14
  1087. data/test/performance/tools/PacketViewer.bat +0 -0
  1088. data/test/performance/tools/Replay +14 -14
  1089. data/test/performance/tools/Replay.bat +0 -0
  1090. data/test/performance/tools/ScpiTarget +14 -14
  1091. data/test/performance/tools/ScpiTarget.bat +0 -0
  1092. data/test/performance/tools/ScriptRunner +14 -14
  1093. data/test/performance/tools/ScriptRunner.bat +0 -0
  1094. data/test/performance/tools/TableManager +14 -14
  1095. data/test/performance/tools/TableManager.bat +0 -0
  1096. data/test/performance/tools/TestRunner +14 -14
  1097. data/test/performance/tools/TestRunner.bat +0 -0
  1098. data/test/performance/tools/ThreadTarget +14 -14
  1099. data/test/performance/tools/ThreadTarget.bat +0 -0
  1100. data/test/performance/tools/TlmExtractor +14 -14
  1101. data/test/performance/tools/TlmExtractor.bat +0 -0
  1102. data/test/performance/tools/TlmGrapher +14 -14
  1103. data/test/performance/tools/TlmGrapher.bat +0 -0
  1104. data/test/performance/tools/TlmGrapherMemProf +19 -19
  1105. data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
  1106. data/test/performance/tools/TlmViewer +14 -14
  1107. data/test/performance/tools/TlmViewer.bat +0 -0
  1108. data/test/performance/tools/TlmViewerMemProf +19 -19
  1109. data/test/performance/tools/TlmViewerMemProf.bat +0 -0
  1110. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  1111. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  1112. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  1113. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  1114. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  1115. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  1116. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  1117. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  1118. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  1119. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  1120. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  1121. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  1122. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  1123. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  1124. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  1125. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  1126. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  1127. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  1128. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  1129. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  1130. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  1131. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  1132. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  1133. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  1134. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  1135. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  1136. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  1137. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
  1138. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  1139. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  1140. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  1141. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  1142. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  1143. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  1144. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  1145. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  1146. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  1147. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  1148. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  1149. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  1150. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  1151. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  1152. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  1153. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  1154. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  1155. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  1156. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  1157. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  1158. metadata +3 -3
@@ -1,665 +1,665 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'spec_helper'
12
- require 'cosmos'
13
- require 'cosmos/system/system'
14
- require 'tempfile'
15
-
16
- module Cosmos
17
-
18
- describe System do
19
- before(:all) do
20
- clean_config()
21
- System.class_eval('@@instance = nil')
22
-
23
- # Save system.txt
24
- @config_file = File.join(Cosmos::USERPATH,'config','system','system.txt')
25
- FileUtils.mv @config_file, Cosmos::USERPATH
26
-
27
- # Create a dummy system.txt
28
- File.open(@config_file,'w') {|file| file.puts "# This is a comment" }
29
- @config_targets = File.join(Cosmos::USERPATH,'config','targets')
30
- end
31
-
32
- after(:all) do
33
- # Restore system.txt
34
- FileUtils.mv File.join(Cosmos::USERPATH, 'system.txt'),
35
- File.join(Cosmos::USERPATH,'config','system')
36
- end
37
-
38
- after(:each) do
39
- clean_config()
40
- System.class_eval('@@instance = nil')
41
- end
42
-
43
- describe "instance" do
44
- it "creates default ports" do
45
- # Don't check the actual port numbers but just that they exist
46
- expect(System.ports.keys).to eql %w(CTS_API TLMVIEWER_API CTS_PREIDENTIFIED)
47
- end
48
-
49
- it "creates default paths" do
50
- # Don't check the actual paths but just that they exist
51
- expect(System.paths.keys).to eql %w(LOGS TMP SAVED_CONFIG TABLES HANDBOOKS PROCEDURES)
52
- end
53
- end
54
-
55
- describe "System.commands" do
56
- it "is empty" do
57
- expect(System.commands.target_names).to eql []
58
- end
59
-
60
- it "logs errors saving the configuration" do
61
- # Force a reload of the configuration
62
- System.class_eval('@@instance = nil')
63
-
64
- capture_io do |stdout|
65
- allow(FileUtils).to receive(:mkdir_p) { raise "Error" }
66
- expect(System.commands.target_names).to eql []
67
- expect(stdout.string).to match "Problem saving configuration"
68
- end
69
- end
70
- end
71
-
72
- describe "System.telemetry" do
73
- it "is empty" do
74
- expect(System.telemetry.target_names).to eql []
75
- end
76
- end
77
-
78
- describe "System.limits" do
79
- it "includes the DEFAULT limit set" do
80
- expect(System.limits.sets).to include :DEFAULT
81
- end
82
- end
83
-
84
- context "with valid targets" do
85
- before(:all) do
86
- # Write the system.txt file to auto declare targets
87
- File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
88
- end
89
-
90
- describe "System.clear_counters" do
91
- it "clears the target, command and telemetry counters" do
92
- System.targets.each do |name, tgt|
93
- tgt.cmd_cnt = 100
94
- tgt.tlm_cnt = 100
95
- end
96
- System.commands.all do |tgt, pkt|
97
- pkt.received_count = 100
98
- end
99
- System.telemetry.all do |tgt, pkt|
100
- pkt.received_count = 100
101
- end
102
-
103
- System.clear_counters
104
-
105
- System.targets.each do |name, tgt|
106
- expect(tgt.cmd_cnt).to eql 0
107
- expect(tgt.tlm_cnt).to eql 0
108
- end
109
- System.commands.all do |tgt, pkt|
110
- expect(pkt.received_count).to eql 0
111
- end
112
- System.telemetry.all do |tgt, pkt|
113
- expect(pkt.received_count).to eql 0
114
- end
115
- end
116
- end
117
-
118
- describe "packets and System.packets" do
119
- it "calculates MD5s across all the target files" do
120
- capture_io do |stdout|
121
- # This line actually does the work of reading the configuration
122
- expect(System.telemetry.target_names).to eql ['COSMOS','INST','META']
123
- expect(System.commands.target_names).to eql ['COSMOS','INST','META']
124
-
125
- expect(stdout.string).to match "Marshal file does not exist"
126
-
127
- # Reset stdout for another go at the processing
128
- stdout.rewind
129
- # Reset the instance variable so it will read the new configuration
130
- System.class_eval('@@instance = nil')
131
- # This line actually does the work of reading the configuration
132
- expect(System.telemetry.target_names).to eql ['COSMOS','INST','META']
133
- expect(System.commands.target_names).to eql ['COSMOS','INST','META']
134
-
135
- expect(stdout.string).to match "Marshal load success"
136
- end
137
- end
138
-
139
- it "handles target parsing errors" do
140
- capture_io do |stdout|
141
- allow_any_instance_of(PacketConfig).to receive(:process_file) { raise "ProcessError" }
142
- # This line actually does the work of reading the configuration
143
- expect { System.telemetry.target_names }.to raise_error("ProcessError")
144
-
145
- expect(stdout.string).to match "Problem processing"
146
- end
147
- end
148
- end
149
-
150
- describe "load_configuration" do
151
- after(:all) do
152
- File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'))
153
- File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'))
154
- end
155
-
156
- it "loads the initial configuration" do
157
- System.load_configuration
158
- expect(System.commands.target_names).to eql ['COSMOS','INST','META']
159
- expect(System.telemetry.target_names).to eql ['COSMOS','INST','META']
160
- end
161
-
162
- it "loads a named configuration" do
163
- File.open(@config_file,'w') do |file|
164
- file.puts "DECLARE_TARGET COSMOS"
165
- file.puts "DECLARE_TARGET COSMOS OVERRIDE"
166
- end
167
-
168
- # Load the original configuration
169
- original_config_name, err = System.load_configuration
170
- expect(err).to eql nil
171
- expect(System.telemetry.target_names).to eql %w(COSMOS OVERRIDE)
172
- original_pkts = System.telemetry.packets('COSMOS').keys
173
-
174
- # Create a new configuration by writing another telemetry file
175
- File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'),'w') do |file|
176
- file.puts "TELEMETRY COSMOS TEST1 BIG_ENDIAN"
177
- file.puts " APPEND_ITEM DATA 240 STRING"
178
- end
179
- System.instance.process_file(@config_file)
180
- # Verify the new telemetry packet is there
181
- expect(System.telemetry.packets('COSMOS').keys).to include "TEST1"
182
- second_config_name = System.configuration_name
183
-
184
- # Now load the original configuration
185
- name, err = System.load_configuration(original_config_name)
186
- expect(err).to eql nil
187
- expect(original_config_name).to eql name
188
- expect(System.telemetry.packets('COSMOS').keys).not_to include "TEST1"
189
-
190
- # Create yet another configuration by writing another telemetry file
191
- File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'),'w') do |file|
192
- file.puts "TELEMETRY COSMOS TEST2 BIG_ENDIAN"
193
- file.puts " APPEND_ITEM DATA 240 STRING"
194
- end
195
- System.instance.process_file(@config_file)
196
- names = []
197
- # Verify the new telemetry packet is there as well as the second one
198
- expect(System.telemetry.packets('COSMOS').keys).to include("TEST1", "TEST2")
199
- third_config_name = System.configuration_name
200
-
201
- # Try loading something that doesn't exist
202
- # It should fail and reload the original configuration
203
- name, err = System.load_configuration("BLAH")
204
- expect(err).to eql nil
205
- expect(name).to eql original_config_name
206
-
207
- # Now load the second configuration. It shouldn't have the most
208
- # recently defined telemetry packet.
209
- System.load_configuration(second_config_name)
210
- expect(System.telemetry.packets('COSMOS').keys).to include "TEST1"
211
- expect(System.telemetry.packets('COSMOS').keys).not_to include "TEST2"
212
-
213
- # Now remove system.txt from the third configuration and try to load it again to cause an error
214
- third_config_path = System.instance.send(:find_configuration, third_config_name)
215
- FileUtils.mv File.join(third_config_path, 'system.txt'), File.join(third_config_path, 'system2.txt')
216
- result, err = System.load_configuration(third_config_name)
217
- expect(result).to eql original_config_name
218
- expect(err).to_not be_nil
219
- end
220
- end
221
- end
222
-
223
- describe "process_file" do
224
- before(:all) do
225
- begin
226
- # Move the targets directory out of the way so we can make our own
227
- FileUtils.mv @config_targets, Cosmos::USERPATH
228
- FileUtils.mkdir_p(@config_targets)
229
- File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
230
- rescue
231
- puts "Cannot move targets folder... probably due to open editor or explorer"
232
- exit 1
233
- end
234
- end
235
- after(:all) do
236
- # Restore the targets directory
237
- FileUtils.rm_rf @config_targets
238
- FileUtils.mv File.join(Cosmos::USERPATH, 'targets'), File.join(Cosmos::USERPATH, 'config')
239
- end
240
-
241
- it "complains about unknown keywords" do
242
- tf = Tempfile.new('unittest')
243
- tf.puts("BLAH")
244
- tf.close
245
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Unknown keyword 'BLAH'")
246
- tf.unlink
247
- end
248
-
249
- context "with AUTO_DECLARE_TARGETS" do
250
- it "takes 0 parameters" do
251
- tf = Tempfile.new('unittest')
252
- tf.puts("AUTO_DECLARE_TARGETS TRUE")
253
- tf.close
254
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for AUTO_DECLARE_TARGETS.")
255
- tf.unlink
256
- end
257
-
258
- it "complains if config/targets doesn't exist" do
259
- tf = Tempfile.new('unittest')
260
- tf.puts("AUTO_DECLARE_TARGETS")
261
- tf.close
262
- FileUtils.rm_rf(@config_targets)
263
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /\/config\/targets must exist/)
264
- FileUtils.mkdir_p(@config_targets)
265
- tf.unlink
266
- end
267
-
268
- it "complains if target directories aren't uppercase" do
269
- tf = Tempfile.new('unittest')
270
- tf.puts("AUTO_DECLARE_TARGETS")
271
- tf.close
272
- FileUtils.mkdir_p(File.join(@config_targets, 'tgt'))
273
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Target folder must be uppercase: 'tgt'")
274
- Dir.rmdir(File.join(@config_targets, 'tgt'))
275
- tf.unlink
276
- end
277
-
278
- it "processes target directories with the SYSTEM directory last" do
279
- tf = Tempfile.new('unittest')
280
- tf.puts("AUTO_DECLARE_TARGETS")
281
- tf.close
282
- FileUtils.mkdir_p(File.join(@config_targets, 'ABC'))
283
- FileUtils.mkdir_p(File.join(@config_targets, 'SYSTEM'))
284
- FileUtils.mkdir_p(File.join(@config_targets, 'XYZ'))
285
- System.instance.process_file(tf.path)
286
- # Since Ruby 1.9+ uses ordered Hashes we can ask for the keys and
287
- # SYSTEM should be last
288
- expect(System.instance.targets.keys).to eql %w(ABC XYZ SYSTEM)
289
- Dir.rmdir(File.join(@config_targets, 'ABC'))
290
- Dir.rmdir(File.join(@config_targets, 'SYSTEM'))
291
- Dir.rmdir(File.join(@config_targets, 'XYZ'))
292
- tf.unlink
293
- end
294
- end
295
-
296
- context "with DECLARE_TARGET" do
297
- it "takes 1 or 2 parameters" do
298
- tf = Tempfile.new('unittest')
299
- tf.puts("DECLARE_TARGET")
300
- tf.close
301
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DECLARE_TARGET.")
302
- tf.unlink
303
-
304
- tf = Tempfile.new('unittest')
305
- tf.puts("DECLARE_TARGET TGT TGT TGT TGT")
306
- tf.close
307
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DECLARE_TARGET.")
308
- tf.unlink
309
- end
310
-
311
- it "complains if the target directory doesn't exist" do
312
- tf = Tempfile.new('unittest')
313
- tf.puts("DECLARE_TARGET TGT")
314
- tf.close
315
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Target folder must exist/)
316
- tf.unlink
317
- end
318
-
319
- it "processes the target directory" do
320
- tf = Tempfile.new('unittest')
321
- tf.puts("DECLARE_TARGET TGT")
322
- tf.close
323
- FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
324
- System.instance.process_file(tf.path)
325
- tf.unlink
326
- end
327
-
328
- it "processes the target directory with substitute name" do
329
- tf = Tempfile.new('unittest')
330
- tf.puts("DECLARE_TARGET TGT NEW")
331
- tf.close
332
- FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
333
- System.instance.process_file(tf.path)
334
- tf.unlink
335
- end
336
-
337
- it "processes the target directory with specified target.txt" do
338
- tf = Tempfile.new('unittest')
339
- tf.puts("DECLARE_TARGET TGT nil target.txt")
340
- tf.close
341
- FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
342
- File.open(File.join(@config_targets, 'TGT', 'target.txt'), 'w') do |file|
343
- file.puts "# target.txt"
344
- end
345
- System.instance.process_file(tf.path)
346
- tf.unlink
347
- end
348
- end
349
-
350
- context "with PORT" do
351
- it "takes 2 parameters" do
352
- tf = Tempfile.new('unittest')
353
- tf.puts("PORT CTS_API")
354
- tf.close
355
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for PORT.")
356
- tf.unlink
357
-
358
- tf = Tempfile.new('unittest')
359
- tf.puts("PORT CTS_API 8888 TRUE")
360
- tf.close
361
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for PORT.")
362
- tf.unlink
363
- end
364
-
365
- it "complains about unknown ports" do
366
- tf = Tempfile.new('unittest')
367
- tf.puts("PORT MYPORT 10")
368
- tf.close
369
- capture_io do |stdout|
370
- System.instance.process_file(tf.path)
371
- expect(stdout.string).to match /WARN: Unknown port name given: MYPORT/
372
- end
373
- tf.unlink
374
- end
375
-
376
- it "changes known ports" do
377
- tf = Tempfile.new('unittest')
378
- tf.puts("PORT CTS_API 8888")
379
- tf.close
380
- expect(System.ports['CTS_API']).to eql 7777
381
- System.instance.process_file(tf.path)
382
- expect(System.ports['CTS_API']).to eql 8888
383
- tf.unlink
384
- end
385
- end
386
-
387
- context "with PATH" do
388
- it "takes 2 parameters" do
389
- tf = Tempfile.new('unittest')
390
- tf.puts("PATH C:/")
391
- tf.close
392
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for PATH.")
393
- tf.unlink
394
-
395
- tf = Tempfile.new('unittest')
396
- tf.puts("PATH MYPATH C:/ TRUE")
397
- tf.close
398
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for PATH.")
399
- tf.unlink
400
- end
401
-
402
- it "complains about unknown paths" do
403
- tf = Tempfile.new('unittest')
404
- tf.puts("PATH MYPATH C:/")
405
- tf.close
406
- capture_io do |stdout|
407
- System.instance.process_file(tf.path)
408
- expect(stdout.string).to match /WARN: Unknown path name given: MYPATH/
409
- end
410
- tf.unlink
411
- end
412
-
413
- it "changes known paths" do
414
- if Kernel.is_windows?
415
- tf = Tempfile.new('unittest')
416
- tf.puts("PATH LOGS C:/mylogs")
417
- tf.close
418
- expect(System.paths['LOGS']).to match 'outputs/logs'
419
- System.instance.process_file(tf.path)
420
- expect(System.paths['LOGS']).to eql 'C:/mylogs'
421
- tf.unlink
422
- end
423
- end
424
- end
425
-
426
- context "with DEFAULT_PACKET_LOG_WRITER" do
427
- it "takes 1 parameters" do
428
- tf = Tempfile.new('unittest')
429
- tf.puts("DEFAULT_PACKET_LOG_WRITER")
430
- tf.close
431
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DEFAULT_PACKET_LOG_WRITER.")
432
- tf.unlink
433
-
434
- tf = Tempfile.new('unittest')
435
- tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class TRUE")
436
- tf.close
437
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DEFAULT_PACKET_LOG_WRITER.")
438
- tf.unlink
439
- end
440
-
441
- it "complains if the class doesn't exist" do
442
- tf = Tempfile.new('unittest')
443
- tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class")
444
- tf.close
445
- expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
446
- tf.unlink
447
- end
448
-
449
- it "sets the packet writer" do
450
- filename = File.join(File.dirname(__FILE__),'..','..','lib','my_writer.rb')
451
- File.open(filename, 'w') do |file|
452
- file.puts "class MyWriter"
453
- file.puts "end"
454
- end
455
- tf = Tempfile.new('unittest')
456
- tf.puts("DEFAULT_PACKET_LOG_WRITER my_writer")
457
- tf.close
458
- System.instance.process_file(tf.path)
459
- expect(System.default_packet_log_writer).to eql MyWriter
460
- File.delete filename
461
- tf.unlink
462
- end
463
- end
464
-
465
- context "with DEFAULT_PACKET_LOG_READER" do
466
- it "takes 1 parameters" do
467
- tf = Tempfile.new('unittest')
468
- tf.puts("DEFAULT_PACKET_LOG_READER")
469
- tf.close
470
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DEFAULT_PACKET_LOG_READER.")
471
- tf.unlink
472
-
473
- tf = Tempfile.new('unittest')
474
- tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class TRUE")
475
- tf.close
476
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DEFAULT_PACKET_LOG_READER.")
477
- tf.unlink
478
- end
479
-
480
- it "complains if the class doesn't exist" do
481
- tf = Tempfile.new('unittest')
482
- tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class")
483
- tf.close
484
- expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
485
- tf.unlink
486
- end
487
-
488
- it "sets the packet reader" do
489
- filename = File.join(File.dirname(__FILE__),'..','..','lib','my_reader.rb')
490
- File.open(filename, 'w') do |file|
491
- file.puts "class MyReader"
492
- file.puts "end"
493
- end
494
- tf = Tempfile.new('unittest')
495
- tf.puts("DEFAULT_PACKET_LOG_READER my_reader")
496
- tf.close
497
- System.instance.process_file(tf.path)
498
- expect(System.default_packet_log_reader).to eql MyReader
499
- File.delete filename
500
- tf.unlink
501
- end
502
- end
503
-
504
- context "with DISABLE_DNS" do
505
- it "takes 0 parameters" do
506
- tf = Tempfile.new('unittest')
507
- tf.puts("DISABLE_DNS BLAH TRUE")
508
- tf.close
509
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DISABLE_DNS.")
510
- tf.unlink
511
- end
512
-
513
- it "disables dns lookups" do
514
- tf = Tempfile.new('unittest')
515
- tf.puts("DISABLE_DNS")
516
- tf.close
517
- expect(System.use_dns).to be false
518
- System.instance.process_file(tf.path)
519
- expect(System.use_dns).to be false
520
- tf.unlink
521
- end
522
-
523
- it "enables dns lookups" do
524
- tf = Tempfile.new('unittest')
525
- tf.puts("ENABLE_DNS")
526
- tf.close
527
- expect(System.use_dns).to be false
528
- System.instance.process_file(tf.path)
529
- expect(System.use_dns).to be true
530
- tf.unlink
531
- end
532
- end
533
-
534
- context "with ALLOW_ACCESS" do
535
- it "takes 1 parameters" do
536
- tf = Tempfile.new('unittest')
537
- tf.puts("ALLOW_ACCESS")
538
- tf.close
539
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for ALLOW_ACCESS.")
540
- tf.unlink
541
-
542
- tf = Tempfile.new('unittest')
543
- tf.puts("ALLOW_ACCESS localhost true")
544
- tf.close
545
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for ALLOW_ACCESS.")
546
- tf.unlink
547
- end
548
-
549
- it "complains about bad addresses" do
550
- tf = Tempfile.new('unittest')
551
- tf.puts("ALLOW_ACCESS blah")
552
- tf.close
553
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
554
- tf.unlink
555
-
556
- tf = Tempfile.new('unittest')
557
- tf.puts("ALLOW_ACCESS hopefully_this_is_not_a_valid_machine_name_XYZ")
558
- tf.close
559
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
560
- tf.unlink
561
- end
562
-
563
- it "allows ALL" do
564
- tf = Tempfile.new('unittest')
565
- tf.puts("ALLOW_ACCESS ALL")
566
- tf.close
567
- System.instance.process_file(tf.path)
568
- expect(System.acl).to be_nil
569
- tf.unlink
570
- end
571
-
572
- it "stores host by name" do
573
- tf = Tempfile.new('unittest')
574
- tf.puts("ALLOW_ACCESS localhost")
575
- tf.close
576
- System.instance.process_file(tf.path)
577
- expect(System.acl.allow_addr?(["AF_INET",0,"localhost","127.0.0.1"])).to be true
578
- tf.unlink
579
- end
580
-
581
- it "stores host by IP address" do
582
- addr = IPSocket.getaddress("www.google.com")
583
- if addr and !addr.index(':')
584
- tf = Tempfile.new('unittest')
585
- tf.puts("ALLOW_ACCESS #{addr}")
586
- tf.close
587
- System.instance.process_file(tf.path)
588
- expect(System.acl.allow_addr?(["AF_INET",0,"www.google.com",addr])).to be true
589
- tf.unlink
590
- end
591
- end
592
- end
593
-
594
- context "with STALENESS_SECONDS" do
595
- it "takes 1 parameters" do
596
- tf = Tempfile.new('unittest')
597
- tf.puts("STALENESS_SECONDS")
598
- tf.close
599
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for STALENESS_SECONDS.")
600
- tf.unlink
601
-
602
- tf = Tempfile.new('unittest')
603
- tf.puts("STALENESS_SECONDS 1 2")
604
- tf.close
605
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for STALENESS_SECONDS.")
606
- tf.unlink
607
- end
608
-
609
- it "sets the number of seconds required to be stale" do
610
- tf = Tempfile.new('unittest')
611
- tf.puts("STALENESS_SECONDS 3")
612
- tf.close
613
- expect(System.staleness_seconds).to eql 30
614
- System.instance.process_file(tf.path)
615
- expect(System.staleness_seconds).to eql 3
616
- tf.unlink
617
- end
618
- end
619
-
620
- context "with CMD_TLM_VERSION" do
621
- it "takes 1 parameters" do
622
- tf = Tempfile.new('unittest')
623
- tf.puts("CMD_TLM_VERSION")
624
- tf.close
625
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for CMD_TLM_VERSION.")
626
- tf.unlink
627
-
628
- tf = Tempfile.new('unittest')
629
- tf.puts("CMD_TLM_VERSION 1 2")
630
- tf.close
631
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for CMD_TLM_VERSION.")
632
- tf.unlink
633
- end
634
-
635
- it "sets the command and telemetry version" do
636
- tf = Tempfile.new('unittest')
637
- tf.puts("CMD_TLM_VERSION 2.1")
638
- tf.close
639
- expect(System.cmd_tlm_version).to be_nil
640
- System.instance.process_file(tf.path)
641
- expect(System.cmd_tlm_version).to eql "2.1"
642
- tf.unlink
643
- end
644
- end
645
- end
646
-
647
- describe "Cosmos.write_exception_file" do
648
- it "writes a file with the exception" do
649
- filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
650
- expect(File.exist?(filename)).to be true
651
- File.delete(filename)
652
- end
653
-
654
- it "writes a file without a defined LOGS directory" do
655
- File.open(@config_file,'w') {|file| file.puts "PATH LOGS C:/this/is/not/a/real/path" }
656
- # Reset the instance variable so it will read the new config file
657
- System.instance_eval('@instance = nil')
658
- filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
659
- expect(File.exist?(filename)).to be true
660
- File.delete(filename)
661
- end
662
- end
663
- end
664
- end
665
-
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'spec_helper'
12
+ require 'cosmos'
13
+ require 'cosmos/system/system'
14
+ require 'tempfile'
15
+
16
+ module Cosmos
17
+
18
+ describe System do
19
+ before(:all) do
20
+ clean_config()
21
+ System.class_eval('@@instance = nil')
22
+
23
+ # Save system.txt
24
+ @config_file = File.join(Cosmos::USERPATH,'config','system','system.txt')
25
+ FileUtils.mv @config_file, Cosmos::USERPATH
26
+
27
+ # Create a dummy system.txt
28
+ File.open(@config_file,'w') {|file| file.puts "# This is a comment" }
29
+ @config_targets = File.join(Cosmos::USERPATH,'config','targets')
30
+ end
31
+
32
+ after(:all) do
33
+ # Restore system.txt
34
+ FileUtils.mv File.join(Cosmos::USERPATH, 'system.txt'),
35
+ File.join(Cosmos::USERPATH,'config','system')
36
+ end
37
+
38
+ after(:each) do
39
+ clean_config()
40
+ System.class_eval('@@instance = nil')
41
+ end
42
+
43
+ describe "instance" do
44
+ it "creates default ports" do
45
+ # Don't check the actual port numbers but just that they exist
46
+ expect(System.ports.keys).to eql %w(CTS_API TLMVIEWER_API CTS_PREIDENTIFIED)
47
+ end
48
+
49
+ it "creates default paths" do
50
+ # Don't check the actual paths but just that they exist
51
+ expect(System.paths.keys).to eql %w(LOGS TMP SAVED_CONFIG TABLES HANDBOOKS PROCEDURES)
52
+ end
53
+ end
54
+
55
+ describe "System.commands" do
56
+ it "is empty" do
57
+ expect(System.commands.target_names).to eql []
58
+ end
59
+
60
+ it "logs errors saving the configuration" do
61
+ # Force a reload of the configuration
62
+ System.class_eval('@@instance = nil')
63
+
64
+ capture_io do |stdout|
65
+ allow(FileUtils).to receive(:mkdir_p) { raise "Error" }
66
+ expect(System.commands.target_names).to eql []
67
+ expect(stdout.string).to match "Problem saving configuration"
68
+ end
69
+ end
70
+ end
71
+
72
+ describe "System.telemetry" do
73
+ it "is empty" do
74
+ expect(System.telemetry.target_names).to eql []
75
+ end
76
+ end
77
+
78
+ describe "System.limits" do
79
+ it "includes the DEFAULT limit set" do
80
+ expect(System.limits.sets).to include :DEFAULT
81
+ end
82
+ end
83
+
84
+ context "with valid targets" do
85
+ before(:all) do
86
+ # Write the system.txt file to auto declare targets
87
+ File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
88
+ end
89
+
90
+ describe "System.clear_counters" do
91
+ it "clears the target, command and telemetry counters" do
92
+ System.targets.each do |name, tgt|
93
+ tgt.cmd_cnt = 100
94
+ tgt.tlm_cnt = 100
95
+ end
96
+ System.commands.all do |tgt, pkt|
97
+ pkt.received_count = 100
98
+ end
99
+ System.telemetry.all do |tgt, pkt|
100
+ pkt.received_count = 100
101
+ end
102
+
103
+ System.clear_counters
104
+
105
+ System.targets.each do |name, tgt|
106
+ expect(tgt.cmd_cnt).to eql 0
107
+ expect(tgt.tlm_cnt).to eql 0
108
+ end
109
+ System.commands.all do |tgt, pkt|
110
+ expect(pkt.received_count).to eql 0
111
+ end
112
+ System.telemetry.all do |tgt, pkt|
113
+ expect(pkt.received_count).to eql 0
114
+ end
115
+ end
116
+ end
117
+
118
+ describe "packets and System.packets" do
119
+ it "calculates MD5s across all the target files" do
120
+ capture_io do |stdout|
121
+ # This line actually does the work of reading the configuration
122
+ expect(System.telemetry.target_names).to eql ['COSMOS','INST','META']
123
+ expect(System.commands.target_names).to eql ['COSMOS','INST','META']
124
+
125
+ expect(stdout.string).to match "Marshal file does not exist"
126
+
127
+ # Reset stdout for another go at the processing
128
+ stdout.rewind
129
+ # Reset the instance variable so it will read the new configuration
130
+ System.class_eval('@@instance = nil')
131
+ # This line actually does the work of reading the configuration
132
+ expect(System.telemetry.target_names).to eql ['COSMOS','INST','META']
133
+ expect(System.commands.target_names).to eql ['COSMOS','INST','META']
134
+
135
+ expect(stdout.string).to match "Marshal load success"
136
+ end
137
+ end
138
+
139
+ it "handles target parsing errors" do
140
+ capture_io do |stdout|
141
+ allow_any_instance_of(PacketConfig).to receive(:process_file) { raise "ProcessError" }
142
+ # This line actually does the work of reading the configuration
143
+ expect { System.telemetry.target_names }.to raise_error("ProcessError")
144
+
145
+ expect(stdout.string).to match "Problem processing"
146
+ end
147
+ end
148
+ end
149
+
150
+ describe "load_configuration" do
151
+ after(:all) do
152
+ File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'))
153
+ File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'))
154
+ end
155
+
156
+ it "loads the initial configuration" do
157
+ System.load_configuration
158
+ expect(System.commands.target_names).to eql ['COSMOS','INST','META']
159
+ expect(System.telemetry.target_names).to eql ['COSMOS','INST','META']
160
+ end
161
+
162
+ it "loads a named configuration" do
163
+ File.open(@config_file,'w') do |file|
164
+ file.puts "DECLARE_TARGET COSMOS"
165
+ file.puts "DECLARE_TARGET COSMOS OVERRIDE"
166
+ end
167
+
168
+ # Load the original configuration
169
+ original_config_name, err = System.load_configuration
170
+ expect(err).to eql nil
171
+ expect(System.telemetry.target_names).to eql %w(COSMOS OVERRIDE)
172
+ original_pkts = System.telemetry.packets('COSMOS').keys
173
+
174
+ # Create a new configuration by writing another telemetry file
175
+ File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'),'w') do |file|
176
+ file.puts "TELEMETRY COSMOS TEST1 BIG_ENDIAN"
177
+ file.puts " APPEND_ITEM DATA 240 STRING"
178
+ end
179
+ System.instance.process_file(@config_file)
180
+ # Verify the new telemetry packet is there
181
+ expect(System.telemetry.packets('COSMOS').keys).to include "TEST1"
182
+ second_config_name = System.configuration_name
183
+
184
+ # Now load the original configuration
185
+ name, err = System.load_configuration(original_config_name)
186
+ expect(err).to eql nil
187
+ expect(original_config_name).to eql name
188
+ expect(System.telemetry.packets('COSMOS').keys).not_to include "TEST1"
189
+
190
+ # Create yet another configuration by writing another telemetry file
191
+ File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'),'w') do |file|
192
+ file.puts "TELEMETRY COSMOS TEST2 BIG_ENDIAN"
193
+ file.puts " APPEND_ITEM DATA 240 STRING"
194
+ end
195
+ System.instance.process_file(@config_file)
196
+ names = []
197
+ # Verify the new telemetry packet is there as well as the second one
198
+ expect(System.telemetry.packets('COSMOS').keys).to include("TEST1", "TEST2")
199
+ third_config_name = System.configuration_name
200
+
201
+ # Try loading something that doesn't exist
202
+ # It should fail and reload the original configuration
203
+ name, err = System.load_configuration("BLAH")
204
+ expect(err).to eql nil
205
+ expect(name).to eql original_config_name
206
+
207
+ # Now load the second configuration. It shouldn't have the most
208
+ # recently defined telemetry packet.
209
+ System.load_configuration(second_config_name)
210
+ expect(System.telemetry.packets('COSMOS').keys).to include "TEST1"
211
+ expect(System.telemetry.packets('COSMOS').keys).not_to include "TEST2"
212
+
213
+ # Now remove system.txt from the third configuration and try to load it again to cause an error
214
+ third_config_path = System.instance.send(:find_configuration, third_config_name)
215
+ FileUtils.mv File.join(third_config_path, 'system.txt'), File.join(third_config_path, 'system2.txt')
216
+ result, err = System.load_configuration(third_config_name)
217
+ expect(result).to eql original_config_name
218
+ expect(err).to_not be_nil
219
+ end
220
+ end
221
+ end
222
+
223
+ describe "process_file" do
224
+ before(:all) do
225
+ begin
226
+ # Move the targets directory out of the way so we can make our own
227
+ FileUtils.mv @config_targets, Cosmos::USERPATH
228
+ FileUtils.mkdir_p(@config_targets)
229
+ File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
230
+ rescue
231
+ puts "Cannot move targets folder... probably due to open editor or explorer"
232
+ exit 1
233
+ end
234
+ end
235
+ after(:all) do
236
+ # Restore the targets directory
237
+ FileUtils.rm_rf @config_targets
238
+ FileUtils.mv File.join(Cosmos::USERPATH, 'targets'), File.join(Cosmos::USERPATH, 'config')
239
+ end
240
+
241
+ it "complains about unknown keywords" do
242
+ tf = Tempfile.new('unittest')
243
+ tf.puts("BLAH")
244
+ tf.close
245
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Unknown keyword 'BLAH'")
246
+ tf.unlink
247
+ end
248
+
249
+ context "with AUTO_DECLARE_TARGETS" do
250
+ it "takes 0 parameters" do
251
+ tf = Tempfile.new('unittest')
252
+ tf.puts("AUTO_DECLARE_TARGETS TRUE")
253
+ tf.close
254
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for AUTO_DECLARE_TARGETS.")
255
+ tf.unlink
256
+ end
257
+
258
+ it "complains if config/targets doesn't exist" do
259
+ tf = Tempfile.new('unittest')
260
+ tf.puts("AUTO_DECLARE_TARGETS")
261
+ tf.close
262
+ FileUtils.rm_rf(@config_targets)
263
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /\/config\/targets must exist/)
264
+ FileUtils.mkdir_p(@config_targets)
265
+ tf.unlink
266
+ end
267
+
268
+ it "complains if target directories aren't uppercase" do
269
+ tf = Tempfile.new('unittest')
270
+ tf.puts("AUTO_DECLARE_TARGETS")
271
+ tf.close
272
+ FileUtils.mkdir_p(File.join(@config_targets, 'tgt'))
273
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Target folder must be uppercase: 'tgt'")
274
+ Dir.rmdir(File.join(@config_targets, 'tgt'))
275
+ tf.unlink
276
+ end
277
+
278
+ it "processes target directories with the SYSTEM directory last" do
279
+ tf = Tempfile.new('unittest')
280
+ tf.puts("AUTO_DECLARE_TARGETS")
281
+ tf.close
282
+ FileUtils.mkdir_p(File.join(@config_targets, 'ABC'))
283
+ FileUtils.mkdir_p(File.join(@config_targets, 'SYSTEM'))
284
+ FileUtils.mkdir_p(File.join(@config_targets, 'XYZ'))
285
+ System.instance.process_file(tf.path)
286
+ # Since Ruby 1.9+ uses ordered Hashes we can ask for the keys and
287
+ # SYSTEM should be last
288
+ expect(System.instance.targets.keys).to eql %w(ABC XYZ SYSTEM)
289
+ Dir.rmdir(File.join(@config_targets, 'ABC'))
290
+ Dir.rmdir(File.join(@config_targets, 'SYSTEM'))
291
+ Dir.rmdir(File.join(@config_targets, 'XYZ'))
292
+ tf.unlink
293
+ end
294
+ end
295
+
296
+ context "with DECLARE_TARGET" do
297
+ it "takes 1 or 2 parameters" do
298
+ tf = Tempfile.new('unittest')
299
+ tf.puts("DECLARE_TARGET")
300
+ tf.close
301
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DECLARE_TARGET.")
302
+ tf.unlink
303
+
304
+ tf = Tempfile.new('unittest')
305
+ tf.puts("DECLARE_TARGET TGT TGT TGT TGT")
306
+ tf.close
307
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DECLARE_TARGET.")
308
+ tf.unlink
309
+ end
310
+
311
+ it "complains if the target directory doesn't exist" do
312
+ tf = Tempfile.new('unittest')
313
+ tf.puts("DECLARE_TARGET TGT")
314
+ tf.close
315
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Target folder must exist/)
316
+ tf.unlink
317
+ end
318
+
319
+ it "processes the target directory" do
320
+ tf = Tempfile.new('unittest')
321
+ tf.puts("DECLARE_TARGET TGT")
322
+ tf.close
323
+ FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
324
+ System.instance.process_file(tf.path)
325
+ tf.unlink
326
+ end
327
+
328
+ it "processes the target directory with substitute name" do
329
+ tf = Tempfile.new('unittest')
330
+ tf.puts("DECLARE_TARGET TGT NEW")
331
+ tf.close
332
+ FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
333
+ System.instance.process_file(tf.path)
334
+ tf.unlink
335
+ end
336
+
337
+ it "processes the target directory with specified target.txt" do
338
+ tf = Tempfile.new('unittest')
339
+ tf.puts("DECLARE_TARGET TGT nil target.txt")
340
+ tf.close
341
+ FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
342
+ File.open(File.join(@config_targets, 'TGT', 'target.txt'), 'w') do |file|
343
+ file.puts "# target.txt"
344
+ end
345
+ System.instance.process_file(tf.path)
346
+ tf.unlink
347
+ end
348
+ end
349
+
350
+ context "with PORT" do
351
+ it "takes 2 parameters" do
352
+ tf = Tempfile.new('unittest')
353
+ tf.puts("PORT CTS_API")
354
+ tf.close
355
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for PORT.")
356
+ tf.unlink
357
+
358
+ tf = Tempfile.new('unittest')
359
+ tf.puts("PORT CTS_API 8888 TRUE")
360
+ tf.close
361
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for PORT.")
362
+ tf.unlink
363
+ end
364
+
365
+ it "complains about unknown ports" do
366
+ tf = Tempfile.new('unittest')
367
+ tf.puts("PORT MYPORT 10")
368
+ tf.close
369
+ capture_io do |stdout|
370
+ System.instance.process_file(tf.path)
371
+ expect(stdout.string).to match /WARN: Unknown port name given: MYPORT/
372
+ end
373
+ tf.unlink
374
+ end
375
+
376
+ it "changes known ports" do
377
+ tf = Tempfile.new('unittest')
378
+ tf.puts("PORT CTS_API 8888")
379
+ tf.close
380
+ expect(System.ports['CTS_API']).to eql 7777
381
+ System.instance.process_file(tf.path)
382
+ expect(System.ports['CTS_API']).to eql 8888
383
+ tf.unlink
384
+ end
385
+ end
386
+
387
+ context "with PATH" do
388
+ it "takes 2 parameters" do
389
+ tf = Tempfile.new('unittest')
390
+ tf.puts("PATH C:/")
391
+ tf.close
392
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for PATH.")
393
+ tf.unlink
394
+
395
+ tf = Tempfile.new('unittest')
396
+ tf.puts("PATH MYPATH C:/ TRUE")
397
+ tf.close
398
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for PATH.")
399
+ tf.unlink
400
+ end
401
+
402
+ it "complains about unknown paths" do
403
+ tf = Tempfile.new('unittest')
404
+ tf.puts("PATH MYPATH C:/")
405
+ tf.close
406
+ capture_io do |stdout|
407
+ System.instance.process_file(tf.path)
408
+ expect(stdout.string).to match /WARN: Unknown path name given: MYPATH/
409
+ end
410
+ tf.unlink
411
+ end
412
+
413
+ it "changes known paths" do
414
+ if Kernel.is_windows?
415
+ tf = Tempfile.new('unittest')
416
+ tf.puts("PATH LOGS C:/mylogs")
417
+ tf.close
418
+ expect(System.paths['LOGS']).to match 'outputs/logs'
419
+ System.instance.process_file(tf.path)
420
+ expect(System.paths['LOGS']).to eql 'C:/mylogs'
421
+ tf.unlink
422
+ end
423
+ end
424
+ end
425
+
426
+ context "with DEFAULT_PACKET_LOG_WRITER" do
427
+ it "takes 1 parameters" do
428
+ tf = Tempfile.new('unittest')
429
+ tf.puts("DEFAULT_PACKET_LOG_WRITER")
430
+ tf.close
431
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DEFAULT_PACKET_LOG_WRITER.")
432
+ tf.unlink
433
+
434
+ tf = Tempfile.new('unittest')
435
+ tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class TRUE")
436
+ tf.close
437
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DEFAULT_PACKET_LOG_WRITER.")
438
+ tf.unlink
439
+ end
440
+
441
+ it "complains if the class doesn't exist" do
442
+ tf = Tempfile.new('unittest')
443
+ tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class")
444
+ tf.close
445
+ expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
446
+ tf.unlink
447
+ end
448
+
449
+ it "sets the packet writer" do
450
+ filename = File.join(File.dirname(__FILE__),'..','..','lib','my_writer.rb')
451
+ File.open(filename, 'w') do |file|
452
+ file.puts "class MyWriter"
453
+ file.puts "end"
454
+ end
455
+ tf = Tempfile.new('unittest')
456
+ tf.puts("DEFAULT_PACKET_LOG_WRITER my_writer")
457
+ tf.close
458
+ System.instance.process_file(tf.path)
459
+ expect(System.default_packet_log_writer).to eql MyWriter
460
+ File.delete filename
461
+ tf.unlink
462
+ end
463
+ end
464
+
465
+ context "with DEFAULT_PACKET_LOG_READER" do
466
+ it "takes 1 parameters" do
467
+ tf = Tempfile.new('unittest')
468
+ tf.puts("DEFAULT_PACKET_LOG_READER")
469
+ tf.close
470
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for DEFAULT_PACKET_LOG_READER.")
471
+ tf.unlink
472
+
473
+ tf = Tempfile.new('unittest')
474
+ tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class TRUE")
475
+ tf.close
476
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DEFAULT_PACKET_LOG_READER.")
477
+ tf.unlink
478
+ end
479
+
480
+ it "complains if the class doesn't exist" do
481
+ tf = Tempfile.new('unittest')
482
+ tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class")
483
+ tf.close
484
+ expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
485
+ tf.unlink
486
+ end
487
+
488
+ it "sets the packet reader" do
489
+ filename = File.join(File.dirname(__FILE__),'..','..','lib','my_reader.rb')
490
+ File.open(filename, 'w') do |file|
491
+ file.puts "class MyReader"
492
+ file.puts "end"
493
+ end
494
+ tf = Tempfile.new('unittest')
495
+ tf.puts("DEFAULT_PACKET_LOG_READER my_reader")
496
+ tf.close
497
+ System.instance.process_file(tf.path)
498
+ expect(System.default_packet_log_reader).to eql MyReader
499
+ File.delete filename
500
+ tf.unlink
501
+ end
502
+ end
503
+
504
+ context "with DISABLE_DNS" do
505
+ it "takes 0 parameters" do
506
+ tf = Tempfile.new('unittest')
507
+ tf.puts("DISABLE_DNS BLAH TRUE")
508
+ tf.close
509
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for DISABLE_DNS.")
510
+ tf.unlink
511
+ end
512
+
513
+ it "disables dns lookups" do
514
+ tf = Tempfile.new('unittest')
515
+ tf.puts("DISABLE_DNS")
516
+ tf.close
517
+ expect(System.use_dns).to be false
518
+ System.instance.process_file(tf.path)
519
+ expect(System.use_dns).to be false
520
+ tf.unlink
521
+ end
522
+
523
+ it "enables dns lookups" do
524
+ tf = Tempfile.new('unittest')
525
+ tf.puts("ENABLE_DNS")
526
+ tf.close
527
+ expect(System.use_dns).to be false
528
+ System.instance.process_file(tf.path)
529
+ expect(System.use_dns).to be true
530
+ tf.unlink
531
+ end
532
+ end
533
+
534
+ context "with ALLOW_ACCESS" do
535
+ it "takes 1 parameters" do
536
+ tf = Tempfile.new('unittest')
537
+ tf.puts("ALLOW_ACCESS")
538
+ tf.close
539
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for ALLOW_ACCESS.")
540
+ tf.unlink
541
+
542
+ tf = Tempfile.new('unittest')
543
+ tf.puts("ALLOW_ACCESS localhost true")
544
+ tf.close
545
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for ALLOW_ACCESS.")
546
+ tf.unlink
547
+ end
548
+
549
+ it "complains about bad addresses" do
550
+ tf = Tempfile.new('unittest')
551
+ tf.puts("ALLOW_ACCESS blah")
552
+ tf.close
553
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
554
+ tf.unlink
555
+
556
+ tf = Tempfile.new('unittest')
557
+ tf.puts("ALLOW_ACCESS hopefully_this_is_not_a_valid_machine_name_XYZ")
558
+ tf.close
559
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
560
+ tf.unlink
561
+ end
562
+
563
+ it "allows ALL" do
564
+ tf = Tempfile.new('unittest')
565
+ tf.puts("ALLOW_ACCESS ALL")
566
+ tf.close
567
+ System.instance.process_file(tf.path)
568
+ expect(System.acl).to be_nil
569
+ tf.unlink
570
+ end
571
+
572
+ it "stores host by name" do
573
+ tf = Tempfile.new('unittest')
574
+ tf.puts("ALLOW_ACCESS localhost")
575
+ tf.close
576
+ System.instance.process_file(tf.path)
577
+ expect(System.acl.allow_addr?(["AF_INET",0,"localhost","127.0.0.1"])).to be true
578
+ tf.unlink
579
+ end
580
+
581
+ it "stores host by IP address" do
582
+ addr = IPSocket.getaddress("www.google.com")
583
+ if addr and !addr.index(':')
584
+ tf = Tempfile.new('unittest')
585
+ tf.puts("ALLOW_ACCESS #{addr}")
586
+ tf.close
587
+ System.instance.process_file(tf.path)
588
+ expect(System.acl.allow_addr?(["AF_INET",0,"www.google.com",addr])).to be true
589
+ tf.unlink
590
+ end
591
+ end
592
+ end
593
+
594
+ context "with STALENESS_SECONDS" do
595
+ it "takes 1 parameters" do
596
+ tf = Tempfile.new('unittest')
597
+ tf.puts("STALENESS_SECONDS")
598
+ tf.close
599
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for STALENESS_SECONDS.")
600
+ tf.unlink
601
+
602
+ tf = Tempfile.new('unittest')
603
+ tf.puts("STALENESS_SECONDS 1 2")
604
+ tf.close
605
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for STALENESS_SECONDS.")
606
+ tf.unlink
607
+ end
608
+
609
+ it "sets the number of seconds required to be stale" do
610
+ tf = Tempfile.new('unittest')
611
+ tf.puts("STALENESS_SECONDS 3")
612
+ tf.close
613
+ expect(System.staleness_seconds).to eql 30
614
+ System.instance.process_file(tf.path)
615
+ expect(System.staleness_seconds).to eql 3
616
+ tf.unlink
617
+ end
618
+ end
619
+
620
+ context "with CMD_TLM_VERSION" do
621
+ it "takes 1 parameters" do
622
+ tf = Tempfile.new('unittest')
623
+ tf.puts("CMD_TLM_VERSION")
624
+ tf.close
625
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Not enough parameters for CMD_TLM_VERSION.")
626
+ tf.unlink
627
+
628
+ tf = Tempfile.new('unittest')
629
+ tf.puts("CMD_TLM_VERSION 1 2")
630
+ tf.close
631
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, "Too many parameters for CMD_TLM_VERSION.")
632
+ tf.unlink
633
+ end
634
+
635
+ it "sets the command and telemetry version" do
636
+ tf = Tempfile.new('unittest')
637
+ tf.puts("CMD_TLM_VERSION 2.1")
638
+ tf.close
639
+ expect(System.cmd_tlm_version).to be_nil
640
+ System.instance.process_file(tf.path)
641
+ expect(System.cmd_tlm_version).to eql "2.1"
642
+ tf.unlink
643
+ end
644
+ end
645
+ end
646
+
647
+ describe "Cosmos.write_exception_file" do
648
+ it "writes a file with the exception" do
649
+ filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
650
+ expect(File.exist?(filename)).to be true
651
+ File.delete(filename)
652
+ end
653
+
654
+ it "writes a file without a defined LOGS directory" do
655
+ File.open(@config_file,'w') {|file| file.puts "PATH LOGS C:/this/is/not/a/real/path" }
656
+ # Reset the instance variable so it will read the new config file
657
+ System.instance_eval('@instance = nil')
658
+ filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
659
+ expect(File.exist?(filename)).to be true
660
+ File.delete(filename)
661
+ end
662
+ end
663
+ end
664
+ end
665
+