cosmos 4.0.3-java → 4.1.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +12 -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
|