Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions opendbc/safety/tests/libsafety/libsafety_py.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,14 @@ class CANPacket:
void set_honda_alt_brake_msg(bool c);
void set_honda_bosch_long(bool c);
int get_honda_hw(void);

uint8_t TEST_get_counter(CANPacket_t *msg);
uint32_t TEST_get_checksum(CANPacket_t *msg);
uint32_t TEST_compute_checksum(CANPacket_t *msg);
bool TEST_get_quality_flag_valid(CANPacket_t *msg);

void TEST_rx_hook(CANPacket_t *msg);
bool TEST_tx_hook(CANPacket_t *msg);
""")

class LibSafety:
Expand Down
26 changes: 26 additions & 0 deletions opendbc/safety/tests/libsafety/safety.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,29 @@ void init_tests(void){
// assumes autopark on safety mode init to avoid a fault. get rid of that for testing
tesla_autopark = false;
}

uint8_t TEST_get_counter(const CANPacket_t *msg) {
return current_hooks->get_counter ? current_hooks->get_counter(msg) : 0;
}
uint32_t TEST_get_checksum(const CANPacket_t *msg) {
return current_hooks->get_checksum ? current_hooks->get_checksum(msg) : 0;
}
uint32_t TEST_compute_checksum(const CANPacket_t *msg) {
return current_hooks->compute_checksum ? current_hooks->compute_checksum(msg) : 0;
}
bool TEST_get_quality_flag_valid(const CANPacket_t *msg) {
return current_hooks->get_quality_flag_valid ? current_hooks->get_quality_flag_valid(msg) : true;
}

void TEST_rx_hook(const CANPacket_t *msg) {
if (current_hooks->rx) {
current_hooks->rx(msg);
}
}

bool TEST_tx_hook(const CANPacket_t *msg) {
if (current_hooks->tx) {
return current_hooks->tx(msg);
}
return false;
}
26 changes: 26 additions & 0 deletions opendbc/safety/tests/test_hyundai_canfd.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,32 @@ def _button_msg(self, buttons, main_button=0, bus=None):
}
return self.packer.make_can_msg_safety("CRUISE_BUTTONS", bus, values)

def test_fuzz_hooks(self):
# ensure default branches are covered
msg = libsafety_py.ffi.new("CANPacket_t *")
msg.addr = 0x555
msg.bus = 0
msg.data_len_code = 8
self.assertEqual(0, self.safety.TEST_get_counter(msg))
self.assertEqual(0, self.safety.TEST_get_checksum(msg))
self.assertEqual(0, self.safety.TEST_get_checksum(msg))
self.assertIsNotNone(self.safety.TEST_compute_checksum(msg))

# Loop specific addresses to cover conditional checks in rx_hook
# 0x35 (EV), 0x105 (Hybrid), 0x100 (ICE)
for addr in [0x35, 0x105, 0x100]:
msg.addr = addr
# Param 1: EV, 2: Hybrid, 0: ICE (default) - simplified check, actual flags are bitmasks
# HYUNDAI_PARAM_EV_GAS = 1, HYUNDAI_PARAM_HYBRID_GAS = 2
# We need to set the safety param to trigger the different branches
for param in [0, 1, 2]:
self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, param)
for bus in range(3):
msg.bus = bus
self.safety.set_controls_allowed(0)
self.safety.TEST_rx_hook(msg)
self.assertFalse(self.safety.get_controls_allowed())


class TestHyundaiCanfdLFASteeringBase(TestHyundaiCanfdBase):

Expand Down