cosmos 4.0.3 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -5
- data/Manifest.txt +11 -1
- data/README.md +3 -2
- data/Rakefile +18 -4
- data/appveyor.yml +19 -0
- data/cosmos.gemspec +14 -3
- data/data/config/cmd_tlm_server.yaml +3 -0
- data/data/crc.txt +63 -60
- data/demo/config/targets/INST/cmd_tlm_server.txt +1 -0
- data/demo/config/targets/INST/cmd_tlm_server2.txt +7 -0
- data/demo/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +8 -12
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +7 -9
- data/demo/lib/cmd_sequence_exporter.rb +52 -0
- data/demo/lib/example_background_task.rb +1 -0
- data/demo/procedures/replay_test.rb +32 -0
- data/ext/cosmos/ext/structure/structure.c +39 -3
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +1 -0
- data/install/config/tools/launcher/launcher.txt +2 -0
- data/lib/cosmos/config/config_parser.rb +2 -0
- data/lib/cosmos/core_ext/io.rb +89 -60
- data/lib/cosmos/gui/qt.rb +5 -8
- data/lib/cosmos/gui/qt_tool.rb +8 -8
- data/lib/cosmos/gui/text/ruby_editor.rb +12 -12
- data/lib/cosmos/gui/utilities/script_module_gui.rb +9 -9
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +18 -17
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +2 -2
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +3 -0
- data/lib/cosmos/interfaces/udp_interface.rb +27 -14
- data/lib/cosmos/io/buffered_file.rb +0 -1
- data/lib/cosmos/io/json_drb.rb +134 -214
- data/lib/cosmos/io/json_drb_object.rb +22 -61
- data/lib/cosmos/io/json_drb_rack.rb +79 -0
- data/lib/cosmos/io/json_rpc.rb +27 -0
- data/lib/cosmos/io/udp_sockets.rb +102 -58
- data/lib/cosmos/packets/commands.rb +1 -1
- data/lib/cosmos/packets/structure.rb +1 -1
- data/lib/cosmos/packets/structure_item.rb +37 -5
- data/lib/cosmos/script/cmd_tlm_server.rb +76 -2
- data/lib/cosmos/script/replay.rb +60 -0
- data/lib/cosmos/script/script.rb +20 -2
- data/lib/cosmos/script/scripting.rb +9 -9
- data/lib/cosmos/script/tools.rb +14 -0
- data/lib/cosmos/system/system.rb +185 -92
- data/lib/cosmos/system/target.rb +1 -1
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +44 -4
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +4 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +7 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +347 -20
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +3 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +329 -111
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +13 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +261 -95
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +46 -35
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +18 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +39 -28
- data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +242 -0
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +24 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +18 -6
- data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +5 -4
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +375 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +10 -2
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +40 -5
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +18 -20
- data/lib/cosmos/tools/launcher/launcher_config.rb +5 -16
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +65 -39
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +19 -0
- data/lib/cosmos/tools/replay/replay.rb +5 -505
- data/lib/cosmos/tools/script_runner/script_audit.rb +1 -0
- data/lib/cosmos/tools/script_runner/script_runner.rb +3 -4
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +3 -4
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +44 -23
- data/lib/cosmos/tools/test_runner/results_writer.rb +4 -0
- data/lib/cosmos/tools/test_runner/test_runner.rb +0 -3
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +6 -2
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +26 -1
- data/lib/cosmos/tools/tlm_viewer/screen.rb +24 -1
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +25 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +24 -14
- data/lib/cosmos/top_level.rb +34 -24
- data/lib/cosmos/utilities/csv.rb +60 -8
- data/lib/cosmos/version.rb +5 -5
- data/spec/config/config_parser_spec.rb +10 -1
- data/spec/core_ext/socket_spec.rb +4 -2
- data/spec/gui/utilities/script_module_gui_spec.rb +102 -0
- data/spec/install/config/data/data.txt +1 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +2 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +1 -2
- data/spec/interfaces/protocols/template_protocol_spec.rb +72 -2
- data/spec/interfaces/serial_interface_spec.rb +1 -1
- data/spec/interfaces/udp_interface_spec.rb +14 -0
- data/spec/io/buffered_file_spec.rb +37 -0
- data/spec/io/json_drb_object_spec.rb +2 -15
- data/spec/io/json_drb_spec.rb +61 -121
- data/spec/io/udp_sockets_spec.rb +42 -2
- data/spec/packet_logs/packet_log_reader_spec.rb +5 -2
- data/spec/packets/binary_accessor_spec.rb +1 -1
- data/spec/packets/packet_item_spec.rb +1 -1
- data/spec/packets/structure_item_spec.rb +5 -6
- data/spec/script/cmd_tlm_server_spec.rb +39 -4
- data/spec/script/commands_disconnect_spec.rb +1 -1
- data/spec/script/commands_spec.rb +2 -1
- data/spec/script/scripting_spec.rb +18 -3
- data/spec/script/telemetry_spec.rb +5 -0
- data/spec/spec_helper.rb +43 -26
- data/spec/streams/tcpip_socket_stream_spec.rb +2 -2
- data/spec/system/system_spec.rb +11 -9
- data/spec/system/target_spec.rb +3 -0
- data/spec/tools/cmd_tlm_server/api_spec.rb +543 -29
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +2 -2
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +31 -75
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +199 -66
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +85 -9
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +29 -127
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +10 -50
- data/spec/tools/launcher/launcher_config_spec.rb +1 -1
- data/spec/tools/table_manager/table_item_spec.rb +1 -1
- data/spec/tools/table_manager/tablemanager_core_spec.rb +4 -4
- data/spec/top_level/top_level_spec.rb +151 -3
- data/spec/utilities/csv_spec.rb +24 -5
- metadata +61 -9
- data/lib/cosmos/tools/replay/replay_server.rb +0 -91
@@ -17,12 +17,12 @@ module Cosmos
|
|
17
17
|
describe "initialize" do
|
18
18
|
it "initializes local variables" do
|
19
19
|
b1 = BackgroundTask.new
|
20
|
-
expect(b1.name).to
|
20
|
+
expect(b1.name).to match(/Background Task \d+/)
|
21
21
|
expect(b1.thread).to be_nil
|
22
22
|
expect(b1.status).to eq ''
|
23
23
|
expect(b1.stopped).to eq false
|
24
24
|
b2 = BackgroundTask.new
|
25
|
-
expect(b2.name).to
|
25
|
+
expect(b2.name).to match(/Background Task \d+/)
|
26
26
|
expect(b1.thread).to be_nil
|
27
27
|
expect(b1.status).to eq ''
|
28
28
|
expect(b2.stopped).to eq false
|
@@ -48,42 +48,26 @@ module Cosmos
|
|
48
48
|
tf.close
|
49
49
|
config = CmdTlmServerConfig.new(tf.path)
|
50
50
|
bt = BackgroundTasks.new(config)
|
51
|
-
|
52
|
-
expect(Thread.list.length).to eql(1) # RSpec main thread
|
53
|
-
else
|
54
|
-
expect(Thread.list.length).to eql(2) # RSpec main thread
|
55
|
-
end
|
51
|
+
expect(running_threads.length).to eql(1) # RSpec main thread
|
56
52
|
expect(bt.instance_variable_get("@threads").length).to eq 0
|
57
53
|
|
58
54
|
capture_io do |stdout|
|
59
55
|
bt.start_all
|
60
56
|
sleep 0.2
|
61
|
-
|
62
|
-
expect(Thread.list.length).to eql(3)
|
63
|
-
else
|
64
|
-
expect(Thread.list.length).to eql(4)
|
65
|
-
end
|
57
|
+
expect(running_threads.length).to eql(3)
|
66
58
|
expect(bt.instance_variable_get("@threads").compact.length).to eq 2
|
67
59
|
expect(stdout.string).to match "BG0 START"
|
68
60
|
expect(stdout.string).to match "BG2 START"
|
69
61
|
|
70
62
|
bt.start(1)
|
71
63
|
sleep 0.1
|
72
|
-
|
73
|
-
expect(Thread.list.length).to eql(4)
|
74
|
-
else
|
75
|
-
expect(Thread.list.length).to eql(5)
|
76
|
-
end
|
64
|
+
expect(running_threads.length).to eql(4)
|
77
65
|
expect(bt.instance_variable_get("@threads").compact.length).to eq 3
|
78
66
|
expect(stdout.string).to match "BG1 START"
|
79
67
|
|
80
68
|
bt.stop_all
|
81
69
|
sleep 0.2
|
82
|
-
|
83
|
-
expect(Thread.list.length).to eql(1)
|
84
|
-
else
|
85
|
-
expect(Thread.list.length).to eql(2)
|
86
|
-
end
|
70
|
+
expect(running_threads.length).to eql(1)
|
87
71
|
expect(bt.instance_variable_get("@threads").compact.length).to eq 0
|
88
72
|
expect(stdout.string).to match "BG0 STOP"
|
89
73
|
expect(stdout.string).to match "BG1 STOP"
|
@@ -102,79 +86,67 @@ module Cosmos
|
|
102
86
|
tf.close
|
103
87
|
config = CmdTlmServerConfig.new(tf.path)
|
104
88
|
bt = BackgroundTasks.new(config)
|
105
|
-
|
106
|
-
expect(Thread.list.length).to eql(1) # RSpec main thread
|
107
|
-
else
|
108
|
-
expect(Thread.list.length).to eql(2) # RSpec main thread
|
109
|
-
end
|
89
|
+
expect(running_threads.length).to eql(1) # RSpec main thread
|
110
90
|
expect(bt.instance_variable_get("@threads").length).to eq 0
|
111
91
|
|
112
92
|
capture_io do |stdout|
|
93
|
+
expect { bt.start(3) }.to raise_error(/No task at index 3/)
|
94
|
+
|
113
95
|
bt.start(2)
|
114
96
|
sleep 0.1
|
115
|
-
|
116
|
-
expect(Thread.list.length).to eql(2)
|
117
|
-
else
|
118
|
-
expect(Thread.list.length).to eql(3)
|
119
|
-
end
|
97
|
+
expect(running_threads.length).to eql(2)
|
120
98
|
expect(bt.instance_variable_get("@threads")[2].alive?).to eq true
|
121
99
|
expect(bt.instance_variable_get("@threads").compact.length).to eq 1
|
122
100
|
expect(stdout.string).to match "BG2 START"
|
123
101
|
|
124
102
|
bt.start(1)
|
125
103
|
sleep 0.1
|
126
|
-
|
127
|
-
expect(Thread.list.length).to eql(3)
|
128
|
-
else
|
129
|
-
expect(Thread.list.length).to eql(4)
|
130
|
-
end
|
104
|
+
expect(running_threads.length).to eql(3)
|
131
105
|
expect(bt.instance_variable_get("@threads")[1].alive?).to eq true
|
132
106
|
expect(bt.instance_variable_get("@threads").compact.length).to eq 2
|
133
107
|
expect(stdout.string).to match "BG1 START"
|
134
108
|
|
135
109
|
bt.start(0)
|
136
110
|
sleep 0.1
|
137
|
-
|
138
|
-
expect(Thread.list.length).to eql(4)
|
139
|
-
else
|
140
|
-
expect(Thread.list.length).to eql(5)
|
141
|
-
end
|
111
|
+
expect(running_threads.length).to eql(4)
|
142
112
|
expect(bt.instance_variable_get("@threads")[0].alive?).to eq true
|
143
113
|
expect(bt.instance_variable_get("@threads").compact.length).to eq 3
|
144
114
|
expect(stdout.string).to match "BG0 START"
|
145
115
|
|
116
|
+
bt.start(2) # Should do nothing since the task is already started
|
117
|
+
sleep 0.1
|
118
|
+
expect(running_threads.length).to eql(4)
|
119
|
+
expect(bt.instance_variable_get("@threads").compact.length).to eq 3
|
120
|
+
expect(stdout.string).to match "BG0 START" # No change
|
121
|
+
|
146
122
|
bt.stop(1)
|
147
123
|
sleep 0.2
|
148
|
-
|
149
|
-
expect(Thread.list.length).to eql(3)
|
150
|
-
else
|
151
|
-
expect(Thread.list.length).to eql(4)
|
152
|
-
end
|
124
|
+
expect(running_threads.length).to eql(3)
|
153
125
|
expect(bt.instance_variable_get("@threads")[1]).to be_nil
|
154
126
|
expect(bt.instance_variable_get("@threads").compact.length).to eq 2
|
155
127
|
expect(stdout.string).to match "BG1 STOP"
|
156
128
|
|
157
129
|
bt.stop(0)
|
158
130
|
sleep 0.2
|
159
|
-
|
160
|
-
expect(Thread.list.length).to eql(2)
|
161
|
-
else
|
162
|
-
expect(Thread.list.length).to eql(3)
|
163
|
-
end
|
131
|
+
expect(running_threads.length).to eql(2)
|
164
132
|
expect(bt.instance_variable_get("@threads")[0]).to be_nil
|
165
133
|
expect(bt.instance_variable_get("@threads").compact.length).to eq 1
|
166
134
|
expect(stdout.string).to match "BG0 STOP"
|
167
135
|
|
168
136
|
bt.stop(2)
|
169
137
|
sleep 0.2
|
170
|
-
|
171
|
-
expect(Thread.list.length).to eql(1)
|
172
|
-
else
|
173
|
-
expect(Thread.list.length).to eql(2)
|
174
|
-
end
|
138
|
+
expect(running_threads.length).to eql(1)
|
175
139
|
expect(bt.instance_variable_get("@threads")[2]).to be_nil
|
176
140
|
expect(bt.instance_variable_get("@threads").compact.length).to eq 0
|
177
141
|
expect(stdout.string).to match "BG2 STOP"
|
142
|
+
|
143
|
+
bt.stop(0) # Should be safe to stop something already stopped
|
144
|
+
sleep 0.2
|
145
|
+
expect(running_threads.length).to eql(1)
|
146
|
+
expect(bt.instance_variable_get("@threads").compact.length).to eq 0
|
147
|
+
expect(stdout.string).to match "BG2 STOP" # No change
|
148
|
+
|
149
|
+
expect { bt.stop(3) }.to raise_error(/No task at index 3/)
|
178
150
|
end
|
179
151
|
tf.unlink
|
180
152
|
end
|
@@ -185,37 +157,21 @@ module Cosmos
|
|
185
157
|
tf.close
|
186
158
|
config = CmdTlmServerConfig.new(tf.path)
|
187
159
|
bt = BackgroundTasks.new(config)
|
188
|
-
|
189
|
-
expect(Thread.list.length).to eql(1) # RSpec main thread
|
190
|
-
else
|
191
|
-
expect(Thread.list.length).to eql(2) # RSpec main thread
|
192
|
-
end
|
160
|
+
expect(running_threads.length).to eql(1) # RSpec main thread
|
193
161
|
expect(bt.instance_variable_get("@threads").length).to eq 0
|
194
162
|
|
195
163
|
capture_io do |stdout|
|
196
164
|
bt.start_all
|
197
165
|
# 2 because the RSpec main thread plus the background task
|
198
|
-
|
199
|
-
expect(Thread.list.length).to eql(2)
|
200
|
-
else
|
201
|
-
expect(Thread.list.length).to eql(3)
|
202
|
-
end
|
166
|
+
expect(running_threads.length).to eql(2)
|
203
167
|
sleep 1.1 # Allow the thread to crash
|
204
|
-
|
205
|
-
expect(Thread.list.length).to eql(1)
|
206
|
-
else
|
207
|
-
expect(Thread.list.length).to eql(2)
|
208
|
-
end
|
168
|
+
expect(running_threads.length).to eql(1)
|
209
169
|
expect(bt.instance_variable_get("@threads").length).to eq 1
|
210
170
|
expect(bt.instance_variable_get("@threads")[0].alive?).to eq false
|
211
171
|
|
212
172
|
bt.stop_all
|
213
173
|
sleep 0.2
|
214
|
-
|
215
|
-
expect(Thread.list.length).to eql(1)
|
216
|
-
else
|
217
|
-
expect(Thread.list.length).to eql(2)
|
218
|
-
end
|
174
|
+
expect(running_threads.length).to eql(1)
|
219
175
|
expect(bt.instance_variable_get("@threads").length).to eq 0
|
220
176
|
|
221
177
|
expect(stdout.string).to match "unexpectedly died"
|
@@ -46,7 +46,7 @@ module Cosmos
|
|
46
46
|
end
|
47
47
|
|
48
48
|
@keywords = %w(TITLE PACKET_LOG_WRITER AUTO_INTERFACE_TARGETS INTERFACE_TARGET INTERFACE ROUTER)
|
49
|
-
@interface_keywords = %w(DONT_CONNECT DONT_RECONNECT RECONNECT_DELAY DISABLE_DISCONNECT LOG DONT_LOG TARGET PROTOCOL)
|
49
|
+
@interface_keywords = %w(DONT_CONNECT DONT_RECONNECT RECONNECT_DELAY DISABLE_DISCONNECT LOG_RAW OPTION LOG DONT_LOG TARGET PROTOCOL)
|
50
50
|
end
|
51
51
|
|
52
52
|
after(:all) do
|
@@ -75,9 +75,9 @@ module Cosmos
|
|
75
75
|
end
|
76
76
|
|
77
77
|
@interface_keywords.each do |keyword|
|
78
|
-
next if %w(DONT_CONNECT DONT_RECONNECT DISABLE_DISCONNECT DONT_LOG).include? keyword
|
78
|
+
next if %w(DONT_CONNECT DONT_RECONNECT DISABLE_DISCONNECT DONT_LOG LOG_RAW).include? keyword
|
79
79
|
tf = Tempfile.new('unittest')
|
80
|
-
tf.puts "INTERFACE
|
80
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
81
81
|
tf.puts keyword
|
82
82
|
tf.close
|
83
83
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}./)
|
@@ -120,8 +120,8 @@ module Cosmos
|
|
120
120
|
tf.close
|
121
121
|
config = CmdTlmServerConfig.new(tf.path)
|
122
122
|
expect(config.packet_log_writer_pairs.keys).to eql ["DEFAULT","MY_WRITER"]
|
123
|
-
expect(config.packet_log_writer_pairs["DEFAULT"].cmd_log_writer.logging_enabled).to
|
124
|
-
expect(config.packet_log_writer_pairs["MY_WRITER"].cmd_log_writer.logging_enabled).to
|
123
|
+
expect(config.packet_log_writer_pairs["DEFAULT"].cmd_log_writer.logging_enabled).to eq true
|
124
|
+
expect(config.packet_log_writer_pairs["MY_WRITER"].cmd_log_writer.logging_enabled).to eq false
|
125
125
|
tf.unlink
|
126
126
|
config.packet_log_writer_pairs.each do |name, plwp|
|
127
127
|
plwp.cmd_log_writer.shutdown
|
@@ -159,6 +159,57 @@ module Cosmos
|
|
159
159
|
expect(config.interfaces.keys).to eql %w(INST_INT SYSTEM_INT)
|
160
160
|
tf.unlink
|
161
161
|
end
|
162
|
+
|
163
|
+
it "allows interfaces to be previously defined by INTERFACE_TARGET" do
|
164
|
+
# Stub out the CmdTlmServer
|
165
|
+
allow(CmdTlmServer).to receive_message_chain(:instance, :subscribe_limits_events)
|
166
|
+
|
167
|
+
tf = Tempfile.new('unittest')
|
168
|
+
tf.puts 'INTERFACE_TARGET INST'
|
169
|
+
tf.puts 'AUTO_INTERFACE_TARGETS'
|
170
|
+
tf.close
|
171
|
+
config = CmdTlmServerConfig.new(tf.path)
|
172
|
+
expect(config.interfaces.keys).to eql %w(INST_INT SYSTEM_INT)
|
173
|
+
tf.unlink
|
174
|
+
end
|
175
|
+
|
176
|
+
it "allows interfaces to be previously defined by INTERFACE" do
|
177
|
+
# Stub out the CmdTlmServer
|
178
|
+
allow(CmdTlmServer).to receive_message_chain(:instance, :subscribe_limits_events)
|
179
|
+
|
180
|
+
tf = Tempfile.new('unittest')
|
181
|
+
tf.puts 'INTERFACE INST_INT simulated_target_interface.rb sim_inst.rb'
|
182
|
+
tf.puts ' TARGET INST'
|
183
|
+
tf.puts 'AUTO_INTERFACE_TARGETS'
|
184
|
+
tf.close
|
185
|
+
config = CmdTlmServerConfig.new(tf.path)
|
186
|
+
expect(config.interfaces.keys).to eql %w(INST_INT SYSTEM_INT)
|
187
|
+
tf.unlink
|
188
|
+
end
|
189
|
+
|
190
|
+
it "complains about target name substitution" do
|
191
|
+
System.class_eval('@@instance = nil')
|
192
|
+
# Save system.txt
|
193
|
+
system_file = File.join(Cosmos::USERPATH,'config','system','system.txt')
|
194
|
+
FileUtils.mv system_file, Cosmos::USERPATH
|
195
|
+
|
196
|
+
# Create another system.txt with target name substitution
|
197
|
+
File.open(system_file,'w') do |file|
|
198
|
+
file.puts 'DECLARE_TARGET INST'
|
199
|
+
file.puts 'DECLARE_TARGET INST INST2'
|
200
|
+
end
|
201
|
+
|
202
|
+
tf = Tempfile.new('unittest')
|
203
|
+
tf.puts 'AUTO_INTERFACE_TARGETS'
|
204
|
+
tf.close
|
205
|
+
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Cannot use AUTO_INTERFACE_TARGETS with target name substitutions/)
|
206
|
+
tf.unlink
|
207
|
+
|
208
|
+
# Restore system.txt
|
209
|
+
FileUtils.mv File.join(Cosmos::USERPATH, 'system.txt'),
|
210
|
+
File.join(Cosmos::USERPATH,'config','system')
|
211
|
+
System.class_eval('@@instance = nil')
|
212
|
+
end
|
162
213
|
end
|
163
214
|
|
164
215
|
context "with INTERFACE_TARGET" do
|
@@ -187,6 +238,16 @@ module Cosmos
|
|
187
238
|
tf.unlink
|
188
239
|
end
|
189
240
|
|
241
|
+
it "complains if the target is already mapped to an interface" do
|
242
|
+
tf = Tempfile.new('unittest')
|
243
|
+
tf.puts 'INTERFACE INST_INT simulated_target_interface.rb sim_inst.rb'
|
244
|
+
tf.puts ' TARGET INST'
|
245
|
+
tf.puts 'INTERFACE_TARGET INST'
|
246
|
+
tf.close
|
247
|
+
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Target INST already mapped to interface INST_INT/)
|
248
|
+
tf.unlink
|
249
|
+
end
|
250
|
+
|
190
251
|
it "processes an interface" do
|
191
252
|
tf = Tempfile.new('unittest')
|
192
253
|
tf.puts 'INTERFACE_TARGET INST'
|
@@ -200,7 +261,7 @@ module Cosmos
|
|
200
261
|
context "with DONT_CONNECT" do
|
201
262
|
it "complains about too many parameters" do
|
202
263
|
tf = Tempfile.new('unittest')
|
203
|
-
tf.puts "INTERFACE
|
264
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
204
265
|
tf.puts 'DONT_CONNECT TRUE'
|
205
266
|
tf.close
|
206
267
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for DONT_CONNECT./)
|
@@ -209,11 +270,11 @@ module Cosmos
|
|
209
270
|
|
210
271
|
it "sets the interface to not connect on startup" do
|
211
272
|
tf = Tempfile.new('unittest')
|
212
|
-
tf.puts "INTERFACE
|
273
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
213
274
|
tf.puts 'DONT_CONNECT'
|
214
275
|
tf.close
|
215
276
|
config = CmdTlmServerConfig.new(tf.path)
|
216
|
-
expect(config.interfaces['
|
277
|
+
expect(config.interfaces['CTSSPEC_INT'].connect_on_startup).to eq false
|
217
278
|
tf.unlink
|
218
279
|
end
|
219
280
|
end
|
@@ -221,7 +282,7 @@ module Cosmos
|
|
221
282
|
context "with DONT_RECONNECT" do
|
222
283
|
it "complains about too many parameters" do
|
223
284
|
tf = Tempfile.new('unittest')
|
224
|
-
tf.puts "INTERFACE
|
285
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
225
286
|
tf.puts 'DONT_RECONNECT TRUE'
|
226
287
|
tf.close
|
227
288
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for DONT_RECONNECT./)
|
@@ -230,11 +291,11 @@ module Cosmos
|
|
230
291
|
|
231
292
|
it "sets the interface to not auto reconnect" do
|
232
293
|
tf = Tempfile.new('unittest')
|
233
|
-
tf.puts "INTERFACE
|
294
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
234
295
|
tf.puts 'DONT_RECONNECT'
|
235
296
|
tf.close
|
236
297
|
config = CmdTlmServerConfig.new(tf.path)
|
237
|
-
expect(config.interfaces['
|
298
|
+
expect(config.interfaces['CTSSPEC_INT'].auto_reconnect).to eq false
|
238
299
|
tf.unlink
|
239
300
|
end
|
240
301
|
end
|
@@ -242,7 +303,7 @@ module Cosmos
|
|
242
303
|
context "with RECONNECT_DELAY" do
|
243
304
|
it "complains about too many parameters" do
|
244
305
|
tf = Tempfile.new('unittest')
|
245
|
-
tf.puts "INTERFACE
|
306
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
246
307
|
tf.puts 'RECONNECT_DELAY 5.0 TRUE'
|
247
308
|
tf.close
|
248
309
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for RECONNECT_DELAY./)
|
@@ -251,11 +312,11 @@ module Cosmos
|
|
251
312
|
|
252
313
|
it "sets the delay between reconnect tries" do
|
253
314
|
tf = Tempfile.new('unittest')
|
254
|
-
tf.puts "INTERFACE
|
315
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
255
316
|
tf.puts 'RECONNECT_DELAY 5.0'
|
256
317
|
tf.close
|
257
318
|
config = CmdTlmServerConfig.new(tf.path)
|
258
|
-
expect(config.interfaces['
|
319
|
+
expect(config.interfaces['CTSSPEC_INT'].reconnect_delay).to eql 5.0
|
259
320
|
tf.unlink
|
260
321
|
end
|
261
322
|
end
|
@@ -263,7 +324,7 @@ module Cosmos
|
|
263
324
|
context "with DISABLE_DISCONNECT" do
|
264
325
|
it "complains about too many parameters" do
|
265
326
|
tf = Tempfile.new('unittest')
|
266
|
-
tf.puts "INTERFACE
|
327
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
267
328
|
tf.puts 'DISABLE_DISCONNECT TRUE'
|
268
329
|
tf.close
|
269
330
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for DISABLE_DISCONNECT./)
|
@@ -272,11 +333,44 @@ module Cosmos
|
|
272
333
|
|
273
334
|
it "sets the interface to not allow disconnects" do
|
274
335
|
tf = Tempfile.new('unittest')
|
275
|
-
tf.puts "INTERFACE
|
336
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
276
337
|
tf.puts 'DISABLE_DISCONNECT'
|
277
338
|
tf.close
|
278
339
|
config = CmdTlmServerConfig.new(tf.path)
|
279
|
-
expect(config.interfaces['
|
340
|
+
expect(config.interfaces['CTSSPEC_INT'].disable_disconnect).to eq true
|
341
|
+
tf.unlink
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
context "with LOG_RAW" do
|
346
|
+
it "create a raw logger on the interface" do
|
347
|
+
tf = Tempfile.new('unittest')
|
348
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
349
|
+
tf.puts 'LOG_RAW'
|
350
|
+
tf.close
|
351
|
+
config = CmdTlmServerConfig.new(tf.path)
|
352
|
+
expect(config.interfaces['CTSSPEC_INT'].raw_logger_pair).to be_a RawLoggerPair
|
353
|
+
expect(config.interfaces['CTSSPEC_INT'].raw_logger_pair.read_logger).to be_a RawLogger
|
354
|
+
expect(config.interfaces['CTSSPEC_INT'].raw_logger_pair.write_logger).to be_a RawLogger
|
355
|
+
tf.unlink
|
356
|
+
end
|
357
|
+
|
358
|
+
it "creates a customized raw logger on the interface" do
|
359
|
+
tf = Tempfile.new('unittest')
|
360
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
361
|
+
tf.puts "LOG_RAW raw_logger true 1000 'C:/logs'"
|
362
|
+
tf.close
|
363
|
+
config = CmdTlmServerConfig.new(tf.path)
|
364
|
+
read_logger = config.interfaces['CTSSPEC_INT'].raw_logger_pair.read_logger
|
365
|
+
expect(read_logger.orig_name).to eq "CTSSPEC_INT"
|
366
|
+
expect(read_logger.instance_variable_get("@logging_enabled")).to eq true
|
367
|
+
expect(read_logger.instance_variable_get("@cycle_size")).to eq 1000
|
368
|
+
expect(read_logger.instance_variable_get("@log_directory")).to eq "C:/logs"
|
369
|
+
write_logger = config.interfaces['CTSSPEC_INT'].raw_logger_pair.write_logger
|
370
|
+
expect(write_logger.orig_name).to eq "CTSSPEC_INT"
|
371
|
+
expect(write_logger.instance_variable_get("@logging_enabled")).to eq true
|
372
|
+
expect(write_logger.instance_variable_get("@cycle_size")).to eq 1000
|
373
|
+
expect(write_logger.instance_variable_get("@log_directory")).to eq "C:/logs"
|
280
374
|
tf.unlink
|
281
375
|
end
|
282
376
|
end
|
@@ -284,7 +378,7 @@ module Cosmos
|
|
284
378
|
context "with OPTION" do
|
285
379
|
it "complains about too few parameters" do
|
286
380
|
tf = Tempfile.new('unittest')
|
287
|
-
tf.puts "INTERFACE
|
381
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
288
382
|
tf.puts 'OPTION TRUE'
|
289
383
|
tf.close
|
290
384
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for OPTION./)
|
@@ -293,11 +387,11 @@ module Cosmos
|
|
293
387
|
|
294
388
|
it "sets the interface to listen on a specific address" do
|
295
389
|
tf = Tempfile.new('unittest')
|
296
|
-
tf.puts "INTERFACE
|
390
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
297
391
|
tf.puts 'OPTION LISTEN_ADDRESS 127.0.0.1'
|
298
392
|
tf.close
|
299
393
|
config = CmdTlmServerConfig.new(tf.path)
|
300
|
-
expect(config.interfaces['
|
394
|
+
expect(config.interfaces['CTSSPEC_INT'].options['LISTEN_ADDRESS']).to eql(['127.0.0.1'])
|
301
395
|
tf.unlink
|
302
396
|
end
|
303
397
|
end
|
@@ -305,7 +399,7 @@ module Cosmos
|
|
305
399
|
context "with LOG" do
|
306
400
|
it "complains about too many parameters" do
|
307
401
|
tf = Tempfile.new('unittest')
|
308
|
-
tf.puts "INTERFACE
|
402
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
309
403
|
tf.puts 'LOG PacketLogWriter TRUE'
|
310
404
|
tf.close
|
311
405
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for LOG./)
|
@@ -314,7 +408,7 @@ module Cosmos
|
|
314
408
|
|
315
409
|
it "complains about unknown log writers" do
|
316
410
|
tf = Tempfile.new('unittest')
|
317
|
-
tf.puts "INTERFACE
|
411
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
318
412
|
tf.puts 'LOG MyLogWriter'
|
319
413
|
tf.close
|
320
414
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Unknown packet log writer: MYLOGWRITER/)
|
@@ -323,21 +417,21 @@ module Cosmos
|
|
323
417
|
|
324
418
|
it "adds a packet log writer to the interface" do
|
325
419
|
tf = Tempfile.new('unittest')
|
326
|
-
tf.puts "INTERFACE
|
420
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
327
421
|
tf.puts 'LOG DEFAULT'
|
328
422
|
tf.close
|
329
423
|
config = CmdTlmServerConfig.new(tf.path)
|
330
|
-
expect(config.interfaces['
|
424
|
+
expect(config.interfaces['CTSSPEC_INT'].packet_log_writer_pairs.length).to eql 1
|
331
425
|
tf.unlink
|
332
426
|
|
333
427
|
tf = Tempfile.new('unittest')
|
334
428
|
tf.puts 'PACKET_LOG_WRITER MY_WRITER packet_log_writer.rb'
|
335
|
-
tf.puts "INTERFACE
|
429
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
336
430
|
tf.puts 'LOG DEFAULT'
|
337
431
|
tf.puts 'LOG MY_WRITER'
|
338
432
|
tf.close
|
339
433
|
config = CmdTlmServerConfig.new(tf.path)
|
340
|
-
expect(config.interfaces['
|
434
|
+
expect(config.interfaces['CTSSPEC_INT'].packet_log_writer_pairs.length).to eql 2
|
341
435
|
tf.unlink
|
342
436
|
end
|
343
437
|
end
|
@@ -345,7 +439,7 @@ module Cosmos
|
|
345
439
|
context "with DONT_LOG" do
|
346
440
|
it "complains about too many parameters" do
|
347
441
|
tf = Tempfile.new('unittest')
|
348
|
-
tf.puts "INTERFACE
|
442
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
349
443
|
tf.puts 'DONT_LOG TRUE'
|
350
444
|
tf.close
|
351
445
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for DONT_LOG./)
|
@@ -354,11 +448,11 @@ module Cosmos
|
|
354
448
|
|
355
449
|
it "removes loggers from the interface" do
|
356
450
|
tf = Tempfile.new('unittest')
|
357
|
-
tf.puts "INTERFACE
|
451
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
358
452
|
tf.puts 'DONT_LOG'
|
359
453
|
tf.close
|
360
454
|
config = CmdTlmServerConfig.new(tf.path)
|
361
|
-
expect(config.interfaces['
|
455
|
+
expect(config.interfaces['CTSSPEC_INT'].packet_log_writer_pairs.length).to eql 0
|
362
456
|
tf.unlink
|
363
457
|
end
|
364
458
|
end
|
@@ -366,7 +460,7 @@ module Cosmos
|
|
366
460
|
context "with TARGET" do
|
367
461
|
it "complains about too many parameters" do
|
368
462
|
tf = Tempfile.new('unittest')
|
369
|
-
tf.puts "INTERFACE
|
463
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
370
464
|
tf.puts 'TARGET TEST TRUE'
|
371
465
|
tf.close
|
372
466
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for TARGET./)
|
@@ -375,10 +469,20 @@ module Cosmos
|
|
375
469
|
|
376
470
|
it "complains about unknown targets" do
|
377
471
|
tf = Tempfile.new('unittest')
|
378
|
-
tf.puts "INTERFACE
|
472
|
+
tf.puts "INTERFACE TEST_INT cts_config_test_interface.rb"
|
379
473
|
tf.puts 'TARGET BLAH'
|
380
474
|
tf.close
|
381
|
-
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Unknown target BLAH mapped to interface
|
475
|
+
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Unknown target BLAH mapped to interface TEST_INT/)
|
476
|
+
tf.unlink
|
477
|
+
end
|
478
|
+
|
479
|
+
it "complains if the target is already mapped" do
|
480
|
+
tf = Tempfile.new('unittest')
|
481
|
+
tf.puts "INTERFACE TEST_INT cts_config_test_interface.rb"
|
482
|
+
tf.puts 'TARGET TEST'
|
483
|
+
tf.puts 'TARGET TEST'
|
484
|
+
tf.close
|
485
|
+
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Target TEST already mapped to interface TEST_INT/)
|
382
486
|
tf.unlink
|
383
487
|
end
|
384
488
|
end
|
@@ -386,7 +490,7 @@ module Cosmos
|
|
386
490
|
context "with PROTOCOL" do
|
387
491
|
it "requires two parameters" do
|
388
492
|
tf = Tempfile.new('unittest')
|
389
|
-
tf.puts "INTERFACE
|
493
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
390
494
|
tf.puts 'PROTOCOL'
|
391
495
|
tf.close
|
392
496
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for PROTOCOL/)
|
@@ -395,7 +499,7 @@ module Cosmos
|
|
395
499
|
|
396
500
|
it "requires a READ, WRITE, or READ_WRITE descriptor" do
|
397
501
|
tf = Tempfile.new('unittest')
|
398
|
-
tf.puts "INTERFACE
|
502
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
399
503
|
tf.puts 'PROTOCOL BLAH cts_config_test_protocol.rb'
|
400
504
|
tf.close
|
401
505
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Invalid protocol type: BLAH/)
|
@@ -404,85 +508,94 @@ module Cosmos
|
|
404
508
|
|
405
509
|
it "requires a protocol filename or class" do
|
406
510
|
tf = Tempfile.new('unittest')
|
407
|
-
tf.puts "INTERFACE
|
511
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
408
512
|
tf.puts 'PROTOCOL READ'
|
409
513
|
tf.close
|
410
514
|
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for PROTOCOL/)
|
411
515
|
tf.unlink
|
412
516
|
end
|
413
517
|
|
518
|
+
it "complains about filenames or classes which aren't found" do
|
519
|
+
tf = Tempfile.new('unittest')
|
520
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
521
|
+
tf.puts 'PROTOCOL READ this_is_not_a_file.rb'
|
522
|
+
tf.close
|
523
|
+
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Unable to require this_is_not_a_file.rb/)
|
524
|
+
tf.unlink
|
525
|
+
end
|
526
|
+
|
414
527
|
it "instantiates via the file name" do
|
415
528
|
tf = Tempfile.new('unittest')
|
416
|
-
tf.puts "INTERFACE
|
529
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
417
530
|
tf.puts 'PROTOCOL READ cts_config_test_protocol.rb'
|
418
531
|
tf.close
|
419
532
|
config = CmdTlmServerConfig.new(tf.path)
|
420
|
-
expect(config.interfaces['
|
533
|
+
expect(config.interfaces['CTSSPEC_INT'].read_protocols[0].class).to eq CtsConfigTestProtocol
|
421
534
|
tf.unlink
|
422
535
|
end
|
423
536
|
|
424
537
|
it "instantiates via the class name" do
|
425
538
|
tf = Tempfile.new('unittest')
|
426
|
-
tf.puts "INTERFACE
|
539
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
427
540
|
tf.puts 'PROTOCOL READ CtsConfigTestProtocol'
|
428
541
|
tf.close
|
429
542
|
config = CmdTlmServerConfig.new(tf.path)
|
430
|
-
expect(config.interfaces['
|
543
|
+
expect(config.interfaces['CTSSPEC_INT'].read_protocols[0].class).to eq CtsConfigTestProtocol
|
431
544
|
tf.unlink
|
432
545
|
end
|
433
546
|
|
434
547
|
it "appends to the list of READ protocols" do
|
435
548
|
tf = Tempfile.new('unittest')
|
436
|
-
tf.puts "INTERFACE
|
549
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
437
550
|
tf.puts 'PROTOCOL READ OverrideProtocol'
|
438
551
|
tf.puts 'PROTOCOL READ CtsConfigTestProtocol'
|
439
552
|
tf.close
|
440
553
|
config = CmdTlmServerConfig.new(tf.path)
|
441
|
-
read_protocols = config.interfaces['
|
442
|
-
expect(read_protocols[0].class).to
|
443
|
-
expect(read_protocols[1].class).to
|
444
|
-
expect(config.interfaces['
|
554
|
+
read_protocols = config.interfaces['CTSSPEC_INT'].read_protocols
|
555
|
+
expect(read_protocols[0].class).to eq OverrideProtocol
|
556
|
+
expect(read_protocols[1].class).to eq CtsConfigTestProtocol
|
557
|
+
expect(config.interfaces['CTSSPEC_INT'].write_protocols).to be_empty
|
445
558
|
tf.unlink
|
446
559
|
end
|
447
560
|
|
448
561
|
it "prepends to the list of WRITE protocols" do
|
449
562
|
tf = Tempfile.new('unittest')
|
450
|
-
tf.puts "INTERFACE
|
563
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
451
564
|
tf.puts 'PROTOCOL WRITE OverrideProtocol'
|
452
565
|
tf.puts 'PROTOCOL WRITE CtsConfigTestProtocol'
|
453
566
|
tf.close
|
454
567
|
config = CmdTlmServerConfig.new(tf.path)
|
455
|
-
write_protocols = config.interfaces['
|
456
|
-
expect(write_protocols[0].class).to
|
457
|
-
expect(write_protocols[1].class).to
|
458
|
-
expect(config.interfaces['
|
568
|
+
write_protocols = config.interfaces['CTSSPEC_INT'].write_protocols
|
569
|
+
expect(write_protocols[0].class).to eq CtsConfigTestProtocol
|
570
|
+
expect(write_protocols[1].class).to eq OverrideProtocol
|
571
|
+
expect(config.interfaces['CTSSPEC_INT'].read_protocols).to be_empty
|
459
572
|
tf.unlink
|
460
573
|
end
|
461
574
|
|
462
575
|
it "adds to both with READ_WRITE" do
|
463
576
|
tf = Tempfile.new('unittest')
|
464
|
-
tf.puts "INTERFACE
|
577
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
465
578
|
tf.puts 'PROTOCOL READ_WRITE OverrideProtocol'
|
466
579
|
tf.puts 'PROTOCOL READ_WRITE CtsConfigTestProtocol'
|
467
580
|
tf.close
|
468
581
|
config = CmdTlmServerConfig.new(tf.path)
|
469
|
-
read_protocols = config.interfaces['
|
470
|
-
write_protocols = config.interfaces['
|
471
|
-
expect(read_protocols[0].class).to
|
472
|
-
expect(read_protocols[1].class).to
|
473
|
-
expect(write_protocols[0].class).to
|
474
|
-
expect(write_protocols[1].class).to
|
582
|
+
read_protocols = config.interfaces['CTSSPEC_INT'].read_protocols
|
583
|
+
write_protocols = config.interfaces['CTSSPEC_INT'].write_protocols
|
584
|
+
expect(read_protocols[0].class).to eq OverrideProtocol
|
585
|
+
expect(read_protocols[1].class).to eq CtsConfigTestProtocol
|
586
|
+
expect(write_protocols[0].class).to eq CtsConfigTestProtocol
|
587
|
+
expect(write_protocols[1].class).to eq OverrideProtocol
|
475
588
|
tf.unlink
|
476
589
|
end
|
477
590
|
|
478
591
|
it "stores initialization parameters" do
|
479
592
|
tf = Tempfile.new('unittest')
|
480
|
-
tf.puts "INTERFACE
|
593
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
481
594
|
tf.puts 'PROTOCOL READ cts_config_test_protocol.rb PARAM1 20'
|
482
595
|
tf.close
|
483
596
|
config = CmdTlmServerConfig.new(tf.path)
|
484
|
-
pinfo = config.interfaces['
|
485
|
-
expect(pinfo[0]).to
|
597
|
+
pinfo = config.interfaces['CTSSPEC_INT'].protocol_info[0]
|
598
|
+
expect(pinfo[0]).to eq CtsConfigTestProtocol
|
486
599
|
expect(pinfo[1]).to eq ['PARAM1', '20']
|
487
600
|
expect(pinfo[2]).to eq :READ
|
488
601
|
tf.unlink
|
@@ -492,10 +605,10 @@ module Cosmos
|
|
492
605
|
context "with two interfaces with the same name" do
|
493
606
|
it "complains about duplicate interface names" do
|
494
607
|
tf = Tempfile.new('unittest')
|
495
|
-
tf.puts "INTERFACE
|
496
|
-
tf.puts "INTERFACE
|
608
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
609
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
497
610
|
tf.close
|
498
|
-
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Interface '
|
611
|
+
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Interface 'CTSSPEC_INT' defined twice/)
|
499
612
|
tf.unlink
|
500
613
|
end
|
501
614
|
end
|
@@ -544,17 +657,17 @@ module Cosmos
|
|
544
657
|
it "complains if the interface is undefined" do
|
545
658
|
tf = Tempfile.new('unittest')
|
546
659
|
tf.puts 'ROUTER ROUTER cts_config_test_interface.rb'
|
547
|
-
tf.puts 'ROUTE
|
660
|
+
tf.puts 'ROUTE CTSSPEC_INT'
|
548
661
|
tf.close
|
549
|
-
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Unknown interface
|
662
|
+
expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Unknown interface CTSSPEC_INT mapped to router ROUTER/)
|
550
663
|
tf.unlink
|
551
664
|
end
|
552
665
|
|
553
666
|
it "creates the route" do
|
554
667
|
tf = Tempfile.new('unittest')
|
555
|
-
tf.puts "INTERFACE
|
668
|
+
tf.puts "INTERFACE CTSSPEC_INT cts_config_test_interface.rb"
|
556
669
|
tf.puts 'ROUTER ROUTER cts_config_test_interface.rb'
|
557
|
-
tf.puts 'ROUTE
|
670
|
+
tf.puts 'ROUTE CTSSPEC_INT'
|
558
671
|
tf.close
|
559
672
|
config = CmdTlmServerConfig.new(tf.path)
|
560
673
|
expect(config.routers['ROUTER'].interfaces[0]).to be_a CtsConfigTestInterface
|
@@ -593,11 +706,14 @@ module Cosmos
|
|
593
706
|
tf = Tempfile.new('unittest')
|
594
707
|
tf.puts 'BACKGROUND_TASK cts_config_test_background_task_no_args.rb'
|
595
708
|
tf.puts 'BACKGROUND_TASK cts_config_test_background_task_args.rb 1 2 3'
|
709
|
+
tf.puts ' STOPPED'
|
596
710
|
tf.close
|
597
711
|
config = CmdTlmServerConfig.new(tf.path)
|
598
712
|
expect(config.background_tasks.length).to eql 2
|
599
713
|
expect(config.background_tasks[0]).to be_a CtsConfigTestBackgroundTaskNoArgs
|
714
|
+
expect(config.background_tasks[0].stopped).to be false
|
600
715
|
expect(config.background_tasks[1]).to be_a CtsConfigTestBackgroundTaskArgs
|
716
|
+
expect(config.background_tasks[1].stopped).to be true
|
601
717
|
tf.unlink
|
602
718
|
|
603
719
|
File.delete background_task_no_args_file
|
@@ -605,6 +721,23 @@ module Cosmos
|
|
605
721
|
end
|
606
722
|
end
|
607
723
|
|
724
|
+
context "with COLLECT_METADATA" do
|
725
|
+
it "indicates metadata should be collected" do
|
726
|
+
tf = Tempfile.new('unittest')
|
727
|
+
tf.close
|
728
|
+
config = CmdTlmServerConfig.new(tf.path)
|
729
|
+
expect(config.metadata).to be false
|
730
|
+
tf.unlink
|
731
|
+
|
732
|
+
tf = Tempfile.new('unittest')
|
733
|
+
tf.puts 'COLLECT_METADATA'
|
734
|
+
tf.close
|
735
|
+
config = CmdTlmServerConfig.new(tf.path)
|
736
|
+
expect(config.metadata).to be true
|
737
|
+
tf.unlink
|
738
|
+
end
|
739
|
+
end
|
740
|
+
|
608
741
|
end
|
609
742
|
end
|
610
743
|
end
|