#include #include #include "tests/buffer.h" extern "C" { #include "rpc/lowlevel.c" } #define TEST_DI_RPC_LL_MSG_DATA_SIZE 64 DI_BUFFER_DECL(buf1, TEST_DI_RPC_LL_MSG_DATA_SIZE); DI_BUFFER_DECL(buf2, TEST_DI_RPC_LL_MSG_DATA_SIZE); /** * Test encode handshake for device uid with just-fit di_buffer with * size: DI_RPC_LL_MSG_HDR_SIZE + DI_RPC_LL_MSG_HANDSHAKE_DEVICE_UID_SIZE */ TEST(rpc_ll_encode, handshake_strict_buf) { const char uid[33] = "deadbeefcafebabedeadbeefcafebabe"; di_buffer_init(&buf1, buf1_data, sizeof(buf1_data)); di_buffer_flush(&buf1); buf1.size = DI_RPC_LL_MSG_HDR_SIZE + DI_RPC_LL_MSG_HANDSHAKE_DEVICE_UID_SIZE; ASSERT_EQ(DNOK, di_rpc_ll_encode_handshake(&buf1, uid)); ASSERT_EQ(DI_RPC_LL_MSG_HDR_SIZE + DI_RPC_LL_MSG_HANDSHAKE_DEVICE_UID_SIZE, buf1.used); ASSERT_STREQ(uid, reinterpret_cast(&buf1_data[DI_RPC_LL_MSG_HDR_SIZE])); buf1.size = sizeof(buf1_data); test_buffer_dump(&buf1); } /** * Encode a time request lowlevel message and check if it is correct written * to the buffer. * - Checks if the written buffer size is DI_RPC_LL_MSG_HDR_SIZE */ TEST(rpc_ll_encode, time_request) { // const char exp[] = "DJR\x00\x00\x40\x00\x08"; const char exp[] = "DJR\x40\x00\x06"; di_buffer_init(&buf1, buf1_data, sizeof(buf1_data)); di_buffer_flush(&buf1); ASSERT_EQ(DNOK, di_rpc_ll_encode_time_request(&buf1)); EXPECT_EQ(DI_RPC_LL_MSG_HDR_SIZE, buf1.used); EXPECT_STREQ(exp, (const char *)&buf1_data); test_buffer_dump(&buf1); } /** * Encode msg in src di_buffer into dst and write header * Check if the encode returns ok and if the dst buffer is written correctly */ TEST(rpc_ll_encode, DNOK) { // static const uint8_t expect[] = "DJR\x00\x00\x10\x00\x0a\x13\x37"; static const uint8_t expect[] = "DJR\x10\x00\x08\x13\x37"; /* Initialize */ di_buffer_init(&buf1, buf1_data, sizeof(buf1_data)); di_buffer_flush(&buf1); di_buffer_init(&buf2, buf2_data, sizeof(buf2_data)); di_buffer_flush(&buf2); /* Write string into dst buffer, set the buf2.used size */ di_buffer_memcpy(&buf2, 0, "\x13\x37", 2); buf2.used = 2; EXPECT_EQ(DNOK, di_rpc_ll_encode(&buf1, &buf2, DI_RPC_LL_MSG_TYPE_PLAIN)); EXPECT_EQ(0, memcmp(expect, buf1.data, sizeof(expect) - 1)); test_buffer_dump(&buf1); }