From 8e8a0428b071fdd087f3d1cbda6b333a969bb7f2 Mon Sep 17 00:00:00 2001 From: Simon Rasmussen Date: Sun, 9 Jul 2017 04:04:22 +0200 Subject: [PATCH] Added testing for master board parsing and fixed unparsed fields --- CMakeLists.txt | 1 + src/ur/master_board.cpp | 4 ++ tests/ur/master_board.cpp | 136 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 141 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a950358..be227ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -218,6 +218,7 @@ install(DIRECTORY include/${PROJECT_NAME}/ set(${PROJECT_NAME}_TEST_SOURCES tests/ur/rt_state.cpp + tests/ur/master_board.cpp tests/ur/robot_mode.cpp) if (CATKIN_ENABLE_TESTING) diff --git a/src/ur/master_board.cpp b/src/ur/master_board.cpp index c6aa924..0775a39 100644 --- a/src/ur/master_board.cpp +++ b/src/ur/master_board.cpp @@ -37,6 +37,8 @@ bool MasterBoardData_V1_X::parseWith(BinParser& bp) if (!bp.checkSize(MasterBoardData_V1_X::EURO_SIZE)) return false; + bp.parse(euromap_input_bits); + bp.parse(euromap_output_bits); bp.parse(euromap_voltage); bp.parse(euromap_current); } @@ -63,6 +65,8 @@ bool MasterBoardData_V3_0__1::parseWith(BinParser& bp) if (!bp.checkSize(MasterBoardData_V3_0__1::EURO_SIZE)) return false; + bp.parse(euromap_input_bits); + bp.parse(euromap_output_bits); bp.parse(euromap_voltage); bp.parse(euromap_current); } diff --git a/tests/ur/master_board.cpp b/tests/ur/master_board.cpp index e69de29..2af943f 100644 --- a/tests/ur/master_board.cpp +++ b/tests/ur/master_board.cpp @@ -0,0 +1,136 @@ +#include "ur_modern_driver/ur/master_board.h" +#include +#include "ur_modern_driver/bin_parser.h" +#include "ur_modern_driver/log.h" +#include "ur_modern_driver/test/random_data.h" +#include "ur_modern_driver/test/utils.h" +#include "ur_modern_driver/types.h" + +TEST(MasterBoardData_V1_X, testRandomDataParsing) +{ + RandomDataTest rdt(71); + rdt.set(1, 58); //sets euromap67_interface_installed to true + BinParser bp = rdt.getParser(); + MasterBoardData_V1_X state; + + ASSERT_TRUE(state.parseWith(bp)) << "parse() returned false"; + + ASSERT_EQ((rdt.getNext()), state.digital_input_bits); + ASSERT_EQ((rdt.getNext()), state.digital_output_bits); + ASSERT_EQ(rdt.getNext(), state.analog_input_range0); + ASSERT_EQ(rdt.getNext(), state.analog_input_range1); + ASSERT_EQ(rdt.getNext(), state.analog_input0); + ASSERT_EQ(rdt.getNext(), state.analog_input1); + ASSERT_EQ(rdt.getNext(), state.analog_output_domain0); + ASSERT_EQ(rdt.getNext(), state.analog_output_domain1); + ASSERT_EQ(rdt.getNext(), state.analog_output0); + ASSERT_EQ(rdt.getNext(), state.analog_output1); + ASSERT_EQ(rdt.getNext(), state.master_board_temperature); + ASSERT_EQ(rdt.getNext(), state.robot_voltage_48V); + ASSERT_EQ(rdt.getNext(), state.robot_current); + ASSERT_EQ(rdt.getNext(), state.master_IO_current); + ASSERT_EQ(rdt.getNext(), state.master_safety_state); + ASSERT_EQ(rdt.getNext(), state.master_on_off_state); + ASSERT_EQ(rdt.getNext(), state.euromap67_interface_installed); + ASSERT_EQ(rdt.getNext(), state.euromap_input_bits); + ASSERT_EQ(rdt.getNext(), state.euromap_output_bits); + ASSERT_EQ(rdt.getNext(), state.euromap_voltage); + ASSERT_EQ(rdt.getNext(), state.euromap_current); + + ASSERT_TRUE(bp.empty()) << "Did not consume all data"; +} + +TEST(MasterBoardData_V3_0__1, testRandomDataParsing) +{ + RandomDataTest rdt(83); + rdt.set(1, 62); //sets euromap67_interface_installed to true + BinParser bp = rdt.getParser(); + MasterBoardData_V3_0__1 state; + ASSERT_TRUE(state.parseWith(bp)) << "parse() returned false"; + + ASSERT_EQ((rdt.getNext()), state.digital_input_bits); + ASSERT_EQ((rdt.getNext()), state.digital_output_bits); + ASSERT_EQ(rdt.getNext(), state.analog_input_range0); + ASSERT_EQ(rdt.getNext(), state.analog_input_range1); + ASSERT_EQ(rdt.getNext(), state.analog_input0); + ASSERT_EQ(rdt.getNext(), state.analog_input1); + ASSERT_EQ(rdt.getNext(), state.analog_output_domain0); + ASSERT_EQ(rdt.getNext(), state.analog_output_domain1); + ASSERT_EQ(rdt.getNext(), state.analog_output0); + ASSERT_EQ(rdt.getNext(), state.analog_output1); + ASSERT_EQ(rdt.getNext(), state.master_board_temperature); + ASSERT_EQ(rdt.getNext(), state.robot_voltage_48V); + ASSERT_EQ(rdt.getNext(), state.robot_current); + ASSERT_EQ(rdt.getNext(), state.master_IO_current); + ASSERT_EQ(rdt.getNext(), state.safety_mode); + ASSERT_EQ(rdt.getNext(), state.in_reduced_mode); + ASSERT_EQ(rdt.getNext(), state.euromap67_interface_installed); + ASSERT_EQ(rdt.getNext(), state.euromap_input_bits); + ASSERT_EQ(rdt.getNext(), state.euromap_output_bits); + ASSERT_EQ(rdt.getNext(), state.euromap_voltage); + ASSERT_EQ(rdt.getNext(), state.euromap_current); + + rdt.skip(sizeof(uint32_t)); + + ASSERT_TRUE(bp.empty()) << "Did not consume all data"; +} + +TEST(MasterBoardData_V3_2, testRandomDataParsing) +{ + RandomDataTest rdt(85); + rdt.set(1, 62); //sets euromap67_interface_installed to true + BinParser bp = rdt.getParser(); + MasterBoardData_V3_2 state; + ASSERT_TRUE(state.parseWith(bp)) << "parse() returned false"; + + ASSERT_EQ((rdt.getNext()), state.digital_input_bits); + ASSERT_EQ((rdt.getNext()), state.digital_output_bits); + ASSERT_EQ(rdt.getNext(), state.analog_input_range0); + ASSERT_EQ(rdt.getNext(), state.analog_input_range1); + ASSERT_EQ(rdt.getNext(), state.analog_input0); + ASSERT_EQ(rdt.getNext(), state.analog_input1); + ASSERT_EQ(rdt.getNext(), state.analog_output_domain0); + ASSERT_EQ(rdt.getNext(), state.analog_output_domain1); + ASSERT_EQ(rdt.getNext(), state.analog_output0); + ASSERT_EQ(rdt.getNext(), state.analog_output1); + ASSERT_EQ(rdt.getNext(), state.master_board_temperature); + ASSERT_EQ(rdt.getNext(), state.robot_voltage_48V); + ASSERT_EQ(rdt.getNext(), state.robot_current); + ASSERT_EQ(rdt.getNext(), state.master_IO_current); + ASSERT_EQ(rdt.getNext(), state.safety_mode); + ASSERT_EQ(rdt.getNext(), state.in_reduced_mode); + ASSERT_EQ(rdt.getNext(), state.euromap67_interface_installed); + ASSERT_EQ(rdt.getNext(), state.euromap_input_bits); + ASSERT_EQ(rdt.getNext(), state.euromap_output_bits); + ASSERT_EQ(rdt.getNext(), state.euromap_voltage); + ASSERT_EQ(rdt.getNext(), state.euromap_current); + rdt.skip(sizeof(uint32_t)); + ASSERT_EQ(rdt.getNext(), state.operational_mode_selector_input); + ASSERT_EQ(rdt.getNext(), state.three_position_enabling_device_input); + + ASSERT_TRUE(bp.empty()) << "Did not consume all data"; +} + +TEST(MasterBoardData_V1_X, testTooSmallBuffer) +{ + RandomDataTest rdt(10); + BinParser bp = rdt.getParser(); + MasterBoardData_V1_X state; + EXPECT_FALSE(state.parseWith(bp)) << "parse() should fail when buffer not big enough"; +} + +TEST(MasterBoardData_V3_0__1, testTooSmallBuffer) +{ + RandomDataTest rdt(10); + BinParser bp = rdt.getParser(); + MasterBoardData_V3_0__1 state; + EXPECT_FALSE(state.parseWith(bp)) << "parse() should fail when buffer not big enough"; +} + +TEST(MasterBoardData_V3_2, testTooSmallBuffer) +{ + RandomDataTest rdt(10); + BinParser bp = rdt.getParser(); + MasterBoardData_V3_2 state; + EXPECT_FALSE(state.parseWith(bp)) << "parse() should fail when buffer not big enough"; +}