src.dualinventive.com/jjacobs/dinetrpcll-sniffer/libdi/tests/drv_xbee.cpp

232 lines
5.4 KiB
C++

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <gtest/gtest.h>
#include <di/stdio.h>
#include <di/drv/xbee.h>
static struct di_drv_xbee_ctx ctx;
static bool check = false;
static size_t data_elements = 0;
static uint8_t read_data[DI_DRV_XBEE_DEFAULT_FRAME_MAX_FRAME_SIZE];
static uint8_t *read_cb_testdata = NULL;
static di_drv_xbee_frame test_frame;
size_t test_drv_xbee_read_cb(uint8_t *buf)
{
if (data_elements) {
memcpy(buf, read_data,data_elements);
}
return data_elements;
}
size_t test_drv_xbee_write_cb(uint8_t *buf, size_t nbyte)
{
read_cb_testdata = (uint8_t*)buf;
return nbyte;
}
void test_xbee_reset(void)
{
data_elements = 0;
di_drv_xbee_init(&ctx);
di_drv_xbee_set_read_cb(&ctx, test_drv_xbee_read_cb);
di_drv_xbee_set_write_cb(&ctx, test_drv_xbee_write_cb);
di_drv_xbee_frame_init(&test_frame);
check = false;
if(di_buffer_size_inuse(&ctx.buf))
di_buffer_flush(&ctx.buf);
}
TEST(drv_xbee, xbee_init_test) {
test_xbee_reset();
EXPECT_EQ(0, ctx.fw_version);
EXPECT_EQ(0, ctx.sn);
}
TEST(drv_xbee, xbee_check_for_no_frame){
test_xbee_reset();
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
EXPECT_EQ(false,check);
}
TEST(drv_xbee, xbee_check_for_small_correct_frame){
test_xbee_reset();
read_data[0] = 0x7e;
read_data[1] = 0x00;
read_data[2] = 0x05;
read_data[3] = 0x88;
read_data[4] = 0x01;
read_data[5] = 0x42;
read_data[6] = 0x44;
read_data[7] = 0x00;
read_data[8] = 0xf0;
read_cb_testdata = read_data;
data_elements = 9;
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
EXPECT_EQ(true,check);
EXPECT_EQ(0x01 ,test_frame.id);
//printf("\n CMD: %s \n", test_frame.cmd);
//EXPECT_EQ("BD" ,test_frame.cmd);
}
TEST(drv_xbee, xbee_check_for_large_correct_frame){
test_xbee_reset();
read_data[0] = 0x7e;
read_data[1] = 0x00;
read_data[2] = 0x12;
read_data[3] = 0x90;
read_data[4] = 0x00;
read_data[5] = 0x13;
read_data[6] = 0xa2;
read_data[7] = 0x00;
read_data[8] = 0x40;
read_data[9] = 0x52;
read_data[10] = 0x2b;
read_data[11] = 0xaa;
read_data[12] = 0xff;
read_data[13] = 0xfe;
read_data[14] = 0x01;
read_data[15] = 0x52;
read_data[16] = 0x78;
read_data[17] = 0x44;
read_data[18] = 0x61;
read_data[19] = 0x74;
read_data[20] = 0x61;
read_data[21] = 0x11;
read_cb_testdata = read_data;
data_elements = 22;
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
EXPECT_EQ(true,check);
//printf("\n SN: %s \n", test_frame.source_address);
//EXPECT_EQ("0013a20040522baa" ,test_frame.source_address);
EXPECT_EQ(0 ,test_frame.id);
EXPECT_EQ(6 ,test_frame.size);
EXPECT_EQ(0x52 ,test_frame.data[0]);
EXPECT_EQ(0x78 ,test_frame.data[1]);
EXPECT_EQ(0x44 ,test_frame.data[2]);
EXPECT_EQ(0x61 ,test_frame.data[3]);
EXPECT_EQ(0x74 ,test_frame.data[4]);
EXPECT_EQ(0x61 ,test_frame.data[5]);
}
TEST(drv_xbee, xbee_check_for_corrupt_frame){
test_xbee_reset();
read_data[0] = 0x7e;
read_data[1] = 0x00;
read_data[2] = 0x05;
read_data[3] = 0x98;
read_data[4] = 0x01;
read_data[5] = 0x42;
read_data[6] = 0x44;
read_data[7] = 0x00;
read_data[8] = 0xf0;
read_cb_testdata = read_data;
data_elements = 9;
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
EXPECT_EQ(false,check);
}
TEST(drv_xbee, xbee_check_for_incomplete_frame){
test_xbee_reset();
read_data[0] = 0x00;
read_data[1] = 0x05;
read_data[2] = 0x98;
read_data[3] = 0x01;
read_data[4] = 0x42;
read_data[5] = 0x44;
read_data[6] = 0x00;
read_data[7] = 0xf0;
read_cb_testdata = read_data;
data_elements = 8;
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
EXPECT_EQ(false,check);
}
TEST(drv_xbee, xbee_msb_lsb_reconstruction_correct) {
test_xbee_reset();
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'S', 'L');
test_frame.size = 4;
test_frame.data[0] = 0xff;
test_frame.data[1] = 0xfe;
test_frame.data[2] = 0xfd;
test_frame.data[3] = 0xfc;
EXPECT_EQ(DNOK, di_drv_xbee_build_sn(&ctx, &test_frame));
EXPECT_EQ(0xfffefdfc,ctx.sn);
test_xbee_reset();
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'S', 'H');
test_frame.size = 4;
test_frame.data[0] = 0xff;
test_frame.data[1] = 0xfe;
test_frame.data[2] = 0xfd;
test_frame.data[3] = 0xfc;
EXPECT_EQ(DNOK, di_drv_xbee_build_sn(&ctx, &test_frame));
EXPECT_EQ(0xfffefdfc00000000, ctx.sn);
test_xbee_reset();
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'S', 'L');
test_frame.size = 4;
test_frame.data[0] = 0xff;
test_frame.data[1] = 0xfe;
test_frame.data[2] = 0xfd;
test_frame.data[3] = 0xfc;
di_drv_xbee_build_sn(&ctx, &test_frame);
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'S', 'H');
test_frame.size = 4;
test_frame.data[0] = 0xff;
test_frame.data[1] = 0xfe;
test_frame.data[2] = 0xfd;
test_frame.data[3] = 0xfc;
di_drv_xbee_build_sn(&ctx, &test_frame);
EXPECT_EQ(0xfffefdfcfffefdfc, ctx.sn);
}
TEST(drv_xbee, xbee_msb_lsb_reconstruction_incorrect) {
test_xbee_reset();
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'D', 'B');
test_frame.size = 2;
test_frame.data[0] = 0xff;
test_frame.data[1] = 0xfe;
EXPECT_EQ(DNE_RANGE, di_drv_xbee_build_sn(&ctx, &test_frame));
EXPECT_EQ(0,ctx.sn);
test_xbee_reset();
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'D', 'B');
test_frame.size = 4;
test_frame.data[0] = 0xff;
test_frame.data[1] = 0xfe;
test_frame.data[1] = 0x00;
test_frame.data[1] = 0x00;
EXPECT_EQ(DNE_PARAM, di_drv_xbee_build_sn(&ctx, &test_frame));
EXPECT_EQ(0,ctx.sn);
}