Return completed rx messages instead of relying on callbacks.
[apps/low-level-can-service.git] / tests / test_receive.c
index 4134cfd..2ce3fef 100644 (file)
@@ -6,7 +6,7 @@
 #include <stdarg.h>
 
 extern IsoTpShims SHIMS;
-extern IsoTpHandler ISOTP_HANDLER;
+extern IsoTpHandle HANDLE;
 
 extern uint16_t last_can_frame_sent_arb_id;
 extern uint8_t last_can_payload_sent;
@@ -27,8 +27,9 @@ extern void setup();
 
 START_TEST (test_receive_wrong_id)
 {
-    const uint8_t data[8] = {0};
-    isotp_receive_can_frame(0x100, data, sizeof(data));
+    const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0};
+    IsoTpMessage message = isotp_receive_can_frame(&SHIMS, &HANDLE, 0x100, data, 1);
+    fail_if(message.completed);
     fail_if(message_was_received);
 }
 END_TEST
@@ -36,21 +37,34 @@ END_TEST
 START_TEST (test_receive_bad_pci)
 {
     // 4 is a reserved number for the PCI field - only 0-3 are allowed
-    const uint8_t data[8] = {0x40};
-    isotp_receive_can_frame(0x2a, data, sizeof(data));
+    const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0x40};
+    IsoTpMessage message = isotp_receive_can_frame(&SHIMS, &HANDLE, 0x2a, data, 1);
+    fail_if(message.completed);
     fail_if(message_was_received);
 }
 END_TEST
 
+START_TEST (test_receive_single_frame_empty_payload)
+{
+    const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0x00, 0x12, 0x34};
+    IsoTpMessage message = isotp_receive_can_frame(&SHIMS, &HANDLE, 0x2a, data, 3);
+    fail_unless(message.completed);
+    fail_unless(message_was_received);
+    ck_assert_int_eq(last_message_received_arb_id, 0x2a);
+    ck_assert_int_eq(last_message_received_payload_size, 0);
+}
+END_TEST
+
 START_TEST (test_receive_single_frame)
 {
-    const uint8_t data[8] = {0x0, 0x12, 0x34};
-    isotp_receive_can_frame(0x2a, data, sizeof(data));
+    const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0x02, 0x12, 0x34};
+    IsoTpMessage message = isotp_receive_can_frame(&SHIMS, &HANDLE, 0x2a, data, 3);
+    fail_unless(message.completed);
     fail_unless(message_was_received);
     ck_assert_int_eq(last_message_received_arb_id, 0x2a);
     ck_assert_int_eq(last_message_received_payload_size, 2);
     ck_assert_int_eq(last_message_received_payload[0], 0x12);
-    ck_assert_int_eq(last_message_received_payload[0], 0x34);
+    ck_assert_int_eq(last_message_received_payload[1], 0x34);
 }
 END_TEST
 
@@ -61,6 +75,7 @@ Suite* testSuite(void) {
     tcase_add_test(tc_core, test_receive_wrong_id);
     tcase_add_test(tc_core, test_receive_bad_pci);
     tcase_add_test(tc_core, test_receive_single_frame);
+    tcase_add_test(tc_core, test_receive_single_frame_empty_payload);
     suite_add_tcase(s, tc_core);
 
     return s;