Commit 7b738d1a authored by Job Vranish's avatar Job Vranish
Browse files

fixed broken kinetic pdu tests

parent 60d6418b
Loading
Loading
Loading
Loading
+55 −23
Original line number Diff line number Diff line
@@ -209,49 +209,52 @@ bus_sink_cb_res_t sink_cb(uint8_t *read_buf,

void test_sink_cb_should_reset_uninitialized_socket_state(void)
{
    socket_info si = {
    socket_info *si = (socket_info *)si_buf;
    *si = (socket_info){
        .state = STATE_UNINIT,
        .accumulated = 0xFFFFFFFF,
    };
    KineticConnection connection = { .si = &si };
    KineticConnection connection = { .si = si };
    
    bus_sink_cb_res_t res = sink_cb(NULL, 0, &connection);

    TEST_ASSERT_EQUAL(0, si.accumulated);
    TEST_ASSERT_EQUAL(UNPACK_ERROR_UNDEFINED, si.unpack_status);
    TEST_ASSERT_EQUAL(0, si->accumulated);
    TEST_ASSERT_EQUAL(UNPACK_ERROR_UNDEFINED, si->unpack_status);

    /* Expect next read to be a header. */
    TEST_ASSERT_EQUAL(sizeof(KineticPDUHeader), res.next_read);
    TEST_ASSERT_EQUAL(NULL, res.full_msg_buffer);
    TEST_ASSERT_EQUAL(STATE_AWAITING_HEADER, si.state);
    TEST_ASSERT_EQUAL(STATE_AWAITING_HEADER, si->state);
}

void test_sink_cb_should_expose_invalid_header_error(void)
{
    socket_info si = {
    socket_info *si = (socket_info *)si_buf;
    *si = (socket_info){
        .state = STATE_AWAITING_HEADER,
        .accumulated = 0xFFFFFFFF,
        .accumulated = 0,
    };
    KineticConnection connection = { .si = &si };
    KineticConnection connection = { .si = si };
    KineticPDUHeader bad_header;
    memset(&bad_header, 0xFF, sizeof(bad_header));

    bus_sink_cb_res_t res = sink_cb((uint8_t *)&bad_header, sizeof(bad_header), &connection);
    TEST_ASSERT_EQUAL(sizeof(KineticPDUHeader), res.next_read);
    TEST_ASSERT_EQUAL(UNPACK_ERROR_INVALID_HEADER, si.unpack_status);
    TEST_ASSERT_EQUAL(&si, res.full_msg_buffer);
    TEST_ASSERT_EQUAL(UNPACK_ERROR_INVALID_HEADER, si->unpack_status);
    TEST_ASSERT_EQUAL(si, res.full_msg_buffer);
    
    TEST_ASSERT_EQUAL(0, si.accumulated);
    TEST_ASSERT_EQUAL(STATE_AWAITING_HEADER, si.state);
    TEST_ASSERT_EQUAL(0, si->accumulated);
    TEST_ASSERT_EQUAL(STATE_AWAITING_HEADER, si->state);
}

void test_sink_cb_should_transition_to_awaiting_body_state_with_good_header(void)
{
    socket_info si = {
    socket_info *si = (socket_info *)si_buf;
    *si = (socket_info){
        .state = STATE_AWAITING_HEADER,
        .accumulated = 0xFFFFFFFF,
        .accumulated = 0,
    };
    KineticConnection connection = { .si = &si };
    KineticConnection connection = { .si = si };
    uint8_t read_buf[] = {
        0xa0,                       // version prefix
        0x00, 0x00, 0x00, 0x7b,     // protobuf length
@@ -261,9 +264,37 @@ void test_sink_cb_should_transition_to_awaiting_body_state_with_good_header(void
    bus_sink_cb_res_t res = sink_cb(read_buf, sizeof(read_buf), &connection);
    TEST_ASSERT_EQUAL(123 + 456, res.next_read);
    TEST_ASSERT_EQUAL(NULL, res.full_msg_buffer);
    TEST_ASSERT_EQUAL(STATE_AWAITING_BODY, si.state);
    TEST_ASSERT_EQUAL(0, si.accumulated);
    TEST_ASSERT_EQUAL(UNPACK_ERROR_SUCCESS, si.unpack_status);
    TEST_ASSERT_EQUAL(STATE_AWAITING_BODY, si->state);
    TEST_ASSERT_EQUAL(0, si->accumulated);
    TEST_ASSERT_EQUAL(UNPACK_ERROR_SUCCESS, si->unpack_status);
}

void test_sink_cb_should_accumulate_partially_recieved_header(void)
{
    socket_info *si = (socket_info *)si_buf;
    *si = (socket_info){
        .state = STATE_AWAITING_HEADER,
        .accumulated = 0,
    };
    KineticConnection connection = { .si = si };
    uint8_t read_buf1[] = {
        0xa0,                       // version prefix
        0x00, 0x00, 0x00, 0x7b,     // protobuf length
    };
    uint8_t read_buf2[] = {
        0x00, 0x00, 0x01, 0xc8,     // value length
    };

    bus_sink_cb_res_t res = sink_cb(read_buf1, sizeof(read_buf1), &connection);
    TEST_ASSERT_EQUAL(4, res.next_read);
    TEST_ASSERT_EQUAL(STATE_AWAITING_HEADER, si->state);
    TEST_ASSERT_EQUAL(5, si->accumulated);
    res = sink_cb(read_buf2, sizeof(read_buf2), &connection);
    TEST_ASSERT_EQUAL(123 + 456, res.next_read);
    TEST_ASSERT_EQUAL(NULL, res.full_msg_buffer);
    TEST_ASSERT_EQUAL(STATE_AWAITING_BODY, si->state);
    TEST_ASSERT_EQUAL(0, si->accumulated);
    TEST_ASSERT_EQUAL(UNPACK_ERROR_SUCCESS, si->unpack_status);
}

void test_sink_cb_should_accumulate_partially_received_body(void)
@@ -305,9 +336,10 @@ bus_unpack_cb_res_t unpack_cb(void *msg, void *socket_udata);

void test_unpack_cb_should_expose_error_codes(void)
{
    socket_info si = {
    socket_info *si = (socket_info *)si_buf;
    *si = (socket_info){
        .state = STATE_AWAITING_HEADER,
        .accumulated = 0xFFFFFFFF,
        .accumulated = 0,
        .unpack_status = UNPACK_ERROR_UNDEFINED,
    };
    
@@ -318,8 +350,8 @@ void test_unpack_cb_should_expose_error_codes(void)
    };

    for (size_t i = 0; i < sizeof(error_states) / sizeof(error_states[0]); i++) {
        si.unpack_status = error_states[i];
        bus_unpack_cb_res_t res = unpack_cb((void *)&si, NULL);
        si->unpack_status = error_states[i];
        bus_unpack_cb_res_t res = unpack_cb((void *)si, NULL);
        TEST_ASSERT_FALSE(res.ok);
        TEST_ASSERT_EQUAL(error_states[i], res.u.error.opaque_error_id);
    }
@@ -329,7 +361,7 @@ void test_unpack_cb_should_expose_alloc_failure(void)
{
    socket_info si = {
        .state = STATE_AWAITING_HEADER,
        .accumulated = 0xFFFFFFFF,
        .accumulated = 0,
        .unpack_status = UNPACK_ERROR_SUCCESS,
        .header = {
            .valueLength = 8,