Split up functions to rx CAN messages for rx and tx of ISO-TP.
[apps/agl-service-can-low-level.git] / tests / test_receive.c
index 2da2e89..1452ed3 100644 (file)
@@ -6,7 +6,7 @@
 #include <stdarg.h>
 
 extern IsoTpShims SHIMS;
-extern IsoTpHandler ISOTP_HANDLER;
+extern IsoTpReceiveHandle RECEIVE_HANDLE;
 
 extern uint16_t last_can_frame_sent_arb_id;
 extern uint8_t last_can_payload_sent;
@@ -15,20 +15,32 @@ extern bool can_frame_was_sent;
 
 extern bool message_was_received;
 extern uint16_t last_message_received_arb_id;
-extern uint8_t* last_message_received_payload;
+extern uint8_t last_message_received_payload[];
 extern uint8_t last_message_received_payload_size;
 
 extern uint16_t last_message_sent_arb_id;
 extern bool last_message_sent_status;
-extern uint8_t* last_message_sent_payload;
+extern uint8_t last_message_sent_payload[];
 extern uint8_t last_message_sent_payload_size;
 
 extern void setup();
 
+START_TEST (test_receive_empty_can_message)
+{
+    const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0};
+    fail_if(RECEIVE_HANDLE.completed);
+    IsoTpMessage message = isotp_continue_receive(&SHIMS, &RECEIVE_HANDLE, 0x100, data, 0);
+    fail_if(message.completed);
+    fail_if(message_was_received);
+}
+END_TEST
+
 START_TEST (test_receive_wrong_id)
 {
-    const uint8_t data[8] = {0};
-    isotp_receive_can_frame(&ISOTP_HANDLER, 0x100, data, sizeof(data));
+    const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0};
+    fail_if(RECEIVE_HANDLE.completed);
+    IsoTpMessage message = isotp_continue_receive(&SHIMS, &RECEIVE_HANDLE, 0x100, data, 1);
+    fail_if(message.completed);
     fail_if(message_was_received);
 }
 END_TEST
@@ -36,21 +48,36 @@ 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(&ISOTP_HANDLER, 0x2a, data, sizeof(data));
+    const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0x40};
+    IsoTpMessage message = isotp_continue_receive(&SHIMS, &RECEIVE_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};
+    fail_if(RECEIVE_HANDLE.completed);
+    IsoTpMessage message = isotp_continue_receive(&SHIMS, &RECEIVE_HANDLE, 0x2a, data, 3);
+    fail_unless(RECEIVE_HANDLE.completed);
+    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(&ISOTP_HANDLER, 0x2a, data, sizeof(data));
+    const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0x02, 0x12, 0x34};
+    IsoTpMessage message = isotp_continue_receive(&SHIMS, &RECEIVE_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 +88,8 @@ 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);
+    tcase_add_test(tc_core, test_receive_empty_can_message);
     suite_add_tcase(s, tc_core);
 
     return s;