cosmos 4.0.3-java → 4.1.0-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 (123) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -5
  3. data/Manifest.txt +11 -1
  4. data/README.md +3 -2
  5. data/Rakefile +18 -4
  6. data/appveyor.yml +19 -0
  7. data/cosmos.gemspec +12 -3
  8. data/data/config/cmd_tlm_server.yaml +3 -0
  9. data/data/crc.txt +63 -60
  10. data/demo/config/targets/INST/cmd_tlm_server.txt +1 -0
  11. data/demo/config/targets/INST/cmd_tlm_server2.txt +7 -0
  12. data/demo/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
  13. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +8 -12
  14. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +7 -9
  15. data/demo/lib/cmd_sequence_exporter.rb +52 -0
  16. data/demo/lib/example_background_task.rb +1 -0
  17. data/demo/procedures/replay_test.rb +32 -0
  18. data/ext/cosmos/ext/structure/structure.c +39 -3
  19. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +1 -0
  20. data/install/config/tools/launcher/launcher.txt +2 -0
  21. data/lib/cosmos/config/config_parser.rb +2 -0
  22. data/lib/cosmos/core_ext/io.rb +89 -60
  23. data/lib/cosmos/gui/qt.rb +5 -8
  24. data/lib/cosmos/gui/qt_tool.rb +8 -8
  25. data/lib/cosmos/gui/text/ruby_editor.rb +12 -12
  26. data/lib/cosmos/gui/utilities/script_module_gui.rb +9 -9
  27. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +18 -17
  28. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +2 -2
  29. data/lib/cosmos/interfaces/protocols/template_protocol.rb +3 -0
  30. data/lib/cosmos/interfaces/udp_interface.rb +27 -14
  31. data/lib/cosmos/io/buffered_file.rb +0 -1
  32. data/lib/cosmos/io/json_drb.rb +134 -214
  33. data/lib/cosmos/io/json_drb_object.rb +22 -61
  34. data/lib/cosmos/io/json_drb_rack.rb +79 -0
  35. data/lib/cosmos/io/json_rpc.rb +27 -0
  36. data/lib/cosmos/io/udp_sockets.rb +102 -58
  37. data/lib/cosmos/packets/commands.rb +1 -1
  38. data/lib/cosmos/packets/structure.rb +1 -1
  39. data/lib/cosmos/packets/structure_item.rb +37 -5
  40. data/lib/cosmos/script/cmd_tlm_server.rb +76 -2
  41. data/lib/cosmos/script/replay.rb +60 -0
  42. data/lib/cosmos/script/script.rb +20 -2
  43. data/lib/cosmos/script/scripting.rb +9 -9
  44. data/lib/cosmos/script/tools.rb +14 -0
  45. data/lib/cosmos/system/system.rb +185 -92
  46. data/lib/cosmos/system/target.rb +1 -1
  47. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +44 -4
  48. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +4 -0
  49. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +7 -0
  50. data/lib/cosmos/tools/cmd_tlm_server/api.rb +347 -20
  51. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +3 -0
  52. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +329 -111
  53. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +13 -0
  54. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +261 -95
  55. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +46 -35
  56. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +18 -8
  57. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +39 -28
  58. data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +242 -0
  59. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +24 -8
  60. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +18 -6
  61. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +5 -4
  62. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +375 -0
  63. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +10 -2
  64. data/lib/cosmos/tools/data_viewer/data_viewer.rb +40 -5
  65. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +18 -20
  66. data/lib/cosmos/tools/launcher/launcher_config.rb +5 -16
  67. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +65 -39
  68. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +19 -0
  69. data/lib/cosmos/tools/replay/replay.rb +5 -505
  70. data/lib/cosmos/tools/script_runner/script_audit.rb +1 -0
  71. data/lib/cosmos/tools/script_runner/script_runner.rb +3 -4
  72. data/lib/cosmos/tools/script_runner/script_runner_config.rb +3 -4
  73. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +44 -23
  74. data/lib/cosmos/tools/test_runner/results_writer.rb +4 -0
  75. data/lib/cosmos/tools/test_runner/test_runner.rb +0 -3
  76. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +6 -2
  77. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +26 -1
  78. data/lib/cosmos/tools/tlm_viewer/screen.rb +24 -1
  79. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +25 -0
  80. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +24 -14
  81. data/lib/cosmos/top_level.rb +34 -24
  82. data/lib/cosmos/utilities/csv.rb +60 -8
  83. data/lib/cosmos/version.rb +5 -5
  84. data/spec/config/config_parser_spec.rb +10 -1
  85. data/spec/core_ext/socket_spec.rb +4 -2
  86. data/spec/gui/utilities/script_module_gui_spec.rb +102 -0
  87. data/spec/install/config/data/data.txt +1 -0
  88. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +2 -0
  89. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +1 -2
  90. data/spec/interfaces/protocols/template_protocol_spec.rb +72 -2
  91. data/spec/interfaces/serial_interface_spec.rb +1 -1
  92. data/spec/interfaces/udp_interface_spec.rb +14 -0
  93. data/spec/io/buffered_file_spec.rb +37 -0
  94. data/spec/io/json_drb_object_spec.rb +2 -15
  95. data/spec/io/json_drb_spec.rb +61 -121
  96. data/spec/io/udp_sockets_spec.rb +42 -2
  97. data/spec/packet_logs/packet_log_reader_spec.rb +5 -2
  98. data/spec/packets/binary_accessor_spec.rb +1 -1
  99. data/spec/packets/packet_item_spec.rb +1 -1
  100. data/spec/packets/structure_item_spec.rb +5 -6
  101. data/spec/script/cmd_tlm_server_spec.rb +39 -4
  102. data/spec/script/commands_disconnect_spec.rb +1 -1
  103. data/spec/script/commands_spec.rb +2 -1
  104. data/spec/script/scripting_spec.rb +18 -3
  105. data/spec/script/telemetry_spec.rb +5 -0
  106. data/spec/spec_helper.rb +43 -26
  107. data/spec/streams/tcpip_socket_stream_spec.rb +2 -2
  108. data/spec/system/system_spec.rb +11 -9
  109. data/spec/system/target_spec.rb +3 -0
  110. data/spec/tools/cmd_tlm_server/api_spec.rb +543 -29
  111. data/spec/tools/cmd_tlm_server/background_task_spec.rb +2 -2
  112. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +31 -75
  113. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +199 -66
  114. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +85 -9
  115. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +29 -127
  116. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +10 -50
  117. data/spec/tools/launcher/launcher_config_spec.rb +1 -1
  118. data/spec/tools/table_manager/table_item_spec.rb +1 -1
  119. data/spec/tools/table_manager/tablemanager_core_spec.rb +4 -4
  120. data/spec/top_level/top_level_spec.rb +151 -3
  121. data/spec/utilities/csv_spec.rb +24 -5
  122. metadata +61 -9
  123. data/lib/cosmos/tools/replay/replay_server.rb +0 -91
@@ -19,7 +19,7 @@ module Cosmos
19
19
  describe LauncherConfig do
20
20
  describe "initialize" do
21
21
  it "checks for a given filename" do
22
- expect { LauncherConfig.new('blah_file.txt') }.to raise_error(/file does not exist/)
22
+ expect { LauncherConfig.new('blah_file.txt') }.to raise_error("Configuration file blah_file.txt does not exist.")
23
23
  end
24
24
 
25
25
  it "raises on unknown parameters" do
@@ -35,7 +35,7 @@ module Cosmos
35
35
  describe "clone" do
36
36
  it "duplicates the entire TableItem" do
37
37
  pi2 = @ti.clone
38
- expect(@ti == pi2).to be true
38
+ expect(@ti < pi2).to be true
39
39
  end
40
40
  end
41
41
 
@@ -19,7 +19,7 @@ module Cosmos
19
19
 
20
20
  describe "process_definition" do
21
21
  it "complains if the definition filename does not exist" do
22
- expect { core.process_definition('path') }.to raise_error(/No such file/)
22
+ expect { core.process_definition('path') }.to raise_error("Configuration file path does not exist.")
23
23
  end
24
24
 
25
25
  it "processes the table definition" do
@@ -47,7 +47,7 @@ module Cosmos
47
47
 
48
48
  describe "file_new" do
49
49
  it "complains if the definition filename does not exist" do
50
- expect { core.file_new('path', Dir.pwd) }.to raise_error(/No such file/)
50
+ expect { core.file_new('path', Dir.pwd) }.to raise_error(/Configuration file path does not exist./)
51
51
  end
52
52
 
53
53
  it "creates a new file in the given output dir" do
@@ -74,7 +74,7 @@ module Cosmos
74
74
  FileUtils.rm def_filename if File.exist? def_filename
75
75
  bin_filename = File.join(Dir.pwd, 'dat.bin')
76
76
  File.open(bin_filename,'w') {|file| file.puts "\x00\x01" }
77
- expect { core.file_open(bin_filename, def_filename) }.to raise_error(/No such file/)
77
+ expect { core.file_open(bin_filename, def_filename) }.to raise_error(/does not exist/)
78
78
  FileUtils.rm bin_filename
79
79
  end
80
80
 
@@ -83,7 +83,7 @@ module Cosmos
83
83
  FileUtils.rm bin_filename if File.exist? bin_filename
84
84
  def_filename = File.join(Dir.pwd, 'def.txt')
85
85
  File.open(def_filename,'w') {|file| file.puts "TABLE table1 BIG_ENDIAN ONE_DIMENSIONAL" }
86
- expect { core.file_open(bin_filename, def_filename) }.to raise_error(/No such file/)
86
+ expect { core.file_open(bin_filename, def_filename) }.to raise_error(/Unable to open and load/)
87
87
  FileUtils.rm def_filename
88
88
  end
89
89
 
@@ -100,6 +100,44 @@ module Cosmos
100
100
  end
101
101
  end
102
102
 
103
+ describe "data_path" do
104
+ it "looks first in USERPATH/config/data" do
105
+ filename = Cosmos.data_path('data.txt')
106
+ expect(filename).to eql File.join(Cosmos::USERPATH,'config','data','data.txt')
107
+ end
108
+
109
+ it "looks in core/data" do
110
+ filename = Cosmos.data_path('about.txt')
111
+ expect(filename).to eql File.join(Cosmos::PATH,'data','about.txt')
112
+ end
113
+
114
+ it "complains if the file is not found" do
115
+ expect { Cosmos.data_path('nope.txt') }.to raise_error(/Could not find path/)
116
+ end
117
+ end
118
+
119
+ describe "path" do
120
+ it "looks first in the USERPATH" do
121
+ filename = Cosmos.path(__FILE__, ['config','system','system.txt'])
122
+ expect(filename).to eql File.join(Cosmos::USERPATH,'config','system','system.txt')
123
+ end
124
+
125
+ it "looks relative to the absolute path calling_file" do
126
+ spec = File.expand_path(File.join(File.dirname(Cosmos::USERPATH),'spec_helper.rb'))
127
+ filename = Cosmos.path(spec, ['top_level', 'top_level_spec.rb'])
128
+ expect(filename).to eql __FILE__
129
+ end
130
+
131
+ it "looks relative to the relative path calling_file" do
132
+ filename = Cosmos.path('spec/spec_helper.rb', ['top_level', 'top_level_spec.rb'])
133
+ expect(filename).to eql __FILE__
134
+ end
135
+
136
+ it "complains if the path is not found" do
137
+ expect { Cosmos.path(__FILE__, ['nope', 'nowhere.rb']) }.to raise_error(/Could not find path/)
138
+ end
139
+ end
140
+
103
141
  describe "self.marshal_dump, self.marshal_load" do
104
142
  after(:each) do
105
143
  Cosmos.disable_warnings do
@@ -197,10 +235,29 @@ module Cosmos
197
235
  end
198
236
 
199
237
  describe "create_log_file" do
238
+ it "creates a log file in System LOGS" do
239
+ filename1 = Cosmos.create_log_file('test')
240
+ expect(File.exist?(filename1)).to be true
241
+ if File.dirname(filename1)[-1] == '/' and System.paths['LOGS'][-1] != '/'
242
+ expect(File.dirname(filename1)).to eq (System.paths['LOGS'] + '/')
243
+ elsif File.dirname(filename1)[-1] != '/' and System.paths['LOGS'][-1] == '/'
244
+ expect(File.dirname(filename1) + '/').to eq System.paths['LOGS']
245
+ else
246
+ expect(File.dirname(filename1)).to eq System.paths['LOGS']
247
+ end
248
+ File.delete(filename1)
249
+ end
250
+
200
251
  it "creates a log file even if System LOGS doesn't exist" do
201
- filename = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
202
- expect(File.exist?(filename)).to be true
203
- File.delete(filename)
252
+ filename1 = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
253
+ expect(File.exist?(filename1)).to be true
254
+ # Immediately create another log file to ensure we get unique names
255
+ filename2 = Cosmos.create_log_file('test', 'X:/directory/which/does/not/exit')
256
+ expect(File.exist?(filename2)).to be true
257
+ # Ensure the file names are unique
258
+ expect(filename1).to_not eql filename2
259
+ File.delete(filename1)
260
+ File.delete(filename2)
204
261
 
205
262
  Cosmos.set_working_dir do
206
263
  # Move the defaults output dir out of the way for this test
@@ -318,6 +375,24 @@ module Cosmos
318
375
  expect(klass).to eq MyTestClass
319
376
  File.delete(filename)
320
377
  end
378
+
379
+ it "requires the class represented by the classname" do
380
+ filename = File.join(Cosmos::USERPATH,"lib","my_other_test_class.rb")
381
+ File.delete(filename) if File.exist? filename
382
+
383
+ # Explicitly load cosmos.rb to ensure the Cosmos::USERPATH/lib
384
+ # directory is in the path
385
+ load 'cosmos.rb'
386
+ File.open(filename,'w') do |file|
387
+ file.puts "class MyOtherTestClass"
388
+ file.puts "end"
389
+ end
390
+
391
+ klass = Cosmos.require_class("MyOtherTestClass")
392
+ expect(klass).to be_a(Class)
393
+ expect(klass).to eq MyOtherTestClass
394
+ File.delete(filename)
395
+ end
321
396
  end
322
397
 
323
398
  describe "require_file" do
@@ -346,6 +421,79 @@ module Cosmos
346
421
  end
347
422
  end
348
423
 
424
+ describe "kill_thread" do
425
+ before(:each) do
426
+ @log_info = ''
427
+ @log_warn = ''
428
+ @log_error = ''
429
+ allow(Logger).to receive(:info) {|str| @log_info << str}
430
+ allow(Logger).to receive(:warn) {|str| @log_warn << str}
431
+ allow(Logger).to receive(:error) {|str| @log_error << str}
432
+ end
433
+
434
+ it "calls thread.kill if the thread is alive" do
435
+ thread = Thread.new { loop { sleep 1 } }
436
+ Cosmos.kill_thread(nil, thread) # No thread owner
437
+ expect(@log_info).to match("")
438
+ expect(@log_warn).to match("Failed to gracefully kill thread")
439
+ expect(@log_error).to eql("")
440
+ expect(thread.alive?).to be false
441
+ end
442
+
443
+ it "warns if the thread owner doesn't support graceful_kill" do
444
+ thread = Thread.new { loop { sleep 1 } }
445
+ Cosmos.kill_thread(thread, thread)
446
+ expect(@log_info).to match("Thread owner Thread does not support graceful_kill")
447
+ expect(@log_warn).to match("Failed to gracefully kill thread")
448
+ expect(@log_error).to eql("")
449
+ expect(thread.alive?).to be false
450
+ end
451
+
452
+ it "warns if the thread owner is the current thread" do
453
+ class MyThread < Thread
454
+ def graceful_kill; end
455
+ end
456
+ thread = MyThread.new do
457
+ Cosmos.kill_thread(thread, thread)
458
+ end
459
+ sleep 0.1 while thread.alive?
460
+ expect(@log_info).to match("")
461
+ expect(@log_warn).to match("Threads cannot graceful_kill themselves")
462
+ expect(@log_error).to eql("")
463
+ expect(thread.alive?).to be false
464
+ end
465
+
466
+ it "calls graceful_kill on the owner" do
467
+ class ThreadOwner
468
+ attr_accessor :thread
469
+ def initialize
470
+ @thread = Thread.new { loop { sleep 1 } }
471
+ end
472
+ def graceful_kill
473
+ @thread.kill
474
+ end
475
+ end
476
+ owner = ThreadOwner.new
477
+ Cosmos.kill_thread(owner, owner.thread)
478
+ expect(@log_info).to match("")
479
+ expect(@log_warn).to match("")
480
+ expect(@log_error).to match("")
481
+ expect(owner.thread.alive?).to be false
482
+ end
483
+
484
+ it "logs an error if the thread doesn't die" do
485
+ class MyAliveThread
486
+ def alive?; true; end
487
+ def kill; end
488
+ def backtrace; []; end
489
+ end
490
+ Cosmos.kill_thread(nil, MyAliveThread.new)
491
+ expect(@log_info).to match("")
492
+ expect(@log_warn).to match("Failed to gracefully kill thread")
493
+ expect(@log_error).to match("Failed to kill thread")
494
+ end
495
+ end
496
+
349
497
  describe "open_file_browser" do
350
498
  it "opens a file browser" do
351
499
  unless ENV['TRAVIS']
@@ -21,7 +21,8 @@ module Cosmos
21
21
  @lines << "bool1,true,false\n"
22
22
  @lines << "bool2,false,true\n"
23
23
  @lines << "int,10,11\n"
24
- @lines << "float,1.1,2.2\n"
24
+ @lines << "float,1.1,2.2,3.3\n"
25
+ @lines << "string,test,text with space\n"
25
26
 
26
27
  @test_file = File.open('cosmos_csv_spec.csv','w')
27
28
  @test_file.write(@lines.join(''))
@@ -68,7 +69,7 @@ module Cosmos
68
69
  end
69
70
 
70
71
  it "returns all keys" do
71
- expect(@csv.keys).to eq(%w(test bool1 bool2 int float))
72
+ expect(@csv.keys).to eq(%w(test bool1 bool2 int float string))
72
73
  end
73
74
 
74
75
  it "returns boolean values" do
@@ -77,19 +78,37 @@ module Cosmos
77
78
 
78
79
  expect(@csv.boolean("bool1", 1)).to be false
79
80
  expect(@csv.bool("bool2", 1)).to be true
81
+
82
+ expect(@csv.bool("bool1", (0..-1))).to eql([true, false])
83
+ expect(@csv.bool("bool2", (0..-1))).to eql([false, true])
80
84
  end
81
85
 
82
86
  it "returns integer values" do
83
87
  expect(@csv.integer("int")).to be(10)
84
- expect(@csv.int("int")).to be(10)
85
-
86
- expect(@csv.integer("int", 1)).to be(11)
87
88
  expect(@csv.int("int", 1)).to be(11)
89
+ expect(@csv.integer("int", (0..1))).to eql([10, 11])
88
90
  end
89
91
 
90
92
  it "returns float values" do
91
93
  expect(@csv.float("float")).to eq(1.1)
92
94
  expect(@csv.float("float", 1)).to eq(2.2)
95
+ expect(@csv.float("float", 2)).to eq(3.3)
96
+ expect(@csv.float("float", (0..1))).to eql([1.1, 2.2])
97
+ expect(@csv.float("float", (1..2))).to eql([2.2, 3.3])
98
+ expect(@csv.float("float", (0..-1))).to eql([1.1, 2.2, 3.3])
99
+ end
100
+
101
+ it "returns string values" do
102
+ expect(@csv.string("string")).to eq("test")
103
+ expect(@csv.str("string", 1)).to eq("text with space")
104
+ expect(@csv.str("string", (0..-1))).to eq(["test", "text with space"])
105
+ end
106
+
107
+ it "returns symbol values" do
108
+ expect(@csv.symbol("string")).to eq(:test)
109
+ # This works but please don't do this! Symbols with spaces is ugly!
110
+ expect(@csv.sym("string", 1)).to eq(:"text with space")
111
+ expect(@csv.sym("string", (0..-1))).to eq([:test, :"text with space"])
93
112
  end
94
113
  end
95
114
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cosmos
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.3
4
+ version: 4.1.0
5
5
  platform: java
6
6
  authors:
7
7
  - Ryan Melton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-11 00:00:00.000000000 Z
12
+ date: 2017-11-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  requirement: !ruby/object:Gem::Requirement
@@ -178,7 +178,7 @@ dependencies:
178
178
  requirements:
179
179
  - - "~>"
180
180
  - !ruby/object:Gem::Version
181
- version: 1.1.0
181
+ version: 1.2.1
182
182
  name: rubyzip
183
183
  prerelease: false
184
184
  type: :runtime
@@ -186,7 +186,7 @@ dependencies:
186
186
  requirements:
187
187
  - - "~>"
188
188
  - !ruby/object:Gem::Version
189
- version: 1.1.0
189
+ version: 1.2.1
190
190
  - !ruby/object:Gem::Dependency
191
191
  requirement: !ruby/object:Gem::Requirement
192
192
  requirements:
@@ -201,6 +201,48 @@ dependencies:
201
201
  - - "~>"
202
202
  - !ruby/object:Gem::Version
203
203
  version: '1.6'
204
+ - !ruby/object:Gem::Dependency
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: 3.10.0
210
+ name: puma
211
+ prerelease: false
212
+ type: :runtime
213
+ version_requirements: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - "~>"
216
+ - !ruby/object:Gem::Version
217
+ version: 3.10.0
218
+ - !ruby/object:Gem::Dependency
219
+ requirement: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - "~>"
222
+ - !ruby/object:Gem::Version
223
+ version: 2.0.3
224
+ name: rack
225
+ prerelease: false
226
+ type: :runtime
227
+ version_requirements: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - "~>"
230
+ - !ruby/object:Gem::Version
231
+ version: 2.0.3
232
+ - !ruby/object:Gem::Dependency
233
+ requirement: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - "~>"
236
+ - !ruby/object:Gem::Version
237
+ version: 2.8.3
238
+ name: httpclient
239
+ prerelease: false
240
+ type: :runtime
241
+ version_requirements: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - "~>"
244
+ - !ruby/object:Gem::Version
245
+ version: 2.8.3
204
246
  - !ruby/object:Gem::Dependency
205
247
  requirement: !ruby/object:Gem::Requirement
206
248
  requirements:
@@ -346,15 +388,15 @@ dependencies:
346
388
  requirements:
347
389
  - - "~>"
348
390
  - !ruby/object:Gem::Version
349
- version: '0.8'
350
- name: coveralls
391
+ version: '0.1'
392
+ name: codecov
351
393
  prerelease: false
352
394
  type: :development
353
395
  version_requirements: !ruby/object:Gem::Requirement
354
396
  requirements:
355
397
  - - "~>"
356
398
  - !ruby/object:Gem::Version
357
- version: '0.8'
399
+ version: '0.1'
358
400
  - !ruby/object:Gem::Dependency
359
401
  requirement: !ruby/object:Gem::Requirement
360
402
  requirements:
@@ -399,6 +441,7 @@ files:
399
441
  - Manifest.txt
400
442
  - README.md
401
443
  - Rakefile
444
+ - appveyor.yml
402
445
  - autohotkey/config/data/attitude.bin
403
446
  - autohotkey/config/data/diamond.STL
404
447
  - autohotkey/config/data/groundoff.gif
@@ -760,6 +803,7 @@ files:
760
803
  - demo/config/targets/INST/cmd_tlm/inst_cmds.txt
761
804
  - demo/config/targets/INST/cmd_tlm/inst_tlm.txt
762
805
  - demo/config/targets/INST/cmd_tlm_server.txt
806
+ - demo/config/targets/INST/cmd_tlm_server2.txt
763
807
  - demo/config/targets/INST/doc/README.txt
764
808
  - demo/config/targets/INST/lib/example_limits_response.rb
765
809
  - demo/config/targets/INST/lib/inst_dump_component.rb
@@ -807,6 +851,7 @@ files:
807
851
  - demo/config/targets/TEMPLATED/cmd_tlm_server.txt
808
852
  - demo/config/targets/TEMPLATED/lib/templated_interface.rb
809
853
  - demo/config/targets/TEMPLATED/target.txt
854
+ - demo/config/tools/cmd_sequence/cmd_sequence.txt
810
855
  - demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt
811
856
  - demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt
812
857
  - demo/config/tools/data_viewer/data_viewer.txt
@@ -849,6 +894,7 @@ files:
849
894
  - demo/config/tools/tlm_extractor/tlm_extractor4.txt
850
895
  - demo/config/tools/tlm_grapher/README.txt
851
896
  - demo/config/tools/tlm_viewer/tlm_viewer.txt
897
+ - demo/lib/cmd_sequence_exporter.rb
852
898
  - demo/lib/example_background_task.rb
853
899
  - demo/lib/example_target.rb
854
900
  - demo/lib/scpi_target.rb
@@ -877,6 +923,7 @@ files:
877
923
  - demo/procedures/cosmos_api_test.rb
878
924
  - demo/procedures/example_test.rb
879
925
  - demo/procedures/plot_test.rb
926
+ - demo/procedures/replay_test.rb
880
927
  - demo/procedures/run_example_test.rb
881
928
  - demo/procedures/test.rb
882
929
  - demo/tools/CmdExtractor
@@ -1344,6 +1391,7 @@ files:
1344
1391
  - lib/cosmos/io/io_multiplexer.rb
1345
1392
  - lib/cosmos/io/json_drb.rb
1346
1393
  - lib/cosmos/io/json_drb_object.rb
1394
+ - lib/cosmos/io/json_drb_rack.rb
1347
1395
  - lib/cosmos/io/json_rpc.rb
1348
1396
  - lib/cosmos/io/posix_serial_driver.rb
1349
1397
  - lib/cosmos/io/raw_logger.rb
@@ -1388,6 +1436,7 @@ files:
1388
1436
  - lib/cosmos/script/commands.rb
1389
1437
  - lib/cosmos/script/extract.rb
1390
1438
  - lib/cosmos/script/limits.rb
1439
+ - lib/cosmos/script/replay.rb
1391
1440
  - lib/cosmos/script/script.rb
1392
1441
  - lib/cosmos/script/scripting.rb
1393
1442
  - lib/cosmos/script/telemetry.rb
@@ -1417,12 +1466,14 @@ files:
1417
1466
  - lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb
1418
1467
  - lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb
1419
1468
  - lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb
1469
+ - lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb
1420
1470
  - lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb
1421
1471
  - lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb
1422
1472
  - lib/cosmos/tools/cmd_tlm_server/interface_thread.rb
1423
1473
  - lib/cosmos/tools/cmd_tlm_server/interfaces.rb
1424
1474
  - lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb
1425
1475
  - lib/cosmos/tools/cmd_tlm_server/packet_logging.rb
1476
+ - lib/cosmos/tools/cmd_tlm_server/replay_backend.rb
1426
1477
  - lib/cosmos/tools/cmd_tlm_server/router_thread.rb
1427
1478
  - lib/cosmos/tools/cmd_tlm_server/routers.rb
1428
1479
  - lib/cosmos/tools/config_editor/config_editor.rb
@@ -1441,7 +1492,6 @@ files:
1441
1492
  - lib/cosmos/tools/opengl_builder/scene_config.rb
1442
1493
  - lib/cosmos/tools/packet_viewer/packet_viewer.rb
1443
1494
  - lib/cosmos/tools/replay/replay.rb
1444
- - lib/cosmos/tools/replay/replay_server.rb
1445
1495
  - lib/cosmos/tools/script_runner/script_audit.rb
1446
1496
  - lib/cosmos/tools/script_runner/script_runner.rb
1447
1497
  - lib/cosmos/tools/script_runner/script_runner_config.rb
@@ -1610,6 +1660,8 @@ files:
1610
1660
  - spec/core_ext/time_spec.rb
1611
1661
  - spec/gui/line_graph/line_clip_spec.rb
1612
1662
  - spec/gui/qt_spec.rb
1663
+ - spec/gui/utilities/script_module_gui_spec.rb
1664
+ - spec/install/config/data/data.txt
1613
1665
  - spec/install/config/system/system.txt
1614
1666
  - spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt
1615
1667
  - spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt
@@ -1949,7 +2001,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
1949
2001
  requirements:
1950
2002
  - - "~>"
1951
2003
  - !ruby/object:Gem::Version
1952
- version: '2'
2004
+ version: '2.2'
1953
2005
  required_rubygems_version: !ruby/object:Gem::Requirement
1954
2006
  requirements:
1955
2007
  - - ">="