Skip to content

Commit c5cfc8d

Browse files
committed
tlv/unit tests: fix tlv related unit tests
Fix one more failing testcase. While debugging, fix also one place of list copy in M2MTLVSerializer::serialize_multiple_resource and modify the OOM tests accordingly.
1 parent bb89ba2 commit c5cfc8d

File tree

3 files changed

+43
-35
lines changed

3 files changed

+43
-35
lines changed

source/m2mtlvserializer.cpp

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ bool M2MTLVSerializer::serialize_multiple_resource(const M2MResource *resource,
146146
uint8_t *nested_data = NULL;
147147
uint32_t nested_data_size = 0;
148148

149-
M2MResourceInstanceList instance_list = resource->resource_instances();
149+
const M2MResourceInstanceList &instance_list = resource->resource_instances();
150150
if(!instance_list.empty()) {
151151
M2MResourceInstanceList::const_iterator it;
152152
it = instance_list.begin();
@@ -168,7 +168,6 @@ bool M2MTLVSerializer::serialize_multiple_resource(const M2MResource *resource,
168168
}
169169

170170
free(nested_data);
171-
nested_data = NULL;
172171
return success;
173172
}
174173

@@ -193,21 +192,20 @@ bool M2MTLVSerializer::serialize_resource_instance(uint16_t id, const M2MResourc
193192
* Yime, TLV Format */
194193
bool M2MTLVSerializer::serialize_TLV_binary_int(const M2MResourceBase *resource, uint8_t type, uint16_t id, uint8_t *&data, uint32_t &size)
195194
{
196-
int64_t valueInt = resource->get_value_int();
197-
uint32_t buffer_size;
198-
/* max len 8 bytes */
199-
uint8_t buffer[8];
200-
201-
if (resource->resource_instance_type() == M2MResourceInstance::BOOLEAN) {
202-
buffer_size = 1;
203-
buffer[0] = valueInt;
204-
}
205-
else {
206-
buffer_size = 8;
207-
common_write_64_bit(valueInt, buffer);
208-
}
195+
int64_t valueInt = resource->get_value_int();
196+
uint32_t buffer_size;
197+
/* max len 8 bytes */
198+
uint8_t buffer[8];
199+
200+
if (resource->resource_instance_type() == M2MResourceInstance::BOOLEAN) {
201+
buffer_size = 1;
202+
buffer[0] = valueInt;
203+
} else {
204+
buffer_size = 8;
205+
common_write_64_bit(valueInt, buffer);
206+
}
209207

210-
return serialize_TILV(type, id, buffer, buffer_size, data, size);
208+
return serialize_TILV(type, id, buffer, buffer_size, data, size);
211209
}
212210

213211

test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvdeserializer.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Test_M2MTLVDeserializer::~Test_M2MTLVDeserializer()
3737
m2mobjectinstance_stub::clear();
3838
m2mobject_stub::clear();
3939
m2mresource_stub::clear();
40+
m2mresourcebase_stub::clear();
4041
}
4142

4243
void Test_M2MTLVDeserializer::test_is_object_instance()
@@ -142,7 +143,7 @@ void Test_M2MTLVDeserializer::test_deserialise_object_instances()
142143

143144
u_int8_t value[] = {"value"};
144145
m2mresourcebase_stub::value = value;
145-
m2mresourceinstance_stub::int_value = sizeof(value);
146+
m2mresourcebase_stub::int_value = sizeof(value);
146147

147148
data = serializer->serialize( m2mobject_stub::instance_list,size);
148149

@@ -229,8 +230,8 @@ void Test_M2MTLVDeserializer::test_deserialise_object_instances()
229230

230231
m2mbase_stub::name_id_value = 300;
231232

232-
m2mresourceinstance_stub::int_value = 6;
233-
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
233+
m2mresourcebase_stub::int_value = 6;
234+
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourcebase_stub::int_value);
234235
serializer = new M2MTLVSerializer();
235236
data = serializer->serialize( m2mobject_stub::instance_list,size);
236237
delete serializer;
@@ -246,8 +247,8 @@ void Test_M2MTLVDeserializer::test_deserialise_object_instances()
246247
free(m2mresourcebase_stub::value);
247248
m2mresourcebase_stub::value = NULL;
248249

249-
m2mresourceinstance_stub::int_value = 256;
250-
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
250+
m2mresourcebase_stub::int_value = 256;
251+
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourcebase_stub::int_value);
251252
serializer = new M2MTLVSerializer();
252253
data = serializer->serialize( m2mobject_stub::instance_list,size);
253254
delete serializer;
@@ -263,14 +264,14 @@ void Test_M2MTLVDeserializer::test_deserialise_object_instances()
263264
free(m2mresourcebase_stub::value);
264265
m2mresourcebase_stub::value = NULL;
265266

266-
m2mresourceinstance_stub::int_value = 65536;
267-
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
267+
m2mresourcebase_stub::int_value = 65536;
268+
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourcebase_stub::int_value);
268269
serializer = new M2MTLVSerializer();
269270
data = serializer->serialize( m2mobject_stub::instance_list,size);
270271
delete serializer;
271272

272-
deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post);
273-
deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Put);
273+
deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post);
274+
deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Put);
274275
size = 0;
275276

276277
if(data) {
@@ -447,14 +448,13 @@ void Test_M2MTLVDeserializer::test_deserialize_resource_instance_1()
447448
M2MTLVSerializer *serializer = new M2MTLVSerializer();
448449

449450
uint32_t size = 0;
450-
uint8_t* data = serializer->serialize( resource,size);
451+
uint8_t* data = serializer->serialize(resource,size);
451452

452453
delete serializer;
453454

454455
deserializer->deserialize_resource_instances(data,size,
455456
*resource,M2MTLVDeserializer::Put);
456457

457-
458458
free(data);
459459

460460
delete res_instance;
@@ -594,8 +594,8 @@ void Test_M2MTLVDeserializer::test_deserialize_resource_instance()
594594

595595
m2mbase_stub::name_id_value = 300;
596596

597-
m2mresourceinstance_stub::int_value = 6;
598-
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
597+
m2mresourcebase_stub::int_value = 6;
598+
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourcebase_stub::int_value);
599599
serializer = new M2MTLVSerializer();
600600
data = serializer->serialize( resource,size);
601601
delete serializer;
@@ -610,8 +610,8 @@ void Test_M2MTLVDeserializer::test_deserialize_resource_instance()
610610
free(m2mresourcebase_stub::value);
611611
m2mresourcebase_stub::value = NULL;
612612

613-
m2mresourceinstance_stub::int_value = 256;
614-
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
613+
m2mresourcebase_stub::int_value = 256;
614+
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourcebase_stub::int_value);
615615
serializer = new M2MTLVSerializer();
616616
data = serializer->serialize( resource,size);
617617
delete serializer;
@@ -626,8 +626,8 @@ void Test_M2MTLVDeserializer::test_deserialize_resource_instance()
626626
free(m2mresourcebase_stub::value);
627627
m2mresourcebase_stub::value = NULL;
628628

629-
m2mresourceinstance_stub::int_value = 65536;
630-
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
629+
m2mresourcebase_stub::int_value = 65536;
630+
m2mresourcebase_stub::value = (uint8_t*) malloc(m2mresourcebase_stub::int_value);
631631
serializer = new M2MTLVSerializer();
632632
data = serializer->serialize( resource,size);
633633
delete serializer;

test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvserializer.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,12 @@ void Test_M2MTLVSerializer::test_serialize_object_out_of_memory()
120120
memory_fail_counter=1; //apply for 1 time failing malloc
121121
memory_will_fail_counter=4; //after 4 successful ones
122122
data = serializer->serialize( m2mobject_stub::instance_list,size);
123-
CHECK(data == NULL);
123+
// the data was actually encoded
124+
CHECK(data != NULL);
124125

126+
free(data);
127+
128+
// just for safety, verify once more
125129
memory_fail_counter=1; //apply for 1 time failing malloc
126130
memory_will_fail_counter=5; //after 5 successful ones
127131
data = serializer->serialize( m2mobject_stub::instance_list,size);
@@ -470,15 +474,21 @@ void Test_M2MTLVSerializer::test_serialize_resource_instance_out_of_memory()
470474
data = serializer->serialize( m2mobjectinstance_stub::resource_list,size);
471475
CHECK(data == NULL);
472476

477+
// there is now only one allocation in this sequence, so this shall pass
473478
memory_fail_counter=1; //apply for 1 time failing malloc
474479
memory_will_fail_counter=2; //after 2 successful ones
475480
data = serializer->serialize( m2mobjectinstance_stub::resource_list,size);
476-
CHECK(data == NULL);
481+
CHECK(data != NULL);
477482

478483
m2mbase_stub::name_id_value = -1;
479484
data = serializer->serialize( m2mobject_stub::instance_list,size);
480485
CHECK(data == NULL);
481486

487+
// Disable the failures in allocator as the cpputest will otherwise panic
488+
// on its own cleanup which does allocation.
489+
memory_fail_counter = 0;
490+
memory_will_fail_counter = 0;
491+
482492
delete res_instance;
483493
delete resource;
484494
delete instance;

0 commit comments

Comments
 (0)