@@ -381,4 +381,71 @@ SCENARIO("Arduino Cloud Properties are encoded", "[ArduinoCloudThing::encode]")
381
381
}
382
382
383
383
/* ***********************************************************************************/
384
+
385
+ WHEN (" The size of the encoded properties is exceeding the CBOR buffer size" ) {
386
+ GIVEN (" CloudProtocol::V2" ) {
387
+ PropertyContainer property_container;
388
+
389
+ String str_0 (" This string is 30 bytes long." ),
390
+ str_1 (" This string is 30 bytes long." ),
391
+ str_2 (" This string is 30 bytes long." ),
392
+ str_3 (" This string is 30 bytes long." ),
393
+ str_4 (" This string is 30 bytes long." ),
394
+ str_5 (" This string is 30 bytes long." ),
395
+ str_6 (" This string is 30 bytes long." ),
396
+ str_7 (" This string is 30 bytes long." ),
397
+ str_8 (" This string is 30 bytes long." ),
398
+ str_9 (" This string is 30 bytes long." );
399
+
400
+ std::unique_ptr<Property> s0 (new CloudWrapperString (str_0));
401
+ std::unique_ptr<Property> s1 (new CloudWrapperString (str_1));
402
+ std::unique_ptr<Property> s2 (new CloudWrapperString (str_2));
403
+ std::unique_ptr<Property> s3 (new CloudWrapperString (str_3));
404
+ std::unique_ptr<Property> s4 (new CloudWrapperString (str_4));
405
+ std::unique_ptr<Property> s5 (new CloudWrapperString (str_5));
406
+ std::unique_ptr<Property> s6 (new CloudWrapperString (str_6));
407
+ std::unique_ptr<Property> s7 (new CloudWrapperString (str_7));
408
+ std::unique_ptr<Property> s8 (new CloudWrapperString (str_8));
409
+ std::unique_ptr<Property> s9 (new CloudWrapperString (str_9));
410
+
411
+
412
+ addPropertyToContainer (property_container, *s0, " str_0" , Permission::ReadWrite);
413
+ addPropertyToContainer (property_container, *s1, " str_1" , Permission::ReadWrite);
414
+ addPropertyToContainer (property_container, *s2, " str_2" , Permission::ReadWrite);
415
+ addPropertyToContainer (property_container, *s3, " str_3" , Permission::ReadWrite);
416
+ addPropertyToContainer (property_container, *s4, " str_4" , Permission::ReadWrite);
417
+ addPropertyToContainer (property_container, *s5, " str_5" , Permission::ReadWrite);
418
+ addPropertyToContainer (property_container, *s6, " str_6" , Permission::ReadWrite);
419
+ addPropertyToContainer (property_container, *s7, " str_7" , Permission::ReadWrite);
420
+ addPropertyToContainer (property_container, *s8, " str_8" , Permission::ReadWrite);
421
+ addPropertyToContainer (property_container, *s9, " str_9" , Permission::ReadWrite);
422
+
423
+ /* Due to the size if the encoded properties exceeding 256 bytes if encoded all at
424
+ * once they are encoded in subsequent calls to CBOREncoder::encode.
425
+ */
426
+
427
+ /* [{0: "str_0", 3: "This string is 30 bytes long."}, {0: "str_1", 3: "This string is 30 bytes long."}, {0: "str_2", 3: "This string is 30 bytes long."}, {0: "str_3", 3: "This string is 30 bytes long."}]
428
+ * = 9F A2 00 65 73 74 72 5F 30 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E A2 00 65 73 74 72 5F 31 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E A2 00 65 73 74 72 5F 32 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E A2 00 65 73 74 72 5F 33 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E FF
429
+ */
430
+ std::vector<uint8_t > const expected_1 = {0x9F , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x30 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x31 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x32 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x33 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xFF };
431
+ std::vector<uint8_t > const actual_1 = cbor::encode (property_container);
432
+ REQUIRE (actual_1 == expected_1);
433
+
434
+ /* [{0: "str_4", 3: "This string is 30 bytes long."}, {0: "str_5", 3: "This string is 30 bytes long."}, {0: "str_6", 3: "This string is 30 bytes long."}, {0: "str_7", 3: "This string is 30 bytes long."}]
435
+ * = 9F A2 00 65 73 74 72 5F 34 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E A2 00 65 73 74 72 5F 35 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E A2 00 65 73 74 72 5F 36 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E A2 00 65 73 74 72 5F 37 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E FF
436
+ */
437
+ std::vector<uint8_t > const expected_2 = {0x9F , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x34 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x35 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x36 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x37 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xFF };
438
+ std::vector<uint8_t > const actual_2 = cbor::encode (property_container);
439
+ REQUIRE (actual_2 == expected_2);
440
+
441
+ /* [{0: "str_8", 3: "This string is 30 bytes long."}, {0: "str_9", 3: "This string is 30 bytes long."}]
442
+ * = 9F A2 00 65 73 74 72 5F 38 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E A2 00 65 73 74 72 5F 39 03 78 1D 54 68 69 73 20 73 74 72 69 6E 67 20 69 73 20 33 30 20 62 79 74 65 73 20 6C 6F 6E 67 2E FF
443
+ */
444
+ std::vector<uint8_t > const expected_3 = {0x9F , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x38 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xA2 , 0x00 , 0x65 , 0x73 , 0x74 , 0x72 , 0x5F , 0x39 , 0x03 , 0x78 , 0x1D , 0x54 , 0x68 , 0x69 , 0x73 , 0x20 , 0x73 , 0x74 , 0x72 , 0x69 , 0x6E , 0x67 , 0x20 , 0x69 , 0x73 , 0x20 , 0x33 , 0x30 , 0x20 , 0x62 , 0x79 , 0x74 , 0x65 , 0x73 , 0x20 , 0x6C , 0x6F , 0x6E , 0x67 , 0x2E , 0xFF };
445
+ std::vector<uint8_t > const actual_3 = cbor::encode (property_container);
446
+ REQUIRE (actual_2 == expected_2);
447
+ }
448
+ }
449
+
450
+ /* ***********************************************************************************/
384
451
}
0 commit comments