On Tue. 22 Apr. 2025 at 21:04, Felix Maurer fmaurer@redhat.com wrote:
Use fixtures in test_raw_filter instead of generating the test inputs during execution. This should make tests easier to follow and extend.
Signed-off-by: Felix Maurer fmaurer@redhat.com
.../selftests/net/can/test_raw_filter.c | 311 ++++++++++++------ 1 file changed, 211 insertions(+), 100 deletions(-)
diff --git a/tools/testing/selftests/net/can/test_raw_filter.c b/tools/testing/selftests/net/can/test_raw_filter.c index 7414b9aef823..7fe11e020a1c 100644 --- a/tools/testing/selftests/net/can/test_raw_filter.c +++ b/tools/testing/selftests/net/can/test_raw_filter.c @@ -18,43 +18,13 @@
(...)
+TEST_F(can_filters, test_filter) +{
fd_set rdfs;struct timeval tv;struct can_filter rfilter;struct can_frame frame;int have_rx;int rx;int rxbits, rxbitval;int ret;
Can you reduce the scope of the variables? More precisely, can you move those declarations
fd_set rdfs; struct timeval tv;
to the do {} while(); loop and move those declarations
struct can_frame frame; int rxbitval;
to the if (FD_ISSET(self->sock, &rdfs)) block?
TH_LOG("testcase %2d filters : can_id = 0x%08X can_mask = 0x%08X",testcase, rfilter.can_id, rfilter.can_mask);
rfilter.can_id = variant->id;rfilter.can_mask = variant->mask;setsockopt(self->sock, SOL_CAN_RAW, CAN_RAW_FILTER,&rfilter, sizeof(rfilter));
TH_LOG("testcase %2d sending patterns...", testcase);
TH_LOG("filters: can_id = 0x%08X can_mask = 0x%08X",rfilter.can_id, rfilter.can_mask);
ret = send_can_frames(s, testcase);ASSERT_EQ(0, ret)TH_LOG("failed to send CAN frames");
ret = send_can_frames(self->sock, variant->testcase);ASSERT_EQ(0, ret)TH_LOG("failed to send CAN frames");
have_rx = 1;rx = 0;rxbits = 0;
rx = 0;rxbits = 0;
while (have_rx) {
do {have_rx = 0;FD_ZERO(&rdfs);FD_SET(self->sock, &rdfs);tv.tv_sec = 0;tv.tv_usec = 50000; /* 50ms timeout */
have_rx = 0;FD_ZERO(&rdfs);FD_SET(s, &rdfs);tv.tv_sec = 0;tv.tv_usec = 50000; /* 50ms timeout */
ret = select(self->sock + 1, &rdfs, NULL, NULL, &tv);ASSERT_LE(0, ret)TH_LOG("failed select for frame %d (%d)", rx, errno);
ret = select(s+1, &rdfs, NULL, NULL, &tv);
if (FD_ISSET(self->sock, &rdfs)) {have_rx = 1;ret = read(self->sock, &frame, sizeof(struct can_frame)); ASSERT_LE(0, ret)
TH_LOG("failed select for frame %d (%d)", rx, errno);if (FD_ISSET(s, &rdfs)) {have_rx = 1;ret = read(s, &frame, sizeof(struct can_frame));
^^^^^^^^^^^^^^^^ sizeof(frame)
ASSERT_LE(0, ret)TH_LOG("failed to read frame %d (%d)", rx, errno);ASSERT_EQ(ID, frame.can_id & CAN_SFF_MASK)TH_LOG("received wrong can_id");ASSERT_EQ(testcase, frame.data[0])TH_LOG("received wrong test case");/* test & calc rxbits */rxbitval = 1 << ((frame.can_id & (CAN_EFF_FLAG|CAN_RTR_FLAG|CAN_ERR_FLAG)) >> 28);/* only receive a rxbitval once */ASSERT_NE(rxbitval, rxbits & rxbitval)TH_LOG("received rxbitval %d twice", rxbitval);rxbits |= rxbitval;rx++;TH_LOG("testcase %2d rx : can_id = 0x%08X rx = %d rxbits = %d",testcase, frame.can_id, rx, rxbits);}
TH_LOG("failed to read frame %d (%d)", rx, errno);ASSERT_EQ(ID, frame.can_id & CAN_SFF_MASK)TH_LOG("received wrong can_id");ASSERT_EQ(variant->testcase, frame.data[0])TH_LOG("received wrong test case");/* test & calc rxbits */rxbitval = 1 << ((frame.can_id & (CAN_EFF_FLAG|CAN_RTR_FLAG|CAN_ERR_FLAG)) >> 28);/* only receive a rxbitval once */ASSERT_NE(rxbitval, rxbits & rxbitval)TH_LOG("received rxbitval %d twice", rxbitval);rxbits |= rxbitval;rx++;TH_LOG("rx: can_id = 0x%08X rx = %d rxbits = %d",frame.can_id, rx, rxbits); }
/* rx timed out -> check the received results */ASSERT_EQ(rx_res[testcase], rx)TH_LOG("wrong number of received frames %d", testcase);ASSERT_EQ(rxbits_res[testcase], rxbits)TH_LOG("wrong rxbits value in testcase %d", testcase);TH_LOG("testcase %2d ok", testcase);TH_LOG("---");}
} while (have_rx);
close(s);return;
/* rx timed out -> check the received results */ASSERT_EQ(variant->exp_num_rx, rx)TH_LOG("wrong number of received frames");ASSERT_EQ(variant->exp_rxbits, rxbits)TH_LOG("wrong rxbits value");}
Yours sincerely, Vincent Mailhol