Skip to content

Commit 52b81c3

Browse files
committed
Fix encode test
1 parent 399982b commit 52b81c3

File tree

4 files changed

+38
-42
lines changed

4 files changed

+38
-42
lines changed

extras/test/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ set(TEST_SRCS
3737
src/test_decode.cpp
3838
src/test_encode.cpp
3939
src/test_command_decode.cpp
40+
src/test_command_encode.cpp
4041
src/test_publishEvery.cpp
4142
src/test_publishOnChange.cpp
4243
src/test_publishOnChangeRateLimit.cpp
@@ -55,6 +56,7 @@ set(TEST_DUT_SRCS
5556
../../src/cbor/CBORDecoder.cpp
5657
../../src/cbor/CBOREncoder.cpp
5758
../../src/cbor/MessageDecoder.cpp
59+
../../src/cbor/MessageEncoder.cpp
5860
../../src/cbor/lib/tinycbor/src/cborencoder.c
5961
../../src/cbor/lib/tinycbor/src/cborencoder_close_container_checked.c
6062
../../src/cbor/lib/tinycbor/src/cborerrorstrings.c

extras/test/src/test_command_encode.cpp

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,33 +27,35 @@ SCENARIO("Test the encoding of command messages") {
2727
memcpy(command->fields.params.sha, sha, SHA256_SIZE);
2828

2929
Message * message = new Message();
30-
message->id = CommandID::DeviceBeginCmdUpId;
30+
message->id = CommandID::OtaBeginUpId;
3131

3232
uint8_t buffer[256];
3333
int bytes_encoded = 0;
3434

3535
CborError err = MessageEncoder::encode(message, buffer, sizeof(buffer), bytes_encoded);
3636

3737
// Test the encoding is
38-
// DA 00010700 # tag(67328)
38+
// DA 00010000 # tag(65536)
3939
// 81 # array(1)
4040
// 44 # bytes(4)
4141
// 01020304 # "\u0001\u0002\u0003\u0004"
4242
THEN("The encoding is successful") {
4343
REQUIRE(err == CborNoError);
44-
REQUIRE(bytes_encoded == 7);
44+
REQUIRE(bytes_encoded == 41);
4545
REQUIRE(buffer[0] == 0xDA);
4646
REQUIRE(buffer[1] == 0x00);
4747
REQUIRE(buffer[2] == 0x01);
48-
REQUIRE(buffer[3] == 0x07);
49-
REQUIRE(buffer[4] == 0x81);
50-
REQUIRE(buffer[5] == 0x44);
51-
REQUIRE(buffer[6] == 0x01);
52-
REQUIRE(buffer[7] == 0x02);
53-
REQUIRE(buffer[8] == 0x03);
54-
REQUIRE(buffer[9] == 0x04);
48+
REQUIRE(buffer[3] == 0x00);
49+
REQUIRE(buffer[4] == 0x00);
50+
REQUIRE(buffer[5] == 0x81);
51+
REQUIRE(buffer[6] == 0x44);
52+
REQUIRE(buffer[7] == 0x01);
53+
REQUIRE(buffer[8] == 0x02);
54+
REQUIRE(buffer[9] == 0x03);
55+
REQUIRE(buffer[10] == 0x04);
5556
}
5657

58+
5759
delete message;
5860
}
5961

@@ -80,25 +82,30 @@ SCENARIO("Test the encoding of command messages") {
8082
// 68 # text(8)
8183
// 7468696E675F6964 # "thing_id"
8284
// FF # primitive(*)
85+
int l = sizeof(buffer);
86+
for (int i = 0; i < l; i++) {
87+
printf("%02X", buffer[i]);
88+
}
8389

8490
THEN("The encoding is successful") {
8591
REQUIRE(err == CborNoError);
86-
REQUIRE(bytes_encoded == 11);
92+
REQUIRE(bytes_encoded == 10);
8793
REQUIRE(buffer[0] == 0xDA);
8894
REQUIRE(buffer[1] == 0x00);
8995
REQUIRE(buffer[2] == 0x01);
9096
REQUIRE(buffer[3] == 0x03);
9197
REQUIRE(buffer[4] == 0x00);
92-
REQUIRE(buffer[5] == 0x68);
93-
REQUIRE(buffer[6] == 0x74);
94-
REQUIRE(buffer[7] == 0x68);
95-
REQUIRE(buffer[8] == 0x69);
96-
REQUIRE(buffer[9] == 0x6E);
97-
REQUIRE(buffer[10] == 0x67);
98-
REQUIRE(buffer[11] == 0x5F);
99-
REQUIRE(buffer[12] == 0x69);
100-
REQUIRE(buffer[13] == 0x64);
101-
REQUIRE(buffer[14] == 0xFF);
98+
REQUIRE(buffer[5] == 0x9F);
99+
REQUIRE(buffer[6] == 0x62);
100+
REQUIRE(buffer[7] == 0x74);
101+
REQUIRE(buffer[8] == 0x68);
102+
REQUIRE(buffer[9] == 0x69);
103+
REQUIRE(buffer[10] == 0x6E);
104+
REQUIRE(buffer[11] == 0x67);
105+
REQUIRE(buffer[12] == 0x5F);
106+
REQUIRE(buffer[13] == 0x69);
107+
REQUIRE(buffer[14] == 0x64);
108+
REQUIRE(buffer[15] == 0xFF);
102109
}
103110
delete message;
104111
}

src/cbor/MessageEncoder.cpp

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828

2929
#include "lib/tinycbor/cbor-lib.h"
3030
#include "MessageEncoder.h"
31-
#include <AIoTC_Config.h>
32-
#include <Arduino_DebugUtils.h>
3331

3432
/******************************************************************************
3533
* PUBLIC MEMBER FUNCTIONS
@@ -46,14 +44,12 @@ CborError MessageEncoder::encode(Message * message, uint8_t * data, size_t const
4644

4745
cbor_encoder_init(&encoder, data, size, 0);
4846

49-
50-
DEBUG_INFO("Encoder init with size %d", size);
5147
while (current_state != EncoderState::Complete) {
5248

5349
switch (current_state) {
54-
case EncoderState::EncodeTag : next_state = handle_EncodeTag(&encoder, message, data); break;
50+
case EncoderState::EncodeTag : next_state = handle_EncodeTag(&encoder, message); break;
5551
case EncoderState::EncodeArray : next_state = handle_EncodeArray(&encoder, &arrayEncoder); break;
56-
case EncoderState::EncodeParam : next_state = handle_EncodeParam(&encoder, &arrayEncoder, message, data, size); break;
52+
case EncoderState::EncodeParam : next_state = handle_EncodeParam(&arrayEncoder, message); break;
5753
case EncoderState::CloseArray : next_state = handle_CloseArray(&encoder, &arrayEncoder); break;
5854
case EncoderState::MessageNotSupported : return CborErrorUnsupportedType; break;
5955
case EncoderState::Complete : /* Nothing to do */ break;
@@ -72,9 +68,8 @@ CborError MessageEncoder::encode(Message * message, uint8_t * data, size_t const
7268
PRIVATE MEMBER FUNCTIONS
7369
******************************************************************************/
7470

75-
MessageEncoder::EncoderState MessageEncoder::handle_EncodeTag(CborEncoder * encoder, Message * message, uint8_t * data)
71+
MessageEncoder::EncoderState MessageEncoder::handle_EncodeTag(CborEncoder * encoder, Message * message)
7672
{
77-
DEBUG_INFO("Encode tag");
7873
CborTag commandTag = (uint64_t) message->id;
7974
if (cbor_encode_tag(encoder, commandTag) != CborNoError)
8075
return EncoderState::Error;
@@ -84,19 +79,15 @@ MessageEncoder::EncoderState MessageEncoder::handle_EncodeTag(CborEncoder * enco
8479

8580
MessageEncoder::EncoderState MessageEncoder::handle_EncodeArray(CborEncoder * encoder, CborEncoder * array_encoder)
8681
{
87-
DEBUG_INFO("Start array");
8882
if (cbor_encoder_create_array(encoder, array_encoder, CborIndefiniteLength) != CborNoError)
8983
return EncoderState::Error;
9084

9185
return EncoderState::EncodeParam;
9286
}
9387

94-
MessageEncoder::EncoderState MessageEncoder::handle_EncodeParam(CborEncoder * encoder, CborEncoder * array_encoder, Message * message, uint8_t * data, size_t const size)
88+
MessageEncoder::EncoderState MessageEncoder::handle_EncodeParam(CborEncoder * array_encoder, Message * message)
9589
{
96-
DEBUG_INFO("Encode param");
9790
CborError error = CborNoError;
98-
// Switch case on the message id
99-
DEBUG_INFO("message id is %d", message->id);
10091
switch (message->id)
10192
{
10293
case CommandID::OtaBeginUpId:
@@ -118,9 +109,8 @@ MessageEncoder::EncoderState MessageEncoder::handle_EncodeParam(CborEncoder * en
118109
default:
119110
return EncoderState::MessageNotSupported;
120111
}
121-
DEBUG_INFO("Check error");
112+
122113
if (error != CborNoError) {
123-
DEBUG_INFO("error is %d", error);
124114
return EncoderState::Error;
125115
}
126116

@@ -129,13 +119,11 @@ MessageEncoder::EncoderState MessageEncoder::handle_EncodeParam(CborEncoder * en
129119

130120
MessageEncoder::EncoderState MessageEncoder::handle_CloseArray(CborEncoder * encoder, CborEncoder * array_encoder)
131121
{
132-
DEBUG_INFO("Close array");
122+
133123
if (cbor_encoder_close_container(encoder, array_encoder) != CborNoError) {
134-
DEBUG_INFO("Error closing array");
135124
return EncoderState::Error;
136125
}
137126

138-
DEBUG_INFO("After close array");
139127
return EncoderState::Complete;
140128
}
141129

@@ -150,7 +138,6 @@ CborError MessageEncoder::encodeOtaBeginUp(CborEncoder * array_encoder, Message
150138
CborError MessageEncoder::encodeThingGetIdCmdUp(CborEncoder * array_encoder, Message * message)
151139
{
152140
ThingGetIdCmdUp * thingGetIdCmdUp = (ThingGetIdCmdUp *) message;
153-
DEBUG_INFO("Encoding thing id: %s", thingGetIdCmdUp->fields.params.thing_id);
154141
CHECK_CBOR(cbor_encode_text_stringz(array_encoder, thingGetIdCmdUp->fields.params.thing_id));
155142
return CborNoError;
156143
}

src/cbor/MessageEncoder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ class MessageEncoder
5757
Error
5858
};
5959

60-
static EncoderState handle_EncodeTag(CborEncoder * encoder, Message * message, uint8_t * data);
60+
static EncoderState handle_EncodeTag(CborEncoder * encoder, Message * message);
6161
static EncoderState handle_EncodeArray(CborEncoder * encoder, CborEncoder * array_encoder);
62-
static EncoderState handle_EncodeParam(CborEncoder * encoder, CborEncoder * array_encoder, Message * message, uint8_t * data, size_t const size);
62+
static EncoderState handle_EncodeParam(CborEncoder * array_encoder, Message * message);
6363
static EncoderState handle_CloseArray(CborEncoder * encoder, CborEncoder * array_encoder);
6464

6565
// Message specific encoders

0 commit comments

Comments
 (0)