From 6f0a915e0f51f09161184c76df6115dcc706a685 Mon Sep 17 00:00:00 2001 From: Luca Barbetti Date: Fri, 8 Feb 2019 12:30:18 +0100 Subject: [PATCH 1/3] Add CloudProtocl v2 support to sendPropertyAsDevice --- src/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 1c4ad0c..66caf65 100644 --- a/src/index.js +++ b/src/index.js @@ -474,7 +474,8 @@ const getCborValue = (senMl) => { return arrayBufferToBase64(cborEncoded); }; -const sendPropertyAsDevice = (deviceId, thingId, name, value, timestamp) => { +const sendPropertyAsDevice = (deviceId, thingId, name, value, timestamp, + useCloudProtocolV2 = false) => { const propertyInputTopic = `/a/t/${thingId}/e/o`; if (timestamp && !Number.isInteger(timestamp)) { @@ -485,7 +486,7 @@ const sendPropertyAsDevice = (deviceId, thingId, name, value, timestamp) => { throw new Error('Name must be a valid string'); } - const senMlValue = getSenml(deviceId, name, value, timestamp); + const senMlValue = getSenml(deviceId, name, value, timestamp, useCloudProtocolV2); return sendMessage(propertyInputTopic, CBOR.encode([senMlValue])); }; From 3d0737a87338ff925155dd4ee217e809c3b81e6c Mon Sep 17 00:00:00 2001 From: Luca Barbetti Date: Fri, 8 Feb 2019 14:31:11 +0100 Subject: [PATCH 2/3] Move CloudProtocolV2 configuration to connection config --- src/index.js | 14 +- test/arduino-cloud.test.js | 164 ++++----- test/cbor-cloudprotocolv2.test.js | 223 +++++++++++++ test/cbor.test.js | 534 +++++++++++------------------- 4 files changed, 502 insertions(+), 433 deletions(-) create mode 100644 test/cbor-cloudprotocolv2.test.js diff --git a/src/index.js b/src/index.js index 66caf65..f3efe41 100644 --- a/src/index.js +++ b/src/index.js @@ -81,6 +81,7 @@ const connect = options => new Promise((resolve, reject) => { onDisconnect: options.onDisconnect, onTrace: options.onTrace, onConnected: options.onConnected, + useCloudProtocolV2: options.useCloudProtocolV2 || false, }; connectionOptions = opts; @@ -392,7 +393,7 @@ const toCloudProtocolV2 = (cborValue) => { return cloudV2CBORValue; }; -const sendProperty = (thingId, name, value, timestamp, useCloudProtocolV2 = false) => { +const sendProperty = (thingId, name, value, timestamp) => { const propertyInputTopic = `/a/t/${thingId}/e/i`; if (timestamp && !Number.isInteger(timestamp)) { @@ -422,14 +423,14 @@ const sendProperty = (thingId, name, value, timestamp, useCloudProtocolV2 = fals break; } - if (useCloudProtocolV2) { + if (connectionOptions.useCloudProtocolV2) { cborValue = toCloudProtocolV2(cborValue); } return sendMessage(propertyInputTopic, CBOR.encode([cborValue])); }; -const getSenml = (deviceId, name, value, timestamp, useCloudProtocolV2 = false) => { +const getSenml = (deviceId, name, value, timestamp) => { if (timestamp && !Number.isInteger(timestamp)) { throw new Error('Timestamp must be Integer'); } @@ -462,7 +463,7 @@ const getSenml = (deviceId, name, value, timestamp, useCloudProtocolV2 = false) } - if (useCloudProtocolV2) { + if (connectionOptions.useCloudProtocolV2) { return toCloudProtocolV2(senMl); } @@ -474,8 +475,7 @@ const getCborValue = (senMl) => { return arrayBufferToBase64(cborEncoded); }; -const sendPropertyAsDevice = (deviceId, thingId, name, value, timestamp, - useCloudProtocolV2 = false) => { +const sendPropertyAsDevice = (deviceId, thingId, name, value, timestamp) => { const propertyInputTopic = `/a/t/${thingId}/e/o`; if (timestamp && !Number.isInteger(timestamp)) { @@ -486,7 +486,7 @@ const sendPropertyAsDevice = (deviceId, thingId, name, value, timestamp, throw new Error('Name must be a valid string'); } - const senMlValue = getSenml(deviceId, name, value, timestamp, useCloudProtocolV2); + const senMlValue = getSenml(deviceId, name, value, timestamp); return sendMessage(propertyInputTopic, CBOR.encode([senMlValue])); }; diff --git a/test/arduino-cloud.test.js b/test/arduino-cloud.test.js index 39ee74d..a833bbf 100644 --- a/test/arduino-cloud.test.js +++ b/test/arduino-cloud.test.js @@ -33,109 +33,113 @@ const propertyStrVal = 'ok'; const propertyBoolName = 'boolean'; const propertyBoolVal = true; -it('ArduinoCloud connection', (done) => { +describe('Test the library basic functionalities', () => { + afterAll(() => ArduinoCloud.disconnect()); + + it('ArduinoCloud connection', (done) => { /* global token */ - ArduinoCloud.connect({ - token, - onDisconnect: (message) => { - if (message.errorCode !== 0) { - throw Error(message); - } - }, - }) - .then(() => { - done(); + ArduinoCloud.connect({ + token, + onDisconnect: (message) => { + if (message.errorCode !== 0) { + throw Error(message); + } + }, }) - .catch((error) => { - throw new Error(error); - }); -}); + .then(() => { + done(); + }) + .catch((error) => { + throw new Error(error); + }); + }); -it('Property name must be a string in sendProperty', (done) => { - try { - ArduinoCloud.sendProperty(deviceId, undefined, propertyIntValue); - } catch (error) { - if (error.message === 'Name must be a valid string') { - done(); + it('Property name must be a string in sendProperty', (done) => { + try { + ArduinoCloud.sendProperty(deviceId, undefined, propertyIntValue); + } catch (error) { + if (error.message === 'Name must be a valid string') { + done(); + } } - } -}); + }); -it('Simulate client write to cloud monitor', (done) => { - ArduinoCloud.writeCloudMonitor(deviceId, `this is a test ${Math.random()}`).then(() => { - done(); - }, (error) => { - throw new Error(error); + it('Simulate client write to cloud monitor', (done) => { + ArduinoCloud.writeCloudMonitor(deviceId, `this is a test ${Math.random()}`).then(() => { + done(); + }, (error) => { + throw new Error(error); + }); }); -}); -it('Simulate device write to cloud monitor', (done) => { - const cloudMonitorInputTopic = `/a/d/${deviceId}/s/o`; - ArduinoCloud.sendMessage(cloudMonitorInputTopic, `this is a test ${Math.random()}`).then(() => { - done(); - }, (error) => { - throw new Error(error); + it('Simulate device write to cloud monitor', (done) => { + const cloudMonitorInputTopic = `/a/d/${deviceId}/s/o`; + ArduinoCloud.sendMessage(cloudMonitorInputTopic, `this is a test ${Math.random()}`).then(() => { + done(); + }, (error) => { + throw new Error(error); + }); }); -}); -it('Simulate device write and client read his message from cloud monitor', (done) => { - const cloudMonitorInputTopic = `/a/d/${deviceId}/s/o`; + it('Simulate device write and client read his message from cloud monitor', (done) => { + const cloudMonitorInputTopic = `/a/d/${deviceId}/s/o`; - const cb = () => { + const cb = () => { // console.log(`[${new Date()}] Message from monitor: ${message}`); - done(); - }; + done(); + }; - ArduinoCloud.openCloudMonitor(deviceId, cb).then(() => { + ArduinoCloud.openCloudMonitor(deviceId, cb).then(() => { // console.log(`Subscribed to topic: ${topic}`); - const message = `This is a test ${new Date()}`; - ArduinoCloud.sendMessage(cloudMonitorInputTopic, message).then(() => { - // console.log(`[${new Date()}] Message sent to monitor: [${message}]`); + const message = `This is a test ${new Date()}`; + ArduinoCloud.sendMessage(cloudMonitorInputTopic, message).then(() => { + // console.log(`[${new Date()}] Message sent to monitor: [${message}]`); + }, (error) => { + throw new Error(error); + }); }, (error) => { throw new Error(error); }); - }, (error) => { - throw new Error(error); }); -}); -it('Simulate client read integer property sent by device', (done) => { - ArduinoCloud.onPropertyValue(thingId, propertyIntName, (value) => { - if (value === propertyIntValue) { - done(); - } - }).then(() => { - ArduinoCloud.sendPropertyAsDevice(deviceId, thingId, propertyIntName, propertyIntValue); + it('Simulate client read integer property sent by device', (done) => { + ArduinoCloud.onPropertyValue(thingId, propertyIntName, (value) => { + if (value === propertyIntValue) { + done(); + } + }).then(() => { + ArduinoCloud.sendPropertyAsDevice(deviceId, thingId, propertyIntName, propertyIntValue); + }); }); -}); -it('Simulate client read float property sent by device', (done) => { - ArduinoCloud.onPropertyValue(thingId, propertyFloatName, (value) => { - if (value === propertyFloatVal) { - done(); - } - }).then(() => { - ArduinoCloud.sendPropertyAsDevice(deviceId, thingId, propertyFloatName, propertyFloatVal); + it('Simulate client read float property sent by device', (done) => { + ArduinoCloud.onPropertyValue(thingId, propertyFloatName, (value) => { + if (value === propertyFloatVal) { + done(); + } + }).then(() => { + ArduinoCloud.sendPropertyAsDevice(deviceId, thingId, propertyFloatName, propertyFloatVal); + }); }); -}); -it('Simulate client read string property sent by device', (done) => { - ArduinoCloud.onPropertyValue(thingId, propertyStrName, (value) => { - if (value === propertyStrVal) { - done(); - } - }).then(() => { - ArduinoCloud.sendPropertyAsDevice(deviceId, thingId, propertyStrName, propertyStrVal); + it('Simulate client read string property sent by device', (done) => { + ArduinoCloud.onPropertyValue(thingId, propertyStrName, (value) => { + if (value === propertyStrVal) { + done(); + } + }).then(() => { + ArduinoCloud.sendPropertyAsDevice(deviceId, thingId, propertyStrName, propertyStrVal); + }); }); -}); -it('Simulate client read boolean property sent by device', (done) => { - ArduinoCloud.onPropertyValue(thingId, propertyBoolName, (value) => { - if (value === propertyBoolVal) { - ArduinoCloud.disconnect(); - done(); - } - }).then(() => { - ArduinoCloud.sendPropertyAsDevice(deviceId, thingId, propertyBoolName, propertyBoolVal); + it('Simulate client read boolean property sent by device', (done) => { + ArduinoCloud.onPropertyValue(thingId, propertyBoolName, (value) => { + if (value === propertyBoolVal) { + ArduinoCloud.disconnect(); + done(); + } + }).then(() => { + ArduinoCloud.sendPropertyAsDevice(deviceId, thingId, propertyBoolName, propertyBoolVal); + }); }); }); diff --git a/test/cbor-cloudprotocolv2.test.js b/test/cbor-cloudprotocolv2.test.js new file mode 100644 index 0000000..575dffc --- /dev/null +++ b/test/cbor-cloudprotocolv2.test.js @@ -0,0 +1,223 @@ +/* +* Copyright 2018 ARDUINO SA (http://www.arduino.cc/) +* This file is part of arduino-iot-js. +* Copyright (c) 2018 +* Authors: Fabrizio Mirabito +* +* This software is released under: +* The GNU General Public License, which covers the main part of +* arduino-iot-js +* The terms of this license can be found at: +* https://www.gnu.org/licenses/gpl-3.0.en.html +* +* You can be released from the requirements of the above licenses by purchasing +* a commercial license. Buying such a license is mandatory if you want to modify or +* otherwise use the software for commercial activities involving the Arduino +* software without disclosing the source code of your own applications. To purchase +* a commercial license, send an email to license@arduino.cc. +* +*/ +const ArduinoCloud = require('../dist/index.js'); + +const deviceId = '1f4ced70-53ad-4b29-b221-1b0abbdfc757'; +const timestamp = 1536743296; + +const base64toHEX = (base64) => { + const raw = atob(base64); + let HEX = ''; + for (let i = 0; i < raw.length; i += 1) { + const hex = raw.charCodeAt(i).toString(16); + const hexPart = (hex.length === 2 ? hex : `0${hex}`).toUpperCase(); + HEX += `0x${hexPart},`; + } + return HEX; +}; + +describe('Test CBOR encoding using CloudProtocol v2', () => { + beforeAll(() => ArduinoCloud.connect({ + // eslint-disable-next-line no-undef + token, + useCloudProtocolV2: true, + onDisconnect: (message) => { + if (message.errorCode !== 0) { + throw Error(message); + } + }, + })); + + afterAll(() => ArduinoCloud.disconnect()); + + // CloudProtocol v2 + + it('[CloudProtocol v2] Generate a valid cbor for a senml string property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_string', 'test_string value', timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('[CloudProtocol v2] Generate a valid cbor for a senml string property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_string', 'test_string value', timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x03,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_uint', 3, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x03,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_uint', 3, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x22,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_sint', -3, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x22,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_sint', -3, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('[CloudProtocol v2] Generate a valid cbor for a senml float property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_float', 3.5, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('[CloudProtocol v2] Generate a valid cbor for a senml float property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_float', 3.5, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('[CloudProtocol v2] Generate a valid cbor for a senml double property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_double', 3.1234567890123456, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('[CloudProtocol v2] Generate a valid cbor for a senml double property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_double', 3.1234567890123456, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property with basename', () => { + const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property without basename', () => { + const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMl = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, true); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl]); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('[CloudProtocol v2] Generate a valid cbor for multiple properties with basename', () => { + const output = '0x86,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x04,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x23,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; + const senMlUInt = ArduinoCloud.getSenml(deviceId, 'test_uint', 4, timestamp, true); + const senMlSInt = ArduinoCloud.getSenml(deviceId, 'test_sint', -4, timestamp, true); + const senMlFloat = ArduinoCloud.getSenml(deviceId, 'test_float', 4.5, timestamp, true); + const senMlString = ArduinoCloud.getSenml(deviceId, 'test_string', 'test value', timestamp, true); + const senMlBool = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, true); + const senMlDouble = ArduinoCloud.getSenml(deviceId, 'test_double', 1.79769e+308, timestamp, true); + const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; + console.log(senMl); + const cborbase64 = ArduinoCloud.getCborValue(senMl); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('[CloudProtocol v2] Generate a valid cbor for multiple properties with basename', () => { + const output = '0x86,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x04,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x23,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; + const senMlUInt = ArduinoCloud.getSenml(null, 'test_uint', 4, timestamp, true); + const senMlSInt = ArduinoCloud.getSenml(null, 'test_sint', -4, timestamp, true); + const senMlFloat = ArduinoCloud.getSenml(null, 'test_float', 4.5, timestamp, true); + const senMlString = ArduinoCloud.getSenml(null, 'test_string', 'test value', timestamp, true); + const senMlBool = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, true); + const senMlDouble = ArduinoCloud.getSenml(null, 'test_double', 1.79769e+308, timestamp, true); + const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; + console.log(senMl); + const cborbase64 = ArduinoCloud.getCborValue(senMl); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); +}); diff --git a/test/cbor.test.js b/test/cbor.test.js index d6f60bb..3508717 100644 --- a/test/cbor.test.js +++ b/test/cbor.test.js @@ -33,351 +33,193 @@ const base64toHEX = (base64) => { return HEX; }; -// CloudProtocol v1 -it('Generate a valid cbor for a senml string property with basename', () => { - const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x73,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_string', 'test_string value', timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('Generate a valid cbor for a senml string property without basename', () => { - const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x76,0x73,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,'; - const senMl = ArduinoCloud.getSenml(null, 'test_string', 'test_string value', timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('Generate a valid cbor for a senml unsigned int property with basename', () => { - const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x03,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_uint', 3, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('Generate a valid cbor for a senml unsigned int property without basename', () => { - const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x76,0x03,'; - const senMl = ArduinoCloud.getSenml(null, 'test_uint', 3, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('Generate a valid cbor for a senml signed int property with basename', () => { - const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x22,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_sint', -3, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('Generate a valid cbor for a senml signed int property without basename', () => { - const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x76,0x22,'; - const senMl = ArduinoCloud.getSenml(null, 'test_sint', -3, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('Generate a valid cbor for a senml float property with basename', () => { - const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_float', 3.5, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('Generate a valid cbor for a senml float property without basename', () => { - const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x76,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,'; - const senMl = ArduinoCloud.getSenml(null, 'test_float', 3.5, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('Generate a valid cbor for a senml double property with basename', () => { - const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_double', 3.1234567890123456, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('Generate a valid cbor for a senml double property without basename', () => { - const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x76,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,'; - const senMl = ArduinoCloud.getSenml(null, 'test_double', 3.1234567890123456, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('Generate a valid cbor for a senml boolean property with basename', () => { - const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x62,0xF5,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('Generate a valid cbor for a senml boolean property without basename', () => { - const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x76,0x62,0xF5,'; - const senMl = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, false); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl], false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('Generate a valid cbor for multiple properties with basename', () => { - const output = '0x86,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x04,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x23,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x73,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x62,0xF5,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,'; - const senMlUInt = ArduinoCloud.getSenml(deviceId, 'test_uint', 4, timestamp, false); - const senMlSInt = ArduinoCloud.getSenml(deviceId, 'test_sint', -4, timestamp, false); - const senMlFloat = ArduinoCloud.getSenml(deviceId, 'test_float', 4.5, timestamp, false); - const senMlString = ArduinoCloud.getSenml(deviceId, 'test_string', 'test value', timestamp, false); - const senMlBool = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, false); - const senMlDouble = ArduinoCloud.getSenml(deviceId, 'test_double', 1.79769e+308, timestamp, false); - const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; - console.log(senMl); - const cborbase64 = ArduinoCloud.getCborValue(senMl, false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('Generate a valid cbor for multiple properties with basename', () => { - const output = '0x86,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x76,0x04,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x76,0x23,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x76,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x76,0x73,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x76,0x62,0xF5,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x76,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,'; - const senMlUInt = ArduinoCloud.getSenml(null, 'test_uint', 4, timestamp, false); - const senMlSInt = ArduinoCloud.getSenml(null, 'test_sint', -4, timestamp, false); - const senMlFloat = ArduinoCloud.getSenml(null, 'test_float', 4.5, timestamp, false); - const senMlString = ArduinoCloud.getSenml(null, 'test_string', 'test value', timestamp, false); - const senMlBool = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, false); - const senMlDouble = ArduinoCloud.getSenml(null, 'test_double', 1.79769e+308, timestamp, false); - const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; - console.log(senMl); - const cborbase64 = ArduinoCloud.getCborValue(senMl, false); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -// CloudProtocol v2 - -it('[CloudProtocol v2] Generate a valid cbor for a senml string property with basename', () => { - const output = '0x81,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_string', 'test_string value', timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('[CloudProtocol v2] Generate a valid cbor for a senml string property without basename', () => { - const output = '0x81,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_string', 'test_string value', timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property with basename', () => { - const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x03,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_uint', 3, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('[CloudProtocol v2] Generate a valid cbor for a senml unsigned int property without basename', () => { - const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x03,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_uint', 3, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property with basename', () => { - const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x22,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_sint', -3, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('[CloudProtocol v2] Generate a valid cbor for a senml signed int property without basename', () => { - const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x22,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_sint', -3, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('[CloudProtocol v2] Generate a valid cbor for a senml float property with basename', () => { - const output = '0x81,0xA4,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_float', 3.5, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('[CloudProtocol v2] Generate a valid cbor for a senml float property without basename', () => { - const output = '0x81,0xA3,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_float', 3.5, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('[CloudProtocol v2] Generate a valid cbor for a senml double property with basename', () => { - const output = '0x81,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_double', 3.1234567890123456, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('[CloudProtocol v2] Generate a valid cbor for a senml double property without basename', () => { - const output = '0x81,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_double', 3.1234567890123456, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property with basename', () => { - const output = '0x81,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMl = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - -it('[CloudProtocol v2] Generate a valid cbor for a senml boolean property without basename', () => { - const output = '0x81,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMl = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, true); - console.log([senMl]); - const cborbase64 = ArduinoCloud.getCborValue([senMl]); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('[CloudProtocol v2] Generate a valid cbor for multiple properties with basename', () => { - const output = '0x86,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x04,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x23,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0xA4,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0x62,0x2D,0x32,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,'; - const senMlUInt = ArduinoCloud.getSenml(deviceId, 'test_uint', 4, timestamp, true); - const senMlSInt = ArduinoCloud.getSenml(deviceId, 'test_sint', -4, timestamp, true); - const senMlFloat = ArduinoCloud.getSenml(deviceId, 'test_float', 4.5, timestamp, true); - const senMlString = ArduinoCloud.getSenml(deviceId, 'test_string', 'test value', timestamp, true); - const senMlBool = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, true); - const senMlDouble = ArduinoCloud.getSenml(deviceId, 'test_double', 1.79769e+308, timestamp, true); - const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; - console.log(senMl); - const cborbase64 = ArduinoCloud.getCborValue(senMl); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); -}); - - -it('[CloudProtocol v2] Generate a valid cbor for multiple properties with basename', () => { - const output = '0x86,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x32,0x04,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x32,0x23,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x32,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x61,0x33,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x61,0x34,0xF5,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,0xA3,0x61,0x30,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x32,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,0x62,0x2D,0x33,0x1A,0x5B,0x98,0xD7,0x80,'; - const senMlUInt = ArduinoCloud.getSenml(null, 'test_uint', 4, timestamp, true); - const senMlSInt = ArduinoCloud.getSenml(null, 'test_sint', -4, timestamp, true); - const senMlFloat = ArduinoCloud.getSenml(null, 'test_float', 4.5, timestamp, true); - const senMlString = ArduinoCloud.getSenml(null, 'test_string', 'test value', timestamp, true); - const senMlBool = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, true); - const senMlDouble = ArduinoCloud.getSenml(null, 'test_double', 1.79769e+308, timestamp, true); - const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; - console.log(senMl); - const cborbase64 = ArduinoCloud.getCborValue(senMl); - console.log(cborbase64); - const cborHex = base64toHEX(cborbase64); - console.log(cborHex); - expect(cborHex).toStrictEqual(output); +describe('Test CBOR encoding using CloudProtocol v1', () => { + beforeAll(() => ArduinoCloud.connect({ + // eslint-disable-next-line no-undef + token, + useCloudProtocolV2: false, + onDisconnect: (message) => { + if (message.errorCode !== 0) { + throw Error(message); + } + }, + })); + + afterAll(() => ArduinoCloud.disconnect()); + + + // CloudProtocol v1 + + it('Generate a valid cbor for a senml string property with basename', () => { + const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x73,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_string', 'test_string value', timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('Generate a valid cbor for a senml string property without basename', () => { + const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x76,0x73,0x71,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x20,0x76,0x61,0x6C,0x75,0x65,'; + const senMl = ArduinoCloud.getSenml(null, 'test_string', 'test_string value', timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('Generate a valid cbor for a senml unsigned int property with basename', () => { + const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x03,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_uint', 3, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('Generate a valid cbor for a senml unsigned int property without basename', () => { + const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x76,0x03,'; + const senMl = ArduinoCloud.getSenml(null, 'test_uint', 3, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('Generate a valid cbor for a senml signed int property with basename', () => { + const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x22,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_sint', -3, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('Generate a valid cbor for a senml signed int property without basename', () => { + const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x76,0x22,'; + const senMl = ArduinoCloud.getSenml(null, 'test_sint', -3, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('Generate a valid cbor for a senml float property with basename', () => { + const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_float', 3.5, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('Generate a valid cbor for a senml float property without basename', () => { + const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x76,0xFB,0x40,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,'; + const senMl = ArduinoCloud.getSenml(null, 'test_float', 3.5, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('Generate a valid cbor for a senml double property with basename', () => { + const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_double', 3.1234567890123456, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('Generate a valid cbor for a senml double property without basename', () => { + const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x76,0xFB,0x40,0x08,0xFC,0xD6,0xE9,0xBA,0x37,0xB3,'; + const senMl = ArduinoCloud.getSenml(null, 'test_double', 3.1234567890123456, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('Generate a valid cbor for a senml boolean property with basename', () => { + const output = '0x81,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x62,0xF5,'; + const senMl = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + it('Generate a valid cbor for a senml boolean property without basename', () => { + const output = '0x81,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x76,0x62,0xF5,'; + const senMl = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, false); + console.log([senMl]); + const cborbase64 = ArduinoCloud.getCborValue([senMl], false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('Generate a valid cbor for multiple properties with basename', () => { + const output = '0x86,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x04,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0x23,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x73,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x62,0x76,0x62,0xF5,0xA4,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x62,0x62,0x6E,0x78,0x2D,0x75,0x72,0x6E,0x3A,0x75,0x75,0x69,0x64,0x3A,0x31,0x66,0x34,0x63,0x65,0x64,0x37,0x30,0x2D,0x35,0x33,0x61,0x64,0x2D,0x34,0x62,0x32,0x39,0x2D,0x62,0x32,0x32,0x31,0x2D,0x31,0x62,0x30,0x61,0x62,0x62,0x64,0x66,0x63,0x37,0x35,0x37,0x61,0x76,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,'; + const senMlUInt = ArduinoCloud.getSenml(deviceId, 'test_uint', 4, timestamp, false); + const senMlSInt = ArduinoCloud.getSenml(deviceId, 'test_sint', -4, timestamp, false); + const senMlFloat = ArduinoCloud.getSenml(deviceId, 'test_float', 4.5, timestamp, false); + const senMlString = ArduinoCloud.getSenml(deviceId, 'test_string', 'test value', timestamp, false); + const senMlBool = ArduinoCloud.getSenml(deviceId, 'test_bool', true, timestamp, false); + const senMlDouble = ArduinoCloud.getSenml(deviceId, 'test_double', 1.79769e+308, timestamp, false); + const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; + console.log(senMl); + const cborbase64 = ArduinoCloud.getCborValue(senMl, false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); + + + it('Generate a valid cbor for multiple properties with basename', () => { + const output = '0x86,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x75,0x69,0x6E,0x74,0x61,0x76,0x04,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x73,0x69,0x6E,0x74,0x61,0x76,0x23,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6A,0x74,0x65,0x73,0x74,0x5F,0x66,0x6C,0x6F,0x61,0x74,0x61,0x76,0xFB,0x40,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x73,0x74,0x72,0x69,0x6E,0x67,0x62,0x76,0x73,0x6A,0x74,0x65,0x73,0x74,0x20,0x76,0x61,0x6C,0x75,0x65,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x69,0x74,0x65,0x73,0x74,0x5F,0x62,0x6F,0x6F,0x6C,0x62,0x76,0x62,0xF5,0xA3,0x62,0x62,0x74,0x1A,0x5B,0x98,0xD7,0x80,0x61,0x6E,0x6B,0x74,0x65,0x73,0x74,0x5F,0x64,0x6F,0x75,0x62,0x6C,0x65,0x61,0x76,0xFB,0x7F,0xEF,0xFF,0xFC,0x57,0xCA,0x82,0xAE,'; + const senMlUInt = ArduinoCloud.getSenml(null, 'test_uint', 4, timestamp, false); + const senMlSInt = ArduinoCloud.getSenml(null, 'test_sint', -4, timestamp, false); + const senMlFloat = ArduinoCloud.getSenml(null, 'test_float', 4.5, timestamp, false); + const senMlString = ArduinoCloud.getSenml(null, 'test_string', 'test value', timestamp, false); + const senMlBool = ArduinoCloud.getSenml(null, 'test_bool', true, timestamp, false); + const senMlDouble = ArduinoCloud.getSenml(null, 'test_double', 1.79769e+308, timestamp, false); + const senMl = [senMlUInt, senMlSInt, senMlFloat, senMlString, senMlBool, senMlDouble]; + console.log(senMl); + const cborbase64 = ArduinoCloud.getCborValue(senMl, false); + console.log(cborbase64); + const cborHex = base64toHEX(cborbase64); + console.log(cborHex); + expect(cborHex).toStrictEqual(output); + }); }); From 991a9a93bc1321bf3f9860bae6b356541ac91f5e Mon Sep 17 00:00:00 2001 From: Luca Barbetti Date: Fri, 8 Feb 2019 14:38:33 +0100 Subject: [PATCH 3/3] Update readme to include useCloudProtocolV2 --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7280e25..a321220 100644 --- a/README.md +++ b/README.md @@ -17,12 +17,13 @@ import ArduinoCloud from 'arduino-iot-js'; // connect establishes a connection with mqtt, using token as the password // options = { -// host: 'BROKER_URL', // Default is wss.iot.arduino.cc -// port: BROKER_PORT, // Default is 8443 -// ssl: true/false, // Default is true -// token: 'YOUR_BEARER_TOKEN' // Required! -// apiUrl: 'AUTH SERVER URL', // Default is https://auth.arduino.cc -// onDisconnect: message => { /* Disconnection callback */ } +// host: 'BROKER_URL', // Default is wss.iot.arduino.cc +// port: BROKER_PORT, // Default is 8443 +// ssl: true/false, // Default is true +// token: 'YOUR_BEARER_TOKEN' // Required! +// apiUrl: 'AUTH SERVER URL', // Default is https://auth.arduino.cc +// onDisconnect: message => { /* Disconnection callback */ }, +// useCloudProtocolV2: true/false, // Default is false // } ArduinoCloud.connect(options).then(() => { // Connected