17 #include <gtest/gtest.h> 31 using ::testing::Assign;
32 using ::testing::AtLeast;
33 using ::testing::AtMost;
34 using ::testing::DoAll;
35 using ::testing::Return;
36 using ::testing::SetArgPointee;
37 using ::testing::SetArgReferee;
38 using ::testing::Throw;
40 #define READ_FRAME(x) WillOnce(DoAll(fillArg0(expected_monitoring_frames_.at(x)), Return(sizeof(MonitoringFrame)))) 41 #define RETURN_IP(ip_str) Return(udp::endpoint(boost::asio::ip::address_v4::from_string(ip_str), 2000)) 56 expected_monitoring_frame.scanner_id_ = (uint8_t)0;
57 expected_monitoring_frame.resolution_ = (uint8_t)1;
58 expected_monitoring_frame.scan_counter_ = (uint32_t)4294967295U;
59 expected_monitoring_frame.number_of_samples_ = (uint16_t)500;
60 expected_monitoring_frame.from_theta_ = (uint16_t)0;
61 expected_monitoring_frames_.push_back(expected_monitoring_frame);
64 expected_monitoring_frame.from_theta_ = 500;
65 expected_monitoring_frames_.push_back(expected_monitoring_frame);
68 expected_monitoring_frame.from_theta_ = 1000;
69 expected_monitoring_frames_.push_back(expected_monitoring_frame);
72 expected_monitoring_frame.from_theta_ = 1500;
73 expected_monitoring_frames_.push_back(expected_monitoring_frame);
76 expected_monitoring_frame.from_theta_ = 2000;
77 expected_monitoring_frames_.push_back(expected_monitoring_frame);
80 expected_monitoring_frame.from_theta_ = 2500;
81 expected_monitoring_frame.number_of_samples_ = 250;
82 expected_monitoring_frame.scan_counter_ = 0U;
83 expected_monitoring_frames_.push_back(expected_monitoring_frame);
90 expected_monitoring_frame.opcode_ = 0U;
91 expected_monitoring_frame.from_theta_ = 0;
92 expected_monitoring_frame.number_of_samples_ = 500;
93 expected_monitoring_frame.scan_counter_ = 0;
94 expected_monitoring_frames_.push_back(expected_monitoring_frame);
97 expected_monitoring_frame.opcode_ = 123U;
98 expected_monitoring_frames_.push_back(expected_monitoring_frame);
102 expected_monitoring_frame.scanner_id_ = 0;
103 expected_monitoring_frame.number_of_samples_ = 550;
104 expected_monitoring_frames_.push_back(expected_monitoring_frame);
107 expected_monitoring_frame.number_of_samples_ = 551;
108 expected_monitoring_frames_.push_back(expected_monitoring_frame);
111 expected_monitoring_frame.number_of_samples_ = 500;
112 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.ossd1_short_circuit_ = 1;
113 expected_monitoring_frames_.push_back(expected_monitoring_frame);
116 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.ossd1_short_circuit_ = 0;
117 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.short_circuit_at_least_two_ossd_ = 1;
118 expected_monitoring_frames_.push_back(expected_monitoring_frame);
121 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.short_circuit_at_least_two_ossd_ = 0;
122 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.integrity_check_problem_on_any_ossd_ = 1;
123 expected_monitoring_frames_.push_back(expected_monitoring_frame);
126 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.integrity_check_problem_on_any_ossd_ = 0;
127 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.internal_error_1_ = 1;
128 expected_monitoring_frames_.push_back(expected_monitoring_frame);
131 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.internal_error_1_ = 0;
132 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.window_cleaning_alarm_ = 1;
133 expected_monitoring_frames_.push_back(expected_monitoring_frame);
136 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.window_cleaning_alarm_ = 0;
137 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.power_supply_problem_ = 1;
138 expected_monitoring_frames_.push_back(expected_monitoring_frame);
141 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.power_supply_problem_ = 0;
142 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.network_problem_ = 1;
143 expected_monitoring_frames_.push_back(expected_monitoring_frame);
146 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.network_problem_ = 0;
147 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.dust_circuit_failure_ = 1;
148 expected_monitoring_frames_.push_back(expected_monitoring_frame);
151 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.dust_circuit_failure_ = 0;
152 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.measure_problem_ = 1;
153 expected_monitoring_frames_.push_back(expected_monitoring_frame);
156 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.measure_problem_ = 0;
157 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.incoherence_data_ = 1;
158 expected_monitoring_frames_.push_back(expected_monitoring_frame);
161 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.incoherence_data_ = 0;
162 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.zone_invalid_input_transition_or_integrity_ = 1;
163 expected_monitoring_frames_.push_back(expected_monitoring_frame);
166 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.zone_invalid_input_transition_or_integrity_ = 0;
167 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.zone_invalid_input_configuration_connection_ = 1;
168 expected_monitoring_frames_.push_back(expected_monitoring_frame);
171 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.zone_invalid_input_configuration_connection_ = 0;
172 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.window_cleaning_warning_ = 1;
173 expected_monitoring_frames_.push_back(expected_monitoring_frame);
176 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.window_cleaning_warning_ = 0;
177 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.internal_communication_problem_ = 1;
178 expected_monitoring_frames_.push_back(expected_monitoring_frame);
181 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.internal_communication_problem_ = 0;
182 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.generic_error_ = 1;
183 expected_monitoring_frames_.push_back(expected_monitoring_frame);
186 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.generic_error_ = 0;
187 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.display_communication_problem_ = 1;
188 expected_monitoring_frames_.push_back(expected_monitoring_frame);
191 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.display_communication_problem_ = 0;
192 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.temperature_measurement_problem_ = 1;
193 expected_monitoring_frames_.push_back(expected_monitoring_frame);
196 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.temperature_measurement_problem_ = 0;
197 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.configuration_error_ = 1;
198 expected_monitoring_frames_.push_back(expected_monitoring_frame);
201 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.configuration_error_ = 0;
202 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.out_of_range_error_ = 1;
203 expected_monitoring_frames_.push_back(expected_monitoring_frame);
206 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.out_of_range_error_ = 0;
207 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.temperature_range_error_ = 1;
208 expected_monitoring_frames_.push_back(expected_monitoring_frame);
211 expected_monitoring_frame.diagnostic_area_.diagnostic_information_.temperature_range_error_ = 0;
212 expected_monitoring_frames_.push_back(expected_monitoring_frame);
215 expected_monitoring_frame.from_theta_ = 500;
216 expected_monitoring_frame.resolution_ = 2;
217 expected_monitoring_frames_.push_back(expected_monitoring_frame);
220 expected_monitoring_frame.from_theta_ = 0;
221 expected_monitoring_frame.resolution_ = 1;
222 expected_monitoring_frame.scanner_id_ = 1;
223 expected_monitoring_frames_.push_back(expected_monitoring_frame);
226 expected_monitoring_frame.scan_counter_ = 0;
227 expected_monitoring_frame.scanner_id_ = 0;
228 expected_monitoring_frames_.push_back(expected_monitoring_frame);
231 expected_monitoring_frame.from_theta_ = 500;
232 expected_monitoring_frame.scan_counter_ = 1;
233 expected_monitoring_frames_.push_back(expected_monitoring_frame);
242 ::testing::StaticAssertTypeEq<MonitoringFrame, monitoring_frame_type>();
243 boost::asio::buffer_copy(arg0, boost::asio::buffer(&monitoring_frame,
sizeof(
MonitoringFrame)));
248 EXPECT_CALL(*udp_interface_ptr, read(_, _))
263 std::move(udp_interface_ptr));
270 std::vector<uint16_t> expected_measures(2750, 0);
271 EXPECT_EQ(scan.
measures_, expected_measures);
276 EXPECT_CALL(*udp_interface_ptr, read(_, _)).Times(AtMost(2)).READ_FRAME(0).READ_FRAME(2);
284 std::move(udp_interface_ptr));
291 EXPECT_CALL(*udp_interface_ptr, read(_, _)).Times(AtMost(1)).READ_FRAME(1);
299 std::move(udp_interface_ptr));
306 EXPECT_CALL(*udp_interface_ptr, read(_, _))
321 std::move(udp_interface_ptr));
328 EXPECT_CALL(*udp_interface_ptr, read(_, _))
343 std::move(udp_interface_ptr));
350 std::vector<uint16_t> expected_measures(210, 0);
351 EXPECT_EQ(scan.
measures_, expected_measures);
356 EXPECT_THROW(
Scanner scanner(
"1.2.3.450",
362 std::move(udp_interface_ptr)),
364 EXPECT_THROW(
Scanner scanner(
"1.2.3.4",
370 std::move(udp_interface_ptr)),
372 EXPECT_THROW(
Scanner scanner(
"1.2.3.4",
381 EXPECT_THROW(
Scanner scanner(
"1.2.3.4",
387 std::move(udp_interface_ptr)),
389 EXPECT_THROW(
Scanner scanner(
"1.2.3.4",
395 std::move(udp_interface_ptr)),
401 EXPECT_CALL(*udp_interface_ptr, write(_)).Times(2);
409 std::move(udp_interface_ptr));
417 EXPECT_CALL(*udp_interface_ptr, read(_, _))
431 std::move(udp_interface_ptr));
441 EXPECT_CALL(*udp_interface_ptr, read(_, _))
470 std::move(udp_interface_ptr));
496 EXPECT_CALL(*udp_interface_ptr, read(_, _))
510 std::move(udp_interface_ptr));
519 EXPECT_CALL(*udp_interface_ptr, write(_)).Times(2);
521 EXPECT_CALL(*udp_interface_ptr, read(_, _))
524 .WillOnce(DoAll(fillArg0(expected_monitoring_frames_.at(1)), Return(
sizeof(
MonitoringFrame) - 1)))
534 std::move(udp_interface_ptr));
541 std::unique_ptr<Scanner> scanner = std::unique_ptr<Scanner>(
new Scanner(
"1.2.3.4",
547 std::move(udp_interface_ptr)));
MonitoringFrame as coming from Laserscanner.
std::vector< MonitoringFrame > expected_monitoring_frames_
LaserScan getCompleteScan()
Reads from UDP Interface until complete laserscan object can be formed.
void start()
Send start signal to Laserscanner.
PSENscanInternalAngle const MAX_SCAN_ANGLE(2750)
Class to hold the data for one laserscan without depencies to ROS.
uint32_t const MONITORING_FRAME_OPCODE
std::vector< uint16_t > measures_
ACTION_P(fillArg0, monitoring_frame)
PSENscanInternalAngle const min_scan_angle_
Class for Modeling a PSENscan safety laser scanner.
PSENscanInternalAngle const max_scan_angle_
PSENscanInternalAngle resolution_
TEST_F(ScannerTest, new_scanner)
Class to model angles in PSENscan internal format (tenth of degrees)
std::unique_ptr< MockPSENscanUDPInterface > udp_interface_ptr
void stop()
Send stop signal to Laserscanner.