cosmos 4.0.3-java

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 (1491) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitattributes +3 -0
  4. data/.gitignore +48 -0
  5. data/.rubocop.yml +23 -0
  6. data/.travis.yml +10 -0
  7. data/.yardopts +3 -0
  8. data/CONTRIBUTING.txt +50 -0
  9. data/Gemfile +10 -0
  10. data/Guardfile +27 -0
  11. data/LICENSE.txt +879 -0
  12. data/Manifest.txt +1549 -0
  13. data/README.md +111 -0
  14. data/Rakefile +264 -0
  15. data/autohotkey/config/data/attitude.bin +0 -0
  16. data/autohotkey/config/data/diamond.STL +58 -0
  17. data/autohotkey/config/data/groundoff.gif +0 -0
  18. data/autohotkey/config/data/groundon.gif +0 -0
  19. data/autohotkey/config/data/position.bin +0 -0
  20. data/autohotkey/config/data/satellite.gif +0 -0
  21. data/autohotkey/config/data/tada.wav +0 -0
  22. data/autohotkey/config/system/system.txt +29 -0
  23. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +126 -0
  24. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -0
  25. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
  26. data/autohotkey/config/targets/INST/doc/README.txt +1 -0
  27. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
  28. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -0
  29. data/autohotkey/config/targets/INST/screens/_footer.txt +4 -0
  30. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
  31. data/autohotkey/config/targets/INST/screens/array.txt +7 -0
  32. data/autohotkey/config/targets/INST/screens/block.txt +8 -0
  33. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
  34. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  35. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -0
  36. data/autohotkey/config/targets/INST/screens/ground.txt +25 -0
  37. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -0
  38. data/autohotkey/config/targets/INST/screens/hs.txt +46 -0
  39. data/autohotkey/config/targets/INST/screens/image.txt +21 -0
  40. data/autohotkey/config/targets/INST/screens/latest.txt +23 -0
  41. data/autohotkey/config/targets/INST/screens/mech.txt +25 -0
  42. data/autohotkey/config/targets/INST/screens/other.txt +25 -0
  43. data/autohotkey/config/targets/INST/screens/params.txt +25 -0
  44. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -0
  45. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  46. data/autohotkey/config/targets/INST/target.txt +27 -0
  47. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  48. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
  49. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  50. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  51. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  52. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  53. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  54. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
  55. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  56. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  57. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  58. data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
  59. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
  60. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
  61. data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
  62. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
  63. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  64. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  65. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  66. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
  67. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  68. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  69. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  70. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  71. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  72. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  73. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  74. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  75. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
  76. data/autohotkey/config/tools/launcher/launcher.txt +38 -0
  77. data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
  78. data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
  79. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
  80. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -0
  81. data/autohotkey/config/tools/table_manager/OldOneDimensionalTable_def.txt +19 -0
  82. data/autohotkey/config/tools/table_manager/OldTwoDimensionalTable_def.txt +248 -0
  83. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +31 -0
  84. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +28 -0
  85. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
  86. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
  87. data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
  88. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
  89. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
  90. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
  91. data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
  92. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
  93. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
  94. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
  95. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
  96. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
  97. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
  98. data/autohotkey/lib/example_background_task.rb +42 -0
  99. data/autohotkey/lib/user_version.rb +3 -0
  100. data/autohotkey/procedures/clear_util.rb +7 -0
  101. data/autohotkey/procedures/collect.rb +18 -0
  102. data/autohotkey/procedures/collect_util.rb +14 -0
  103. data/autohotkey/procedures/example_test.rb +71 -0
  104. data/autohotkey/procedures/example_test2.rb +74 -0
  105. data/autohotkey/procedures/script_test.rb +21 -0
  106. data/autohotkey/procedures/syntax_error.rb +18 -0
  107. data/autohotkey/tools/CmdExtractorAHK +16 -0
  108. data/autohotkey/tools/CmdSender +14 -0
  109. data/autohotkey/tools/CmdSenderAHK +18 -0
  110. data/autohotkey/tools/CmdSequence +14 -0
  111. data/autohotkey/tools/CmdSequenceAHK +23 -0
  112. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  113. data/autohotkey/tools/CmdTlmServer +14 -0
  114. data/autohotkey/tools/CmdTlmServerAHK +28 -0
  115. data/autohotkey/tools/CmdTlmServerAHK2 +17 -0
  116. data/autohotkey/tools/ConfigEditor +16 -0
  117. data/autohotkey/tools/DataViewer +14 -0
  118. data/autohotkey/tools/DataViewerAHK +17 -0
  119. data/autohotkey/tools/HandbookCreatorAHK +20 -0
  120. data/autohotkey/tools/LauncherAHK +17 -0
  121. data/autohotkey/tools/LimitsMonitorAHK +20 -0
  122. data/autohotkey/tools/OpenGLBuilderAHK +24 -0
  123. data/autohotkey/tools/PacketViewer +14 -0
  124. data/autohotkey/tools/PacketViewerAHK +18 -0
  125. data/autohotkey/tools/PacketViewerAHK2 +17 -0
  126. data/autohotkey/tools/Replay +14 -0
  127. data/autohotkey/tools/ReplayAHK +17 -0
  128. data/autohotkey/tools/ScriptRunner +14 -0
  129. data/autohotkey/tools/ScriptRunnerAHK +20 -0
  130. data/autohotkey/tools/ScriptRunnerAHK2 +17 -0
  131. data/autohotkey/tools/TableManager +14 -0
  132. data/autohotkey/tools/TableManagerAHK +25 -0
  133. data/autohotkey/tools/TableManagerAHK2 +18 -0
  134. data/autohotkey/tools/TableManagerAHK3 +18 -0
  135. data/autohotkey/tools/TableManagerAHK4 +24 -0
  136. data/autohotkey/tools/TestRunner +15 -0
  137. data/autohotkey/tools/TestRunnerAHK +17 -0
  138. data/autohotkey/tools/TestRunnerAHK2 +17 -0
  139. data/autohotkey/tools/TestRunnerAHK3 +17 -0
  140. data/autohotkey/tools/TestRunnerAHK4 +17 -0
  141. data/autohotkey/tools/TestRunnerAHK5 +17 -0
  142. data/autohotkey/tools/TestRunnerAHK6 +17 -0
  143. data/autohotkey/tools/TlmExtractor +15 -0
  144. data/autohotkey/tools/TlmExtractorAHK +19 -0
  145. data/autohotkey/tools/TlmExtractorAHK2 +16 -0
  146. data/autohotkey/tools/TlmExtractorAHK3 +16 -0
  147. data/autohotkey/tools/TlmGrapher +14 -0
  148. data/autohotkey/tools/TlmGrapherAHK +19 -0
  149. data/autohotkey/tools/TlmGrapherAHK2 +23 -0
  150. data/autohotkey/tools/TlmGrapherAHK3 +17 -0
  151. data/autohotkey/tools/TlmGrapherAHK4 +17 -0
  152. data/autohotkey/tools/TlmViewer +14 -0
  153. data/autohotkey/tools/TlmViewerAHK +28 -0
  154. data/autohotkey/tools/TlmViewerAHK2 +22 -0
  155. data/autohotkey/tools/TlmViewerAHK3 +23 -0
  156. data/autohotkey/tools/TlmViewerAHK4 +22 -0
  157. data/autohotkey/tools/TlmViewerAHK5 +18 -0
  158. data/autohotkey/tools/autohotkey.rb +38 -0
  159. data/autohotkey/tools/cmd_extractor.ahk +50 -0
  160. data/autohotkey/tools/cmd_sender.ahk +180 -0
  161. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  162. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  163. data/autohotkey/tools/cmd_tlm_server.ahk +90 -0
  164. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
  165. data/autohotkey/tools/data_viewer.ahk +140 -0
  166. data/autohotkey/tools/handbook_creator.ahk +32 -0
  167. data/autohotkey/tools/launcher.ahk +41 -0
  168. data/autohotkey/tools/limits_monitor.ahk +121 -0
  169. data/autohotkey/tools/open_gl_builder.ahk +133 -0
  170. data/autohotkey/tools/packet_viewer.ahk +217 -0
  171. data/autohotkey/tools/packet_viewer2.ahk +9 -0
  172. data/autohotkey/tools/replay.ahk +103 -0
  173. data/autohotkey/tools/script_runner.ahk +588 -0
  174. data/autohotkey/tools/script_runner2.ahk +50 -0
  175. data/autohotkey/tools/table_manager.ahk +291 -0
  176. data/autohotkey/tools/test_runner.ahk +262 -0
  177. data/autohotkey/tools/test_runner2.ahk +49 -0
  178. data/autohotkey/tools/test_runner3.ahk +11 -0
  179. data/autohotkey/tools/test_runner5.ahk +8 -0
  180. data/autohotkey/tools/test_runner6.ahk +5 -0
  181. data/autohotkey/tools/tlm_extractor.ahk +357 -0
  182. data/autohotkey/tools/tlm_grapher.ahk +658 -0
  183. data/autohotkey/tools/tlm_grapher2.ahk +115 -0
  184. data/autohotkey/tools/tlm_grapher3.ahk +23 -0
  185. data/autohotkey/tools/tlm_viewer.ahk +140 -0
  186. data/autohotkey/tools/tlm_viewer2.ahk +49 -0
  187. data/autohotkey/tools/tlm_viewer4.ahk +4 -0
  188. data/autohotkey/tools/tlm_viewer5.ahk +19 -0
  189. data/autohotkey/tools/tool_launch.rb +38 -0
  190. data/bin/cosmos +266 -0
  191. data/bin/cstol_converter +1166 -0
  192. data/bin/exchndl20-x64.dll +0 -0
  193. data/bin/exchndl20.dll +0 -0
  194. data/bin/exchndl21-x64.dll +0 -0
  195. data/bin/exchndl21.dll +0 -0
  196. data/bin/exchndl22-x64.dll +0 -0
  197. data/bin/exchndl22.dll +0 -0
  198. data/bin/mgwhelp-x64.dll +0 -0
  199. data/bin/mgwhelp.dll +0 -0
  200. data/bin/rubysloc +85 -0
  201. data/bin/xtce_converter +83 -0
  202. data/cosmos.gemspec +109 -0
  203. data/data/COSMOS_64x64.bmp +0 -0
  204. data/data/COSMOS_64x64.ico +0 -0
  205. data/data/COSMOS_64x64.png +0 -0
  206. data/data/COSMOS_Architecture.png +0 -0
  207. data/data/CheckBoxCheck.gif +0 -0
  208. data/data/CheckBoxEmpty.gif +0 -0
  209. data/data/Earthmap1024x512.gif +0 -0
  210. data/data/about.txt +4 -0
  211. data/data/add_database.png +0 -0
  212. data/data/add_plot.png +0 -0
  213. data/data/add_tab.png +0 -0
  214. data/data/blank.png +0 -0
  215. data/data/bug.png +0 -0
  216. data/data/checkmark.png +0 -0
  217. data/data/close.png +0 -0
  218. data/data/cmd_extractor.png +0 -0
  219. data/data/cmd_sender.png +0 -0
  220. data/data/cmd_sequence.png +0 -0
  221. data/data/config/_array_params.yaml +23 -0
  222. data/data/config/_id_items.yaml +24 -0
  223. data/data/config/_id_params.yaml +58 -0
  224. data/data/config/_interfaces.yaml +206 -0
  225. data/data/config/_items.yaml +20 -0
  226. data/data/config/_params.yaml +58 -0
  227. data/data/config/cmd_tlm_server.yaml +124 -0
  228. data/data/config/command.yaml +40 -0
  229. data/data/config/command_modifiers.yaml +145 -0
  230. data/data/config/command_telemetry.yaml +3 -0
  231. data/data/config/data_viewer.yaml +43 -0
  232. data/data/config/handbook_creator.yaml +23 -0
  233. data/data/config/housekeeping_params.yaml +71 -0
  234. data/data/config/interface_modifiers.yaml +44 -0
  235. data/data/config/item_modifiers.yaml +211 -0
  236. data/data/config/launcher.yaml +117 -0
  237. data/data/config/limits_monitor.yaml +53 -0
  238. data/data/config/linegraph_params.yaml +30 -0
  239. data/data/config/linegraph_plot.yaml +106 -0
  240. data/data/config/page_modifiers.yaml +128 -0
  241. data/data/config/param_item_modifiers.yaml +46 -0
  242. data/data/config/parameter_modifiers.yaml +180 -0
  243. data/data/config/protocols.yaml +273 -0
  244. data/data/config/screen.yaml +151 -0
  245. data/data/config/script_runner.yaml +15 -0
  246. data/data/config/system.yaml +247 -0
  247. data/data/config/table_manager.yaml +76 -0
  248. data/data/config/table_parameter_modifiers.yaml +9 -0
  249. data/data/config/target.yaml +80 -0
  250. data/data/config/telemetry.yaml +80 -0
  251. data/data/config/telemetry_modifiers.yaml +142 -0
  252. data/data/config/test_runner.yaml +118 -0
  253. data/data/config/tlm_extractor.yaml +109 -0
  254. data/data/config/tlm_grapher.yaml +78 -0
  255. data/data/config/tlm_viewer.yaml +112 -0
  256. data/data/config/unknown.yaml +3 -0
  257. data/data/config/widgets.yaml +1339 -0
  258. data/data/config/xy_params.yaml +50 -0
  259. data/data/config/xy_plot.yaml +12 -0
  260. data/data/config_editor.png +0 -0
  261. data/data/copy.png +0 -0
  262. data/data/cosmos.xcf +0 -0
  263. data/data/cosmos_word.gif +0 -0
  264. data/data/crc.txt +351 -0
  265. data/data/critical.wav +0 -0
  266. data/data/cts.png +0 -0
  267. data/data/cut.png +0 -0
  268. data/data/data_viewer.png +0 -0
  269. data/data/delete.png +0 -0
  270. data/data/delete_database.png +0 -0
  271. data/data/delete_plot.png +0 -0
  272. data/data/delete_tab.png +0 -0
  273. data/data/diamond.STL +58 -0
  274. data/data/disconnected.png +0 -0
  275. data/data/edit.png +0 -0
  276. data/data/edit_database.png +0 -0
  277. data/data/edit_plot.png +0 -0
  278. data/data/edit_tab.png +0 -0
  279. data/data/end-26.png +0 -0
  280. data/data/fast_forward-26.png +0 -0
  281. data/data/file.png +0 -0
  282. data/data/handbook_creator.png +0 -0
  283. data/data/help.png +0 -0
  284. data/data/html-32.png +0 -0
  285. data/data/information.wav +0 -0
  286. data/data/input.wav +0 -0
  287. data/data/launcher.png +0 -0
  288. data/data/legal.gif +0 -0
  289. data/data/legal.txt +8 -0
  290. data/data/limits_monitor.png +0 -0
  291. data/data/message.wav +0 -0
  292. data/data/moonmap1k.gif +0 -0
  293. data/data/multi.png +0 -0
  294. data/data/open.png +0 -0
  295. data/data/open_in_browser-32.png +0 -0
  296. data/data/opengl_builder.png +0 -0
  297. data/data/packet_viewer.png +0 -0
  298. data/data/pdf-32.png +0 -0
  299. data/data/play-26.png +0 -0
  300. data/data/question.wav +0 -0
  301. data/data/redo.png +0 -0
  302. data/data/replay.png +0 -0
  303. data/data/reverse-play-26.png +0 -0
  304. data/data/rewind-26.png +0 -0
  305. data/data/running.png +0 -0
  306. data/data/save.png +0 -0
  307. data/data/save_as.png +0 -0
  308. data/data/screenshot.png +0 -0
  309. data/data/script_runner.png +0 -0
  310. data/data/search-14.png +0 -0
  311. data/data/search.png +0 -0
  312. data/data/send_file.png +0 -0
  313. data/data/skip_to_start-26.png +0 -0
  314. data/data/spinner.gif +0 -0
  315. data/data/splash.gif +0 -0
  316. data/data/stop-26.png +0 -0
  317. data/data/table_manager.png +0 -0
  318. data/data/test_runner.png +0 -0
  319. data/data/tlm_extractor.png +0 -0
  320. data/data/tlm_grapher.png +0 -0
  321. data/data/tlm_viewer.png +0 -0
  322. data/data/undo.png +0 -0
  323. data/data/warning.wav +0 -0
  324. data/demo/Gemfile +10 -0
  325. data/demo/Launcher +16 -0
  326. data/demo/Launcher.bat +9 -0
  327. data/demo/Rakefile +77 -0
  328. data/demo/config/data/attitude.bin +0 -0
  329. data/demo/config/data/crc.txt +258 -0
  330. data/demo/config/data/diamond.STL +58 -0
  331. data/demo/config/data/groundoff.gif +0 -0
  332. data/demo/config/data/groundon.gif +0 -0
  333. data/demo/config/data/hselectoff.gif +0 -0
  334. data/demo/config/data/hselecton.gif +0 -0
  335. data/demo/config/data/hswitchoff.gif +0 -0
  336. data/demo/config/data/hswitchon.gif +0 -0
  337. data/demo/config/data/meta_init.txt +1 -0
  338. data/demo/config/data/position.bin +0 -0
  339. data/demo/config/data/poweroff.gif +0 -0
  340. data/demo/config/data/poweron.gif +0 -0
  341. data/demo/config/data/satellite.gif +0 -0
  342. data/demo/config/data/tada.wav +0 -0
  343. data/demo/config/data/vswitchoff.gif +0 -0
  344. data/demo/config/data/vswitchon.gif +0 -0
  345. data/demo/config/system/system.txt +47 -0
  346. data/demo/config/system/system2.txt +43 -0
  347. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
  348. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -0
  349. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
  350. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +18 -0
  351. data/demo/config/targets/EXAMPLE/target.txt +9 -0
  352. data/demo/config/targets/INST/cmd_tlm/_ccsds_cmd.txt +9 -0
  353. data/demo/config/targets/INST/cmd_tlm/_ccsds_tlm.txt +19 -0
  354. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +57 -0
  355. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +164 -0
  356. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -0
  357. data/demo/config/targets/INST/doc/README.txt +1 -0
  358. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
  359. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  360. data/demo/config/targets/INST/lib/sim_inst.rb +321 -0
  361. data/demo/config/targets/INST/procedures/checks.rb +11 -0
  362. data/demo/config/targets/INST/procedures/collect.rb +18 -0
  363. data/demo/config/targets/INST/procedures/disconnect.rb +29 -0
  364. data/demo/config/targets/INST/procedures/utilities/clear.rb +7 -0
  365. data/demo/config/targets/INST/procedures/utilities/collect.rb +14 -0
  366. data/demo/config/targets/INST/screens/_footer.txt +4 -0
  367. data/demo/config/targets/INST/screens/adcs.txt +70 -0
  368. data/demo/config/targets/INST/screens/array.txt +15 -0
  369. data/demo/config/targets/INST/screens/block.txt +8 -0
  370. data/demo/config/targets/INST/screens/commanding.txt +37 -0
  371. data/demo/config/targets/INST/screens/graphs.txt +14 -0
  372. data/demo/config/targets/INST/screens/ground.txt +25 -0
  373. data/demo/config/targets/INST/screens/hs.txt +42 -0
  374. data/demo/config/targets/INST/screens/latest.txt +23 -0
  375. data/demo/config/targets/INST/screens/limits.txt +43 -0
  376. data/demo/config/targets/INST/screens/other.txt +24 -0
  377. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  378. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  379. data/demo/config/targets/INST/screens/tabs.txt +68 -0
  380. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  381. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  382. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  383. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  384. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  385. data/demo/config/targets/INST/target.txt +37 -0
  386. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  387. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  388. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  389. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  390. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +6 -0
  391. data/demo/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  392. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
  393. data/demo/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  394. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  395. data/demo/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  396. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +55 -0
  397. data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
  398. data/demo/config/targets/SYSTEM/target.txt +12 -0
  399. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -0
  400. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
  401. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
  402. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +59 -0
  403. data/demo/config/targets/TEMPLATED/target.txt +8 -0
  404. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +49 -0
  405. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +42 -0
  406. data/demo/config/tools/data_viewer/data_viewer.txt +20 -0
  407. data/demo/config/tools/example_application.css +58 -0
  408. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
  409. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
  410. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -0
  411. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  412. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  413. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
  414. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  415. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  416. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  417. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  418. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  419. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  420. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -0
  421. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  422. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
  423. data/demo/config/tools/launcher/launcher.css +7 -0
  424. data/demo/config/tools/launcher/launcher.txt +48 -0
  425. data/demo/config/tools/launcher/launcher2.css +10 -0
  426. data/demo/config/tools/launcher/launcher2.txt +48 -0
  427. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  428. data/demo/config/tools/limits_monitor/README.txt +1 -0
  429. data/demo/config/tools/opengl_builder/README.txt +1 -0
  430. data/demo/config/tools/script_runner/script_runner.txt +3 -0
  431. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
  432. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  433. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +37 -0
  434. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +34 -0
  435. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +9 -0
  436. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +31 -0
  437. data/demo/config/tools/test_runner/test_runner.css +45 -0
  438. data/demo/config/tools/test_runner/test_runner.txt +17 -0
  439. data/demo/config/tools/tlm_extractor/_adcs_time.txt +2 -0
  440. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  441. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  442. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  443. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  444. data/demo/config/tools/tlm_grapher/README.txt +1 -0
  445. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
  446. data/demo/lib/example_background_task.rb +55 -0
  447. data/demo/lib/example_target.rb +103 -0
  448. data/demo/lib/scpi_target.rb +68 -0
  449. data/demo/lib/user_version.rb +3 -0
  450. data/demo/procedures/cosmos_api_test.rb +310 -0
  451. data/demo/procedures/example_test.rb +192 -0
  452. data/demo/procedures/plot_test.rb +8 -0
  453. data/demo/procedures/run_example_test.rb +3 -0
  454. data/demo/procedures/test.rb +51 -0
  455. data/demo/tools/CmdExtractor +16 -0
  456. data/demo/tools/CmdExtractor.bat +9 -0
  457. data/demo/tools/CmdSender +16 -0
  458. data/demo/tools/CmdSender.bat +9 -0
  459. data/demo/tools/CmdSequence +16 -0
  460. data/demo/tools/CmdSequence.bat +9 -0
  461. data/demo/tools/CmdTlmServer +16 -0
  462. data/demo/tools/CmdTlmServer.bat +9 -0
  463. data/demo/tools/ConfigEditor +16 -0
  464. data/demo/tools/ConfigEditor.bat +9 -0
  465. data/demo/tools/DataViewer +16 -0
  466. data/demo/tools/DataViewer.bat +9 -0
  467. data/demo/tools/ExampleTarget +16 -0
  468. data/demo/tools/ExampleTarget.bat +9 -0
  469. data/demo/tools/HandbookCreator +16 -0
  470. data/demo/tools/HandbookCreator.bat +9 -0
  471. data/demo/tools/Launcher +16 -0
  472. data/demo/tools/Launcher.bat +9 -0
  473. data/demo/tools/LimitsMonitor +16 -0
  474. data/demo/tools/LimitsMonitor.bat +9 -0
  475. data/demo/tools/OpenGLBuilder +16 -0
  476. data/demo/tools/OpenGLBuilder.bat +9 -0
  477. data/demo/tools/PacketViewer +16 -0
  478. data/demo/tools/PacketViewer.bat +9 -0
  479. data/demo/tools/Replay +16 -0
  480. data/demo/tools/Replay.bat +9 -0
  481. data/demo/tools/ScpiTarget +16 -0
  482. data/demo/tools/ScpiTarget.bat +9 -0
  483. data/demo/tools/ScriptRunner +16 -0
  484. data/demo/tools/ScriptRunner.bat +9 -0
  485. data/demo/tools/TableManager +16 -0
  486. data/demo/tools/TableManager.bat +9 -0
  487. data/demo/tools/TestRunner +16 -0
  488. data/demo/tools/TestRunner.bat +9 -0
  489. data/demo/tools/TlmExtractor +16 -0
  490. data/demo/tools/TlmExtractor.bat +9 -0
  491. data/demo/tools/TlmGrapher +16 -0
  492. data/demo/tools/TlmGrapher.bat +9 -0
  493. data/demo/tools/TlmViewer +16 -0
  494. data/demo/tools/TlmViewer.bat +9 -0
  495. data/demo/tools/ToolLaunch.bat +72 -0
  496. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  497. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  498. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  499. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  500. data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  501. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  502. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  503. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  504. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  505. data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  506. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  507. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  508. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  509. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  510. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  511. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  512. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  513. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  514. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  515. data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  516. data/demo/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  517. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  518. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  519. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  520. data/demo/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  521. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  522. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  523. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  524. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  525. data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  526. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  527. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  528. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  529. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  530. data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  531. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  532. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  533. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  534. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  535. data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  536. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  537. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  538. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  539. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  540. data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  541. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  542. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  543. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  544. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  545. data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  546. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  547. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  548. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  549. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  550. data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  551. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
  552. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  553. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  554. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  555. data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  556. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  557. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  558. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  559. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  560. data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  561. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  562. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  563. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  564. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  565. data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  566. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  567. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  568. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  569. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  570. data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  571. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  572. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  573. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  574. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  575. data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  576. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  577. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  578. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  579. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  580. data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  581. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  582. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  583. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  584. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  585. data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  586. data/demo/tools/tool_launch.rb +38 -0
  587. data/ext/cosmos/ext/array/array.c +111 -0
  588. data/ext/cosmos/ext/array/extconf.rb +13 -0
  589. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
  590. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
  591. data/ext/cosmos/ext/config_parser/config_parser.c +237 -0
  592. data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
  593. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -0
  594. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
  595. data/ext/cosmos/ext/crc/crc.c +341 -0
  596. data/ext/cosmos/ext/crc/extconf.rb +13 -0
  597. data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
  598. data/ext/cosmos/ext/line_graph/line_graph.c +501 -0
  599. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
  600. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -0
  601. data/ext/cosmos/ext/packet/extconf.rb +13 -0
  602. data/ext/cosmos/ext/packet/packet.c +350 -0
  603. data/ext/cosmos/ext/platform/extconf.rb +13 -0
  604. data/ext/cosmos/ext/platform/platform.c +101 -0
  605. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
  606. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -0
  607. data/ext/cosmos/ext/string/extconf.rb +13 -0
  608. data/ext/cosmos/ext/string/string.c +49 -0
  609. data/ext/cosmos/ext/structure/structure.c +1433 -0
  610. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
  611. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
  612. data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
  613. data/ext/cosmos/ext/telemetry/telemetry.c +307 -0
  614. data/ext/mkrf_conf.rb +40 -0
  615. data/install/Gemfile +10 -0
  616. data/install/Launcher +16 -0
  617. data/install/Launcher.bat +9 -0
  618. data/install/Rakefile +77 -0
  619. data/install/config/data/README.txt +1 -0
  620. data/install/config/data/crc.txt +160 -0
  621. data/install/config/system/system.txt +39 -0
  622. data/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +9 -0
  623. data/install/config/targets/SYSTEM/target.txt +12 -0
  624. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -0
  625. data/install/config/tools/data_viewer/data_viewer.txt +4 -0
  626. data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
  627. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
  628. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  629. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  630. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  631. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
  632. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  633. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  634. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  635. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  636. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  637. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  638. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  639. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  640. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
  641. data/install/config/tools/launcher/launcher.txt +40 -0
  642. data/install/config/tools/limits_monitor/README.txt +1 -0
  643. data/install/config/tools/opengl_builder/README.txt +1 -0
  644. data/install/config/tools/script_runner/script_runner.txt +3 -0
  645. data/install/config/tools/table_manager/README.txt +1 -0
  646. data/install/config/tools/test_runner/test_runner.txt +8 -0
  647. data/install/config/tools/tlm_extractor/README.txt +1 -0
  648. data/install/config/tools/tlm_grapher/README.txt +1 -0
  649. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
  650. data/install/lib/user_version.rb +3 -0
  651. data/install/procedures/README.txt +1 -0
  652. data/install/tools/CmdExtractor +16 -0
  653. data/install/tools/CmdExtractor.bat +9 -0
  654. data/install/tools/CmdSender +16 -0
  655. data/install/tools/CmdSender.bat +9 -0
  656. data/install/tools/CmdSequence +16 -0
  657. data/install/tools/CmdSequence.bat +9 -0
  658. data/install/tools/CmdTlmServer +16 -0
  659. data/install/tools/CmdTlmServer.bat +9 -0
  660. data/install/tools/ConfigEditor +16 -0
  661. data/install/tools/ConfigEditor.bat +9 -0
  662. data/install/tools/DataViewer +16 -0
  663. data/install/tools/DataViewer.bat +9 -0
  664. data/install/tools/HandbookCreator +16 -0
  665. data/install/tools/HandbookCreator.bat +9 -0
  666. data/install/tools/Launcher +16 -0
  667. data/install/tools/Launcher.bat +9 -0
  668. data/install/tools/LimitsMonitor +16 -0
  669. data/install/tools/LimitsMonitor.bat +9 -0
  670. data/install/tools/OpenGLBuilder +16 -0
  671. data/install/tools/OpenGLBuilder.bat +9 -0
  672. data/install/tools/PacketViewer +16 -0
  673. data/install/tools/PacketViewer.bat +9 -0
  674. data/install/tools/Replay +16 -0
  675. data/install/tools/Replay.bat +9 -0
  676. data/install/tools/ScriptRunner +16 -0
  677. data/install/tools/ScriptRunner.bat +9 -0
  678. data/install/tools/TableManager +16 -0
  679. data/install/tools/TableManager.bat +9 -0
  680. data/install/tools/TestRunner +16 -0
  681. data/install/tools/TestRunner.bat +9 -0
  682. data/install/tools/TlmExtractor +16 -0
  683. data/install/tools/TlmExtractor.bat +9 -0
  684. data/install/tools/TlmGrapher +16 -0
  685. data/install/tools/TlmGrapher.bat +9 -0
  686. data/install/tools/TlmViewer +16 -0
  687. data/install/tools/TlmViewer.bat +9 -0
  688. data/install/tools/ToolLaunch.bat +72 -0
  689. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  690. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  691. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  692. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  693. data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  694. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  695. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  696. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  697. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  698. data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  699. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  700. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  701. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  702. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  703. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  704. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  705. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  706. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  707. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  708. data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  709. data/install/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  710. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  711. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  712. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  713. data/install/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  714. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  715. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  716. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  717. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  718. data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  719. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  720. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  721. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  722. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  723. data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  724. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  725. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  726. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  727. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  728. data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  729. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  730. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  731. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  732. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  733. data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  734. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  735. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  736. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  737. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  738. data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  739. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  740. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  741. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  742. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  743. data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  744. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
  745. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  746. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  747. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  748. data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  749. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  750. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  751. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  752. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  753. data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  754. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  755. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  756. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  757. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  758. data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  759. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  760. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  761. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  762. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  763. data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  764. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  765. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  766. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  767. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  768. data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  769. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  770. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  771. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  772. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  773. data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  774. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  775. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  776. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  777. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  778. data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  779. data/install/tools/tool_launch.rb +38 -0
  780. data/lib/cosmos.rb +63 -0
  781. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
  782. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
  783. data/lib/cosmos/config/config_parser.rb +508 -0
  784. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  785. data/lib/cosmos/conversions.rb +13 -0
  786. data/lib/cosmos/conversions/conversion.rb +52 -0
  787. data/lib/cosmos/conversions/generic_conversion.rb +67 -0
  788. data/lib/cosmos/conversions/new_packet_log_conversion.rb +52 -0
  789. data/lib/cosmos/conversions/polynomial_conversion.rb +79 -0
  790. data/lib/cosmos/conversions/processor_conversion.rb +56 -0
  791. data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
  792. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
  793. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
  794. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +139 -0
  795. data/lib/cosmos/conversions/unix_time_conversion.rb +57 -0
  796. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
  797. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
  798. data/lib/cosmos/core_ext.rb +18 -0
  799. data/lib/cosmos/core_ext/array.rb +397 -0
  800. data/lib/cosmos/core_ext/class.rb +53 -0
  801. data/lib/cosmos/core_ext/cosmos_io.rb +45 -0
  802. data/lib/cosmos/core_ext/exception.rb +52 -0
  803. data/lib/cosmos/core_ext/file.rb +76 -0
  804. data/lib/cosmos/core_ext/hash.rb +28 -0
  805. data/lib/cosmos/core_ext/io.rb +93 -0
  806. data/lib/cosmos/core_ext/kernel.rb +33 -0
  807. data/lib/cosmos/core_ext/math.rb +119 -0
  808. data/lib/cosmos/core_ext/matrix.rb +149 -0
  809. data/lib/cosmos/core_ext/objectspace.rb +27 -0
  810. data/lib/cosmos/core_ext/range.rb +18 -0
  811. data/lib/cosmos/core_ext/socket.rb +32 -0
  812. data/lib/cosmos/core_ext/string.rb +351 -0
  813. data/lib/cosmos/core_ext/stringio.rb +24 -0
  814. data/lib/cosmos/core_ext/time.rb +481 -0
  815. data/lib/cosmos/ext/.keep +0 -0
  816. data/lib/cosmos/gui/choosers/combobox_chooser.rb +141 -0
  817. data/lib/cosmos/gui/choosers/file_chooser.rb +85 -0
  818. data/lib/cosmos/gui/choosers/float_chooser.rb +67 -0
  819. data/lib/cosmos/gui/choosers/integer_chooser.rb +69 -0
  820. data/lib/cosmos/gui/choosers/string_chooser.rb +35 -0
  821. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -0
  822. data/lib/cosmos/gui/choosers/value_chooser.rb +67 -0
  823. data/lib/cosmos/gui/dialogs/about_dialog.rb +166 -0
  824. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +140 -0
  825. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +51 -0
  826. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +163 -0
  827. data/lib/cosmos/gui/dialogs/details_dialog.rb +190 -0
  828. data/lib/cosmos/gui/dialogs/exception_dialog.rb +106 -0
  829. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +60 -0
  830. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +272 -0
  831. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  832. data/lib/cosmos/gui/dialogs/legal_dialog.rb +183 -0
  833. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +97 -0
  834. data/lib/cosmos/gui/dialogs/progress_dialog.rb +313 -0
  835. data/lib/cosmos/gui/dialogs/pry_dialog.rb +169 -0
  836. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +51 -0
  837. data/lib/cosmos/gui/dialogs/select_dialog.rb +59 -0
  838. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +159 -0
  839. data/lib/cosmos/gui/dialogs/splash.rb +145 -0
  840. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +201 -0
  841. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +79 -0
  842. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +108 -0
  843. data/lib/cosmos/gui/line_graph/line_graph.rb +482 -0
  844. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +36 -0
  845. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +521 -0
  846. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +112 -0
  847. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +452 -0
  848. data/lib/cosmos/gui/line_graph/line_graph_script.rb +81 -0
  849. data/lib/cosmos/gui/line_graph/lines.rb +304 -0
  850. data/lib/cosmos/gui/line_graph/overview_graph.rb +474 -0
  851. data/lib/cosmos/gui/opengl/earth_model.rb +25 -0
  852. data/lib/cosmos/gui/opengl/gl_bounds.rb +55 -0
  853. data/lib/cosmos/gui/opengl/gl_light.rb +38 -0
  854. data/lib/cosmos/gui/opengl/gl_material.rb +28 -0
  855. data/lib/cosmos/gui/opengl/gl_scene.rb +78 -0
  856. data/lib/cosmos/gui/opengl/gl_shape.rb +150 -0
  857. data/lib/cosmos/gui/opengl/gl_viewer.rb +712 -0
  858. data/lib/cosmos/gui/opengl/gl_viewport.rb +34 -0
  859. data/lib/cosmos/gui/opengl/moon_model.rb +25 -0
  860. data/lib/cosmos/gui/opengl/opengl.rb +8 -0
  861. data/lib/cosmos/gui/opengl/stl_reader.rb +210 -0
  862. data/lib/cosmos/gui/opengl/stl_shape.rb +127 -0
  863. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -0
  864. data/lib/cosmos/gui/qt.rb +841 -0
  865. data/lib/cosmos/gui/qt_tool.rb +489 -0
  866. data/lib/cosmos/gui/text/completion.rb +402 -0
  867. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
  868. data/lib/cosmos/gui/text/completion_text_edit.rb +194 -0
  869. data/lib/cosmos/gui/text/ruby_editor.rb +463 -0
  870. data/lib/cosmos/gui/utilities/analyze_log.rb +153 -0
  871. data/lib/cosmos/gui/utilities/screenshot.rb +33 -0
  872. data/lib/cosmos/gui/utilities/script_module_gui.rb +364 -0
  873. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +171 -0
  874. data/lib/cosmos/gui/widgets/packet_log_frame.rb +344 -0
  875. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -0
  876. data/lib/cosmos/interfaces.rb +21 -0
  877. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +134 -0
  878. data/lib/cosmos/interfaces/interface.rb +449 -0
  879. data/lib/cosmos/interfaces/linc_interface.rb +459 -0
  880. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  881. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  882. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +114 -0
  883. data/lib/cosmos/interfaces/protocols/length_protocol.rb +147 -0
  884. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  885. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  886. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  887. data/lib/cosmos/interfaces/protocols/template_protocol.rb +240 -0
  888. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  889. data/lib/cosmos/interfaces/serial_interface.rb +81 -0
  890. data/lib/cosmos/interfaces/simulated_target_interface.rb +140 -0
  891. data/lib/cosmos/interfaces/stream_interface.rb +64 -0
  892. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
  893. data/lib/cosmos/interfaces/tcpip_server_interface.rb +625 -0
  894. data/lib/cosmos/interfaces/udp_interface.rb +141 -0
  895. data/lib/cosmos/io/buffered_file.rb +101 -0
  896. data/lib/cosmos/io/cosmos_snmp.rb +50 -0
  897. data/lib/cosmos/io/io_multiplexer.rb +71 -0
  898. data/lib/cosmos/io/json_drb.rb +386 -0
  899. data/lib/cosmos/io/json_drb_object.rb +201 -0
  900. data/lib/cosmos/io/json_rpc.rb +365 -0
  901. data/lib/cosmos/io/posix_serial_driver.rb +147 -0
  902. data/lib/cosmos/io/raw_logger.rb +170 -0
  903. data/lib/cosmos/io/raw_logger_pair.rb +71 -0
  904. data/lib/cosmos/io/serial_driver.rb +94 -0
  905. data/lib/cosmos/io/stderr.rb +36 -0
  906. data/lib/cosmos/io/stdout.rb +36 -0
  907. data/lib/cosmos/io/udp_sockets.rb +152 -0
  908. data/lib/cosmos/io/win32_serial_driver.rb +165 -0
  909. data/lib/cosmos/packet_logs.rb +6 -0
  910. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -0
  911. data/lib/cosmos/packet_logs/packet_log_reader.rb +461 -0
  912. data/lib/cosmos/packet_logs/packet_log_writer.rb +341 -0
  913. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
  914. data/lib/cosmos/packets/binary_accessor.rb +1201 -0
  915. data/lib/cosmos/packets/commands.rb +318 -0
  916. data/lib/cosmos/packets/limits.rb +264 -0
  917. data/lib/cosmos/packets/limits_response.rb +42 -0
  918. data/lib/cosmos/packets/packet.rb +994 -0
  919. data/lib/cosmos/packets/packet_config.rb +1393 -0
  920. data/lib/cosmos/packets/packet_item.rb +585 -0
  921. data/lib/cosmos/packets/packet_item_limits.rb +140 -0
  922. data/lib/cosmos/packets/parsers/format_string_parser.rb +59 -0
  923. data/lib/cosmos/packets/parsers/limits_parser.rb +147 -0
  924. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -0
  925. data/lib/cosmos/packets/parsers/macro_parser.rb +118 -0
  926. data/lib/cosmos/packets/parsers/packet_item_parser.rb +234 -0
  927. data/lib/cosmos/packets/parsers/packet_parser.rb +131 -0
  928. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -0
  929. data/lib/cosmos/packets/parsers/state_parser.rb +119 -0
  930. data/lib/cosmos/packets/structure.rb +508 -0
  931. data/lib/cosmos/packets/structure_item.rb +292 -0
  932. data/lib/cosmos/packets/telemetry.rb +444 -0
  933. data/lib/cosmos/processors.rb +6 -0
  934. data/lib/cosmos/processors/new_packet_log_processor.rb +39 -0
  935. data/lib/cosmos/processors/processor.rb +76 -0
  936. data/lib/cosmos/processors/statistics_processor.rb +70 -0
  937. data/lib/cosmos/processors/watermark_processor.rb +49 -0
  938. data/lib/cosmos/script.rb +9 -0
  939. data/lib/cosmos/script/api_shared.rb +972 -0
  940. data/lib/cosmos/script/cmd_tlm_server.rb +138 -0
  941. data/lib/cosmos/script/commands.rb +189 -0
  942. data/lib/cosmos/script/extract.rb +139 -0
  943. data/lib/cosmos/script/limits.rb +116 -0
  944. data/lib/cosmos/script/script.rb +76 -0
  945. data/lib/cosmos/script/scripting.rb +144 -0
  946. data/lib/cosmos/script/telemetry.rb +216 -0
  947. data/lib/cosmos/script/tools.rb +97 -0
  948. data/lib/cosmos/streams/serial_stream.rb +150 -0
  949. data/lib/cosmos/streams/stream.rb +54 -0
  950. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -0
  951. data/lib/cosmos/streams/tcpip_socket_stream.rb +186 -0
  952. data/lib/cosmos/system.rb +4 -0
  953. data/lib/cosmos/system/system.rb +778 -0
  954. data/lib/cosmos/system/target.rb +228 -0
  955. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +268 -0
  956. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +78 -0
  957. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +773 -0
  958. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
  959. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  960. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  961. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  962. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1337 -0
  963. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +54 -0
  964. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +77 -0
  965. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +537 -0
  966. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +274 -0
  967. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +480 -0
  968. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +121 -0
  969. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -0
  970. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +213 -0
  971. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -0
  972. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +151 -0
  973. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +255 -0
  974. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +85 -0
  975. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +274 -0
  976. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +153 -0
  977. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +122 -0
  978. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +161 -0
  979. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -0
  980. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +134 -0
  981. data/lib/cosmos/tools/config_editor/config_editor.rb +728 -0
  982. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +690 -0
  983. data/lib/cosmos/tools/data_viewer/data_viewer.rb +633 -0
  984. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +120 -0
  985. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -0
  986. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -0
  987. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -0
  988. data/lib/cosmos/tools/launcher/launcher.rb +194 -0
  989. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -0
  990. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -0
  991. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -0
  992. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +972 -0
  993. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
  994. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
  995. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +608 -0
  996. data/lib/cosmos/tools/replay/replay.rb +517 -0
  997. data/lib/cosmos/tools/replay/replay_server.rb +91 -0
  998. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -0
  999. data/lib/cosmos/tools/script_runner/script_runner.rb +979 -0
  1000. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -0
  1001. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1838 -0
  1002. data/lib/cosmos/tools/table_manager/table.rb +61 -0
  1003. data/lib/cosmos/tools/table_manager/table_config.rb +189 -0
  1004. data/lib/cosmos/tools/table_manager/table_item.rb +58 -0
  1005. data/lib/cosmos/tools/table_manager/table_item_parser.rb +46 -0
  1006. data/lib/cosmos/tools/table_manager/table_manager.rb +1152 -0
  1007. data/lib/cosmos/tools/table_manager/table_manager_core.rb +321 -0
  1008. data/lib/cosmos/tools/table_manager/table_parser.rb +75 -0
  1009. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -0
  1010. data/lib/cosmos/tools/test_runner/test.rb +539 -0
  1011. data/lib/cosmos/tools/test_runner/test_runner.rb +1271 -0
  1012. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -0
  1013. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
  1014. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1152 -0
  1015. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +441 -0
  1016. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -0
  1017. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +92 -0
  1018. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
  1019. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -0
  1020. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
  1021. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +222 -0
  1022. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
  1023. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
  1024. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -0
  1025. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -0
  1026. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +422 -0
  1027. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -0
  1028. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -0
  1029. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +325 -0
  1030. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +191 -0
  1031. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
  1032. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
  1033. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
  1034. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +173 -0
  1035. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
  1036. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
  1037. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +209 -0
  1038. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
  1039. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
  1040. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
  1041. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -0
  1042. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +451 -0
  1043. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
  1044. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -0
  1045. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
  1046. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -0
  1047. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
  1048. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -0
  1049. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +103 -0
  1050. data/lib/cosmos/tools/tlm_viewer/screen.rb +502 -0
  1051. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +571 -0
  1052. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +293 -0
  1053. data/lib/cosmos/tools/tlm_viewer/widgets.rb +61 -0
  1054. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -0
  1055. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -0
  1056. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -0
  1057. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
  1058. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +33 -0
  1059. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +70 -0
  1060. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +77 -0
  1061. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +43 -0
  1062. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +59 -0
  1063. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +44 -0
  1064. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +54 -0
  1065. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +53 -0
  1066. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +63 -0
  1067. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +123 -0
  1068. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +38 -0
  1069. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -0
  1070. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +31 -0
  1071. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -0
  1072. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
  1073. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -0
  1074. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -0
  1075. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -0
  1076. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -0
  1077. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -0
  1078. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -0
  1079. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +57 -0
  1080. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -0
  1081. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -0
  1082. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +38 -0
  1083. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -0
  1084. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +39 -0
  1085. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -0
  1086. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +113 -0
  1087. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +116 -0
  1088. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +102 -0
  1089. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +116 -0
  1090. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +63 -0
  1091. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +58 -0
  1092. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -0
  1093. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -0
  1094. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +38 -0
  1095. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +65 -0
  1096. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +65 -0
  1097. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -0
  1098. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -0
  1099. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -0
  1100. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  1101. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -0
  1102. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -0
  1103. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -0
  1104. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -0
  1105. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +91 -0
  1106. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -0
  1107. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -0
  1108. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -0
  1109. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
  1110. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -0
  1111. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +37 -0
  1112. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -0
  1113. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +37 -0
  1114. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +36 -0
  1115. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +38 -0
  1116. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -0
  1117. data/lib/cosmos/top_level.rb +790 -0
  1118. data/lib/cosmos/utilities.rb +11 -0
  1119. data/lib/cosmos/utilities/crc.rb +268 -0
  1120. data/lib/cosmos/utilities/csv.rb +137 -0
  1121. data/lib/cosmos/utilities/logger.rb +137 -0
  1122. data/lib/cosmos/utilities/low_fragmentation_array.rb +19 -0
  1123. data/lib/cosmos/utilities/message_log.rb +79 -0
  1124. data/lib/cosmos/utilities/quaternion.rb +258 -0
  1125. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -0
  1126. data/lib/cosmos/utilities/simulated_target.rb +100 -0
  1127. data/lib/cosmos/utilities/sleeper.rb +44 -0
  1128. data/lib/cosmos/version.rb +12 -0
  1129. data/lib/cosmos/win32/excel.rb +66 -0
  1130. data/lib/cosmos/win32/win32.rb +387 -0
  1131. data/lib/cosmos/win32/win32_main.rb +325 -0
  1132. data/roodi.yml +24 -0
  1133. data/run_gui_tests.bat +44 -0
  1134. data/spec/ccsds/ccsds_packet_spec.rb +67 -0
  1135. data/spec/ccsds/ccsds_parser_spec.rb +148 -0
  1136. data/spec/config/config_parser_spec.rb +353 -0
  1137. data/spec/conversions/conversion_spec.rb +31 -0
  1138. data/spec/conversions/generic_conversion_spec.rb +45 -0
  1139. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
  1140. data/spec/conversions/polynomial_conversion_spec.rb +40 -0
  1141. data/spec/conversions/processor_conversion_spec.rb +45 -0
  1142. data/spec/conversions/received_count_conversion_spec.rb +43 -0
  1143. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
  1144. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
  1145. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
  1146. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
  1147. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
  1148. data/spec/core_ext/array_spec.rb +247 -0
  1149. data/spec/core_ext/class_spec.rb +36 -0
  1150. data/spec/core_ext/cosmos_io_spec.rb +77 -0
  1151. data/spec/core_ext/exception_spec.rb +91 -0
  1152. data/spec/core_ext/file_spec.rb +72 -0
  1153. data/spec/core_ext/hash_spec.rb +24 -0
  1154. data/spec/core_ext/io_spec.rb +46 -0
  1155. data/spec/core_ext/kernel_spec.rb +54 -0
  1156. data/spec/core_ext/math_spec.rb +116 -0
  1157. data/spec/core_ext/matrix_spec.rb +127 -0
  1158. data/spec/core_ext/objectspace_spec.rb +32 -0
  1159. data/spec/core_ext/range_spec.rb +21 -0
  1160. data/spec/core_ext/socket_spec.rb +32 -0
  1161. data/spec/core_ext/string_spec.rb +239 -0
  1162. data/spec/core_ext/stringio_spec.rb +21 -0
  1163. data/spec/core_ext/time_spec.rb +220 -0
  1164. data/spec/gui/line_graph/line_clip_spec.rb +324 -0
  1165. data/spec/gui/qt_spec.rb +104 -0
  1166. data/spec/install/config/system/system.txt +27 -0
  1167. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
  1168. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -0
  1169. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
  1170. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
  1171. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
  1172. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -0
  1173. data/spec/install/config/targets/INST/target.txt +10 -0
  1174. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  1175. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  1176. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  1177. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  1178. data/spec/install/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  1179. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  1180. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  1181. data/spec/install/lib/README.txt +1 -0
  1182. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +146 -0
  1183. data/spec/interfaces/interface_spec.rb +514 -0
  1184. data/spec/interfaces/linc_interface_spec.rb +248 -0
  1185. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  1186. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  1187. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  1188. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  1189. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  1190. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  1191. data/spec/interfaces/protocols/template_protocol_spec.rb +322 -0
  1192. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  1193. data/spec/interfaces/serial_interface_spec.rb +57 -0
  1194. data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
  1195. data/spec/interfaces/tcpip_client_interface_spec.rb +60 -0
  1196. data/spec/interfaces/tcpip_server_interface_spec.rb +157 -0
  1197. data/spec/interfaces/udp_interface_spec.rb +246 -0
  1198. data/spec/io/buffered_file_spec.rb +113 -0
  1199. data/spec/io/io_multiplexer_spec.rb +102 -0
  1200. data/spec/io/json_drb_object_spec.rb +119 -0
  1201. data/spec/io/json_drb_spec.rb +297 -0
  1202. data/spec/io/json_rpc_spec.rb +264 -0
  1203. data/spec/io/raw_logger_pair_spec.rb +76 -0
  1204. data/spec/io/raw_logger_spec.rb +137 -0
  1205. data/spec/io/serial_driver_spec.rb +62 -0
  1206. data/spec/io/stderr_spec.rb +32 -0
  1207. data/spec/io/stdout_spec.rb +32 -0
  1208. data/spec/io/udp_sockets_spec.rb +99 -0
  1209. data/spec/io/win32_serial_driver_spec.rb +91 -0
  1210. data/spec/packet_logs/packet_log_reader_spec.rb +553 -0
  1211. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
  1212. data/spec/packet_logs/packet_log_writer_spec.rb +227 -0
  1213. data/spec/packets/binary_accessor_spec.rb +2326 -0
  1214. data/spec/packets/commands_spec.rb +379 -0
  1215. data/spec/packets/limits_response_spec.rb +25 -0
  1216. data/spec/packets/limits_spec.rb +344 -0
  1217. data/spec/packets/packet_config_spec.rb +960 -0
  1218. data/spec/packets/packet_item_limits_spec.rb +188 -0
  1219. data/spec/packets/packet_item_spec.rb +386 -0
  1220. data/spec/packets/packet_spec.rb +1456 -0
  1221. data/spec/packets/parsers/format_string_parser_spec.rb +133 -0
  1222. data/spec/packets/parsers/limits_parser_spec.rb +293 -0
  1223. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -0
  1224. data/spec/packets/parsers/macro_parser_spec.rb +220 -0
  1225. data/spec/packets/parsers/packet_item_parser_spec.rb +366 -0
  1226. data/spec/packets/parsers/packet_parser_spec.rb +99 -0
  1227. data/spec/packets/parsers/processor_parser_spec.rb +114 -0
  1228. data/spec/packets/parsers/state_parser_spec.rb +189 -0
  1229. data/spec/packets/structure_item_spec.rb +213 -0
  1230. data/spec/packets/structure_spec.rb +565 -0
  1231. data/spec/packets/telemetry_spec.rb +578 -0
  1232. data/spec/processors/new_packet_log_processor_spec.rb +39 -0
  1233. data/spec/processors/processor_spec.rb +55 -0
  1234. data/spec/processors/statistics_processor_spec.rb +60 -0
  1235. data/spec/processors/watermark_processor_spec.rb +51 -0
  1236. data/spec/script/cmd_tlm_server_spec.rb +176 -0
  1237. data/spec/script/commands_disconnect_spec.rb +270 -0
  1238. data/spec/script/commands_spec.rb +303 -0
  1239. data/spec/script/extract_spec.rb +158 -0
  1240. data/spec/script/limits_spec.rb +153 -0
  1241. data/spec/script/script_spec.rb +90 -0
  1242. data/spec/script/scripting_spec.rb +745 -0
  1243. data/spec/script/telemetry_spec.rb +176 -0
  1244. data/spec/script/tools_spec.rb +134 -0
  1245. data/spec/spec_helper.rb +225 -0
  1246. data/spec/streams/serial_stream_spec.rb +122 -0
  1247. data/spec/streams/stream_spec.rb +30 -0
  1248. data/spec/streams/tcpip_client_stream_spec.rb +65 -0
  1249. data/spec/streams/tcpip_socket_stream_spec.rb +226 -0
  1250. data/spec/system/system_spec.rb +891 -0
  1251. data/spec/system/target_spec.rb +304 -0
  1252. data/spec/tools/cmd_tlm_server/api_spec.rb +1123 -0
  1253. data/spec/tools/cmd_tlm_server/background_task_spec.rb +44 -0
  1254. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +227 -0
  1255. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +610 -0
  1256. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +431 -0
  1257. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -0
  1258. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -0
  1259. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +401 -0
  1260. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -0
  1261. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  1262. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -0
  1263. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +191 -0
  1264. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -0
  1265. data/spec/tools/launcher/launcher_config_spec.rb +474 -0
  1266. data/spec/tools/table_manager/table_config_spec.rb +226 -0
  1267. data/spec/tools/table_manager/table_item_parser_spec.rb +61 -0
  1268. data/spec/tools/table_manager/table_item_spec.rb +57 -0
  1269. data/spec/tools/table_manager/table_parser_spec.rb +96 -0
  1270. data/spec/tools/table_manager/table_spec.rb +90 -0
  1271. data/spec/tools/table_manager/tablemanager_core_spec.rb +556 -0
  1272. data/spec/top_level/top_level_spec.rb +373 -0
  1273. data/spec/utilities/crc_spec.rb +45 -0
  1274. data/spec/utilities/csv_spec.rb +139 -0
  1275. data/spec/utilities/logger_spec.rb +102 -0
  1276. data/spec/utilities/message_log_spec.rb +89 -0
  1277. data/spec/utilities/quaternion_spec.rb +107 -0
  1278. data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
  1279. data/tasks/gemfile_stats.rake +79 -0
  1280. data/tasks/manifest.rake +22 -0
  1281. data/tasks/spec.rake +23 -0
  1282. data/test/benchmarks/binary_accessor_benchmark.rb +14 -0
  1283. data/test/benchmarks/gsub_benchmark.rb +152 -0
  1284. data/test/benchmarks/is_a_benchmark.rb +34 -0
  1285. data/test/performance/PACKETS.bat +1 -0
  1286. data/test/performance/Rakefile +77 -0
  1287. data/test/performance/THREADS.bat +1 -0
  1288. data/test/performance/config/data/attitude.bin +0 -0
  1289. data/test/performance/config/data/crc.txt +196 -0
  1290. data/test/performance/config/data/diamond.STL +58 -0
  1291. data/test/performance/config/data/groundoff.gif +0 -0
  1292. data/test/performance/config/data/groundon.gif +0 -0
  1293. data/test/performance/config/data/hselectoff.gif +0 -0
  1294. data/test/performance/config/data/hselecton.gif +0 -0
  1295. data/test/performance/config/data/hswitchoff.gif +0 -0
  1296. data/test/performance/config/data/hswitchon.gif +0 -0
  1297. data/test/performance/config/data/meta_init.txt +4 -0
  1298. data/test/performance/config/data/position.bin +0 -0
  1299. data/test/performance/config/data/poweroff.gif +0 -0
  1300. data/test/performance/config/data/poweron.gif +0 -0
  1301. data/test/performance/config/data/satellite.gif +0 -0
  1302. data/test/performance/config/data/tada.wav +0 -0
  1303. data/test/performance/config/data/vswitchoff.gif +0 -0
  1304. data/test/performance/config/data/vswitchon.gif +0 -0
  1305. data/test/performance/config/system/system_packets.txt +38 -0
  1306. data/test/performance/config/system/system_threads.txt +58 -0
  1307. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -0
  1308. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  1309. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  1310. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -0
  1311. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -0
  1312. data/test/performance/config/targets/COSMOS/target.txt +11 -0
  1313. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
  1314. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
  1315. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -0
  1316. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
  1317. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
  1318. data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
  1319. data/test/performance/config/targets/PACKET/target.txt +28 -0
  1320. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -0
  1321. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -0
  1322. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -0
  1323. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
  1324. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -0
  1325. data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
  1326. data/test/performance/config/targets/THREAD/target.txt +7 -0
  1327. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -0
  1328. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -0
  1329. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -0
  1330. data/test/performance/config/tools/handbook_creator/default_toc.xsl +59 -0
  1331. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -0
  1332. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  1333. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  1334. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  1335. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -0
  1336. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  1337. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  1338. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  1339. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  1340. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  1341. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  1342. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  1343. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  1344. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -0
  1345. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -0
  1346. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -0
  1347. data/test/performance/config/tools/limits_monitor/README.txt +1 -0
  1348. data/test/performance/config/tools/opengl_builder/README.txt +1 -0
  1349. data/test/performance/config/tools/script_runner/script_runner.txt +3 -0
  1350. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -0
  1351. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  1352. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
  1353. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
  1354. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
  1355. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
  1356. data/test/performance/config/tools/test_runner/test_runner.txt +17 -0
  1357. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  1358. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  1359. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  1360. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  1361. data/test/performance/config/tools/tlm_grapher/README.txt +1 -0
  1362. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
  1363. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -0
  1364. data/test/performance/lib/packet_target.rb +126 -0
  1365. data/test/performance/lib/thread_target.rb +120 -0
  1366. data/test/performance/lib/user_version.rb +3 -0
  1367. data/test/performance/outputs/handbooks/README.txt +1 -0
  1368. data/test/performance/outputs/logs/README.txt +1 -0
  1369. data/test/performance/outputs/saved_config/README.txt +1 -0
  1370. data/test/performance/outputs/tables/README.txt +1 -0
  1371. data/test/performance/outputs/tmp/README.txt +1 -0
  1372. data/test/performance/procedures/checks.rb +11 -0
  1373. data/test/performance/procedures/clear_util.rb +7 -0
  1374. data/test/performance/procedures/collect.rb +18 -0
  1375. data/test/performance/procedures/collect_util.rb +14 -0
  1376. data/test/performance/procedures/cosmos_api_test.rb +293 -0
  1377. data/test/performance/procedures/disconnect.rb +29 -0
  1378. data/test/performance/procedures/example_test.rb +182 -0
  1379. data/test/performance/procedures/plot_test.rb +8 -0
  1380. data/test/performance/procedures/procedure.rb +3 -0
  1381. data/test/performance/procedures/run_example_test.rb +3 -0
  1382. data/test/performance/procedures/test.rb +51 -0
  1383. data/test/performance/tools/CmdExtractor +14 -0
  1384. data/test/performance/tools/CmdExtractor.bat +59 -0
  1385. data/test/performance/tools/CmdSender +14 -0
  1386. data/test/performance/tools/CmdSender.bat +59 -0
  1387. data/test/performance/tools/CmdTlmServer +16 -0
  1388. data/test/performance/tools/CmdTlmServer.bat +59 -0
  1389. data/test/performance/tools/CmdTlmServerMemProf +20 -0
  1390. data/test/performance/tools/CmdTlmServerMemProf.bat +59 -0
  1391. data/test/performance/tools/DataViewer +14 -0
  1392. data/test/performance/tools/DataViewer.bat +59 -0
  1393. data/test/performance/tools/HandbookCreator +14 -0
  1394. data/test/performance/tools/HandbookCreator.bat +61 -0
  1395. data/test/performance/tools/Launcher +14 -0
  1396. data/test/performance/tools/Launcher.bat +59 -0
  1397. data/test/performance/tools/LimitsMonitor +14 -0
  1398. data/test/performance/tools/LimitsMonitor.bat +59 -0
  1399. data/test/performance/tools/OpenGLBuilder +14 -0
  1400. data/test/performance/tools/OpenGLBuilder.bat +59 -0
  1401. data/test/performance/tools/PacketTarget +14 -0
  1402. data/test/performance/tools/PacketTarget.bat +59 -0
  1403. data/test/performance/tools/PacketViewer +14 -0
  1404. data/test/performance/tools/PacketViewer.bat +59 -0
  1405. data/test/performance/tools/Replay +14 -0
  1406. data/test/performance/tools/Replay.bat +59 -0
  1407. data/test/performance/tools/ScpiTarget +14 -0
  1408. data/test/performance/tools/ScpiTarget.bat +59 -0
  1409. data/test/performance/tools/ScriptRunner +14 -0
  1410. data/test/performance/tools/ScriptRunner.bat +59 -0
  1411. data/test/performance/tools/TableManager +14 -0
  1412. data/test/performance/tools/TableManager.bat +59 -0
  1413. data/test/performance/tools/TestRunner +14 -0
  1414. data/test/performance/tools/TestRunner.bat +59 -0
  1415. data/test/performance/tools/ThreadTarget +14 -0
  1416. data/test/performance/tools/ThreadTarget.bat +59 -0
  1417. data/test/performance/tools/TlmExtractor +14 -0
  1418. data/test/performance/tools/TlmExtractor.bat +59 -0
  1419. data/test/performance/tools/TlmGrapher +14 -0
  1420. data/test/performance/tools/TlmGrapher.bat +59 -0
  1421. data/test/performance/tools/TlmGrapherMemProf +19 -0
  1422. data/test/performance/tools/TlmGrapherMemProf.bat +59 -0
  1423. data/test/performance/tools/TlmViewer +14 -0
  1424. data/test/performance/tools/TlmViewer.bat +59 -0
  1425. data/test/performance/tools/TlmViewerMemProf +19 -0
  1426. data/test/performance/tools/TlmViewerMemProf.bat +59 -0
  1427. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  1428. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  1429. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  1430. data/test/performance/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1431. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  1432. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  1433. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  1434. data/test/performance/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  1435. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  1436. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  1437. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  1438. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  1439. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  1440. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  1441. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  1442. data/test/performance/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  1443. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  1444. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  1445. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  1446. data/test/performance/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  1447. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  1448. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  1449. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  1450. data/test/performance/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  1451. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  1452. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  1453. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  1454. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  1455. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  1456. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  1457. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  1458. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  1459. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  1460. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  1461. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  1462. data/test/performance/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  1463. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -0
  1464. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  1465. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  1466. data/test/performance/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  1467. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  1468. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  1469. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  1470. data/test/performance/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  1471. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  1472. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  1473. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  1474. data/test/performance/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  1475. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  1476. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  1477. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  1478. data/test/performance/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  1479. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  1480. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  1481. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  1482. data/test/performance/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1483. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  1484. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  1485. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  1486. data/test/performance/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  1487. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  1488. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  1489. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  1490. data/test/performance/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  1491. metadata +1964 -0
@@ -0,0 +1,122 @@
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/streams/serial_stream'
13
+
14
+ module Cosmos
15
+
16
+ if RUBY_ENGINE == 'ruby' or Gem.win_platform?
17
+
18
+ describe SerialStream do
19
+ describe "initialize" do
20
+ it "complains if neither a read or write port given" do
21
+ expect { SerialStream.new(nil,nil,9600,:EVEN,1,nil,nil) }.to raise_error("Either a write port or read port must be given")
22
+ end
23
+ end
24
+
25
+ describe "connected?" do
26
+ it "is connected when initialized" do
27
+ driver = double("driver")
28
+ expect(SerialDriver).to receive(:new).and_return(driver)
29
+ ss = SerialStream.new('COM1',nil,9600,:EVEN,1,nil,nil)
30
+ expect(ss.connected?).to be true
31
+ end
32
+ end
33
+
34
+ describe "read" do
35
+ it "raises an error if no read port given" do
36
+ driver = double("driver")
37
+ expect(SerialDriver).to receive(:new).and_return(driver)
38
+ ss = SerialStream.new('COM1',nil,9600,:EVEN,1,nil,nil)
39
+ expect { ss.read }.to raise_error("Attempt to read from write only stream")
40
+ end
41
+
42
+ it "calls read from the driver" do
43
+ driver = double("driver")
44
+ expect(driver).to receive(:read).and_return 'test'
45
+ expect(SerialDriver).to receive(:new).and_return(driver)
46
+ ss = SerialStream.new('COM1','COM1',9600,:EVEN,1,nil,nil)
47
+ expect(ss.read).to eql 'test'
48
+ end
49
+ end
50
+
51
+ describe "write" do
52
+ it "raises an error if no write port given" do
53
+ driver = double("driver")
54
+ expect(SerialDriver).to receive(:new).and_return(driver)
55
+ ss = SerialStream.new(nil,'COM1',9600,:EVEN,1,nil,nil)
56
+ expect { ss.write('') }.to raise_error("Attempt to write to read only stream")
57
+ end
58
+
59
+ it "calls write from the driver" do
60
+ driver = double("driver")
61
+ expect(driver).to receive(:write).with('test')
62
+ expect(SerialDriver).to receive(:new).and_return(driver)
63
+ ss = SerialStream.new('COM1','COM1',9600,:EVEN,1,nil,nil)
64
+ ss.write('test')
65
+ end
66
+ end
67
+
68
+ describe "disconnect" do
69
+ it "closes the write driver" do
70
+ driver = double("driver")
71
+ expect(driver).to receive(:closed?).and_return(false)
72
+ expect(driver).to receive(:close)
73
+ expect(SerialDriver).to receive(:new).and_return(driver)
74
+ ss = SerialStream.new('COM1',nil,9600,:EVEN,1,nil,nil)
75
+ expect(ss.connected?).to be true
76
+ ss.disconnect
77
+ expect(ss.connected?).to be false
78
+ end
79
+
80
+ it "closes the read driver" do
81
+ driver = double("driver")
82
+ expect(driver).to receive(:closed?).and_return(false)
83
+ expect(driver).to receive(:close)
84
+ expect(SerialDriver).to receive(:new).and_return(driver)
85
+ ss = SerialStream.new(nil,'COM1',9600,:EVEN,1,nil,nil)
86
+ expect(ss.connected?).to be true
87
+ ss.disconnect
88
+ expect(ss.connected?).to be false
89
+ end
90
+
91
+ it "does not close the driver twice" do
92
+ driver = double("driver")
93
+ expect(driver).to receive(:closed?).and_return(false, true)
94
+ expect(driver).to receive(:close).once
95
+ expect(SerialDriver).to receive(:new).and_return(driver)
96
+ ss = SerialStream.new('COM1','COM1',9600,:EVEN,1,nil,nil)
97
+ expect(ss.connected?).to be true
98
+ ss.disconnect
99
+ expect(ss.connected?).to be false
100
+ ss.disconnect
101
+ expect(ss.connected?).to be false
102
+ end
103
+ end
104
+
105
+ describe "connect" do
106
+ it "supports a connect method that does nothing" do
107
+ driver = double("driver")
108
+ expect(driver).to receive(:closed?).and_return(false)
109
+ expect(driver).to receive(:close).once
110
+ expect(SerialDriver).to receive(:new).and_return(driver)
111
+ ss = SerialStream.new(nil,'COM1',9600,:EVEN,1,nil,nil)
112
+ expect{ss.connect}.to_not raise_error
113
+ ss.disconnect
114
+ end
115
+ end
116
+
117
+ end
118
+
119
+ end
120
+
121
+ end
122
+
@@ -0,0 +1,30 @@
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/streams/stream'
13
+
14
+ module Cosmos
15
+
16
+ describe Stream do
17
+
18
+ describe "read, write, connected?, disconnect" do
19
+ it "raises an error" do
20
+ expect { Stream.new.read }.to raise_error(/not defined/)
21
+ expect { Stream.new.write(nil) }.to raise_error(/not defined/)
22
+ expect { Stream.new.connect }.to raise_error(/not defined/)
23
+ expect { Stream.new.connected? }.to raise_error(/not defined/)
24
+ expect { Stream.new.disconnect }.to raise_error(/not defined/)
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+
@@ -0,0 +1,65 @@
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/streams/tcpip_client_stream'
13
+
14
+ module Cosmos
15
+
16
+ describe TcpipClientStream do
17
+ before(:all) do
18
+ addr = Socket.pack_sockaddr_in(8888, "0.0.0.0")
19
+ if RUBY_ENGINE == 'ruby'
20
+ @listen_socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
21
+ else
22
+ @listen_socket = ServerSocket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
23
+ end
24
+ @listen_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1) unless Kernel.is_windows?
25
+ if RUBY_ENGINE == 'ruby'
26
+ @listen_socket.bind(addr)
27
+ @listen_socket.listen(5)
28
+ else
29
+ @listen_socket.bind(addr, 5)
30
+ end
31
+ end
32
+
33
+ after(:all) do
34
+ @listen_socket.close
35
+ end
36
+
37
+ describe "initialize" do
38
+ it "complains if the host is bad" do
39
+ expect { TcpipClientStream.new('asdf',8888,8888,nil,nil) }.to raise_error(/Invalid hostname/)
40
+ end
41
+
42
+ it "uses the same socket if read_port == write_port" do
43
+ ss = TcpipClientStream.new('localhost',8888,8888,nil,nil)
44
+ ss.connect
45
+ expect(ss.connected?).to be true
46
+ ss.disconnect
47
+ end
48
+
49
+ it "creates the write socket" do
50
+ ss = TcpipClientStream.new('localhost',8888,nil,nil,nil)
51
+ ss.connect
52
+ expect(ss.connected?).to be true
53
+ ss.disconnect
54
+ end
55
+
56
+ it "creates the read socket" do
57
+ ss = TcpipClientStream.new('localhost',nil,8888,nil,nil)
58
+ ss.connect
59
+ expect(ss.connected?).to be true
60
+ ss.disconnect
61
+ end
62
+ end
63
+ end
64
+ end
65
+
@@ -0,0 +1,226 @@
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/streams/tcpip_socket_stream'
13
+ require 'socket'
14
+
15
+ module Cosmos
16
+
17
+ if RUBY_ENGINE == 'ruby' # For some reason this test causes uncatchable exceptions in Jruby when run with other tests - Skip for now
18
+
19
+ describe TcpipSocketStream do
20
+ describe "initialize, connected?" do
21
+ it "is not be connected when initialized" do
22
+ ss = TcpipSocketStream.new(nil,nil,nil,nil)
23
+ expect(ss.connected?).to be false
24
+ end
25
+ end
26
+
27
+ # This test takes time and doesn't actually assert any functionality
28
+ # It was created to verify the changes to socket reads in PR#181.
29
+ #describe "read benchmark" do
30
+ # it "determines how fast the read is" do
31
+ # server = TCPServer.new(2000) # Server bound to port 2000
32
+ # thread = Thread.new do
33
+ # client = server.accept # Wait for a client to connect
34
+ # i = 0
35
+ # 100000.times do
36
+ # client.write "test"
37
+ # i += 1
38
+ # sleep 0.001 if i % 100 == 1
39
+ # end
40
+ # client.close
41
+ # end
42
+ # socket = TCPSocket.new('localhost', 2000)
43
+ # ss = TcpipSocketStream.new(nil,socket,nil,nil)
44
+ # bytes = 0
45
+ # while bytes < 400000
46
+ # bytes += ss.read.length
47
+ # end
48
+ # Cosmos.close_socket(socket)
49
+ # Cosmos.close_socket(server)
50
+ # thread.kill
51
+ # sleep 0.1
52
+ # end
53
+ #end
54
+
55
+ describe "read" do
56
+ it "raises an error if no read socket given" do
57
+ ss = TcpipSocketStream.new('write',nil,nil,nil)
58
+ ss.connect
59
+ expect { ss.read }.to raise_error("Attempt to read from write only stream")
60
+ end
61
+
62
+ it "calls read_nonblock from the socket" do
63
+ server = TCPServer.new(2000) # Server bound to port 2000
64
+ thread = Thread.new do
65
+ loop do
66
+ client = server.accept # Wait for a client to connect
67
+ sleep 0.1
68
+ client.write "test"
69
+ client.close
70
+ end
71
+ end
72
+ socket = TCPSocket.new('localhost', 2000)
73
+ ss = TcpipSocketStream.new(nil,socket,nil,nil)
74
+ expect(ss.read_nonblock).to eql ''
75
+ sleep 0.2
76
+ expect(ss.read_nonblock).to eql 'test'
77
+ Cosmos.close_socket(socket)
78
+ Cosmos.close_socket(server)
79
+ thread.kill
80
+ sleep 0.1
81
+ end
82
+
83
+ it "handles socket blocking exceptions" do
84
+ server = TCPServer.new(2000) # Server bound to port 2000
85
+ thread = Thread.new do
86
+ loop do
87
+ client = server.accept # Wait for a client to connect
88
+ sleep 0.2
89
+ client.write "test"
90
+ client.close
91
+ end
92
+ end
93
+ socket = TCPSocket.new('localhost', 2000)
94
+ ss = TcpipSocketStream.new(nil,socket,nil,nil)
95
+ expect(ss.read).to eql 'test'
96
+ Cosmos.close_socket(socket)
97
+ Cosmos.close_socket(server)
98
+ thread.kill
99
+ sleep 0.1
100
+ end
101
+
102
+ it "handles socket timeouts" do
103
+ server = TCPServer.new(2000) # Server bound to port 2000
104
+ thread = Thread.new do
105
+ loop do
106
+ client = server.accept # Wait for a client to connect
107
+ sleep 0.2
108
+ client.close
109
+ end
110
+ end
111
+ socket = TCPSocket.new('localhost', 2000)
112
+ ss = TcpipSocketStream.new(nil,socket,nil,0.1)
113
+ expect { ss.read }.to raise_error(Timeout::Error)
114
+ sleep 0.2
115
+ Cosmos.close_socket(socket)
116
+ Cosmos.close_socket(server)
117
+ thread.kill
118
+ sleep 0.1
119
+ end
120
+
121
+ it "handles socket connection reset exceptions" do
122
+ server = TCPServer.new(2000) # Server bound to port 2000
123
+ thread = Thread.new do
124
+ loop do
125
+ client = server.accept # Wait for a client to connect
126
+ client.close
127
+ end
128
+ end
129
+ socket = TCPSocket.new('localhost', 2000)
130
+ ss = TcpipSocketStream.new(nil,socket,nil,5)
131
+ # Close the socket before trying to read from it
132
+ Cosmos.close_socket(socket)
133
+ expect(ss.read).to eql ''
134
+ Cosmos.close_socket(server)
135
+ thread.kill
136
+ sleep 0.1
137
+ end
138
+ end
139
+
140
+ describe "write" do
141
+ it "raises an error if no write port given" do
142
+ ss = TcpipSocketStream.new(nil,'read',nil,nil)
143
+ ss.connect
144
+ expect { ss.write('test') }.to raise_error("Attempt to write to read only stream")
145
+ end
146
+
147
+ it "calls write from the driver" do
148
+ write = double("write_socket")
149
+ # Simulate only writing two bytes at a time
150
+ expect(write).to receive(:write_nonblock).twice.and_return(2)
151
+ ss = TcpipSocketStream.new(write,nil,nil,nil)
152
+ ss.connect
153
+ ss.write('test')
154
+ end
155
+
156
+ it "handles socket blocking exceptions" do
157
+ write = double("write_socket")
158
+ allow(write).to receive(:write_nonblock) do
159
+ case $index
160
+ when 1
161
+ $index += 1
162
+ raise Errno::EWOULDBLOCK
163
+ when 2
164
+ 4
165
+ end
166
+ end
167
+ expect(IO).to receive(:select).at_least(:once).and_return([])
168
+ $index = 1
169
+ ss = TcpipSocketStream.new(write,nil,nil,nil)
170
+ ss.connect
171
+ ss.write('test')
172
+ end
173
+
174
+ it "handles socket timeouts" do
175
+ write = double("write_socket")
176
+ allow(write).to receive(:write_nonblock).and_raise(Errno::EWOULDBLOCK)
177
+ expect(IO).to receive(:select).at_least(:once).and_return(nil)
178
+ ss = TcpipSocketStream.new(write,nil,nil,nil)
179
+ ss.connect
180
+ expect { ss.write('test') }.to raise_error(Timeout::Error)
181
+ end
182
+ end
183
+
184
+ describe "disconnect" do
185
+ it "closes the write socket" do
186
+ write = double("write_socket")
187
+ expect(write).to receive(:closed?).and_return(false)
188
+ expect(write).to receive(:close)
189
+ ss = TcpipSocketStream.new(write,nil,nil,nil)
190
+ ss.connect
191
+ expect(ss.connected?).to be true
192
+ ss.disconnect
193
+ expect(ss.connected?).to be false
194
+ end
195
+
196
+ it "closes the read socket" do
197
+ read = double("read_socket")
198
+ expect(read).to receive(:closed?).and_return(false)
199
+ expect(read).to receive(:close)
200
+ ss = TcpipSocketStream.new(nil,read,nil,nil)
201
+ ss.connect
202
+ expect(ss.connected?).to be true
203
+ ss.disconnect
204
+ expect(ss.connected?).to be false
205
+ end
206
+
207
+ it "does not close the socket twice" do
208
+ socket = double("socket")
209
+ expect(socket).to receive(:closed?).and_return(false, true, true, true)
210
+ expect(socket).to receive(:close).once
211
+ ss = TcpipSocketStream.new(socket,socket,nil,nil)
212
+ ss.connect
213
+ expect(ss.connected?).to be true
214
+ ss.disconnect
215
+ expect(ss.connected?).to be false
216
+ ss.disconnect
217
+ expect(ss.connected?).to be false
218
+ end
219
+ end
220
+
221
+ end
222
+
223
+ end # TEMP for Jruby
224
+
225
+ end
226
+
@@ -0,0 +1,891 @@
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
+ require 'fileutils'
16
+
17
+ module Cosmos
18
+
19
+ describe System do
20
+ before(:all) do
21
+ clean_config()
22
+ System.class_eval('@@instance = nil')
23
+
24
+ # Save system.txt
25
+ @config_file = File.join(Cosmos::USERPATH,'config','system','system.txt')
26
+ FileUtils.mv @config_file, Cosmos::USERPATH
27
+
28
+ # Create a dummy system.txt
29
+ File.open(@config_file,'w') {|file| file.puts "# This is a comment" }
30
+ @config_targets = File.join(Cosmos::USERPATH,'config','targets')
31
+ end
32
+
33
+ after(:all) do
34
+ # Restore system.txt
35
+ FileUtils.mv File.join(Cosmos::USERPATH, 'system.txt'),
36
+ File.join(Cosmos::USERPATH,'config','system')
37
+ end
38
+
39
+ after(:each) do
40
+ clean_config()
41
+ System.class_eval('@@instance = nil')
42
+ end
43
+
44
+ describe "instance" do
45
+ it "creates default ports" do
46
+ # Don't check the actual port numbers but just that they exist
47
+ expect(System.ports.keys).to eql %w(CTS_API TLMVIEWER_API CTS_PREIDENTIFIED CTS_CMD_ROUTER)
48
+ end
49
+
50
+ it "creates default paths" do
51
+ # Don't check the actual paths but just that they exist
52
+ expect(System.paths.keys).to eql %w(LOGS TMP SAVED_CONFIG TABLES HANDBOOKS PROCEDURES SEQUENCES)
53
+ end
54
+
55
+ context "initializing SYSTEM META" do
56
+ before(:all) do
57
+ FileUtils.mv(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), Dir.pwd)
58
+ end
59
+ after(:all) do
60
+ FileUtils.mv(File.join(Dir.pwd, 'meta_tlm.txt'), File.join(@config_targets, 'SYSTEM', 'cmd_tlm'))
61
+ end
62
+
63
+ it "initializes the SYSTEM META with no definitions" do
64
+ tlm = System.telemetry.packet("SYSTEM", "META")
65
+ expect(tlm.read("PKTID")).to_not be_nil
66
+ expect(tlm.read("CONFIG")).to_not be_nil
67
+ expect(tlm.read("COSMOS_VERSION")).to_not be_nil
68
+ expect(tlm.read("RUBY_VERSION")).to_not be_nil
69
+ expect(tlm.read("USER_VERSION")).to_not be_nil
70
+ cmd = System.commands.packet("SYSTEM", "META")
71
+ expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
72
+ expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
73
+ expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
74
+ expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
75
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
76
+ end
77
+
78
+ it "defaults badly defined TELEMETRY SYSTEM META" do
79
+ file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), 'w')
80
+ file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
81
+ file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
82
+ file.puts "APPEND_ITEM CONFIG 256 STRING"
83
+ file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
84
+ file.puts "APPEND_ITEM USER_VERSION 240 STRING"
85
+ file.puts "APPEND_ITEM RUBY_VERSION 200 STRING" # Error in the RUBY_VERSION length
86
+ file.close
87
+
88
+ expect(Logger).to receive(:error) do |msg|
89
+ expect(msg).to eql "SYSTEM META not defined correctly due to RUBY_VERSION incorrect - defaulting"
90
+ end
91
+ tf = Tempfile.new('unittest')
92
+ tf.puts("AUTO_DECLARE_TARGETS")
93
+ tf.close
94
+ System.class_variable_set(:@@instance, nil)
95
+ System.new(tf.path)
96
+ tlm = System.telemetry.packet("SYSTEM", "META")
97
+ expect(tlm.read("PKTID")).to_not be_nil
98
+ expect(tlm.read("CONFIG")).to_not be_nil
99
+ expect(tlm.read("COSMOS_VERSION")).to_not be_nil
100
+ expect(tlm.get_item("COSMOS_VERSION").bit_size).to eql(240)
101
+ expect(tlm.read("RUBY_VERSION")).to_not be_nil
102
+ expect(tlm.read("USER_VERSION")).to_not be_nil
103
+ cmd = System.commands.packet("SYSTEM", "META")
104
+ expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
105
+ expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
106
+ expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
107
+ expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
108
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
109
+ tf.unlink
110
+ end
111
+
112
+ it "doesn't allow COMMAND SYSTEM META definitions" do
113
+ file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), 'w')
114
+ file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
115
+ file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
116
+ file.puts "APPEND_ITEM CONFIG 256 STRING"
117
+ file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
118
+ file.puts "APPEND_ITEM USER_VERSION 240 STRING"
119
+ file.puts "APPEND_ITEM RUBY_VERSION 240 STRING"
120
+ file.puts "APPEND_ITEM TEST 512 STRING ''"
121
+ # The command system meta definition is correct but not allowed
122
+ file.puts "COMMAND SYSTEM META BIG_ENDIAN"
123
+ file.puts "APPEND_ID_PARAMETER PKTID 8 UINT 1 1 1"
124
+ file.puts "APPEND_PARAMETER CONFIG 256 STRING ''"
125
+ file.puts "APPEND_PARAMETER COSMOS_VERSION 240 STRING ''"
126
+ file.puts "APPEND_PARAMETER USER_VERSION 240 STRING ''"
127
+ file.puts "APPEND_PARAMETER RUBY_VERSION 240 STRING ''"
128
+ file.puts "APPEND_PARAMETER TEST 512 STRING ''"
129
+ file.close
130
+
131
+ expect(Logger).to receive(:error) do |msg|
132
+ expect(msg).to eql "SYSTEM META not defined correctly due to COMMAND SYSTEM META defined - defaulting"
133
+ end
134
+ tf = Tempfile.new('unittest')
135
+ tf.puts("AUTO_DECLARE_TARGETS")
136
+ tf.close
137
+ System.class_variable_set(:@@instance, nil)
138
+ System.new(tf.path)
139
+ tlm = System.telemetry.packet("SYSTEM", "META")
140
+ expect(tlm.read("PKTID")).to_not be_nil
141
+ expect(tlm.read("CONFIG")).to_not be_nil
142
+ expect(tlm.read("COSMOS_VERSION")).to_not be_nil
143
+ expect(tlm.get_item("COSMOS_VERSION").bit_size).to eql(240)
144
+ expect(tlm.read("RUBY_VERSION")).to_not be_nil
145
+ expect(tlm.read("USER_VERSION")).to_not be_nil
146
+ expect(tlm.items.keys.include?("TEST")).to be false
147
+ cmd = System.commands.packet("SYSTEM", "META")
148
+ expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
149
+ expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
150
+ expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
151
+ expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
152
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
153
+ expect(cmd.items.keys.include?("TEST")).to be false
154
+ tf.unlink
155
+ end
156
+
157
+ it "defines COMMAND SYSTEM META based on TELEMETRY" do
158
+ file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), 'w')
159
+ file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
160
+ file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
161
+ file.puts "APPEND_ITEM CONFIG 256 STRING"
162
+ file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
163
+ file.puts "APPEND_ITEM USER_VERSION 240 STRING"
164
+ file.puts "APPEND_ITEM RUBY_VERSION 240 STRING"
165
+ file.puts "APPEND_ITEM TEST 240 STRING"
166
+ file.close
167
+
168
+ expect(Logger).to_not receive(:error)
169
+ tf = Tempfile.new('unittest')
170
+ tf.puts("AUTO_DECLARE_TARGETS")
171
+ tf.close
172
+ System.class_variable_set(:@@instance, nil)
173
+ System.new(tf.path)
174
+ tlm = System.telemetry.packet("SYSTEM", "META")
175
+ expect(tlm.read("PKTID")).to_not be_nil
176
+ expect(tlm.read("CONFIG")).to_not be_nil
177
+ expect(tlm.read("COSMOS_VERSION")).to_not be_nil
178
+ expect(tlm.read("RUBY_VERSION")).to_not be_nil
179
+ expect(tlm.read("USER_VERSION")).to_not be_nil
180
+ expect(tlm.read("TEST")).to_not be_nil
181
+ cmd = System.commands.packet("SYSTEM", "META")
182
+ expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
183
+ expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
184
+ expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
185
+ expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
186
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
187
+ expect(cmd.read("TEST")).to eql tlm.read("TEST")
188
+ tf.unlink
189
+ end
190
+ end
191
+ end
192
+
193
+ describe "System.commands" do
194
+ it "is just SYSTEM" do
195
+ expect(System.commands.target_names).to eql ['SYSTEM']
196
+ end
197
+
198
+ it "logs errors saving the configuration" do
199
+ # Write the system.txt file to auto declare targets
200
+ File.open(@config_file, 'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
201
+ # Force a reload of the configuration
202
+ System.class_eval('@@instance = nil')
203
+ capture_io do |stdout|
204
+ allow(FileUtils).to receive(:cp_r) { raise "Error" }
205
+ System.commands
206
+ expect(stdout.string).to match "Problem saving configuration"
207
+ end
208
+ File.open(@config_file, 'w') { |file| file.puts "# Comment" }
209
+ end
210
+ end
211
+
212
+ describe "System.telemetry" do
213
+ it "is just SYSTEM" do
214
+ expect(System.telemetry.target_names).to eql ['SYSTEM']
215
+ end
216
+ end
217
+
218
+ describe "System.limits" do
219
+ it "includes the DEFAULT limit set" do
220
+ expect(System.limits.sets).to include :DEFAULT
221
+ end
222
+ end
223
+
224
+ context "with valid targets" do
225
+ before(:all) do
226
+ # Write the system.txt file to auto declare targets
227
+ File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
228
+ end
229
+
230
+ describe "System.clear_counters" do
231
+ it "clears the target, command and telemetry counters" do
232
+ expect(System.targets.length).to be > 0
233
+ System.targets.each do |name, tgt|
234
+ tgt.cmd_cnt = 100
235
+ tgt.tlm_cnt = 100
236
+ end
237
+ System.commands.all do |tgt, pkt|
238
+ pkt.received_count = 100
239
+ end
240
+ System.telemetry.all do |tgt, pkt|
241
+ pkt.received_count = 100
242
+ end
243
+
244
+ System.clear_counters
245
+
246
+ System.targets.each do |name, tgt|
247
+ expect(tgt.cmd_cnt).to eql 0
248
+ expect(tgt.tlm_cnt).to eql 0
249
+ end
250
+ System.commands.all do |tgt, pkt|
251
+ expect(pkt.received_count).to eql 0
252
+ end
253
+ System.telemetry.all do |tgt, pkt|
254
+ expect(pkt.received_count).to eql 0
255
+ end
256
+ end
257
+ end
258
+
259
+ describe "packets and System.packets" do
260
+ it "calculates MD5s across all the target files" do
261
+ capture_io do |stdout|
262
+ # This line actually does the work of reading the configuration
263
+ expect(System.telemetry.target_names).to eql ['INST', 'SYSTEM']
264
+ expect(System.commands.target_names).to eql ['INST', 'SYSTEM']
265
+
266
+ expect(stdout.string).to match "Marshal file does not exist"
267
+
268
+ # Reset stdout for another go at the processing
269
+ stdout.rewind
270
+ # Reset the instance variable so it will read the new configuration
271
+ System.class_eval('@@instance = nil')
272
+ # This line actually does the work of reading the configuration
273
+ expect(System.telemetry.target_names).to eql ['INST', 'SYSTEM']
274
+ expect(System.commands.target_names).to eql ['INST', 'SYSTEM']
275
+
276
+ expect(stdout.string).to match "Marshal load success"
277
+ end
278
+ end
279
+
280
+ it "handles target parsing errors" do
281
+ capture_io do |stdout|
282
+ allow_any_instance_of(PacketConfig).to receive(:process_file) { raise "ProcessError" }
283
+ # This line actually does the work of reading the configuration
284
+ expect { System.telemetry.target_names }.to raise_error("ProcessError")
285
+
286
+ expect(stdout.string).to match "Problem processing"
287
+ end
288
+ end
289
+ end
290
+
291
+ describe "load_configuration" do
292
+ after(:all) do
293
+ File.delete(File.join(@config_targets,'SYSTEM','cmd_tlm','test1_tlm.txt'))
294
+ File.delete(File.join(@config_targets,'SYSTEM','cmd_tlm','test2_tlm.txt'))
295
+ end
296
+
297
+ it "loads the initial configuration" do
298
+ System.load_configuration
299
+ expect(System.commands.target_names).to eql ['INST', 'SYSTEM']
300
+ expect(System.telemetry.target_names).to eql ['INST', 'SYSTEM']
301
+ end
302
+
303
+ it "loads a named configuration" do
304
+ File.open(@config_file,'w') do |file|
305
+ file.puts "DECLARE_TARGET INST OVERRIDE"
306
+ file.puts "DECLARE_TARGET SYSTEM"
307
+ end
308
+
309
+ # Load the original configuration
310
+ original_config_name, err = System.load_configuration
311
+ expect(err).to eql nil
312
+ expect(System.telemetry.target_names).to eql %w(OVERRIDE SYSTEM)
313
+ original_pkts = System.telemetry.packets('SYSTEM').keys
314
+
315
+ # Create a new configuration by writing another telemetry file
316
+ File.open(File.join(@config_targets,'SYSTEM','cmd_tlm','test1_tlm.txt'),'w') do |file|
317
+ file.puts "TELEMETRY SYSTEM TEST1 BIG_ENDIAN"
318
+ file.puts " APPEND_ITEM DATA 240 STRING"
319
+ end
320
+ System.instance.process_file(@config_file)
321
+ # Verify the new telemetry packet is there
322
+ expect(System.telemetry.packets('SYSTEM').keys).to include "TEST1"
323
+ second_config_name = System.configuration_name
324
+
325
+ # Now load the original configuration
326
+ name, err = System.load_configuration(original_config_name)
327
+ expect(err).to eql nil
328
+ expect(original_config_name).to eql name
329
+ expect(System.telemetry.packets('SYSTEM').keys).not_to include "TEST1"
330
+
331
+ # Create yet another configuration by writing another telemetry file
332
+ File.open(File.join(@config_targets,'SYSTEM','cmd_tlm','test2_tlm.txt'),'w') do |file|
333
+ file.puts "TELEMETRY SYSTEM TEST2 BIG_ENDIAN"
334
+ file.puts " APPEND_ITEM DATA 240 STRING"
335
+ end
336
+ System.instance.process_file(@config_file)
337
+ names = []
338
+ # Verify the new telemetry packet is there as well as the second one
339
+ expect(System.telemetry.packets('SYSTEM').keys).to include("TEST1", "TEST2")
340
+ third_config_name = System.configuration_name
341
+
342
+ # Try loading something that doesn't exist
343
+ # It should fail and reload the original configuration
344
+ name, err = System.load_configuration("BLAH")
345
+ expect(err).to eql nil
346
+ expect(name).to eql original_config_name
347
+
348
+ # Now load the second configuration. It shouldn't have the most
349
+ # recently defined telemetry packet.
350
+ System.load_configuration(second_config_name)
351
+ expect(System.telemetry.packets('SYSTEM').keys).to include "TEST1"
352
+ expect(System.telemetry.packets('SYSTEM').keys).not_to include "TEST2"
353
+
354
+ # Now remove system.txt from the third configuration and try to load it again to cause an error
355
+ third_config_path = System.instance.send(:find_configuration, third_config_name)
356
+ FileUtils.mv File.join(third_config_path, 'system.txt'), File.join(third_config_path, 'system2.txt')
357
+ result, err = System.load_configuration(third_config_name)
358
+ expect(result).to eql original_config_name
359
+ expect(err).to_not be_nil
360
+ end
361
+ end
362
+ end
363
+
364
+ describe "process_file" do
365
+ before(:all) do
366
+ begin
367
+ # Move the targets directory out of the way so we can make our own
368
+ FileUtils.mv @config_targets, Cosmos::USERPATH
369
+ FileUtils.mkdir_p(@config_targets)
370
+ File.open(@config_file,'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
371
+ rescue
372
+ puts "Cannot move targets folder... probably due to open editor or explorer"
373
+ exit 1
374
+ end
375
+ end
376
+ after(:all) do
377
+ # Restore the targets directory
378
+ FileUtils.rm_rf @config_targets
379
+ FileUtils.mv File.join(Cosmos::USERPATH, 'targets'), File.join(Cosmos::USERPATH, 'config')
380
+ end
381
+
382
+ it "complains about unknown keywords" do
383
+ tf = Tempfile.new('unittest')
384
+ tf.puts("BLAH")
385
+ tf.close
386
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Unknown keyword 'BLAH'/)
387
+ tf.unlink
388
+ end
389
+
390
+ context "with AUTO_DECLARE_TARGETS" do
391
+ it "takes 0 parameters" do
392
+ tf = Tempfile.new('unittest')
393
+ tf.puts("AUTO_DECLARE_TARGETS TRUE")
394
+ tf.close
395
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for AUTO_DECLARE_TARGETS./)
396
+ tf.unlink
397
+ end
398
+
399
+ it "complains if config/targets doesn't exist" do
400
+ tf = Tempfile.new('unittest')
401
+ tf.puts("AUTO_DECLARE_TARGETS")
402
+ tf.close
403
+ FileUtils.rm_rf(@config_targets)
404
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /\/config\/targets must exist/)
405
+ FileUtils.mkdir_p(@config_targets)
406
+ tf.unlink
407
+ end
408
+
409
+ it "complains if target directories aren't uppercase" do
410
+ tf = Tempfile.new('unittest')
411
+ tf.puts("AUTO_DECLARE_TARGETS")
412
+ tf.close
413
+ FileUtils.mkdir_p(File.join(@config_targets, 'tgt'))
414
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Target folder must be uppercase: 'tgt'/)
415
+ Dir.rmdir(File.join(@config_targets, 'tgt'))
416
+ tf.unlink
417
+ end
418
+
419
+ it "processes target directories with the SYSTEM directory last" do
420
+ tf = Tempfile.new('unittest')
421
+ tf.puts("AUTO_DECLARE_TARGETS")
422
+ tf.close
423
+ FileUtils.mkdir_p(File.join(@config_targets, 'ABC'))
424
+ FileUtils.mkdir_p(File.join(@config_targets, 'SYSTEM'))
425
+ FileUtils.mkdir_p(File.join(@config_targets, 'XYZ'))
426
+ System.instance.process_file(tf.path)
427
+ # Since Ruby 1.9+ uses ordered Hashes we can ask for the keys and
428
+ # SYSTEM should be last
429
+ expect(System.instance.targets.keys).to eql %w(ABC XYZ SYSTEM)
430
+ Dir.rmdir(File.join(@config_targets, 'ABC'))
431
+ Dir.rmdir(File.join(@config_targets, 'SYSTEM'))
432
+ Dir.rmdir(File.join(@config_targets, 'XYZ'))
433
+ tf.unlink
434
+ end
435
+
436
+ it "ignores previous DECLARE_TARGET directories" do
437
+ tf = Tempfile.new('unittest')
438
+ tf.puts("DECLARE_TARGET ABC CBA")
439
+ tf.puts("AUTO_DECLARE_TARGETS")
440
+ tf.close
441
+ FileUtils.mkdir_p(File.join(@config_targets, 'ABC'))
442
+ FileUtils.mkdir_p(File.join(@config_targets, 'SYSTEM'))
443
+ FileUtils.mkdir_p(File.join(@config_targets, 'XYZ'))
444
+ System.instance.process_file(tf.path)
445
+ # Since Ruby 1.9+ uses ordered Hashes we can ask for the keys and
446
+ # SYSTEM should be last
447
+ expect(System.instance.targets.keys).to eql %w(CBA XYZ SYSTEM)
448
+ Dir.rmdir(File.join(@config_targets, 'ABC'))
449
+ Dir.rmdir(File.join(@config_targets, 'SYSTEM'))
450
+ Dir.rmdir(File.join(@config_targets, 'XYZ'))
451
+ tf.unlink
452
+ end
453
+ end
454
+
455
+ context "with DECLARE_TARGET" do
456
+ it "takes 1 or 2 parameters" do
457
+ tf = Tempfile.new('unittest')
458
+ tf.puts("DECLARE_TARGET")
459
+ tf.close
460
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for DECLARE_TARGET./)
461
+ tf.unlink
462
+
463
+ tf = Tempfile.new('unittest')
464
+ tf.puts("DECLARE_TARGET TGT TGT TGT TGT")
465
+ tf.close
466
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for DECLARE_TARGET./)
467
+ tf.unlink
468
+ end
469
+
470
+ it "complains if the target directory doesn't exist" do
471
+ tf = Tempfile.new('unittest')
472
+ tf.puts("DECLARE_TARGET TGT")
473
+ tf.close
474
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Target folder must exist/)
475
+ tf.unlink
476
+ end
477
+
478
+ it "processes the target directory" do
479
+ tf = Tempfile.new('unittest')
480
+ tf.puts("DECLARE_TARGET TGT")
481
+ tf.close
482
+ FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
483
+ System.instance.process_file(tf.path)
484
+ tf.unlink
485
+ end
486
+
487
+ it "processes the target directory with substitute name" do
488
+ tf = Tempfile.new('unittest')
489
+ tf.puts("DECLARE_TARGET TGT NEW")
490
+ tf.close
491
+ FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
492
+ System.instance.process_file(tf.path)
493
+ tf.unlink
494
+ end
495
+
496
+ it "processes the target directory with specified target.txt" do
497
+ tf = Tempfile.new('unittest')
498
+ tf.puts("DECLARE_TARGET TGT nil target.txt")
499
+ tf.close
500
+ FileUtils.mkdir_p(File.join(@config_targets, 'TGT'))
501
+ File.open(File.join(@config_targets, 'TGT', 'target.txt'), 'w') do |file|
502
+ file.puts "# target.txt"
503
+ end
504
+ System.instance.process_file(tf.path)
505
+ tf.unlink
506
+ end
507
+ end
508
+
509
+ context "with PORT" do
510
+ it "takes 2 parameters" do
511
+ tf = Tempfile.new('unittest')
512
+ tf.puts("PORT CTS_API")
513
+ tf.close
514
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for PORT./)
515
+ tf.unlink
516
+
517
+ tf = Tempfile.new('unittest')
518
+ tf.puts("PORT CTS_API 8888 TRUE")
519
+ tf.close
520
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for PORT./)
521
+ tf.unlink
522
+ end
523
+
524
+ it "complains about unknown ports" do
525
+ tf = Tempfile.new('unittest')
526
+ tf.puts("PORT MYPORT 10")
527
+ tf.close
528
+ capture_io do |stdout|
529
+ System.instance.process_file(tf.path)
530
+ expect(stdout.string).to match /WARN: Unknown port name given: MYPORT/
531
+ end
532
+ tf.unlink
533
+ end
534
+
535
+ it "changes known ports" do
536
+ tf = Tempfile.new('unittest')
537
+ tf.puts("PORT CTS_API 8888")
538
+ tf.close
539
+ expect(System.ports['CTS_API']).to eql 7777
540
+ System.instance.process_file(tf.path)
541
+ expect(System.ports['CTS_API']).to eql 8888
542
+ tf.unlink
543
+ end
544
+ end
545
+
546
+ context "with PATH" do
547
+ it "takes 2 parameters" do
548
+ tf = Tempfile.new('unittest')
549
+ tf.puts("PATH C:/")
550
+ tf.close
551
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for PATH./)
552
+ tf.unlink
553
+
554
+ tf = Tempfile.new('unittest')
555
+ tf.puts("PATH MYPATH C:/ TRUE")
556
+ tf.close
557
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for PATH./)
558
+ tf.unlink
559
+ end
560
+
561
+ it "complains about unknown paths" do
562
+ tf = Tempfile.new('unittest')
563
+ tf.puts("PATH MYPATH C:/")
564
+ tf.close
565
+ capture_io do |stdout|
566
+ System.instance.process_file(tf.path)
567
+ expect(stdout.string).to match /WARN: Unknown path name given: MYPATH/
568
+ end
569
+ tf.unlink
570
+ end
571
+
572
+ it "changes known paths" do
573
+ if Kernel.is_windows?
574
+ tf = Tempfile.new('unittest')
575
+ tf.puts("PATH LOGS C:/mylogs")
576
+ tf.close
577
+ expect(System.paths['LOGS']).to match 'outputs/logs'
578
+ System.instance.process_file(tf.path)
579
+ expect(System.paths['LOGS']).to eql 'C:/mylogs'
580
+ tf.unlink
581
+ end
582
+ end
583
+ end
584
+
585
+ context "with DEFAULT_PACKET_LOG_WRITER" do
586
+ it "takes 1 or more parameters" do
587
+ tf = Tempfile.new('unittest')
588
+ tf.puts("DEFAULT_PACKET_LOG_WRITER")
589
+ tf.close
590
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for DEFAULT_PACKET_LOG_WRITER./)
591
+ tf.unlink
592
+
593
+ tf = Tempfile.new('unittest')
594
+ tf.puts("DEFAULT_PACKET_LOG_WRITER packet_log_writer.rb nil false")
595
+ tf.close
596
+ System.instance.process_file(tf.path)
597
+ expect(System.default_packet_log_writer).to eql PacketLogWriter
598
+ expect(System.default_packet_log_writer_params).to eql ["nil", "false"]
599
+ tf.unlink
600
+ end
601
+
602
+ it "complains if the class doesn't exist" do
603
+ tf = Tempfile.new('unittest')
604
+ tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class")
605
+ tf.close
606
+ expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
607
+ tf.unlink
608
+ end
609
+
610
+ it "sets the packet writer" do
611
+ filename = File.join(File.dirname(__FILE__),'..','..','lib','my_writer.rb')
612
+ File.open(filename, 'w') do |file|
613
+ file.puts "class MyWriter"
614
+ file.puts "end"
615
+ end
616
+ tf = Tempfile.new('unittest')
617
+ tf.puts("DEFAULT_PACKET_LOG_WRITER my_writer")
618
+ tf.close
619
+ System.instance.process_file(tf.path)
620
+ expect(System.default_packet_log_writer).to eql MyWriter
621
+ File.delete filename
622
+ tf.unlink
623
+ end
624
+ end
625
+
626
+ context "with DEFAULT_PACKET_LOG_READER" do
627
+ it "takes 1 or more parameters" do
628
+ tf = Tempfile.new('unittest')
629
+ tf.puts("DEFAULT_PACKET_LOG_READER")
630
+ tf.close
631
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for DEFAULT_PACKET_LOG_READER./)
632
+ tf.unlink
633
+
634
+ tf = Tempfile.new('unittest')
635
+ tf.puts("DEFAULT_PACKET_LOG_READER packet_log_reader.rb nil false")
636
+ tf.close
637
+ System.instance.process_file(tf.path)
638
+ expect(System.default_packet_log_reader).to eql PacketLogReader
639
+ expect(System.default_packet_log_reader_params).to eql ["nil", "false"]
640
+ tf.unlink
641
+ end
642
+
643
+ it "complains if the class doesn't exist" do
644
+ tf = Tempfile.new('unittest')
645
+ tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class")
646
+ tf.close
647
+ expect { System.instance.process_file(tf.path) }.to raise_error(/Unable to require my_nonexistent_class/)
648
+ tf.unlink
649
+ end
650
+
651
+ it "sets the packet reader" do
652
+ filename = File.join(File.dirname(__FILE__),'..','..','lib','my_reader.rb')
653
+ File.open(filename, 'w') do |file|
654
+ file.puts "class MyReader"
655
+ file.puts "end"
656
+ end
657
+ tf = Tempfile.new('unittest')
658
+ tf.puts("DEFAULT_PACKET_LOG_READER my_reader")
659
+ tf.close
660
+ System.instance.process_file(tf.path)
661
+ expect(System.default_packet_log_reader).to eql MyReader
662
+ File.delete filename
663
+ tf.unlink
664
+ end
665
+ end
666
+
667
+ context "with DISABLE_DNS" do
668
+ it "takes 0 parameters" do
669
+ tf = Tempfile.new('unittest')
670
+ tf.puts("DISABLE_DNS BLAH TRUE")
671
+ tf.close
672
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for DISABLE_DNS./)
673
+ tf.unlink
674
+ end
675
+
676
+ it "disables dns lookups" do
677
+ tf = Tempfile.new('unittest')
678
+ tf.puts("DISABLE_DNS")
679
+ tf.close
680
+ expect(System.use_dns).to be false
681
+ System.instance.process_file(tf.path)
682
+ expect(System.use_dns).to be false
683
+ tf.unlink
684
+ end
685
+
686
+ it "enables dns lookups" do
687
+ tf = Tempfile.new('unittest')
688
+ tf.puts("ENABLE_DNS")
689
+ tf.close
690
+ expect(System.use_dns).to be false
691
+ System.instance.process_file(tf.path)
692
+ expect(System.use_dns).to be true
693
+ tf.unlink
694
+ end
695
+ end
696
+
697
+ context "with ALLOW_ACCESS" do
698
+ it "takes 1 parameters" do
699
+ tf = Tempfile.new('unittest')
700
+ tf.puts("ALLOW_ACCESS")
701
+ tf.close
702
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for ALLOW_ACCESS./)
703
+ tf.unlink
704
+
705
+ tf = Tempfile.new('unittest')
706
+ tf.puts("ALLOW_ACCESS localhost true")
707
+ tf.close
708
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for ALLOW_ACCESS./)
709
+ tf.unlink
710
+ end
711
+
712
+ it "complains about bad addresses" do
713
+ tf = Tempfile.new('unittest')
714
+ tf.puts("ALLOW_ACCESS blah")
715
+ tf.close
716
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
717
+ tf.unlink
718
+
719
+ tf = Tempfile.new('unittest')
720
+ tf.puts("ALLOW_ACCESS hopefully_this_is_not_a_valid_machine_name_XYZ")
721
+ tf.close
722
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error)
723
+ tf.unlink
724
+ end
725
+
726
+ it "allows ALL" do
727
+ tf = Tempfile.new('unittest')
728
+ tf.puts("ALLOW_ACCESS ALL")
729
+ tf.close
730
+ System.instance.process_file(tf.path)
731
+ expect(System.acl).to be_nil
732
+ tf.unlink
733
+ end
734
+
735
+ it "stores host by name" do
736
+ tf = Tempfile.new('unittest')
737
+ tf.puts("ALLOW_ACCESS localhost")
738
+ tf.close
739
+ System.instance.process_file(tf.path)
740
+ expect(System.acl.allow_addr?(["AF_INET",0,"localhost","127.0.0.1"])).to be true
741
+ tf.unlink
742
+ end
743
+
744
+ it "stores host by IP address" do
745
+ addr = IPSocket.getaddress("www.google.com")
746
+ if addr and !addr.index(':')
747
+ tf = Tempfile.new('unittest')
748
+ tf.puts("ALLOW_ACCESS #{addr}")
749
+ tf.close
750
+ System.instance.process_file(tf.path)
751
+ expect(System.acl.allow_addr?(["AF_INET",0,"www.google.com",addr])).to be true
752
+ tf.unlink
753
+ end
754
+ end
755
+ end
756
+
757
+ context "with STALENESS_SECONDS" do
758
+ it "takes 1 parameters" do
759
+ tf = Tempfile.new('unittest')
760
+ tf.puts("STALENESS_SECONDS")
761
+ tf.close
762
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for STALENESS_SECONDS./)
763
+ tf.unlink
764
+
765
+ tf = Tempfile.new('unittest')
766
+ tf.puts("STALENESS_SECONDS 1 2")
767
+ tf.close
768
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for STALENESS_SECONDS./)
769
+ tf.unlink
770
+ end
771
+
772
+ it "sets the number of seconds required to be stale" do
773
+ tf = Tempfile.new('unittest')
774
+ tf.puts("STALENESS_SECONDS 3")
775
+ tf.close
776
+ expect(System.staleness_seconds).to eql 30
777
+ System.instance.process_file(tf.path)
778
+ expect(System.staleness_seconds).to eql 3
779
+ tf.unlink
780
+ end
781
+ end
782
+
783
+ context "with META_INIT" do
784
+ it "takes 1 parameters" do
785
+ tf = Tempfile.new('unittest')
786
+ tf.puts("META_INIT")
787
+ tf.close
788
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for META_INIT./)
789
+ tf.unlink
790
+
791
+ tf = Tempfile.new('unittest')
792
+ tf.puts("META_INIT 1 2")
793
+ tf.close
794
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for META_INIT./)
795
+ tf.unlink
796
+ end
797
+
798
+ it "populates the SYSTEM META packet with the file" do
799
+ FileUtils.rm_rf @config_targets
800
+ FileUtils.mkdir_p(File.join(@config_targets, 'SYSTEM', 'cmd_tlm'))
801
+ file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), 'w')
802
+ file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
803
+ file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
804
+ file.puts "APPEND_ITEM CONFIG 256 STRING"
805
+ file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
806
+ file.puts "APPEND_ITEM USER_VERSION 240 STRING"
807
+ file.puts "APPEND_ITEM RUBY_VERSION 240 STRING"
808
+ file.puts "APPEND_ITEM TEST 512 STRING"
809
+ file.puts "APPEND_ITEM ID 32 UINT"
810
+ file.close
811
+
812
+ meta = Tempfile.new('meta')
813
+ meta.puts("USER_VERSION 4.5")
814
+ meta.puts("TEST hello")
815
+ meta.puts("ID 123456789")
816
+ meta.close
817
+ tf = Tempfile.new('unittest')
818
+ tf.puts("AUTO_DECLARE_TARGETS")
819
+ tf.puts("META_INIT #{meta.path}")
820
+ tf.close
821
+ System.class_variable_set(:@@instance, nil)
822
+ System.new(tf.path)
823
+ tlm = System.telemetry.packet("SYSTEM", "META")
824
+ expect(tlm.read("USER_VERSION")).to eql '4.5'
825
+ expect(tlm.read("TEST")).to eql 'hello'
826
+ expect(tlm.read("ID")).to eql 123456789
827
+ cmd = System.commands.packet("SYSTEM", "META")
828
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
829
+ expect(cmd.read("TEST")).to eql tlm.read("TEST")
830
+ expect(cmd.read("ID")).to eql tlm.read("ID")
831
+ tf.unlink
832
+ meta.unlink
833
+ FileUtils.rm_rf(File.join(@config_targets, 'SYSTEM'))
834
+ end
835
+ end
836
+
837
+ context "with ADD_MD5_FILE" do
838
+ it "takes 1 parameters" do
839
+ tf = Tempfile.new('unittest')
840
+ tf.puts("ADD_MD5_FILE")
841
+ tf.close
842
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for ADD_MD5_FILE./)
843
+ tf.unlink
844
+
845
+ tf = Tempfile.new('unittest')
846
+ tf.puts("ADD_MD5_FILE 1 2")
847
+ tf.close
848
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for ADD_MD5_FILE./)
849
+ tf.unlink
850
+ end
851
+
852
+ it "complains about missing files" do
853
+ tf = Tempfile.new('unittest')
854
+ tf.puts("ADD_MD5_FILE missing_file")
855
+ tf.close
856
+ expect { System.instance.process_file(tf.path) }.to raise_error(/Missing expected file: missing_file/)
857
+ tf.unlink
858
+ end
859
+
860
+ it "adds a file to the MD5 calculation" do
861
+ md5f = Tempfile.new('md5_file')
862
+ tf = Tempfile.new('unittest')
863
+ tf.puts("ADD_MD5_FILE #{File.expand_path(md5f.path)}")
864
+ tf.close
865
+ System.instance.process_file(tf.path)
866
+ expect(System.additional_md5_files.include?(File.expand_path(md5f.path))).to be true
867
+ md5f.close
868
+ md5f.unlink
869
+ tf.unlink
870
+ end
871
+ end
872
+ end
873
+
874
+ describe "Cosmos.write_exception_file" do
875
+ it "writes a file with the exception" do
876
+ filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
877
+ expect(File.exist?(filename)).to be true
878
+ File.delete(filename)
879
+ end
880
+
881
+ it "writes a file without a defined LOGS directory" do
882
+ File.open(@config_file,'w') {|file| file.puts "PATH LOGS C:/this/is/not/a/real/path" }
883
+ # Reset the instance variable so it will read the new config file
884
+ System.instance_eval('@instance = nil')
885
+ filename = Cosmos.write_exception_file(RuntimeError.new("HELP!"))
886
+ expect(File.exist?(filename)).to be true
887
+ File.delete(filename)
888
+ end
889
+ end
890
+ end
891
+ end