rsmp-validator 0.1.1 → 0.3.2

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/config/cross_rs4s.yaml +6 -0
  3. data/config/gem_supervisor.yaml +6 -0
  4. data/config/gem_tlc.yaml +6 -0
  5. data/config/kapsch_etx.yaml +13 -6
  6. data/config/lightmotion_satellite.yaml +8 -2
  7. data/config/semaforica_cartesio.yaml +8 -2
  8. data/config/sus.rb +1 -1
  9. data/config/swarco_itc3.yaml +8 -2
  10. data/config/tecsen_tmacs_supervisor.yaml +6 -0
  11. data/exe/rsmp-validator +2 -117
  12. data/lib/rsmp/validator/async_context.rb +4 -3
  13. data/lib/rsmp/validator/auto_node.rb +5 -15
  14. data/lib/rsmp/validator/cli/config_cli.rb +32 -0
  15. data/lib/rsmp/validator/cli/entrypoint.rb +40 -0
  16. data/lib/rsmp/validator/cli/run_options.rb +87 -0
  17. data/lib/rsmp/validator/cli/runner.rb +119 -0
  18. data/lib/rsmp/validator/cli/tee_io.rb +30 -0
  19. data/lib/rsmp/validator/cli/validator_overrides.rb +28 -0
  20. data/lib/rsmp/validator/compliance/config_metadata.rb +31 -0
  21. data/lib/rsmp/validator/compliance/config_sxls.rb +24 -0
  22. data/lib/rsmp/validator/compliance/report.rb +70 -0
  23. data/lib/rsmp/validator/compliance/report_failure.rb +45 -0
  24. data/lib/rsmp/validator/compliance/report_metadata.rb +101 -0
  25. data/lib/rsmp/validator/config_check.rb +72 -0
  26. data/lib/rsmp/validator/configuration/loader.rb +6 -0
  27. data/lib/rsmp/validator/configuration/sxls_override.rb +33 -0
  28. data/lib/rsmp/validator/configuration/validation.rb +1 -35
  29. data/lib/rsmp/validator/configuration/version_normalization.rb +56 -0
  30. data/lib/rsmp/validator/configuration.rb +25 -22
  31. data/lib/rsmp/validator/helpers/alarms.rb +1 -1
  32. data/lib/rsmp/validator/helpers/clock.rb +2 -2
  33. data/lib/rsmp/validator/helpers/connection.rb +18 -8
  34. data/lib/rsmp/validator/helpers/handshake.rb +5 -8
  35. data/lib/rsmp/validator/helpers/input.rb +3 -3
  36. data/lib/rsmp/validator/helpers/security.rb +1 -1
  37. data/lib/rsmp/validator/helpers/signal_plans.rb +5 -5
  38. data/lib/rsmp/validator/helpers/signal_priority.rb +8 -11
  39. data/lib/rsmp/validator/helpers/startup.rb +6 -20
  40. data/lib/rsmp/validator/helpers/status.rb +1 -1
  41. data/lib/rsmp/validator/lifecycle.rb +11 -4
  42. data/lib/rsmp/validator/options/site_test_options.rb +21 -1
  43. data/lib/rsmp/validator/options/supervisor_test_options.rb +50 -13
  44. data/lib/rsmp/validator/site_tester.rb +15 -6
  45. data/lib/rsmp/validator/supervisor_tester.rb +11 -5
  46. data/lib/rsmp/validator/tester.rb +25 -29
  47. data/lib/rsmp/validator/version.rb +1 -1
  48. data/lib/rsmp/validator/version_filter.rb +1 -1
  49. data/lib/rsmp/validator.rb +5 -1
  50. data/schemas/site_test.json +0 -6
  51. data/test/site/core/aggregated_status_spec.rb +5 -7
  52. data/test/site/core/connect_spec.rb +5 -5
  53. data/test/site/core/disconnect_spec.rb +10 -19
  54. data/test/site/core/message_buffer_spec.rb +114 -0
  55. data/test/site/tlc/alarm_spec.rb +7 -7
  56. data/test/site/tlc/clock_spec.rb +26 -26
  57. data/test/site/tlc/detector_logics_spec.rb +6 -6
  58. data/test/site/tlc/emergency_routes_spec.rb +16 -16
  59. data/test/site/tlc/input_spec.rb +10 -10
  60. data/test/site/tlc/invalid_command_spec.rb +24 -20
  61. data/test/site/tlc/invalid_status_spec.rb +25 -20
  62. data/test/site/tlc/modes_spec.rb +53 -37
  63. data/test/site/tlc/output_spec.rb +8 -8
  64. data/test/site/tlc/signal_groups_spec.rb +8 -8
  65. data/test/site/tlc/signal_plans_spec.rb +32 -34
  66. data/test/site/tlc/signal_priority_spec.rb +10 -12
  67. data/test/site/tlc/subscribe_spec.rb +9 -9
  68. data/test/site/tlc/system_spec.rb +12 -10
  69. data/test/site/tlc/traffic_data_spec.rb +27 -16
  70. data/test/site/tlc/traffic_situations_spec.rb +5 -5
  71. data/test/supervisor/connect_spec.rb +9 -12
  72. metadata +35 -6
@@ -1,4 +1,12 @@
1
1
  describe 'Site::Tlc::InvalidCommand' do
2
+ def expect_message_rejected(result)
3
+ expect(result).to be_a(RSMP::Result::Failure)
4
+ return unless result.failure?
5
+
6
+ expect(result.failure.code).to eq(:message_rejected)
7
+ expect(result.failure.source).to eq(:peer)
8
+ end
9
+
2
10
  # Verify that site_proxy reponds with age=undefined when receiving
3
11
  # a command with an unknown component id
4
12
  #
@@ -12,17 +20,16 @@ describe 'Site::Tlc::InvalidCommand' do
12
20
  command_list = RSMP::CommandList.new(:M0001, :setValue,
13
21
  securityCode: RSMP::Validator.get_config('secrets', 'security_codes', 2),
14
22
  status: 'NormalControl',
15
- timeout: 0,
16
- intersection: 0).to_a
23
+ timeout: '0',
24
+ intersection: '0').to_a
17
25
  result = site_proxy.send_command_and_collect(
18
26
  command_list,
19
27
  component: 'bad',
20
28
  within: RSMP::Validator.get_config('timeouts', 'command_response'),
21
29
  validate: false # disable validation of outgoing message
22
30
  )
23
- expect(result).to be_a(RSMP::Collector)
24
- expect(result.status).to eq(:ok)
25
- response = result.messages.first
31
+ exchange = result.value!
32
+ response = exchange.messages.first
26
33
  expect(response).to be_a(RSMP::CommandResponse)
27
34
  rvs = response.attributes['rvs']
28
35
  expect(rvs).to be_a(Array)
@@ -45,11 +52,10 @@ describe 'Site::Tlc::InvalidCommand' do
45
52
  command_list = RSMP::CommandList.new(:M0000, :bad, {}).to_a
46
53
  timeout = RSMP::Validator.get_config('timeouts', 'command_response')
47
54
 
48
- collector = site_proxy.send_command_and_collect(command_list,
49
- within: timeout,
50
- validate: false) # disable schema validation of outgoing message
51
- expect(collector.status).to eq(:cancelled)
52
- expect(collector.error).to be_a(RSMP::MessageRejected)
55
+ result = site_proxy.send_command_and_collect(command_list,
56
+ within: timeout,
57
+ validate: false) # disable schema validation of outgoing message
58
+ expect_message_rejected(result)
53
59
  end
54
60
  end
55
61
 
@@ -69,11 +75,10 @@ describe 'Site::Tlc::InvalidCommand' do
69
75
  timeout: '0').to_a
70
76
  # intentionally not setting 'status'
71
77
  timeout = RSMP::Validator.get_config('timeouts', 'command_response')
72
- collector = site_proxy.send_command_and_collect(command_list,
73
- within: timeout,
74
- validate: false) # disable validation of outgoing message
75
- expect(collector.status).to eq(:cancelled)
76
- expect(collector.error).to be_a(RSMP::MessageRejected)
78
+ result = site_proxy.send_command_and_collect(command_list,
79
+ within: timeout,
80
+ validate: false) # disable validation of outgoing message
81
+ expect_message_rejected(result)
77
82
  end
78
83
  end
79
84
 
@@ -93,11 +98,10 @@ describe 'Site::Tlc::InvalidCommand' do
93
98
  intersection: '0',
94
99
  timeout: '0').to_a
95
100
  timeout = RSMP::Validator.get_config('timeouts', 'command_response')
96
- collector = site_proxy.send_command_and_collect(command_list,
97
- within: timeout,
98
- validate: false) # disable validation of outgoing message
99
- expect(collector.status).to eq(:cancelled)
100
- expect(collector.error).to be_a(RSMP::MessageRejected)
101
+ result = site_proxy.send_command_and_collect(command_list,
102
+ within: timeout,
103
+ validate: false) # disable validation of outgoing message
104
+ expect_message_rejected(result)
101
105
  end
102
106
  end
103
107
  end
@@ -1,4 +1,12 @@
1
1
  describe 'Site::Tlc::InvalidStatus' do
2
+ def expect_message_rejected(result)
3
+ expect(result).to be_a(RSMP::Result::Failure)
4
+ return unless result.failure?
5
+
6
+ expect(result.failure.code).to eq(:message_rejected)
7
+ expect(result.failure.source).to eq(:peer)
8
+ end
9
+
2
10
  # Verify that site_proxy reponds with q=undefined when receiving a
3
11
  # status request with an unknown component id.
4
12
  #
@@ -9,15 +17,14 @@ describe 'Site::Tlc::InvalidStatus' do
9
17
  it 'return a command response with age=undefined when component id is unknown' do
10
18
  with_site(:connected, core: '>=3.1.3') do |site_proxy|
11
19
  log 'Sending M0001 with bad component id'
12
- collector = site_proxy.request_status_and_collect(
20
+ result = site_proxy.request_status_and_collect(
13
21
  { S0001: [:signalgroupstatus] },
14
22
  component: 'bad',
15
23
  within: RSMP::Validator.get_config('timeouts', 'status_response'),
16
24
  validate: false
17
25
  )
18
- collector.ok!
19
- expect(collector.status).to eq(:ok)
20
- response = collector.messages.first
26
+ exchange = result.value!
27
+ response = exchange.messages.first
21
28
  expect(response).to be_a(RSMP::StatusResponse)
22
29
  ss = response.attributes['sS']
23
30
  expect(ss).to be_a(Array)
@@ -37,14 +44,13 @@ describe 'Site::Tlc::InvalidStatus' do
37
44
  it 'returns NotAck when status code is unknown' do
38
45
  with_site(:connected) do |site_proxy|
39
46
  log 'Requesting non-existing status S0000'
40
- expect do
41
- site_proxy.request_status_and_collect(
42
- { S0000: [:status] },
43
- component: RSMP::Validator.get_config('main_component'),
44
- within: RSMP::Validator.get_config('timeouts', 'status_response'),
45
- validate: false
46
- ).ok!
47
- end.to raise_exception(RSMP::MessageRejected)
47
+ result = site_proxy.request_status_and_collect(
48
+ { S0000: [:status] },
49
+ component: RSMP::Validator.get_config('main_component'),
50
+ within: RSMP::Validator.get_config('timeouts', 'status_response'),
51
+ validate: false
52
+ )
53
+ expect_message_rejected(result)
48
54
  end
49
55
  end
50
56
 
@@ -57,14 +63,13 @@ describe 'Site::Tlc::InvalidStatus' do
57
63
  it 'returns NotAck when status name is unknown' do
58
64
  with_site(:connected) do |site_proxy|
59
65
  log 'Requesting S0001 with non-existing status name'
60
- expect do
61
- site_proxy.request_status_and_collect(
62
- { S0001: [:bad] },
63
- component: RSMP::Validator.get_config('main_component'),
64
- within: RSMP::Validator.get_config('timeouts', 'status_response'),
65
- validate: false
66
- ).ok!
67
- end.to raise_exception(RSMP::MessageRejected)
66
+ result = site_proxy.request_status_and_collect(
67
+ { S0001: [:bad] },
68
+ component: RSMP::Validator.get_config('main_component'),
69
+ within: RSMP::Validator.get_config('timeouts', 'status_response'),
70
+ validate: false
71
+ )
72
+ expect_message_rejected(result)
68
73
  end
69
74
  end
70
75
  end
@@ -9,7 +9,7 @@ describe 'Site::Tlc::Modes' do
9
9
  it 'control mode is read with S0020' do
10
10
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
11
11
  site_proxy.request_status_and_collect({ S0020: %i[controlmode intersection] },
12
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
12
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
13
13
  end
14
14
  end
15
15
 
@@ -21,21 +21,21 @@ describe 'Site::Tlc::Modes' do
21
21
  it 'startup status is read with S0005' do
22
22
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
23
23
  site_proxy.request_status_and_collect({ S0005: [:status] },
24
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
24
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
25
25
  end
26
26
  end
27
27
 
28
28
  # Verify status S0005 traffic controller starting by intersection
29
- # statusByIntersection requires core >= 3.2, since it uses the array data type.
29
+ # statusByIntersection requires core >= 3.2.0, since it uses the array data type.
30
30
  #
31
31
  # 1. Given the site_proxy is connected
32
32
  # 2. Request status
33
33
  # 3. Expect status response before timeout
34
34
  it 'startup status is read with S0005 by intersection' do
35
- skip 'requires core >= 3.2' unless RSMP::Validator.core_matches?('>=3.2')
36
- with_site(:connected, sxl: '>=1.2') do |site_proxy|
35
+ skip 'requires core >= 3.2.0' unless RSMP::Validator.core_matches?('>=3.2.0')
36
+ with_site(:connected, sxl: '>=1.2.0') do |site_proxy|
37
37
  site_proxy.request_status_and_collect({ S0005: [:statusByIntersection] },
38
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
38
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
39
39
  end
40
40
  end
41
41
 
@@ -47,7 +47,7 @@ describe 'Site::Tlc::Modes' do
47
47
  it 'switched on is read with S0007' do
48
48
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
49
49
  site_proxy.request_status_and_collect({ S0007: %i[status intersection] },
50
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
50
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
51
51
  end
52
52
  end
53
53
 
@@ -57,9 +57,9 @@ describe 'Site::Tlc::Modes' do
57
57
  # 2. Request status
58
58
  # 3. Expect status response before timeout
59
59
  it 'switched on is read with S0007 with source' do
60
- with_site(:connected, sxl: '>=1.1') do |site_proxy|
60
+ with_site(:connected, sxl: '>=1.1.0') do |site_proxy|
61
61
  site_proxy.request_status_and_collect({ S0007: %i[status intersection source] },
62
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
62
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
63
63
  end
64
64
  end
65
65
 
@@ -70,13 +70,13 @@ describe 'Site::Tlc::Modes' do
70
70
  # 3. Expect status response before timeout
71
71
  it 'manual control is read with S0008' do
72
72
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
73
- status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1')
73
+ status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1.0')
74
74
  { S0008: %i[status intersection source] }
75
75
  else
76
76
  { S0008: %i[status intersection] }
77
77
  end
78
78
  site_proxy.request_status_and_collect(status_list,
79
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
79
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
80
80
  end
81
81
  end
82
82
 
@@ -87,13 +87,13 @@ describe 'Site::Tlc::Modes' do
87
87
  # 3. Expect status response before timeout
88
88
  it 'fixed time control is read with S0009' do
89
89
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
90
- status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1')
90
+ status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1.0')
91
91
  { S0009: %i[status intersection source] }
92
92
  else
93
93
  { S0009: %i[status intersection] }
94
94
  end
95
95
  site_proxy.request_status_and_collect(status_list,
96
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
96
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
97
97
  end
98
98
  end
99
99
 
@@ -107,8 +107,11 @@ describe 'Site::Tlc::Modes' do
107
107
  it 'fixed time control can be activated with M0007' do
108
108
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
109
109
  timeout = RSMP::Validator.get_config('timeouts', 'command')
110
- site_proxy.tlc.set_fixed_time('True', within: timeout)
111
- site_proxy.tlc.set_fixed_time('False', within: timeout)
110
+ begin
111
+ site_proxy.tlc.set_fixed_time!('True', within: timeout)
112
+ ensure
113
+ site_proxy.tlc.set_fixed_time!('False', within: timeout)
114
+ end
112
115
  end
113
116
  end
114
117
 
@@ -119,13 +122,13 @@ describe 'Site::Tlc::Modes' do
119
122
  # 3. Expect status response before timeout
120
123
  it 'isolated control is read with S0010' do
121
124
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
122
- status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1')
125
+ status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1.0')
123
126
  { S0010: %i[status intersection source] }
124
127
  else
125
128
  { S0010: %i[status intersection] }
126
129
  end
127
130
  site_proxy.request_status_and_collect(status_list,
128
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
131
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
129
132
  end
130
133
  end
131
134
 
@@ -135,9 +138,9 @@ describe 'Site::Tlc::Modes' do
135
138
  # 2. Request status
136
139
  # 3. Expect status response before timeout
137
140
  it 'coordinated control is read with S0032' do
138
- with_site(:connected, sxl: '>=1.1') do |site_proxy|
141
+ with_site(:connected, sxl: '>=1.1.0') do |site_proxy|
139
142
  site_proxy.request_status_and_collect({ S0032: %i[status intersection source] },
140
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
143
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
141
144
  end
142
145
  end
143
146
 
@@ -148,13 +151,13 @@ describe 'Site::Tlc::Modes' do
148
151
  # 3. Expect status response before timeout
149
152
  it 'yellow flash can be read with S0011' do
150
153
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
151
- status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1')
154
+ status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1.0')
152
155
  { S0011: %i[status intersection source] }
153
156
  else
154
157
  { S0011: %i[status intersection] }
155
158
  end
156
159
  site_proxy.request_status_and_collect(status_list,
157
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
160
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
158
161
  end
159
162
  end
160
163
 
@@ -169,12 +172,15 @@ describe 'Site::Tlc::Modes' do
169
172
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
170
173
  yellow_flash_timeout = RSMP::Validator.get_config('timeouts', 'yellow_flash')
171
174
  startup_timeout = RSMP::Validator.get_config('timeouts', 'startup_sequence')
172
- site_proxy.tlc.set_functional_position('YellowFlash', within: yellow_flash_timeout)
173
- site_proxy.tlc.set_functional_position('NormalControl', within: startup_timeout)
175
+ begin
176
+ site_proxy.tlc.set_functional_position!('YellowFlash', within: yellow_flash_timeout)
177
+ ensure
178
+ site_proxy.tlc.set_functional_position!('NormalControl', within: startup_timeout)
179
+ end
174
180
  end
175
181
  end
176
182
 
177
- # Verify that we can yellow flash causes all groups to go to state 'c'
183
+ # Verify that yellow flash causes all groups to go to state 'c'
178
184
  #
179
185
  # 1. Given the site_proxy is connected
180
186
  # 2. Send the control command to switch to Yellow flash
@@ -184,13 +190,16 @@ describe 'Site::Tlc::Modes' do
184
190
  it 'yellow flash affects all signal groups' do
185
191
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
186
192
  timeout = RSMP::Validator.get_config('timeouts', 'yellow_flash')
193
+ startup_timeout = RSMP::Validator.get_config('timeouts', 'startup_sequence')
187
194
 
188
- site_proxy.tlc.set_functional_position('YellowFlash', within: timeout)
189
- site_proxy.tlc.wait_for_groups 'c', timeout: timeout # c means yellow flash
195
+ begin
196
+ site_proxy.tlc.set_functional_position!('YellowFlash', within: timeout)
197
+ site_proxy.tlc.wait_for_groups! 'c', timeout: timeout # c means yellow flash
198
+ ensure
199
+ site_proxy.tlc.set_functional_position!('NormalControl', within: startup_timeout)
200
+ end
190
201
 
191
- startup_timeout = RSMP::Validator.get_config('timeouts', 'startup_sequence')
192
- site_proxy.tlc.set_functional_position('NormalControl', within: startup_timeout)
193
- site_proxy.tlc.wait_for_groups '[^c]', timeout: timeout # not c, ie. not yellow flash
202
+ site_proxy.tlc.wait_for_groups! '[^c]', timeout: timeout # not c, ie. not yellow flash
194
203
  end
195
204
  end
196
205
 
@@ -201,13 +210,13 @@ describe 'Site::Tlc::Modes' do
201
210
  # 3. Expect status response before timeout
202
211
  it 'all red can be read with S0012' do
203
212
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
204
- status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1')
213
+ status_list = if RSMP::Proxy.version_meets_requirement?(site_proxy.sxl_version, '>=1.1.0')
205
214
  { S0012: %i[status intersection source] }
206
215
  else
207
216
  { S0012: %i[status intersection] }
208
217
  end
209
218
  site_proxy.request_status_and_collect(status_list,
210
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
219
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
211
220
  end
212
221
  end
213
222
 
@@ -219,7 +228,7 @@ describe 'Site::Tlc::Modes' do
219
228
  it 'police key can be read with S0013' do
220
229
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
221
230
  site_proxy.request_status_and_collect({ S0013: [:status] },
222
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
231
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
223
232
  end
224
233
  end
225
234
 
@@ -234,8 +243,11 @@ describe 'Site::Tlc::Modes' do
234
243
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
235
244
  timeout = RSMP::Validator.get_config('timeouts', 'functional_position')
236
245
  startup_timeout = RSMP::Validator.get_config('timeouts', 'startup_sequence')
237
- site_proxy.tlc.set_functional_position('Dark', within: timeout)
238
- site_proxy.tlc.set_functional_position('NormalControl', within: startup_timeout)
246
+ begin
247
+ site_proxy.tlc.set_functional_position!('Dark', within: timeout)
248
+ ensure
249
+ site_proxy.tlc.set_functional_position!('NormalControl', within: startup_timeout)
250
+ end
239
251
  end
240
252
  end
241
253
 
@@ -249,12 +261,16 @@ describe 'Site::Tlc::Modes' do
249
261
  it 'can use yellow flash with a timeout of one minute' do
250
262
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
251
263
  startup_timeout = RSMP::Validator.get_config('timeouts', 'startup_sequence')
252
- site_proxy.tlc.set_functional_position('NormalControl', within: startup_timeout)
253
264
  minutes = 1
254
265
  timeout = RSMP::Validator.get_config('timeouts', 'yellow_flash')
255
- site_proxy.tlc.set_functional_position('YellowFlash', timeout_minutes: minutes, within: timeout)
256
266
  fp_timeout = RSMP::Validator.get_config('timeouts', 'functional_position')
257
- wait_normal_control(site_proxy, timeout: (minutes * 60) + fp_timeout)
267
+ begin
268
+ site_proxy.tlc.set_functional_position!('NormalControl', within: startup_timeout)
269
+ site_proxy.tlc.set_functional_position!('YellowFlash', timeout_minutes: minutes, within: timeout)
270
+ wait_normal_control(site_proxy, timeout: (minutes * 60) + fp_timeout)
271
+ ensure
272
+ site_proxy.tlc.set_functional_position!('NormalControl', within: startup_timeout)
273
+ end
258
274
  end
259
275
  end
260
276
  end
@@ -7,11 +7,11 @@ describe 'Site::Tlc::Output' do
7
7
  # 3. We should receive a status updated
8
8
  # 4. And the outputstatus attribute should be a digit string
9
9
  it 'is read with S0004 with extended output status' do
10
- with_site(:connected, sxl: ['>=1.0.7', '<1.2']) do |site_proxy|
10
+ with_site(:connected, sxl: ['>=1.0.7', '<1.2.0']) do |site_proxy|
11
11
  site_proxy.request_status_and_collect(
12
12
  { S0004: %i[outputstatus extendedoutputstatus] },
13
13
  within: RSMP::Validator.get_config('timeouts', 'status_response')
14
- ).ok!
14
+ ).value!
15
15
  end
16
16
  end
17
17
 
@@ -21,9 +21,9 @@ describe 'Site::Tlc::Output' do
21
21
  # 3. We should receive a status updated
22
22
  # 4. And the outputstatus attribute should be a digit string
23
23
  it 'is read with S0004' do
24
- with_site(:connected, sxl: ['>=1.2']) do |site_proxy|
24
+ with_site(:connected, sxl: ['>=1.2.0']) do |site_proxy|
25
25
  site_proxy.request_status_and_collect({ S0004: [:outputstatus] },
26
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
26
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
27
27
  end
28
28
  end
29
29
 
@@ -34,7 +34,7 @@ describe 'Site::Tlc::Output' do
34
34
  it 'forcing is read with S0030' do
35
35
  with_site(:connected, sxl: '>=1.0.15') do |site_proxy|
36
36
  site_proxy.request_status_and_collect({ S0030: [:status] },
37
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
37
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
38
38
  end
39
39
  end
40
40
 
@@ -48,10 +48,10 @@ describe 'Site::Tlc::Output' do
48
48
  skip('No outputs configured') if outputs.nil? || outputs.empty?
49
49
  timeout = RSMP::Validator.get_config('timeouts', 'command_response')
50
50
  outputs.each do |output|
51
- site_proxy.tlc.force_output(output: output, status: 'True', value: 'True', within: timeout)
52
- site_proxy.tlc.force_output(output: output, status: 'True', value: 'False', within: timeout)
51
+ site_proxy.tlc.force_output!(output: output, status: 'True', value: 'True', within: timeout)
52
+ site_proxy.tlc.force_output!(output: output, status: 'True', value: 'False', within: timeout)
53
53
  ensure
54
- site_proxy.tlc.force_output(output: output, status: 'False', value: 'True', within: timeout)
54
+ site_proxy.tlc.force_output!(output: output, status: 'False', value: 'True', within: timeout)
55
55
  end
56
56
  end
57
57
  end
@@ -10,7 +10,7 @@ describe 'Site::Tlc::SignalGroups' do
10
10
  with_site(:connected, sxl: '>=1.0.8') do |site_proxy|
11
11
  component = RSMP::Validator.get_config('components', 'signal_group').keys[0]
12
12
  timeout = RSMP::Validator.get_config('timeouts', 'command_response')
13
- site_proxy.tlc.order_signal_start(component, within: timeout)
13
+ site_proxy.tlc.order_signal_start!(component, within: timeout)
14
14
  end
15
15
  end
16
16
 
@@ -21,7 +21,7 @@ describe 'Site::Tlc::SignalGroups' do
21
21
  with_site(:connected, sxl: '>=1.0.8') do |site_proxy|
22
22
  component = RSMP::Validator.get_config('components', 'signal_group').keys[0]
23
23
  timeout = RSMP::Validator.get_config('timeouts', 'command_response')
24
- site_proxy.tlc.order_signal_stop(component, within: timeout)
24
+ site_proxy.tlc.order_signal_stop!(component, within: timeout)
25
25
  end
26
26
  end
27
27
 
@@ -35,7 +35,7 @@ describe 'Site::Tlc::SignalGroups' do
35
35
  site_proxy.request_status_and_collect(
36
36
  { S0001: %i[signalgroupstatus cyclecounter basecyclecounter stage] },
37
37
  within: RSMP::Validator.get_config('timeouts', 'status_response')
38
- ).ok!
38
+ ).value!
39
39
  end
40
40
  end
41
41
 
@@ -59,7 +59,7 @@ describe 'Site::Tlc::SignalGroups' do
59
59
  ] },
60
60
  component: component,
61
61
  within: RSMP::Validator.get_config('timeouts', 'status_response')
62
- ).ok!
62
+ ).value!
63
63
  end
64
64
  end
65
65
 
@@ -71,7 +71,7 @@ describe 'Site::Tlc::SignalGroups' do
71
71
  it 'list size is read with S0017' do
72
72
  with_site(:connected, sxl: '>=1.0.7') do |site_proxy|
73
73
  site_proxy.request_status_and_collect({ S0017: [:number] },
74
- within: RSMP::Validator.get_config('timeouts', 'status_response')).ok!
74
+ within: RSMP::Validator.get_config('timeouts', 'status_response')).value!
75
75
  end
76
76
  end
77
77
 
@@ -85,12 +85,12 @@ describe 'Site::Tlc::SignalGroups' do
85
85
  with_site(:connected) do |site_proxy|
86
86
  verify_startup_sequence(site_proxy) do
87
87
  timeout = RSMP::Validator.get_config('timeouts', 'yellow_flash')
88
- site_proxy.tlc.set_functional_position('YellowFlash', within: timeout)
88
+ site_proxy.tlc.set_functional_position!('YellowFlash', within: timeout)
89
89
  command_timeout = RSMP::Validator.get_config('timeouts', 'command_response')
90
- site_proxy.tlc.set_functional_position('NormalControl', within: command_timeout)
90
+ site_proxy.tlc.set_functional_position!('NormalControl', within: command_timeout)
91
91
  end
92
92
  command_timeout ||= RSMP::Validator.get_config('timeouts', 'command_response')
93
- site_proxy.tlc.set_functional_position('NormalControl', within: command_timeout)
93
+ site_proxy.tlc.set_functional_position!('NormalControl', within: command_timeout)
94
94
  end
95
95
  end
96
96
  end