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.
- checksums.yaml +4 -4
- data/config/cross_rs4s.yaml +6 -0
- data/config/gem_supervisor.yaml +6 -0
- data/config/gem_tlc.yaml +6 -0
- data/config/kapsch_etx.yaml +13 -6
- data/config/lightmotion_satellite.yaml +8 -2
- data/config/semaforica_cartesio.yaml +8 -2
- data/config/sus.rb +1 -1
- data/config/swarco_itc3.yaml +8 -2
- data/config/tecsen_tmacs_supervisor.yaml +6 -0
- data/exe/rsmp-validator +2 -117
- data/lib/rsmp/validator/async_context.rb +4 -3
- data/lib/rsmp/validator/auto_node.rb +5 -15
- data/lib/rsmp/validator/cli/config_cli.rb +32 -0
- data/lib/rsmp/validator/cli/entrypoint.rb +40 -0
- data/lib/rsmp/validator/cli/run_options.rb +87 -0
- data/lib/rsmp/validator/cli/runner.rb +119 -0
- data/lib/rsmp/validator/cli/tee_io.rb +30 -0
- data/lib/rsmp/validator/cli/validator_overrides.rb +28 -0
- data/lib/rsmp/validator/compliance/config_metadata.rb +31 -0
- data/lib/rsmp/validator/compliance/config_sxls.rb +24 -0
- data/lib/rsmp/validator/compliance/report.rb +70 -0
- data/lib/rsmp/validator/compliance/report_failure.rb +45 -0
- data/lib/rsmp/validator/compliance/report_metadata.rb +101 -0
- data/lib/rsmp/validator/config_check.rb +72 -0
- data/lib/rsmp/validator/configuration/loader.rb +6 -0
- data/lib/rsmp/validator/configuration/sxls_override.rb +33 -0
- data/lib/rsmp/validator/configuration/validation.rb +1 -35
- data/lib/rsmp/validator/configuration/version_normalization.rb +56 -0
- data/lib/rsmp/validator/configuration.rb +25 -22
- data/lib/rsmp/validator/helpers/alarms.rb +1 -1
- data/lib/rsmp/validator/helpers/clock.rb +2 -2
- data/lib/rsmp/validator/helpers/connection.rb +18 -8
- data/lib/rsmp/validator/helpers/handshake.rb +5 -8
- data/lib/rsmp/validator/helpers/input.rb +3 -3
- data/lib/rsmp/validator/helpers/security.rb +1 -1
- data/lib/rsmp/validator/helpers/signal_plans.rb +5 -5
- data/lib/rsmp/validator/helpers/signal_priority.rb +8 -11
- data/lib/rsmp/validator/helpers/startup.rb +6 -20
- data/lib/rsmp/validator/helpers/status.rb +1 -1
- data/lib/rsmp/validator/lifecycle.rb +11 -4
- data/lib/rsmp/validator/options/site_test_options.rb +21 -1
- data/lib/rsmp/validator/options/supervisor_test_options.rb +50 -13
- data/lib/rsmp/validator/site_tester.rb +15 -6
- data/lib/rsmp/validator/supervisor_tester.rb +11 -5
- data/lib/rsmp/validator/tester.rb +25 -29
- data/lib/rsmp/validator/version.rb +1 -1
- data/lib/rsmp/validator/version_filter.rb +1 -1
- data/lib/rsmp/validator.rb +5 -1
- data/schemas/site_test.json +0 -6
- data/test/site/core/aggregated_status_spec.rb +5 -7
- data/test/site/core/connect_spec.rb +5 -5
- data/test/site/core/disconnect_spec.rb +10 -19
- data/test/site/core/message_buffer_spec.rb +114 -0
- data/test/site/tlc/alarm_spec.rb +7 -7
- data/test/site/tlc/clock_spec.rb +26 -26
- data/test/site/tlc/detector_logics_spec.rb +6 -6
- data/test/site/tlc/emergency_routes_spec.rb +16 -16
- data/test/site/tlc/input_spec.rb +10 -10
- data/test/site/tlc/invalid_command_spec.rb +24 -20
- data/test/site/tlc/invalid_status_spec.rb +25 -20
- data/test/site/tlc/modes_spec.rb +53 -37
- data/test/site/tlc/output_spec.rb +8 -8
- data/test/site/tlc/signal_groups_spec.rb +8 -8
- data/test/site/tlc/signal_plans_spec.rb +32 -34
- data/test/site/tlc/signal_priority_spec.rb +10 -12
- data/test/site/tlc/subscribe_spec.rb +9 -9
- data/test/site/tlc/system_spec.rb +12 -10
- data/test/site/tlc/traffic_data_spec.rb +27 -16
- data/test/site/tlc/traffic_situations_spec.rb +5 -5
- data/test/supervisor/connect_spec.rb +9 -12
- 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
|
-
|
|
24
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
data/test/site/tlc/modes_spec.rb
CHANGED
|
@@ -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')).
|
|
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')).
|
|
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')).
|
|
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')).
|
|
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')).
|
|
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')).
|
|
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')).
|
|
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
|
-
|
|
111
|
-
|
|
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')).
|
|
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')).
|
|
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')).
|
|
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
|
-
|
|
173
|
-
|
|
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
|
|
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
|
-
|
|
189
|
-
|
|
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
|
-
|
|
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')).
|
|
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')).
|
|
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
|
-
|
|
238
|
-
|
|
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
|
-
|
|
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
|
-
).
|
|
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')).
|
|
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')).
|
|
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
|
-
).
|
|
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
|
-
).
|
|
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')).
|
|
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
|