cosmos 3.8.2 → 3.8.3
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.
- checksums.yaml +4 -4
- data/Manifest.txt +5 -5
- data/Rakefile +8 -2
- data/autohotkey/tools/autohotkey.rb +3 -3
- data/data/crc.txt +27 -27
- data/demo/Launcher.bat +3 -3
- data/demo/config/data/crc.txt +27 -27
- data/demo/{procedures → config/targets/INST/procedures}/checks.rb +0 -0
- data/demo/{procedures → config/targets/INST/procedures}/collect.rb +2 -2
- data/demo/{procedures → config/targets/INST/procedures}/disconnect.rb +0 -0
- data/demo/{procedures/clear_util.rb → config/targets/INST/procedures/utilities/clear.rb} +0 -0
- data/demo/{procedures/collect_util.rb → config/targets/INST/procedures/utilities/collect.rb} +2 -2
- data/demo/config/targets/INST/screens/commanding.txt +3 -3
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +7 -7
- data/demo/procedures/plot_test.rb +1 -1
- data/demo/tools/CmdExtractor.bat +3 -3
- data/demo/tools/CmdSender.bat +3 -3
- data/demo/tools/CmdTlmServer.bat +3 -3
- data/demo/tools/DataViewer.bat +3 -3
- data/demo/tools/ExampleTarget.bat +3 -3
- data/demo/tools/HandbookCreator.bat +3 -3
- data/demo/tools/Launcher.bat +3 -3
- data/demo/tools/LimitsMonitor.bat +3 -3
- data/demo/tools/OpenGLBuilder.bat +3 -3
- data/demo/tools/PacketViewer.bat +3 -3
- data/demo/tools/Replay.bat +3 -3
- data/demo/tools/ScpiTarget.bat +3 -3
- data/demo/tools/ScriptRunner.bat +3 -3
- data/demo/tools/TableManager.bat +3 -3
- data/demo/tools/TestRunner.bat +3 -3
- data/demo/tools/TlmExtractor.bat +3 -3
- data/demo/tools/TlmGrapher.bat +3 -3
- data/demo/tools/TlmViewer.bat +3 -3
- data/demo/tools/ToolLaunch.bat +3 -6
- data/ext/cosmos/ext/packet/packet.c +10 -0
- data/install/config/data/crc.txt +17 -17
- data/install/tools/CmdExtractor.bat +3 -3
- data/install/tools/CmdSender.bat +3 -3
- data/install/tools/CmdTlmServer.bat +3 -3
- data/install/tools/DataViewer.bat +3 -3
- data/install/tools/HandbookCreator.bat +3 -3
- data/install/tools/Launcher.bat +3 -3
- data/install/tools/LimitsMonitor.bat +3 -3
- data/install/tools/OpenGLBuilder.bat +3 -3
- data/install/tools/PacketViewer.bat +3 -3
- data/install/tools/Replay.bat +3 -3
- data/install/tools/ScriptRunner.bat +3 -3
- data/install/tools/TableManager.bat +3 -3
- data/install/tools/TestRunner.bat +3 -3
- data/install/tools/TlmExtractor.bat +3 -3
- data/install/tools/TlmGrapher.bat +3 -3
- data/install/tools/TlmViewer.bat +3 -3
- data/install/tools/ToolLaunch.bat +3 -6
- data/lib/cosmos/config/config_parser.rb +10 -2
- data/lib/cosmos/gui/qt_tool.rb +6 -0
- data/lib/cosmos/gui/utilities/screenshot.rb +8 -0
- data/lib/cosmos/gui/utilities/script_module_gui.rb +37 -11
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +3 -3
- data/lib/cosmos/interfaces/udp_interface.rb +9 -2
- data/lib/cosmos/packet_logs/packet_log_reader.rb +1 -0
- data/lib/cosmos/packets/commands.rb +70 -74
- data/lib/cosmos/packets/packet.rb +14 -7
- data/lib/cosmos/script/scripting.rb +9 -7
- data/lib/cosmos/system/system.rb +4 -0
- data/lib/cosmos/system/target.rb +2 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +10 -10
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -1
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +5 -15
- data/lib/cosmos/tools/script_runner/script_runner.rb +40 -21
- data/lib/cosmos/tools/table_manager/table.rb +2 -2
- data/lib/cosmos/tools/table_manager/table_config.rb +18 -10
- data/lib/cosmos/tools/table_manager/table_manager.rb +61 -59
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +24 -56
- data/lib/cosmos/tools/test_runner/test_runner.rb +15 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +9 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +9 -1
- data/lib/cosmos/top_level.rb +5 -5
- data/lib/cosmos/version.rb +4 -4
- data/spec/config/config_parser_spec.rb +40 -2
- data/spec/packet_logs/packet_log_reader_spec.rb +66 -2
- data/spec/packets/packet_spec.rb +27 -0
- data/spec/script/scripting_spec.rb +7 -2
- data/spec/spec_helper.rb +4 -5
- data/spec/system/system_spec.rb +18 -0
- metadata +7 -7
@@ -102,7 +102,7 @@ module Cosmos
|
|
102
102
|
ensure
|
103
103
|
reset()
|
104
104
|
end
|
105
|
-
|
105
|
+
bin_files
|
106
106
|
end
|
107
107
|
|
108
108
|
# Opens a specified binary file using a specified definition file as the interpreter
|
@@ -143,8 +143,7 @@ module Cosmos
|
|
143
143
|
result << "Error(s) in #{table.name}:\n" + table_result
|
144
144
|
end
|
145
145
|
end
|
146
|
-
|
147
|
-
return result
|
146
|
+
result
|
148
147
|
end
|
149
148
|
|
150
149
|
def file_hex
|
@@ -156,10 +155,7 @@ module Cosmos
|
|
156
155
|
data << table.buffer
|
157
156
|
end
|
158
157
|
|
159
|
-
|
160
|
-
str << "\n\nTotal Bytes Read: %d" % size
|
161
|
-
|
162
|
-
return str
|
158
|
+
"#{data.formatted}\n\nTotal Bytes Read: #{data.length}"
|
163
159
|
end
|
164
160
|
|
165
161
|
# Generate the RPT file for the currently opened file
|
@@ -304,31 +300,31 @@ module Cosmos
|
|
304
300
|
end
|
305
301
|
|
306
302
|
x = table.read(item_def.name, :RAW)
|
303
|
+
if item_def.data_type == :STRING
|
304
|
+
if x.length > item_def.bit_size / 8
|
305
|
+
result << " #{item_def.name}: #{x} must be less than #{item_def.bit_size / 8} characters\n"
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
307
309
|
unless item_def.range.nil?
|
308
|
-
if
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
x = "0x%X" % x
|
320
|
-
else
|
321
|
-
range_first = item_def.range.first
|
322
|
-
range_last = item_def.range.last
|
323
|
-
x = table.read(item_def.name)
|
324
|
-
end
|
325
|
-
result << " #{item_def.name}: #{x} outside valid range of #{range_first}..#{range_last}\n"
|
310
|
+
# check to see if the value lies within its valid range
|
311
|
+
if not item_def.range.include?(x)
|
312
|
+
# if the value is displayed as hex, display the range as hex
|
313
|
+
if item_def.display_type == :HEX
|
314
|
+
range_first = "0x%X" % item_def.range.first
|
315
|
+
range_last = "0x%X" % item_def.range.last
|
316
|
+
x = "0x%X" % x
|
317
|
+
else
|
318
|
+
range_first = item_def.range.first
|
319
|
+
range_last = item_def.range.last
|
320
|
+
x = table.read(item_def.name)
|
326
321
|
end
|
322
|
+
result << " #{item_def.name}: #{x} outside valid range of #{range_first}..#{range_last}\n"
|
327
323
|
end
|
328
324
|
end
|
329
325
|
end # end each column
|
330
326
|
end # end each row
|
331
|
-
|
327
|
+
result
|
332
328
|
end
|
333
329
|
|
334
330
|
def table_default(table_name)
|
@@ -342,11 +338,7 @@ module Cosmos
|
|
342
338
|
table = @table_def.get_table(table_name)
|
343
339
|
raise "Please open a table first." unless table
|
344
340
|
|
345
|
-
|
346
|
-
str, size = create_hex_string(data)
|
347
|
-
str << "\n\nTotal Bytes Read: %d" % size
|
348
|
-
|
349
|
-
return str
|
341
|
+
"#{table.buffer.formatted}\n\nTotal Bytes Read: #{table.buffer.length}"
|
350
342
|
end
|
351
343
|
|
352
344
|
# option to save the currently displayed table as a stand alone binary file
|
@@ -442,7 +434,6 @@ module Cosmos
|
|
442
434
|
# Override on_save to perform additional actions before the file is
|
443
435
|
# saved to disk.
|
444
436
|
def on_save
|
445
|
-
return
|
446
437
|
end
|
447
438
|
|
448
439
|
# Determines the string representation of an item as it should be printed in a RPT file
|
@@ -463,30 +454,7 @@ module Cosmos
|
|
463
454
|
when :HEX
|
464
455
|
result = @table_def.format_hex(table, item_def)
|
465
456
|
end
|
466
|
-
|
467
|
-
return result
|
468
|
-
end
|
469
|
-
|
470
|
-
# Create a hex string representation of the given binary data string
|
471
|
-
def create_hex_string(data)
|
472
|
-
index = 0
|
473
|
-
str = ""
|
474
|
-
while index < data.length
|
475
|
-
# after 16 bytes insert a newline in the display
|
476
|
-
if index % 16 == 0
|
477
|
-
# don't insert a newline the first time
|
478
|
-
if index != 0
|
479
|
-
str << "\n"
|
480
|
-
end
|
481
|
-
str << "0x%08X: " % index
|
482
|
-
# every 4 bytes insert a space for readability
|
483
|
-
elsif index % 4 == 0
|
484
|
-
str << " "
|
485
|
-
end
|
486
|
-
str << "%02X" % data.getbyte(index)
|
487
|
-
index += 1
|
488
|
-
end
|
489
|
-
return str, index
|
457
|
+
result
|
490
458
|
end
|
491
459
|
|
492
460
|
# Set all the binary data in the table definition to the default values
|
@@ -1112,16 +1112,21 @@ module Cosmos
|
|
1112
1112
|
@@test_suites = @@test_suites.select {|my_suite| my_suite.name == 'CustomTestSuite'}
|
1113
1113
|
tests = []
|
1114
1114
|
ObjectSpace.each_object(Class) do |object|
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1115
|
+
begin
|
1116
|
+
next if object.name == 'CustomTestSuite'
|
1117
|
+
if (object.ancestors.include?(TestSuite) &&
|
1118
|
+
object != TestSuite &&
|
1119
|
+
!ignored_test_suite_classes.include?(object))
|
1120
|
+
@@test_suites << object.new
|
1121
|
+
end
|
1122
|
+
if (object.ancestors.include?(Test) &&
|
1123
|
+
object != Test &&
|
1124
|
+
!ignored_test_classes.include?(object))
|
1125
|
+
tests << object
|
1126
|
+
end
|
1127
|
+
rescue
|
1128
|
+
# Ignore Classes where name, etc may raise exception
|
1129
|
+
# Bundler::Molinillo::DependencyGraph::Action is one example
|
1125
1130
|
end
|
1126
1131
|
end
|
1127
1132
|
# Raise error if no test suites or tests
|
@@ -16,16 +16,23 @@ module Cosmos
|
|
16
16
|
class CheckbuttonWidget < Qt::CheckBox
|
17
17
|
include Widget
|
18
18
|
|
19
|
-
def initialize(parent_layout, checkbutton_text)
|
19
|
+
def initialize(parent_layout, checkbutton_text, checked = 'UNCHECKED')
|
20
20
|
super()
|
21
21
|
setText(checkbutton_text.to_s)
|
22
|
+
case checked.to_s
|
23
|
+
when 'CHECKED'
|
24
|
+
setChecked(true)
|
25
|
+
when 'UNCHECKED'
|
26
|
+
setChecked(false)
|
27
|
+
else
|
28
|
+
raise "Unknown option '#{checked}' given to #{self.class}"
|
29
|
+
end
|
22
30
|
parent_layout.addWidget(self) if parent_layout
|
23
31
|
end
|
24
32
|
|
25
33
|
def checked?
|
26
34
|
self.isChecked()
|
27
35
|
end
|
28
|
-
|
29
36
|
end
|
30
37
|
|
31
38
|
end # module Cosmos
|
@@ -15,7 +15,7 @@ module Cosmos
|
|
15
15
|
class ComboboxWidget < Qt::ComboBox
|
16
16
|
include Widget
|
17
17
|
|
18
|
-
def initialize
|
18
|
+
def initialize(parent_layout, *combobox_items)
|
19
19
|
super()
|
20
20
|
addItems(combobox_items)
|
21
21
|
self.maxVisibleItems = combobox_items.length > 6 ? 6 : combobox_items.length
|
@@ -16,9 +16,17 @@ module Cosmos
|
|
16
16
|
class RadiobuttonWidget < Qt::RadioButton
|
17
17
|
include Widget
|
18
18
|
|
19
|
-
def initialize
|
19
|
+
def initialize(parent_layout, radiobutton_text, checked = 'UNCHECKED')
|
20
20
|
super()
|
21
21
|
setText(radiobutton_text.to_s)
|
22
|
+
case checked.to_s
|
23
|
+
when 'CHECKED'
|
24
|
+
setChecked(true)
|
25
|
+
when 'UNCHECKED'
|
26
|
+
setChecked(false)
|
27
|
+
else
|
28
|
+
raise "Unknown option '#{checked}' given to #{self.class}"
|
29
|
+
end
|
22
30
|
parent_layout.addWidget(self) if parent_layout
|
23
31
|
end
|
24
32
|
|
data/lib/cosmos/top_level.rb
CHANGED
@@ -457,11 +457,11 @@ module Cosmos
|
|
457
457
|
file.puts "Cosmos::USERPATH: #{Cosmos::USERPATH}"
|
458
458
|
file.puts ""
|
459
459
|
file.puts "Environment:"
|
460
|
-
file.puts "RUBYOPT: #{ENV['
|
461
|
-
file.puts "RUBYLIB: #{ENV['
|
462
|
-
file.puts "GEM_PATH: #{ENV['
|
463
|
-
file.puts "GEMRC: #{ENV['
|
464
|
-
file.puts "RI_DEVKIT: #{ENV['
|
460
|
+
file.puts "RUBYOPT: #{ENV['RUBYOPT']}"
|
461
|
+
file.puts "RUBYLIB: #{ENV['RUBYLIB']}"
|
462
|
+
file.puts "GEM_PATH: #{ENV['GEM_PATH']}"
|
463
|
+
file.puts "GEMRC: #{ENV['GEMRC']}"
|
464
|
+
file.puts "RI_DEVKIT: #{ENV['RI_DEVKIT']}"
|
465
465
|
file.puts "GEM_HOME: #{ENV['GEM_HOME']}"
|
466
466
|
file.puts "PATH: #{ENV['PATH']}"
|
467
467
|
file.puts ""
|
data/lib/cosmos/version.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# encoding: ascii-8bit
|
2
2
|
|
3
|
-
COSMOS_VERSION = '3.8.
|
3
|
+
COSMOS_VERSION = '3.8.3'
|
4
4
|
module Cosmos
|
5
5
|
module Version
|
6
6
|
MAJOR = '3'
|
7
7
|
MINOR = '8'
|
8
|
-
PATCH = '
|
9
|
-
BUILD = '
|
8
|
+
PATCH = '3'
|
9
|
+
BUILD = 'e6be858ed961d6fe872435be2b74c3499167a62a'
|
10
10
|
end
|
11
|
-
VERSION = '3.8.
|
11
|
+
VERSION = '3.8.3'
|
12
12
|
end
|
@@ -55,7 +55,45 @@ module Cosmos
|
|
55
55
|
tf.unlink
|
56
56
|
end
|
57
57
|
|
58
|
-
it "
|
58
|
+
it "supports ERB syntax" do
|
59
|
+
tf = Tempfile.new('unittest')
|
60
|
+
tf.puts "KEYWORD <%= 5 * 2 %>"
|
61
|
+
tf.close
|
62
|
+
|
63
|
+
@cp.parse_file(tf.path) do |keyword, params|
|
64
|
+
expect(keyword).to eql "KEYWORD"
|
65
|
+
expect(params[0]).to eql "10"
|
66
|
+
end
|
67
|
+
tf.unlink
|
68
|
+
end
|
69
|
+
|
70
|
+
it "supports ERB partials via render" do
|
71
|
+
tf2 = Tempfile.new('partial.txt')
|
72
|
+
tf2.puts '<% if output %>'
|
73
|
+
tf2.puts 'KEYWORD <%= id %> <%= desc %>'
|
74
|
+
tf2.puts '<% end %>'
|
75
|
+
tf2.close
|
76
|
+
|
77
|
+
# Run the test twice to verify the KEYWORD gets rendered and then doesn't
|
78
|
+
[true, false].each do |output|
|
79
|
+
tf = Tempfile.new('unittest')
|
80
|
+
tf.puts "<%= render '#{File.basename(tf2.path)}', locals: {id: 1, desc: 'Description', output: #{output}} %>"
|
81
|
+
tf.close
|
82
|
+
|
83
|
+
yielded = false
|
84
|
+
@cp.parse_file(tf.path) do |keyword, params|
|
85
|
+
yielded = true
|
86
|
+
expect(keyword).to eql "KEYWORD"
|
87
|
+
expect(params[0]).to eql "1"
|
88
|
+
expect(params[1]).to eql "Description"
|
89
|
+
end
|
90
|
+
expect(yielded).to eql output
|
91
|
+
tf.unlink
|
92
|
+
end
|
93
|
+
tf2.unlink
|
94
|
+
end
|
95
|
+
|
96
|
+
it "optionally does not remove quotes" do
|
59
97
|
tf = Tempfile.new('unittest')
|
60
98
|
line = "KEYWORD PARAM1 PARAM2 'PARAM 3'"
|
61
99
|
tf.puts line
|
@@ -106,7 +144,7 @@ module Cosmos
|
|
106
144
|
tf.unlink
|
107
145
|
end
|
108
146
|
|
109
|
-
it "
|
147
|
+
it "optionally yields comment lines" do
|
110
148
|
tf = Tempfile.new('unittest')
|
111
149
|
tf.puts "KEYWORD1 PARAM1"
|
112
150
|
tf.puts "# This is a comment"
|
@@ -39,8 +39,8 @@ module Cosmos
|
|
39
39
|
plw.write(pkt)
|
40
40
|
@cmd_packets << pkt
|
41
41
|
plw.stop
|
42
|
-
plw = PacketLogWriter.new(:TLM,nil,true,nil,10000000,nil,false)
|
43
42
|
|
43
|
+
plw = PacketLogWriter.new(:TLM,nil,true,nil,10000000,nil,false)
|
44
44
|
@tlm_packets = []
|
45
45
|
pkt = System.telemetry.packet("COSMOS","VERSION").clone
|
46
46
|
pkt.received_time = Time.new(2020,2,1,12,30,15)
|
@@ -259,7 +259,7 @@ module Cosmos
|
|
259
259
|
end
|
260
260
|
end
|
261
261
|
|
262
|
-
it "
|
262
|
+
it "optionally does not identify and define packets" do
|
263
263
|
index = 0
|
264
264
|
@plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], false) do |packet|
|
265
265
|
expect(packet.target_name).to eql @cmd_packets[index].target_name
|
@@ -278,6 +278,70 @@ module Cosmos
|
|
278
278
|
end
|
279
279
|
end
|
280
280
|
|
281
|
+
it "increments the command received count" do
|
282
|
+
plw = PacketLogWriter.new(:CMD,'cnt',true,nil,10000000,nil,false)
|
283
|
+
plw.write(System.commands.packet("INST","COLLECT").clone)
|
284
|
+
plw.write(System.commands.packet("INST","ABORT").clone)
|
285
|
+
plw.write(System.commands.packet("INST","ABORT").clone)
|
286
|
+
plw.write(System.commands.packet("INST","COLLECT").clone)
|
287
|
+
plw.write(System.commands.packet("COSMOS","STOPLOGGING").clone)
|
288
|
+
plw.write(System.commands.packet("INST","ABORT").clone)
|
289
|
+
plw.stop
|
290
|
+
|
291
|
+
cnt = {}
|
292
|
+
@plr.each(Dir[File.join(@log_path,"*cntcmd.bin")][0]) do |packet|
|
293
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] ||= 0
|
294
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] += 1
|
295
|
+
expect(packet.received_count).to eql cnt["#{packet.target_name}_#{packet.packet_name}"]
|
296
|
+
end
|
297
|
+
|
298
|
+
# Resetting a packet should reset only that packet's received_count
|
299
|
+
collect = System.commands.packet("INST","COLLECT")
|
300
|
+
collect.reset
|
301
|
+
cnt["INST_COLLECT"] = 0
|
302
|
+
expect(collect.received_count).to eql 0
|
303
|
+
|
304
|
+
@plr.each(Dir[File.join(@log_path,"*cntcmd.bin")][0]) do |packet|
|
305
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] ||= 0
|
306
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] += 1
|
307
|
+
expect(packet.received_count).to eql cnt["#{packet.target_name}_#{packet.packet_name}"]
|
308
|
+
end
|
309
|
+
|
310
|
+
Dir[File.join(@log_path,"*cntcmd.bin")].each {|file| FileUtils.rm file }
|
311
|
+
end
|
312
|
+
|
313
|
+
it "increments the telemetry received count" do
|
314
|
+
plw = PacketLogWriter.new(:TLM,'cnt',true,nil,10000000,nil,false)
|
315
|
+
plw.write(System.telemetry.packet("INST","HEALTH_STATUS").clone)
|
316
|
+
plw.write(System.telemetry.packet("INST","ADCS").clone)
|
317
|
+
plw.write(System.telemetry.packet("INST","ADCS").clone)
|
318
|
+
plw.write(System.telemetry.packet("INST","HEALTH_STATUS").clone)
|
319
|
+
plw.write(System.telemetry.packet("COSMOS","LIMITS_CHANGE").clone)
|
320
|
+
plw.write(System.telemetry.packet("INST","ADCS").clone)
|
321
|
+
plw.stop
|
322
|
+
|
323
|
+
cnt = {}
|
324
|
+
@plr.each(Dir[File.join(@log_path,"*cnttlm.bin")][0]) do |packet|
|
325
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] ||= 0
|
326
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] += 1
|
327
|
+
expect(packet.received_count).to eql cnt["#{packet.target_name}_#{packet.packet_name}"]
|
328
|
+
end
|
329
|
+
|
330
|
+
# Resetting a packet should reset only that packet's received_count
|
331
|
+
status = System.telemetry.packet("INST","HEALTH_STATUS")
|
332
|
+
status.reset
|
333
|
+
cnt["INST_HEALTH_STATUS"] = 0
|
334
|
+
expect(status.received_count).to eql 0
|
335
|
+
|
336
|
+
@plr.each(Dir[File.join(@log_path,"*cnttlm.bin")][0]) do |packet|
|
337
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] ||= 0
|
338
|
+
cnt["#{packet.target_name}_#{packet.packet_name}"] += 1
|
339
|
+
expect(packet.received_count).to eql cnt["#{packet.target_name}_#{packet.packet_name}"]
|
340
|
+
end
|
341
|
+
|
342
|
+
Dir[File.join(@log_path,"*cnttlm.bin")].each {|file| FileUtils.rm file }
|
343
|
+
end
|
344
|
+
|
281
345
|
it "returns all packets if the start time is before all" do
|
282
346
|
time = Time.new(2000,1,31,12,30,16)
|
283
347
|
index = 0
|
data/spec/packets/packet_spec.rb
CHANGED
@@ -832,6 +832,33 @@ module Cosmos
|
|
832
832
|
p.restore_defaults
|
833
833
|
expect(p.buffer).to eql "\x03\x04\x01\x02\x04\x06\x08\x0A"
|
834
834
|
end
|
835
|
+
|
836
|
+
it "writes all except skipped items back to their default values" do
|
837
|
+
p = Packet.new("tgt","pkt")
|
838
|
+
p.append_item("test1", 8, :UINT, 16)
|
839
|
+
i = p.get_item("TEST1")
|
840
|
+
i.default = [3,4]
|
841
|
+
p.write("test1", [1,2])
|
842
|
+
p.append_item("test2", 16, :UINT)
|
843
|
+
i = p.get_item("TEST2")
|
844
|
+
i.default = 0x0102
|
845
|
+
i.states = {"TRUE"=>0x0304}
|
846
|
+
p.write("test2", 0x0304)
|
847
|
+
p.append_item("test3", 32, :UINT)
|
848
|
+
i = p.get_item("TEST3")
|
849
|
+
i.default = 0x02030405
|
850
|
+
i.write_conversion = GenericConversion.new("value * 2")
|
851
|
+
p.write("test3", 0x01020304)
|
852
|
+
expect(p.buffer).to eql "\x01\x02\x03\x04\x02\x04\x06\x08"
|
853
|
+
p.restore_defaults(p.buffer(false), ["test1", "test2", "test3"])
|
854
|
+
expect(p.buffer).to eql "\x01\x02\x03\x04\x02\x04\x06\x08"
|
855
|
+
p.restore_defaults(p.buffer(false), ["test1", "test3"])
|
856
|
+
expect(p.buffer).to eql "\x01\x02\x01\x02\x02\x04\x06\x08"
|
857
|
+
p.restore_defaults(p.buffer(false), ["test3"])
|
858
|
+
expect(p.buffer).to eql "\x03\x04\x01\x02\x02\x04\x06\x08"
|
859
|
+
p.restore_defaults(p.buffer(false))
|
860
|
+
expect(p.buffer).to eql "\x03\x04\x01\x02\x04\x06\x08\x0A"
|
861
|
+
end
|
835
862
|
end
|
836
863
|
|
837
864
|
describe "enable_limits" do
|
@@ -474,9 +474,14 @@ module Cosmos
|
|
474
474
|
end
|
475
475
|
allow(ScriptRunnerFrame).to receive_message_chain(:instance, :use_instrumentation)
|
476
476
|
allow(ScriptRunnerFrame).to receive_message_chain(:instance, :use_instrumentation=)
|
477
|
-
|
477
|
+
script = File.join(Cosmos::USERPATH,'lib','example.rb')
|
478
|
+
File.open(script, 'w') { |file| file.puts "# Example script" }
|
479
|
+
not_cached = load_utility("example.rb")
|
480
|
+
expect(not_cached).to eq true
|
478
481
|
# This one should use the cached version
|
479
|
-
load_utility("
|
482
|
+
not_cached = load_utility("example.rb")
|
483
|
+
expect(not_cached).to eq false
|
484
|
+
File.delete script
|
480
485
|
end
|
481
486
|
end
|
482
487
|
|