cosmos 4.0.3-java → 4.1.0-java

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="