this project uses a fake rtos, and compiles for native test this is to test some lib seperate form the rest of the system
166 lines
4.3 KiB
C
166 lines
4.3 KiB
C
#include "unity.h"
|
|
|
|
#include "UsbDataHandler.h"
|
|
#include "pb_encode.h"
|
|
#include "firmware.pb.h"
|
|
|
|
void setUp() {
|
|
|
|
}
|
|
|
|
|
|
|
|
#define START_PACKAES 10
|
|
#define START_SIZE 123456
|
|
#define START_CRC 0xffff
|
|
#define START_DEVICE 0x04
|
|
#define START_NAME "slave0x04.bin"
|
|
|
|
#define PACK_COUTNER 3
|
|
#define PACK_CRC 0xabcd
|
|
#define PACK_DEVICE 0x04
|
|
#define PACK_DATA_SIZE 50
|
|
|
|
#define ACK_COUTNER 43
|
|
#define ACK_CRC 0xabcdef
|
|
#define ACK_DEVICE 0x9
|
|
|
|
#define DONE_CRC 0xffffffff
|
|
#define DONE_DEVICE 0xf
|
|
#define DONE_SIZE 1024 * 65
|
|
|
|
uint16_t StartCounter = 0;
|
|
uint16_t PackageCounter = 0;
|
|
uint16_t AckCounter = 0;
|
|
uint16_t DoneCounter = 0;
|
|
|
|
|
|
void transmit_package(uint16_t id, const pb_msgdesc_t *fields , const void* msg){
|
|
UsbDataPacket buffer = {0};
|
|
buffer.head.type = id;
|
|
pb_ostream_t ostream = pb_ostream_from_buffer(buffer.data, sizeof(buffer.data));
|
|
pb_encode(&ostream, fields, msg);
|
|
buffer.head.length= ostream.bytes_written;
|
|
|
|
buffer.head.check = UsbDataPacket_head_sum(&buffer);
|
|
|
|
UsbDataHandler_RxCallback((uint8_t*)(&buffer), buffer.head.length+sizeof(UsbDataPacketHead));
|
|
}
|
|
|
|
void test_UsbDataHandler(void) {
|
|
// Set up the module
|
|
UsbDataHandler_Start();
|
|
|
|
// Call the runner with no messages this should do nothing
|
|
UsbDataHandler_Runner();
|
|
|
|
FirmwareStart start ={
|
|
.name=START_NAME,
|
|
.packages=START_PACKAES,
|
|
.size=START_SIZE,
|
|
.crc_fw=START_CRC,
|
|
.device_id=START_DEVICE,
|
|
};
|
|
transmit_package(0xf01, FirmwareStart_fields, &start);
|
|
|
|
// Call the runner with start message in the queue
|
|
UsbDataHandler_Runner();
|
|
TEST_ASSERT_EQUAL(StartCounter,1);
|
|
|
|
|
|
//Put 2 packages in the buffer an parse them
|
|
transmit_package(0xf01, FirmwareStart_fields, &start);
|
|
transmit_package(0xf01, FirmwareStart_fields, &start);
|
|
UsbDataHandler_Runner();
|
|
UsbDataHandler_Runner();
|
|
TEST_ASSERT_EQUAL(StartCounter,3);
|
|
|
|
|
|
|
|
FirmwarePackage pack = {
|
|
.counter =PACK_COUTNER ,
|
|
.crc_pac = PACK_CRC,
|
|
.device_id= PACK_DEVICE,
|
|
.data={.size = PACK_DATA_SIZE,
|
|
.bytes={0}
|
|
},
|
|
};
|
|
transmit_package(0xf02, FirmwarePackage_fields, &pack);
|
|
UsbDataHandler_Runner();
|
|
TEST_ASSERT_EQUAL(PackageCounter,1);
|
|
|
|
FirmwarePackageAck ack = {
|
|
.ack =true,
|
|
.counter = ACK_COUTNER,
|
|
.crc_pac = ACK_CRC,
|
|
.device_id = ACK_DEVICE,
|
|
};
|
|
transmit_package(0xf04, FirmwarePackageAck_fields, &ack);
|
|
UsbDataHandler_Runner();
|
|
TEST_ASSERT_EQUAL(PackageCounter,1);
|
|
|
|
|
|
FirmwareDone done = {
|
|
.crc_fw = DONE_CRC,
|
|
.device_id = DONE_DEVICE,
|
|
.size = DONE_SIZE,
|
|
};
|
|
|
|
transmit_package(0xf03, FirmwareDone_fields, &done);
|
|
UsbDataHandler_Runner();
|
|
TEST_ASSERT_EQUAL(DoneCounter,1);
|
|
|
|
}
|
|
|
|
void tearDown() {
|
|
|
|
}
|
|
|
|
|
|
int main(void) {
|
|
UNITY_BEGIN();
|
|
RUN_TEST(test_UsbDataHandler);
|
|
return UNITY_END();
|
|
}
|
|
|
|
|
|
void DataClbk_FirmwareStart(void * msg, uint32_t length) {
|
|
FirmwareStart start;
|
|
memcpy(&start,msg,sizeof(start));
|
|
TEST_ASSERT_EQUAL(START_SIZE, start.size);
|
|
TEST_ASSERT_EQUAL(START_PACKAES, start.packages);
|
|
TEST_ASSERT_EQUAL(START_CRC, start.crc_fw);
|
|
TEST_ASSERT_EQUAL(START_DEVICE, start.device_id);
|
|
TEST_ASSERT_EQUAL_STRING(START_NAME,start.name);
|
|
StartCounter++;
|
|
}
|
|
void DataClbk_FirmwarePackage(void * msg, uint32_t length) {
|
|
FirmwarePackage pack;
|
|
memcpy(&pack,msg,sizeof(pack));
|
|
TEST_ASSERT_EQUAL(FirmwarePackage_size, length);
|
|
TEST_ASSERT_EQUAL(PACK_COUTNER, pack.counter);
|
|
TEST_ASSERT_EQUAL(PACK_CRC, pack.crc_pac);
|
|
TEST_ASSERT_EQUAL(PACK_DEVICE, pack.device_id);
|
|
TEST_ASSERT_EQUAL(PACK_DATA_SIZE, pack.data.size);
|
|
PackageCounter++;
|
|
}
|
|
void DataClbk_FirmwarePackageAck(void * msg, uint32_t length) {
|
|
FirmwarePackageAck ack;
|
|
memcpy(&ack,msg,sizeof(ack));
|
|
TEST_ASSERT_EQUAL(FirmwarePackageAck_size, length);
|
|
TEST_ASSERT(ack.ack);
|
|
TEST_ASSERT_EQUAL(ACK_COUTNER, ack.counter);
|
|
TEST_ASSERT_EQUAL(ACK_CRC, ack.crc_pac);
|
|
TEST_ASSERT_EQUAL(ACK_DEVICE, ack.device_id);
|
|
|
|
AckCounter++;
|
|
}
|
|
void DataClbk_FirmwareDone(void * msg, uint32_t length) {
|
|
FirmwareDone done;
|
|
memcpy(&done,msg,sizeof(done));
|
|
TEST_ASSERT_EQUAL(FirmwareDone_size, length);
|
|
TEST_ASSERT_EQUAL(DONE_CRC,done.crc_fw);
|
|
TEST_ASSERT_EQUAL(DONE_DEVICE,done.device_id);
|
|
TEST_ASSERT_EQUAL(DONE_SIZE,done.size);
|
|
DoneCounter++;
|
|
} |