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

286 lines
8.4 KiB
C++

/*
* drv_frame.cpp
*
* Created on: Apr 6, 2017
* Author: svlies
*/
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <gtest/gtest.h>
#include <di/drv/xbee.h>
#include <../src/drv/xbee/frame.c> //dirty stuff for static function testing.
static di_buffer buf;
static di_drv_xbee_frame frame;
static uint8_t data[DI_DRV_XBEE_DEFAULT_FRAME_MAX_FRAME_SIZE];
TEST(drv_xbee_frame_init, verify_correct) {
di_drv_xbee_frame_init(&frame);
EXPECT_EQ(DI_DRV_XBEE_FT_CMD_STATUS_OK,frame.cmd_status);
EXPECT_EQ(DI_DRV_XBEE_FT_REMOTE_COMMAND_RESPONSE,frame.type);
EXPECT_EQ(0,frame.size);
EXPECT_EQ(0,frame.id);
}
TEST(drv_xbee_frame_AT_cmd, verify_correct_test_1) {
di_buffer_flush(&buf);
di_drv_xbee_frame_init(&frame);
di_buffer_init(&buf, data, DI_DRV_XBEE_DEFAULT_FRAME_MAX_FRAME_SIZE);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_AT_COMMAND_RESPONSE);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,(uint8_t)'T');
di_buffer_write_u8(&buf,(uint8_t)'A');
di_drv_xbee_get_at_command(&buf,&frame);
EXPECT_EQ('T',frame.cmd[0]);
EXPECT_EQ('A',frame.cmd[1]);
}
TEST(drv_xbee_frame_AT_cmd, verify_correct_test_2) {
di_drv_xbee_frame_init(&frame);
di_buffer_flush(&buf);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_REMOTE_COMMAND_RESPONSE);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,(uint8_t)'T');
di_buffer_write_u8(&buf,(uint8_t)'A');
di_drv_xbee_get_at_command(&buf,&frame);
EXPECT_EQ('T',frame.cmd[0]);
EXPECT_EQ('A',frame.cmd[1]);
}
TEST(drv_xbee_frame_address, verify_correct_test_1) {
di_drv_xbee_frame_init(&frame);
di_buffer_flush(&buf);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_RECEIVE_PACKET);
di_buffer_write_u8(&buf,0x88);
di_buffer_write_u8(&buf,0x99);
di_buffer_write_u8(&buf,0xaa);
di_buffer_write_u8(&buf,0xbb);
di_buffer_write_u8(&buf,0xcc);
di_buffer_write_u8(&buf,0xdd);
di_buffer_write_u8(&buf,0xee);
di_buffer_write_u8(&buf,0xff);
di_drv_xbee_get_address(&buf,&frame);
//printf("\n-----------------\n %s \n", frame.src_addr);
EXPECT_EQ('8',frame.src_addr[0]);
EXPECT_EQ('9',frame.src_addr[2]);
EXPECT_EQ('a',frame.src_addr[4]);
EXPECT_EQ('b',frame.src_addr[6]);
EXPECT_EQ('c',frame.src_addr[8]);
EXPECT_EQ('d',frame.src_addr[10]);
EXPECT_EQ('e',frame.src_addr[12]);
EXPECT_EQ('f',frame.src_addr[14]);
}
TEST(drv_xbee_frame_address, verify_correct_test_2) {
di_drv_xbee_frame_init(&frame);
di_buffer_flush(&buf);
di_buffer_write_u8(&buf,0x7e);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x13);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_REMOTE_COMMAND_RESPONSE);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x13);
di_buffer_write_u8(&buf,0xa2);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x40);
di_buffer_write_u8(&buf,0x52);
di_buffer_write_u8(&buf,0x2b);
di_buffer_write_u8(&buf,0xaa);
di_drv_xbee_get_address(&buf,&frame);
//printf("\n-----------------\n %s \n", frame.src_addr);
EXPECT_EQ('0',frame.src_addr[0]);
EXPECT_EQ('1',frame.src_addr[2]);
EXPECT_EQ('a',frame.src_addr[4]);
EXPECT_EQ('0',frame.src_addr[6]);
EXPECT_EQ('4',frame.src_addr[8]);
EXPECT_EQ('5',frame.src_addr[10]);
EXPECT_EQ('2',frame.src_addr[12]);
EXPECT_EQ('a',frame.src_addr[14]);
}
TEST(drv_xbee_frame_address, verify_incorrect_test_1) {
di_drv_xbee_frame_init(&frame);
di_buffer_flush(&buf);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_MODEM_STATUS);
di_buffer_write_u8(&buf,0x88);
di_buffer_write_u8(&buf,0x99);
di_buffer_write_u8(&buf,0xaa);
di_buffer_write_u8(&buf,0xbb);
di_buffer_write_u8(&buf,0xcc);
di_buffer_write_u8(&buf,0xdd);
di_buffer_write_u8(&buf,0xee);
di_buffer_write_u8(&buf,0xff);
di_drv_xbee_get_address(&buf,&frame);
//printf("\n-----------------\n %s \n", frame.src_addr);
EXPECT_EQ(0,frame.src_addr[0]);
}
TEST(drv_xbee_frame_deserialize, verify_correct_test_1) {
di_drv_xbee_frame_init(&frame);
di_buffer_flush(&buf);
di_buffer_write_u8(&buf,0x7e);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x12);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_RECEIVE_PACKET);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x13);
di_buffer_write_u8(&buf,0xa2);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x40);
di_buffer_write_u8(&buf,0x52);
di_buffer_write_u8(&buf,0x2b);
di_buffer_write_u8(&buf,0xaa);
di_buffer_write_u8(&buf,0xff);
di_buffer_write_u8(&buf,0xfe);
di_buffer_write_u8(&buf,0x01);
di_buffer_write_u8(&buf,0x52);
di_buffer_write_u8(&buf,0x78);
di_buffer_write_u8(&buf,0x44);
di_buffer_write_u8(&buf,0x61);
di_buffer_write_u8(&buf,0x74);
di_buffer_write_u8(&buf,0x61);
di_buffer_write_u8(&buf,0x11);
di_drv_xbee_frame_deserialize(&buf,&frame);
//printf("\n-----------------\n %s \n", frame.src_addr);
EXPECT_EQ(DI_DRV_XBEE_FT_RECEIVE_PACKET,frame.type);
EXPECT_EQ('a',frame.src_addr[4]);
EXPECT_EQ(6,frame.size);
EXPECT_EQ(0x52,frame.data[0]);
EXPECT_EQ(0x78,frame.data[1]);
EXPECT_EQ(0x44,frame.data[2]);
EXPECT_EQ(0x61,frame.data[3]);
EXPECT_EQ(0x74,frame.data[4]);
EXPECT_EQ(0x61,frame.data[5]);
}
TEST(drv_xbee_frame_deserialize, verify_correct_test_2) {
di_drv_xbee_frame_init(&frame);
di_buffer_flush(&buf);
di_buffer_write_u8(&buf,0x7e);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x13);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_REMOTE_COMMAND_RESPONSE);
di_buffer_write_u8(&buf,0x55);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x13);
di_buffer_write_u8(&buf,0xa2);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x40);
di_buffer_write_u8(&buf,0x52);
di_buffer_write_u8(&buf,0x2b);
di_buffer_write_u8(&buf,0xaa);
di_buffer_write_u8(&buf,0xff);
di_buffer_write_u8(&buf,0xfe);
di_buffer_write_u8(&buf,0x53);
di_buffer_write_u8(&buf,0x4C);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x40);
di_buffer_write_u8(&buf,0x52);
di_buffer_write_u8(&buf,0x2b);
di_buffer_write_u8(&buf,0xaa);
di_buffer_write_u8(&buf,0xf4);
di_drv_xbee_frame_deserialize(&buf, &frame);
EXPECT_EQ('a',frame.src_addr[4]);
EXPECT_EQ('S',frame.cmd[0]);
EXPECT_EQ('L',frame.cmd[1]);
EXPECT_EQ(0x55,frame.id);
EXPECT_EQ(4, frame.size);
EXPECT_EQ(0x40,frame.data[0]);
EXPECT_EQ(0x52,frame.data[1]);
EXPECT_EQ(0x2b,frame.data[2]);
EXPECT_EQ(0xaa,frame.data[3]);
}
TEST(drv_xbee_frame_deserialize, verify_correct_test_3) {
di_drv_xbee_frame_init(&frame);
di_buffer_flush(&buf);
di_buffer_write_u8(&buf,0x7e);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x05);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_AT_COMMAND_RESPONSE);
di_buffer_write_u8(&buf,0x01);
di_buffer_write_u8(&buf,0x42);
di_buffer_write_u8(&buf,0x44);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0xf0);
di_drv_xbee_frame_deserialize(&buf,&frame);
EXPECT_EQ(DI_DRV_XBEE_FT_AT_COMMAND_RESPONSE,frame.type);
EXPECT_EQ('B',frame.cmd[0]);
EXPECT_EQ('D',frame.cmd[1]);
}
TEST(drv_xbee_frame_deserialize, verify_correct_test_4) {
di_drv_xbee_frame_init(&frame);
di_buffer_flush(&buf);
di_buffer_write_u8(&buf,0x7e);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x02);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_MODEM_STATUS);
di_buffer_write_u8(&buf,0x0b);
di_buffer_write_u8(&buf,0x75);
di_drv_xbee_frame_deserialize(&buf,&frame);
EXPECT_EQ(DI_DRV_XBEE_FT_MODEM_STATUS,frame.type);
EXPECT_EQ(DI_DRV_XBEE_FT_CMD_STATUS_NETWORK_WOKE_UP,frame.cmd_status);
}
TEST(drv_xbee_frame_deserialize, verify_correct_test_5) {
di_drv_xbee_frame_init(&frame);
di_buffer_flush(&buf);
di_buffer_write_u8(&buf,0x7e);
di_buffer_write_u8(&buf,0x00);
di_buffer_write_u8(&buf,0x02);
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_NODE_IDENTIFICATION_INDICATOR);
di_buffer_write_u8(&buf,0x0b);
di_buffer_write_u8(&buf,0x75);
di_drv_xbee_frame_deserialize(&buf,&frame);
EXPECT_EQ(DI_DRV_XBEE_FT_NODE_IDENTIFICATION_INDICATOR,frame.type);
}