Specifications:
Validate that a signal priority can be requested.
-
Given the site is connected
-
When we send a signal priority request
-
Then we should receive an acknowledgement
11 12 13 14 15 16 17 18 19 20 21 22 23 24
# File 'spec/site/tlc/signal_priority_spec.rb', line 11 Validator::Site.connected do |task,supervisor,site| signal_group = Validator.get_config('components','signal_group').keys.first command_list = build_command_list :M0022, :requestPriority, { requestId: SecureRandom.uuid()[0..3], signalGroupId: signal_group, type: 'new', level: 7, eta: 10, vehicleType: 'car' } prepare task, site send_command_and_confirm @task, command_list, "Request signal priority for signal group #{signal_group}" end
-
Validate that signal priority status can be requested.
-
Given the site is connected
-
When we request signal priority status
-
Then we should receive a status update
33 34 35 36
# File 'spec/site/tlc/signal_priority_spec.rb', line 33 Validator::Site.connected do |task,supervisor,site| request_status_and_confirm site, "signal group status", { S0033: [:status] } end
-
Validate that we can subscribe signal priority status
-
Given the site is connected
-
And we subscribe to signal priority status updates
-
Then we should receive an acknowledgement
-
And we should reive a status updates
46 47 48 49 50 51
# File 'spec/site/tlc/signal_priority_spec.rb', line 46 Validator::Site.connected do |task,supervisor,site| prepare task, site status_list = [{'sCI'=>'S0033','n'=>'status','uRt'=>'0'}] status_list.map! { |item| item.merge!('sOc' => true) } if use_sOc?(site) wait_for_status task, 'signal priority status', status_list end
-
Validate that signal priority status are send when priorty is requested
-
Given the site is connected
-
And we subscribe to signal priority status
-
When we send a signal priority request
-
Then we should receive status updates
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
# File 'spec/site/tlc/signal_priority_spec.rb', line 61 Validator::Site.connected do |task,supervisor,site| sequence = ['received','activated','completed'] # subscribe component = Validator.get_config('main_component') log "Subscribing to signal priority request status updates" status_list = [{'sCI'=>'S0033','n'=>'status','uRt'=>'0'}] status_list.map! { |item| item.merge!('sOc' => true) } if use_sOc?(site) site.subscribe_to_status component, status_list # start collector request_id = SecureRandom.uuid()[0..3] # make a message id num = sequence.length states = [] result = nil collector = nil collect_task = task.async do collector = RSMP::Collector.new( site, type: "StatusUpdate", num: num, timeout: Validator.get_config('timeouts','priority_completion'), component: component ) def search_for_request_state request_id, , states .attribute('sS').each do |status| return nil unless status['sCI'] == 'S0033' && status['n'] == 'status' status['s'].each do |priority| next unless priority['r'] == request_id # is this our request state = priority['s'] next unless state != states.last # did the state change? log "Priority request reached state '#{state}'" return state end end nil end result = collector.collect do || state = search_for_request_state request_id, , states next unless state states << state :keep end end def send_priority_request log, id:nil, site:, component: # send an unrelated request before our request, to check that it does not interfere log log signal_group = Validator.get_config('components','signal_group').keys.first command_list = build_command_list :M0022, :requestPriority, { requestId: (id || SecureRandom.uuid()[0..3]), signalGroupId: signal_group, type: 'new', level: 7, eta: 2, vehicleType: 'car' } site.send_command component, command_list end send_priority_request "Send an unrelated signal priority request before", site: site, component: component send_priority_request "Send our signal priority request", site: site, component: component, id: request_id send_priority_request "Send an unrelated signal priority request after", site: site, component: component # wait for collector to complete and check result collect_task.wait expect(result).to eq(:ok) expect(collector.).to be_an(Array) expect(collector..size).to eq(num) expect(states).to eq(sequence), "Expected state sequence #{sequence}, got #{states}" ensure # unsubcribe unsubscribe_list = status_list.map { |item| item.slice('sCI','n') } site.unsubscribe_to_status component, unsubscribe_list end
-