cosmos 4.0.3 → 4.1.0

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 +14 -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: ruby
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-03 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
  name: bundler
@@ -179,14 +179,14 @@ dependencies:
179
179
  requirements:
180
180
  - - "~>"
181
181
  - !ruby/object:Gem::Version
182
- version: 1.1.0
182
+ version: 1.2.1
183
183
  type: :runtime
184
184
  prerelease: false
185
185
  version_requirements: !ruby/object:Gem::Requirement
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
  name: nokogiri
192
192
  requirement: !ruby/object:Gem::Requirement
@@ -241,6 +241,48 @@ dependencies:
241
241
  - - ">="
242
242
  - !ruby/object:Gem::Version
243
243
  version: 4.8.6.2
244
+ - !ruby/object:Gem::Dependency
245
+ name: puma
246
+ requirement: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - "~>"
249
+ - !ruby/object:Gem::Version
250
+ version: 3.10.0
251
+ type: :runtime
252
+ prerelease: false
253
+ version_requirements: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: 3.10.0
258
+ - !ruby/object:Gem::Dependency
259
+ name: rack
260
+ requirement: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: 2.0.3
265
+ type: :runtime
266
+ prerelease: false
267
+ version_requirements: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: 2.0.3
272
+ - !ruby/object:Gem::Dependency
273
+ name: httpclient
274
+ requirement: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: 2.8.3
279
+ type: :runtime
280
+ prerelease: false
281
+ version_requirements: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: 2.8.3
244
286
  - !ruby/object:Gem::Dependency
245
287
  name: rspec
246
288
  requirement: !ruby/object:Gem::Requirement
@@ -382,19 +424,19 @@ dependencies:
382
424
  - !ruby/object:Gem::Version
383
425
  version: '0.11'
384
426
  - !ruby/object:Gem::Dependency
385
- name: coveralls
427
+ name: codecov
386
428
  requirement: !ruby/object:Gem::Requirement
387
429
  requirements:
388
430
  - - "~>"
389
431
  - !ruby/object:Gem::Version
390
- version: '0.8'
432
+ version: '0.1'
391
433
  type: :development
392
434
  prerelease: false
393
435
  version_requirements: !ruby/object:Gem::Requirement
394
436
  requirements:
395
437
  - - "~>"
396
438
  - !ruby/object:Gem::Version
397
- version: '0.8'
439
+ version: '0.1'
398
440
  - !ruby/object:Gem::Dependency
399
441
  name: benchmark-ips
400
442
  requirement: !ruby/object:Gem::Requirement
@@ -467,6 +509,7 @@ files:
467
509
  - Manifest.txt
468
510
  - README.md
469
511
  - Rakefile
512
+ - appveyor.yml
470
513
  - autohotkey/config/data/attitude.bin
471
514
  - autohotkey/config/data/diamond.STL
472
515
  - autohotkey/config/data/groundoff.gif
@@ -828,6 +871,7 @@ files:
828
871
  - demo/config/targets/INST/cmd_tlm/inst_cmds.txt
829
872
  - demo/config/targets/INST/cmd_tlm/inst_tlm.txt
830
873
  - demo/config/targets/INST/cmd_tlm_server.txt
874
+ - demo/config/targets/INST/cmd_tlm_server2.txt
831
875
  - demo/config/targets/INST/doc/README.txt
832
876
  - demo/config/targets/INST/lib/example_limits_response.rb
833
877
  - demo/config/targets/INST/lib/inst_dump_component.rb
@@ -875,6 +919,7 @@ files:
875
919
  - demo/config/targets/TEMPLATED/cmd_tlm_server.txt
876
920
  - demo/config/targets/TEMPLATED/lib/templated_interface.rb
877
921
  - demo/config/targets/TEMPLATED/target.txt
922
+ - demo/config/tools/cmd_sequence/cmd_sequence.txt
878
923
  - demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt
879
924
  - demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt
880
925
  - demo/config/tools/data_viewer/data_viewer.txt
@@ -917,6 +962,7 @@ files:
917
962
  - demo/config/tools/tlm_extractor/tlm_extractor4.txt
918
963
  - demo/config/tools/tlm_grapher/README.txt
919
964
  - demo/config/tools/tlm_viewer/tlm_viewer.txt
965
+ - demo/lib/cmd_sequence_exporter.rb
920
966
  - demo/lib/example_background_task.rb
921
967
  - demo/lib/example_target.rb
922
968
  - demo/lib/scpi_target.rb
@@ -945,6 +991,7 @@ files:
945
991
  - demo/procedures/cosmos_api_test.rb
946
992
  - demo/procedures/example_test.rb
947
993
  - demo/procedures/plot_test.rb
994
+ - demo/procedures/replay_test.rb
948
995
  - demo/procedures/run_example_test.rb
949
996
  - demo/procedures/test.rb
950
997
  - demo/tools/CmdExtractor
@@ -1412,6 +1459,7 @@ files:
1412
1459
  - lib/cosmos/io/io_multiplexer.rb
1413
1460
  - lib/cosmos/io/json_drb.rb
1414
1461
  - lib/cosmos/io/json_drb_object.rb
1462
+ - lib/cosmos/io/json_drb_rack.rb
1415
1463
  - lib/cosmos/io/json_rpc.rb
1416
1464
  - lib/cosmos/io/posix_serial_driver.rb
1417
1465
  - lib/cosmos/io/raw_logger.rb
@@ -1456,6 +1504,7 @@ files:
1456
1504
  - lib/cosmos/script/commands.rb
1457
1505
  - lib/cosmos/script/extract.rb
1458
1506
  - lib/cosmos/script/limits.rb
1507
+ - lib/cosmos/script/replay.rb
1459
1508
  - lib/cosmos/script/script.rb
1460
1509
  - lib/cosmos/script/scripting.rb
1461
1510
  - lib/cosmos/script/telemetry.rb
@@ -1485,12 +1534,14 @@ files:
1485
1534
  - lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb
1486
1535
  - lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb
1487
1536
  - lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb
1537
+ - lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb
1488
1538
  - lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb
1489
1539
  - lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb
1490
1540
  - lib/cosmos/tools/cmd_tlm_server/interface_thread.rb
1491
1541
  - lib/cosmos/tools/cmd_tlm_server/interfaces.rb
1492
1542
  - lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb
1493
1543
  - lib/cosmos/tools/cmd_tlm_server/packet_logging.rb
1544
+ - lib/cosmos/tools/cmd_tlm_server/replay_backend.rb
1494
1545
  - lib/cosmos/tools/cmd_tlm_server/router_thread.rb
1495
1546
  - lib/cosmos/tools/cmd_tlm_server/routers.rb
1496
1547
  - lib/cosmos/tools/config_editor/config_editor.rb
@@ -1509,7 +1560,6 @@ files:
1509
1560
  - lib/cosmos/tools/opengl_builder/scene_config.rb
1510
1561
  - lib/cosmos/tools/packet_viewer/packet_viewer.rb
1511
1562
  - lib/cosmos/tools/replay/replay.rb
1512
- - lib/cosmos/tools/replay/replay_server.rb
1513
1563
  - lib/cosmos/tools/script_runner/script_audit.rb
1514
1564
  - lib/cosmos/tools/script_runner/script_runner.rb
1515
1565
  - lib/cosmos/tools/script_runner/script_runner_config.rb
@@ -1678,6 +1728,8 @@ files:
1678
1728
  - spec/core_ext/time_spec.rb
1679
1729
  - spec/gui/line_graph/line_clip_spec.rb
1680
1730
  - spec/gui/qt_spec.rb
1731
+ - spec/gui/utilities/script_module_gui_spec.rb
1732
+ - spec/install/config/data/data.txt
1681
1733
  - spec/install/config/system/system.txt
1682
1734
  - spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt
1683
1735
  - spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt
@@ -2017,7 +2069,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
2017
2069
  requirements:
2018
2070
  - - "~>"
2019
2071
  - !ruby/object:Gem::Version
2020
- version: '2'
2072
+ version: '2.2'
2021
2073
  required_rubygems_version: !ruby/object:Gem::Requirement
2022
2074
  requirements:
2023
2075
  - - ">="