| Index: build_tools/debug_server/debug_server/unit_tests/rsp_packetizer_test.cc
|
| ===================================================================
|
| --- build_tools/debug_server/debug_server/unit_tests/rsp_packetizer_test.cc (revision 0)
|
| +++ build_tools/debug_server/debug_server/unit_tests/rsp_packetizer_test.cc (revision 0)
|
| @@ -0,0 +1,184 @@
|
| +#include "rsp_packetizer_test.h"
|
| +#include <stdio.h>
|
| +#include "..\common\rsp_packetizer.h"
|
| +
|
| +namespace {
|
| +unsigned long test_table[] = {
|
| + 0x34969443, 0xD76AA478, 0xE8C7B756, 0x242070DB, 0xC1BDCEEE,
|
| + 0xF57C0FAF, 0x4787C62A, 0xA8304613, 0xFD469501, 0x698098D8,
|
| + 0x8B44F7AF, 0xFFFF5BB1, 0x895CD7BE, 0x6B901122, 0xFD987193,
|
| + 0xA679438E, 0x49B40821, 0xF61E2562, 0xC040B340, 0x265E5A51,
|
| + 0xE9B6C7AA, 0xD62F105D, 0x02441453, 0xD8A1E681, 0xE7D3FBC8,
|
| + 0x21E1CDE6, 0xC33707D6, 0xF4D50D87, 0x455A14ED, 0xA9E3E905,
|
| + 0xFCEFA3F8, 0x676F02D9, 0x8D2A4C8A, 0xFFFA3942, 0x8771F681,
|
| + 0x6D9D6122, 0xFDE5380C, 0xA4BEEA44, 0x4BDECFA9, 0xF6BB4B60,
|
| + 0xBEBFBC70, 0x289B7EC6, 0xEAA127FA, 0xD4EF3085, 0x04881D05,
|
| + 0xD9D4D039, 0xE6DB99E5, 0x1FA27CF8, 0xC4AC5665, 0xF4292244,
|
| + 0x432AFF97, 0xAB9423A7, 0xFC93A039, 0x655B59C3, 0x8F0CCC92,
|
| + 0xFFEFF47D, 0x85845DD1, 0x6FA87E4F, 0xFE2CE6E0, 0xA3014314,
|
| + 0x4E0811A1, 0xF7537E82, 0xBD3AF235, 0x2AD7D2BB, 0xEB86D391,
|
| + 0x34969443, 0xD76AA478, 0xE8C7B756, 0x242070DB, 0xC1BDCEEE,
|
| + 0xF57C0FAF, 0x4787C62A, 0xA8304613, 0xFD469501, 0x698098D8,
|
| + 0x8B44F7AF, 0xFFFF5BB1, 0x895CD7BE, 0x6B901122, 0xFD987193,
|
| + 0xA679438E, 0x49B40821, 0xF61E2562, 0xC040B340, 0x265E5A51,
|
| + 0xE9B6C7AA, 0xD62F105D, 0x02441453, 0xD8A1E681, 0xE7D3FBC8,
|
| + 0x21E1CDE6, 0xC33707D6, 0xF4D50D87, 0x455A14ED, 0xA9E3E905,
|
| + 0xFCEFA3F8, 0x676F02D9, 0x8D2A4C8A, 0xFFFA3942, 0x8771F681,
|
| + 0x6D9D6122, 0xFDE5380C, 0xA4BEEA44, 0x4BDECFA9, 0xF6BB4B60,
|
| + 0xBEBFBC70, 0x289B7EC6, 0xEAA127FA, 0xD4EF3085, 0x04881D05,
|
| + 0xD9D4D039, 0xE6DB99E5, 0x1FA27CF8, 0xC4AC5665, 0xF4292244,
|
| + 0x432AFF97, 0xAB9423A7, 0xFC93A039, 0x655B59C3, 0x8F0CCC92,
|
| + 0xFFEFF47D, 0x85845DD1, 0x6FA87E4F, 0xFE2CE6E0, 0xA3014314,
|
| + 0x4E0811A1, 0xF7537E82, 0xBD3AF235, 0x2AD7D2BB, 0xEB86D391
|
| +};
|
| +} // namespace
|
| +
|
| +namespace rsp {
|
| +
|
| +Packetizer_test::Packetizer_test(){
|
| +}
|
| +
|
| +Packetizer_test::~Packetizer_test(){
|
| +}
|
| +
|
| +void Packetizer_test::Clean() {
|
| + response_type_ = NONE;
|
| + response_num_ = 0;
|
| + packet_body_.Clear();
|
| + token_is_checksum_valid_ = true;
|
| +}
|
| +
|
| +void Packetizer_test::OnPacket(debug::Blob& body, bool valid_checksum) {
|
| + response_type_ = PACKET;
|
| + response_num_++;
|
| + packet_body_ = body;
|
| + token_is_checksum_valid_ = valid_checksum;
|
| +}
|
| +
|
| +void Packetizer_test::OnUnexpectedChar(char unexpected_char) {
|
| + packet_body_.PushBack(unexpected_char);
|
| + response_type_ = INVALID_CHAR;
|
| + response_num_++;
|
| +}
|
| +
|
| +void Packetizer_test::OnBreak() {
|
| + response_type_ = BREAK;
|
| + response_num_++;
|
| +}
|
| +
|
| +bool Packetizer_test::CompareTokenBody(const char* text) {
|
| + size_t str_len = strlen(text);
|
| + size_t body_len = packet_body_.Size();
|
| + if (str_len != body_len)
|
| + return false;
|
| + for (size_t i = 0; i < str_len; i++) {
|
| + if (packet_body_[i] != text[i])
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +#define ReportError(n) {\
|
| + char message[300];\
|
| + _snprintf_s(message, sizeof(message) - 1, "Error %d in rsp::Packetizer unit test #%d. File=[%s] Line=%d.", n, test_no, __FILE__, __LINE__);\
|
| + if (NULL != error) *error = message;\
|
| + return false;\
|
| +} while(0)
|
| +
|
| +#define ExpectedResult(type, text, valid) \
|
| + if (1 != response_num_) {\
|
| + ReportError(1);\
|
| + }\
|
| + else if (response_type_ != type) {\
|
| + ReportError(2);\
|
| + }\
|
| + else if (!CompareTokenBody(text)) {\
|
| + ReportError(3);\
|
| + }\
|
| + else if (token_is_checksum_valid_ != valid) {\
|
| + ReportError(4);\
|
| + } test_no++
|
| +
|
| +bool Packetizer_test::Run(std::string* error) {
|
| + Packetizer pktz;
|
| + pktz.SetPacketConsumer(this);
|
| + int test_no = 1;
|
| +
|
| + Clean();
|
| + pktz.OnData("$#00");
|
| + ExpectedResult(PACKET, "", true);
|
| +
|
| + Clean();
|
| + pktz.OnData("$#02");
|
| + ExpectedResult(PACKET, "", false);
|
| +
|
| + Clean();
|
| + pktz.OnData("$#20");
|
| + ExpectedResult(PACKET, "", false);
|
| +
|
| + Clean();
|
| + pktz.OnData("$ #40");
|
| + ExpectedResult(PACKET, " ", true);
|
| +
|
| + Clean();
|
| + pktz.OnData("$123456#35");
|
| + ExpectedResult(PACKET, "123456", true);
|
| +
|
| + Clean();
|
| + pktz.OnData("$}]aa#9C");
|
| + ExpectedResult(PACKET, "}aa", true);
|
| +
|
| + Clean();
|
| + pktz.OnData("$0*##7D");
|
| + ExpectedResult(PACKET, "0000000", true);
|
| +
|
| + Clean();
|
| + pktz.OnData("#");
|
| + ExpectedResult(INVALID_CHAR, "#", true);
|
| +
|
| + Clean();
|
| + pktz.OnData("\x03");
|
| + ExpectedResult(BREAK, "", true);
|
| +
|
| + size_t tab_sz = sizeof(test_table);
|
| + unsigned char* p_tab = reinterpret_cast<unsigned char*>(&test_table);
|
| + for (size_t i = 0; i < tab_sz; i++) {
|
| + size_t len = p_tab[i++] % 50;
|
| + if ((i + len) > tab_sz )
|
| + len = tab_sz - i;
|
| +
|
| + unsigned char* p_data = &p_tab[i];
|
| + debug::Blob msg;
|
| + for (size_t k = 0; k < len; k++)
|
| + msg.PushBack(p_data[i++]);
|
| +
|
| + debug::Blob msg_in;
|
| + PacketUtils::AddEnvelope(msg, &msg_in);
|
| +
|
| + Clean();
|
| + size_t data_len = msg_in.Size();
|
| + char* data = (char*)malloc(data_len);
|
| + for(size_t k = 0; k < data_len; k++)
|
| + data[k] = msg_in[k];
|
| +
|
| + pktz.OnData(data, data_len);
|
| +
|
| + if (1 != response_num_) {
|
| + ReportError(5);
|
| + }
|
| + else if (response_type_ != PACKET) {
|
| + ReportError(6);
|
| + }
|
| + else if (!(packet_body_ == msg)) {
|
| + ReportError(7);
|
| + }
|
| + else if (!token_is_checksum_valid_) {
|
| + ReportError(8);
|
| + }
|
| + free(data);
|
| + test_no++;
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +} //namespace rsp
|
|
|