iotagent-node-lib 2.18.0 → 2.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/.github/workflows/ci.yml +1 -2
  2. package/.nyc_output/76bc24ff-5fac-4b5a-997d-de2799342eb0.json +1 -0
  3. package/.nyc_output/processinfo/76bc24ff-5fac-4b5a-997d-de2799342eb0.json +1 -0
  4. package/.nyc_output/processinfo/index.json +1 -0
  5. package/.readthedocs.yml +3 -1
  6. package/CHANGES_NEXT_RELEASE +1 -0
  7. package/README.md +5 -56
  8. package/doc/advanced-topics.md +121 -85
  9. package/doc/api.md +63 -54
  10. package/doc/development.md +8 -9
  11. package/doc/expressionLanguage.md +517 -316
  12. package/doc/installationguide.md +66 -64
  13. package/doc/northboundinteractions.md +40 -33
  14. package/doc/requirements.txt +4 -0
  15. package/{docs → doc}/roadmap.md +21 -6
  16. package/doc/usermanual.md +50 -18
  17. package/docker/Mosquitto/Dockerfile +28 -11
  18. package/docker/Mosquitto/README.md +8 -6
  19. package/docker/Mosquitto/startMosquitto.sh +14 -4
  20. package/lib/fiware-iotagent-lib.js +4 -2
  21. package/lib/jexlTranformsMap.js +11 -1
  22. package/lib/model/Device.js +4 -1
  23. package/lib/model/Group.js +19 -1
  24. package/lib/plugins/expressionParser.js +6 -4
  25. package/lib/plugins/expressionPlugin.js +63 -22
  26. package/lib/plugins/jexlParser.js +3 -1
  27. package/lib/plugins/multiEntity.js +2 -21
  28. package/lib/request-shim.js +111 -0
  29. package/lib/services/common/domain.js +6 -2
  30. package/lib/services/common/genericMiddleware.js +6 -2
  31. package/lib/services/common/iotManagerService.js +1 -1
  32. package/lib/services/common/securityServiceKeystone.js +1 -1
  33. package/lib/services/common/securityServiceOAuth2.js +3 -2
  34. package/lib/services/devices/deviceRegistryMemory.js +13 -2
  35. package/lib/services/devices/deviceRegistryMongoDB.js +16 -7
  36. package/lib/services/devices/deviceService.js +26 -2
  37. package/lib/services/devices/devices-NGSI-LD.js +1 -1
  38. package/lib/services/devices/devices-NGSI-v2.js +2 -6
  39. package/lib/services/devices/registrationUtils.js +0 -2
  40. package/lib/services/ngsi/entities-NGSI-LD.js +97 -11
  41. package/lib/services/ngsi/entities-NGSI-v2.js +95 -8
  42. package/lib/services/ngsi/ngsiService.js +5 -4
  43. package/lib/services/northBound/contextServer-NGSI-LD.js +3 -2
  44. package/lib/services/northBound/contextServer-NGSI-v2.js +32 -27
  45. package/lib/services/northBound/contextServerUtils.js +1 -1
  46. package/lib/services/northBound/deviceProvisioningServer.js +31 -6
  47. package/lib/services/northBound/northboundServer.js +2 -0
  48. package/lib/services/northBound/restUtils.js +1 -1
  49. package/lib/templates/createDevice.json +12 -0
  50. package/lib/templates/updateDevice.json +12 -0
  51. package/package.json +9 -15
  52. package/test/tools/utils.js +2 -0
  53. package/test/unit/expressions/jexlExpression-test.js +5 -5
  54. package/test/unit/general/contextBrokerKeystoneSecurityAccess-test.js +1 -1
  55. package/test/unit/general/deviceService-test.js +2 -5
  56. package/test/unit/general/loglevel-api_test.js +6 -11
  57. package/test/unit/general/startup-test.js +1 -0
  58. package/test/unit/memoryRegistry/deviceRegistryMemory_test.js +1 -0
  59. package/test/unit/mongodb/mongodb-group-registry-test.js +1 -1
  60. package/test/unit/mongodb/mongodb-registry-test.js +2 -1
  61. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin12a.json +7 -0
  62. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin13.json +13 -13
  63. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin1a.json +18 -0
  64. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin29.json +18 -0
  65. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin31.json +15 -0
  66. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin32.json +17 -0
  67. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin33.json +18 -0
  68. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin34.json +17 -0
  69. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin4a.json +36 -0
  70. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin7.json +16 -16
  71. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin8a.json +18 -0
  72. package/test/unit/ngsi-ld/examples/contextRequests/updateContextMultientityPlugin15.json +25 -0
  73. package/test/unit/ngsi-ld/expressions/jexlBasedTransformations-test.js +1018 -0
  74. package/test/unit/ngsi-ld/general/contextBrokerOAuthSecurityAccess-test.js +2 -2
  75. package/test/unit/ngsi-ld/general/deviceService-test.js +1 -1
  76. package/test/unit/ngsi-ld/general/https-support-test.js +2 -1
  77. package/test/unit/ngsi-ld/general/iotam-autoregistration-test.js +2 -1
  78. package/test/unit/ngsi-ld/general/startup-test.js +1 -0
  79. package/test/unit/ngsi-ld/lazyAndCommands/active-devices-attribute-update-test.js +3 -1
  80. package/test/unit/ngsi-ld/lazyAndCommands/command-test.js +2 -1
  81. package/test/unit/ngsi-ld/lazyAndCommands/lazy-devices-test.js +2 -6
  82. package/test/unit/ngsi-ld/lazyAndCommands/polling-commands-test.js +2 -1
  83. package/test/unit/ngsi-ld/ngsiService/active-devices-test.js +1 -0
  84. package/test/unit/ngsi-ld/ngsiService/autocast-test.js +1 -0
  85. package/test/unit/ngsi-ld/ngsiService/geoproperties-test.js +1 -0
  86. package/test/unit/ngsi-ld/ngsiService/subscriptions-test.js +4 -3
  87. package/test/unit/ngsi-ld/plugins/alias-plugin_test.js +1 -0
  88. package/test/unit/ngsi-ld/plugins/bidirectional-plugin_test.js +3 -2
  89. package/test/unit/ngsi-ld/plugins/multientity-plugin_test.js +61 -0
  90. package/test/unit/ngsi-ld/provisioning/device-provisioning-api_test.js +2 -1
  91. package/test/unit/ngsi-ld/provisioning/device-registration_test.js +3 -2
  92. package/test/unit/ngsi-ld/provisioning/device-update-registration_test.js +1 -0
  93. package/test/unit/ngsi-ld/provisioning/listProvisionedDevices-test.js +42 -54
  94. package/test/unit/ngsi-ld/provisioning/provisionDeviceMultientity-test.js +2 -1
  95. package/test/unit/ngsi-ld/provisioning/removeProvisionedDevice-test.js +4 -4
  96. package/test/unit/ngsi-ld/provisioning/singleConfigurationMode-test.js +3 -5
  97. package/test/unit/ngsi-ld/provisioning/updateProvisionedDevices-test.js +12 -18
  98. package/test/unit/ngsi-mixed/provisioning/ngsi-versioning-test.js +3 -1
  99. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin17.json +1 -1
  100. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin32.json +16 -0
  101. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin33.json +22 -0
  102. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin34.json +12 -0
  103. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin35.json +2 -0
  104. package/test/unit/ngsiv2/examples/contextRequests/updateContextExpressionPlugin36.json +1 -0
  105. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin15.json +25 -0
  106. package/test/unit/ngsiv2/examples/contextRequests/updateContextMultientityPlugin16.json +25 -0
  107. package/test/unit/ngsiv2/expressions/expressionBasedTransformations-test.js +4 -4
  108. package/test/unit/ngsiv2/expressions/jexlBasedTransformations-test.js +561 -0
  109. package/test/unit/ngsiv2/general/contextBrokerOAuthSecurityAccess-test.js +3 -2
  110. package/test/unit/ngsiv2/general/deviceService-test.js +9 -8
  111. package/test/unit/ngsiv2/general/https-support-test.js +2 -1
  112. package/test/unit/ngsiv2/general/iotam-autoregistration-test.js +2 -1
  113. package/test/unit/ngsiv2/general/startup-test.js +1 -0
  114. package/test/unit/ngsiv2/lazyAndCommands/active-devices-attribute-update-test.js +3 -1
  115. package/test/unit/ngsiv2/lazyAndCommands/command-test.js +2 -1
  116. package/test/unit/ngsiv2/lazyAndCommands/lazy-devices-test.js +14 -18
  117. package/test/unit/ngsiv2/lazyAndCommands/polling-commands-test.js +3 -1
  118. package/test/unit/ngsiv2/ngsiService/active-devices-test.js +1 -0
  119. package/test/unit/ngsiv2/ngsiService/queryDeviceInformationInCb-test.js +0 -1
  120. package/test/unit/ngsiv2/ngsiService/subscriptions-test.js +4 -3
  121. package/test/unit/ngsiv2/plugins/bidirectional-plugin_test.js +3 -2
  122. package/test/unit/ngsiv2/plugins/multientity-plugin_test.js +210 -0
  123. package/test/unit/ngsiv2/plugins/translation-inPlugins_test.js +1 -1
  124. package/test/unit/ngsiv2/provisioning/device-group-api-test.js +3 -2
  125. package/test/unit/ngsiv2/provisioning/device-group-utils-test.js +2 -1
  126. package/test/unit/ngsiv2/provisioning/device-provisioning-api_test.js +2 -1
  127. package/test/unit/ngsiv2/provisioning/device-registration_test.js +3 -2
  128. package/test/unit/ngsiv2/provisioning/device-update-registration_test.js +4 -3
  129. package/test/unit/ngsiv2/provisioning/listProvisionedDevices-test.js +42 -53
  130. package/test/unit/ngsiv2/provisioning/provisionDeviceMultientity-test.js +2 -1
  131. package/test/unit/ngsiv2/provisioning/removeProvisionedDevice-test.js +4 -4
  132. package/test/unit/ngsiv2/provisioning/singleConfigurationMode-test.js +3 -4
  133. package/test/unit/ngsiv2/provisioning/updateProvisionedDevices-test.js +13 -19
  134. package/test/unit/plugins/capture-configuration-inPlugins_test.js +3 -1
  135. package/test/unit/plugins/capture-provision-inPlugins_test.js +2 -1
  136. package/bin/agentConsole.js +0 -257
  137. package/bin/iotAgentTester.js +0 -44
  138. package/lib/command/commandLine.js +0 -918
  139. package/lib/command/migration.js +0 -176
  140. package/test/unit/general/migration-test.js +0 -256
  141. package/test/unit/ngsi-ld/examples/contextRequests/updateContextExpressionPlugin20.json +0 -25
@@ -27,10 +27,10 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const logger = require('logops');
32
33
  const nock = require('nock');
33
- const request = require('request');
34
34
  const timekeeper = require('timekeeper');
35
35
  let contextBrokerMock;
36
36
  let oauth2Mock;
@@ -336,7 +336,7 @@ describe('NGSI-LD - Secured access to the Context Broker with OAuth2 provider',
336
336
  )
337
337
  .reply(201, utils.readExampleFile('./test/unit/examples/oauthResponses/tokenFromTrust.json'), {});
338
338
 
339
- contextBrokerMock.delete('/ngsi-ld/v1/subscriptions/51c0ac9ed714fb3b37d7d5a8').reply(204);
339
+ contextBrokerMock.delete('/ngsi-ld/v1/subscriptions/51c0ac9ed714fb3b37d7d5a8', '').reply(204);
340
340
 
341
341
  iotAgentLib.getDevice('Light1', 'smartgondor', 'electricity', function (error, device) {
342
342
  iotAgentLib.subscribe(device, ['dimming'], null, function (error) {
@@ -27,9 +27,9 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const nock = require('nock');
32
- const request = require('request');
33
33
  const logger = require('logops');
34
34
  const async = require('async');
35
35
  const iotAgentConfig = {
@@ -27,10 +27,11 @@
27
27
  /* eslint-disable no-unused-vars */
28
28
 
29
29
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
30
- const request = require('request');
30
+
31
31
  const nock = require('nock');
32
32
  const logger = require('logops');
33
33
  const utils = require('../../../tools/utils');
34
+ const request = utils.request;
34
35
  const groupRegistryMemory = require('../../../../lib/services/groups/groupRegistryMemory');
35
36
  const should = require('should');
36
37
  const iotAgentConfig = {
@@ -24,9 +24,10 @@
24
24
  /* eslint-disable no-unused-vars */
25
25
 
26
26
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
27
- const request = require('request');
27
+
28
28
  const nock = require('nock');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const groupRegistryMemory = require('../../../../lib/services/groups/groupRegistryMemory');
31
32
  const should = require('should');
32
33
  const iotAgentConfig = {
@@ -28,6 +28,7 @@
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const nock = require('nock');
30
30
  const utils = require('../../../tools/utils');
31
+ const request = utils.request;
31
32
  const config = require('../../../../lib/commonConfig');
32
33
  const iotAgentConfig = {
33
34
  logLevel: 'FATAL',
@@ -26,11 +26,13 @@
26
26
  /* eslint-disable no-unused-vars */
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
+ const utils = require('../../../tools/utils');
30
+ const request = utils.request;
29
31
  const should = require('should');
30
32
  const logger = require('logops');
31
33
  const nock = require('nock');
32
34
  const mongoUtils = require('../../mongodb/mongoDBUtils');
33
- const request = require('request');
35
+
34
36
  let contextBrokerMock;
35
37
  const iotAgentConfig = {
36
38
  logLevel: 'FATAL',
@@ -27,11 +27,12 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const logger = require('logops');
32
33
  const nock = require('nock');
33
34
  const mongoUtils = require('../../mongodb/mongoDBUtils');
34
- const request = require('request');
35
+
35
36
  const timekeeper = require('timekeeper');
36
37
  let contextBrokerMock;
37
38
  let statusAttributeMock;
@@ -27,13 +27,14 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const async = require('async');
31
32
  const apply = async.apply;
32
33
  const should = require('should');
33
34
  const logger = require('logops');
34
35
  const nock = require('nock');
35
36
  const mongoUtils = require('../../mongodb/mongoDBUtils');
36
- const request = require('request');
37
+
37
38
  const timekeeper = require('timekeeper');
38
39
  let contextBrokerMock;
39
40
  const iotAgentConfig = {
@@ -231,7 +232,6 @@ describe('NGSI-LD - IoT Agent Lazy Devices', function () {
231
232
  iotAgentConfig.server.port +
232
233
  '/ngsi-ld/v1/entities/urn:ngsi-ld:Light:light1?attrs=dimming',
233
234
  method: 'GET',
234
- json: true,
235
235
  headers: {
236
236
  'fiware-service': 'smartgondor',
237
237
  'fiware-servicepath': 'gardens'
@@ -300,7 +300,6 @@ describe('NGSI-LD - IoT Agent Lazy Devices', function () {
300
300
  iotAgentConfig.server.port +
301
301
  '/ngsi-ld/v1/entities/urn:ngsi-ld:Light:light1?attrs=dimming',
302
302
  method: 'GET',
303
- json: true,
304
303
  headers: {
305
304
  'fiware-service': 'smartgondor',
306
305
  'fiware-servicepath': 'gardens'
@@ -353,7 +352,6 @@ describe('NGSI-LD - IoT Agent Lazy Devices', function () {
353
352
  const options = {
354
353
  url: 'http://localhost:' + iotAgentConfig.server.port + '/ngsi-ld/v1/entities/urn:ngsi-ld:Light:light1',
355
354
  method: 'GET',
356
- json: true,
357
355
  headers: {
358
356
  'fiware-service': 'smartgondor',
359
357
  'fiware-servicepath': 'gardens'
@@ -419,7 +417,6 @@ describe('NGSI-LD - IoT Agent Lazy Devices', function () {
419
417
  iotAgentConfig.server.port +
420
418
  '/ngsi-ld/v1/entities/urn:ngsi-ld:Motion:motion1?attrs=moving,location',
421
419
  method: 'GET',
422
- json: true,
423
420
  headers: {
424
421
  'fiware-service': 'smartgondor',
425
422
  'fiware-servicepath': 'gardens'
@@ -485,7 +482,6 @@ describe('NGSI-LD - IoT Agent Lazy Devices', function () {
485
482
  iotAgentConfig.server.port +
486
483
  '/ngsi-ld/v1/entities/urn:ngsi-ld:Light:light1?attrs=temperature',
487
484
  method: 'GET',
488
- json: true,
489
485
  headers: {
490
486
  'fiware-service': 'smartgondor',
491
487
  'fiware-servicepath': 'gardens'
@@ -27,11 +27,12 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const logger = require('logops');
32
33
  const nock = require('nock');
33
34
  const mongoUtils = require('../../mongodb/mongoDBUtils');
34
- const request = require('request');
35
+
35
36
  let contextBrokerMock;
36
37
  let statusAttributeMock;
37
38
  const iotAgentConfig = {
@@ -27,6 +27,7 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const timekeeper = require('timekeeper');
31
32
  const should = require('should');
32
33
  const logger = require('logops');
@@ -27,6 +27,7 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const logger = require('logops');
32
33
  const nock = require('nock');
@@ -27,6 +27,7 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const logger = require('logops');
32
33
  const nock = require('nock');
@@ -27,8 +27,9 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
- const request = require('request');
32
+
32
33
  const nock = require('nock');
33
34
  let contextBrokerMock;
34
35
  const iotAgentConfig = {
@@ -131,7 +132,7 @@ describe('NGSI-LD - Subscription tests', function () {
131
132
  beforeEach(function (done) {
132
133
  contextBrokerMock
133
134
  .matchHeader('fiware-service', 'smartgondor')
134
- .delete('/ngsi-ld/v1/subscriptions/51c0ac9ed714fb3b37d7d5a8')
135
+ .delete('/ngsi-ld/v1/subscriptions/51c0ac9ed714fb3b37d7d5a8', '')
135
136
  .reply(204);
136
137
 
137
138
  done();
@@ -168,7 +169,7 @@ describe('NGSI-LD - Subscription tests', function () {
168
169
  beforeEach(function (done) {
169
170
  contextBrokerMock
170
171
  .matchHeader('fiware-service', 'smartgondor')
171
- .delete('/ngsi-ld/v1/subscriptions/51c0ac9ed714fb3b37d7d5a8')
172
+ .delete('/ngsi-ld/v1/subscriptions/51c0ac9ed714fb3b37d7d5a8', '')
172
173
  .reply(204);
173
174
 
174
175
  done();
@@ -27,6 +27,7 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const logger = require('logops');
32
33
  const nock = require('nock');
@@ -27,10 +27,11 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const logger = require('logops');
32
33
  const nock = require('nock');
33
- const request = require('request');
34
+
34
35
  let contextBrokerMock;
35
36
  const iotAgentConfig = {
36
37
  contextBroker: {
@@ -143,7 +144,7 @@ describe('NGSI-LD - Bidirectional data plugin', function () {
143
144
 
144
145
  contextBrokerMock
145
146
  .matchHeader('fiware-service', 'smartgondor')
146
- .delete('/ngsi-ld/v1/subscriptions/51c0ac9ed714fb3b37d7d5a8')
147
+ .delete('/ngsi-ld/v1/subscriptions/51c0ac9ed714fb3b37d7d5a8', '')
147
148
  .reply(204);
148
149
  });
149
150
 
@@ -214,6 +214,26 @@ const iotAgentConfig = {
214
214
  ],
215
215
  type: 'SensorCommand',
216
216
  lazy: []
217
+ },
218
+ GPS: {
219
+ commands: [],
220
+ type: 'GPS',
221
+ lazy: [],
222
+ active: [
223
+ {
224
+ name: 'explicit',
225
+ type: 'number',
226
+ entity_name: 'SO5',
227
+ object_id: 'x'
228
+ },
229
+ {
230
+ name: 'explicit',
231
+ type: 'number',
232
+ entity_name: 'SO6',
233
+ object_id: 'y'
234
+ }
235
+ ],
236
+ explicitAttrs: true
217
237
  }
218
238
  },
219
239
  service: 'smartgondor',
@@ -463,6 +483,47 @@ describe('NGSI-LD - Multi-entity plugin', function () {
463
483
  });
464
484
  });
465
485
 
486
+ describe('When an update comes for a multientity measurement explicitAttrs for one entity', function () {
487
+ const values = [
488
+ {
489
+ name: 'x',
490
+ type: 'Number',
491
+ value: 52
492
+ },
493
+ {
494
+ name: 'y',
495
+ type: 'Number',
496
+ value: 13
497
+ },
498
+ {
499
+ name: 'z',
500
+ type: 'Number',
501
+ value: 12
502
+ }
503
+ ];
504
+
505
+ beforeEach(function () {
506
+ nock.cleanAll();
507
+ contextBrokerMock = nock('http://192.168.1.1:1026')
508
+ .matchHeader('fiware-service', 'smartgondor')
509
+ .post(
510
+ '/ngsi-ld/v1/entityOperations/upsert/?options=update',
511
+ utils.readExampleFile(
512
+ './test/unit/ngsi-ld/examples/contextRequests/updateContextMultientityPlugin15.json'
513
+ )
514
+ )
515
+ .reply(204);
516
+ });
517
+
518
+ it('should remove hidden attrs from the value', function (done) {
519
+ iotAgentLib.update('gps1', 'GPS', '', values, function (error) {
520
+ should.not.exist(error);
521
+ contextBrokerMock.done();
522
+ done();
523
+ });
524
+ });
525
+ });
526
+
466
527
  describe(
467
528
  'When an update comes for a multientity measurement and there are attributes with' +
468
529
  ' the same name but different alias and mapped to different CB entities',
@@ -27,9 +27,10 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const nock = require('nock');
32
- const request = require('request');
33
+
33
34
  let contextBrokerMock;
34
35
  const iotAgentConfig = {
35
36
  logLevel: 'FATAL',
@@ -27,6 +27,7 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const logger = require('logops');
32
33
  const nock = require('nock');
@@ -283,7 +284,7 @@ describe('NGSI-LD - IoT Agent Device Registration', function () {
283
284
  contextBrokerMock.post('/ngsi-ld/v1/entityOperations/upsert/').reply(204);
284
285
 
285
286
  contextBrokerMock
286
- .delete('/ngsi-ld/v1/csourceRegistrations/6319a7f5254b05844116584d')
287
+ .delete('/ngsi-ld/v1/csourceRegistrations/6319a7f5254b05844116584d', '')
287
288
  .reply(204, null, { Location: '/ngsi-ld/v1/csourceRegistrations/6319a7f5254b05844116584d' });
288
289
 
289
290
  iotAgentLib.activate(iotAgentConfig, function (error) {
@@ -328,7 +329,7 @@ describe('NGSI-LD - IoT Agent Device Registration', function () {
328
329
  // provisioning folder
329
330
  contextBrokerMock.post('/ngsi-ld/v1/entityOperations/upsert/').reply(204);
330
331
 
331
- contextBrokerMock.delete('/ngsi-ld/v1/csourceRegistrations/6319a7f5254b05844116584d').reply(500);
332
+ contextBrokerMock.delete('/ngsi-ld/v1/csourceRegistrations/6319a7f5254b05844116584d', '').reply(500);
332
333
 
333
334
  iotAgentLib.activate(iotAgentConfig, function (error) {
334
335
  async.series(
@@ -27,6 +27,7 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const logger = require('logops');
32
33
  const nock = require('nock');
@@ -27,10 +27,11 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const nock = require('nock');
32
33
  const async = require('async');
33
- const request = require('request');
34
+
34
35
  let contextBrokerMock;
35
36
  const iotAgentConfig = {
36
37
  logLevel: 'FATAL',
@@ -145,12 +146,11 @@ describe('NGSI-LD - Device provisioning API: List provisioned devices', function
145
146
 
146
147
  it('should return all the provisioned devices', function (done) {
147
148
  request(options, function (error, response, body) {
148
- const parsedBody = JSON.parse(body);
149
149
  should.not.exist(error);
150
- should.exist(parsedBody.devices);
150
+ should.exist(body.devices);
151
151
  response.statusCode.should.equal(200);
152
- parsedBody.devices.length.should.equal(3);
153
- parsedBody.count.should.equal(3);
152
+ body.devices.length.should.equal(3);
153
+ body.count.should.equal(3);
154
154
  done();
155
155
  });
156
156
  });
@@ -159,22 +159,20 @@ describe('NGSI-LD - Device provisioning API: List provisioned devices', function
159
159
  /* jshint camelcase:false */
160
160
 
161
161
  request(options, function (error, response, body) {
162
- const parsedBody = JSON.parse(body);
163
-
164
- should.exist(parsedBody.devices[0].attributes);
165
- parsedBody.devices[0].attributes.length.should.equal(1);
162
+ should.exist(body.devices[0].attributes);
163
+ body.devices[0].attributes.length.should.equal(1);
166
164
 
167
- should.exist(parsedBody.devices[0].device_id);
168
- parsedBody.devices[0].device_id.should.equal('Light1');
165
+ should.exist(body.devices[0].device_id);
166
+ body.devices[0].device_id.should.equal('Light1');
169
167
 
170
- should.exist(parsedBody.devices[0].entity_name);
171
- parsedBody.devices[0].entity_name.should.equal('TheFirstLight');
168
+ should.exist(body.devices[0].entity_name);
169
+ body.devices[0].entity_name.should.equal('TheFirstLight');
172
170
 
173
- should.exist(parsedBody.devices[0].protocol);
174
- parsedBody.devices[0].protocol.should.equal('GENERIC_PROTO');
171
+ should.exist(body.devices[0].protocol);
172
+ body.devices[0].protocol.should.equal('GENERIC_PROTO');
175
173
 
176
- should.exist(parsedBody.devices[0].static_attributes);
177
- parsedBody.devices[0].static_attributes.length.should.equal(1);
174
+ should.exist(body.devices[0].static_attributes);
175
+ body.devices[0].static_attributes.length.should.equal(1);
178
176
 
179
177
  done();
180
178
  });
@@ -182,16 +180,14 @@ describe('NGSI-LD - Device provisioning API: List provisioned devices', function
182
180
 
183
181
  it('should return all the plugin attributes', function (done) {
184
182
  request(options, function (error, response, body) {
185
- const parsedBody = JSON.parse(body);
186
-
187
- should.exist(parsedBody.devices[2].attributes[0].entity_name);
188
- should.exist(parsedBody.devices[2].attributes[0].entity_type);
189
- should.exist(parsedBody.devices[2].attributes[1].expression);
190
- should.exist(parsedBody.devices[2].attributes[2].reverse);
191
- parsedBody.devices[2].attributes[0].entity_name.should.equal('Higro2000');
192
- parsedBody.devices[2].attributes[0].entity_type.should.equal('Higrometer');
193
- parsedBody.devices[2].attributes[1].expression.should.equal('${@humidity * 20}');
194
- parsedBody.devices[2].attributes[2].reverse.length.should.equal(2);
183
+ should.exist(body.devices[2].attributes[0].entity_name);
184
+ should.exist(body.devices[2].attributes[0].entity_type);
185
+ should.exist(body.devices[2].attributes[1].expression);
186
+ should.exist(body.devices[2].attributes[2].reverse);
187
+ body.devices[2].attributes[0].entity_name.should.equal('Higro2000');
188
+ body.devices[2].attributes[0].entity_type.should.equal('Higrometer');
189
+ body.devices[2].attributes[1].expression.should.equal('${@humidity * 20}');
190
+ body.devices[2].attributes[2].reverse.length.should.equal(2);
195
191
  done();
196
192
  });
197
193
  });
@@ -212,9 +208,8 @@ describe('NGSI-LD - Device provisioning API: List provisioned devices', function
212
208
  should.not.exist(error);
213
209
  response.statusCode.should.equal(200);
214
210
 
215
- const parsedBody = JSON.parse(body);
216
- parsedBody.entity_name.should.equal('TheFirstLight');
217
- parsedBody.device_id.should.equal('Light1');
211
+ body.entity_name.should.equal('TheFirstLight');
212
+ body.device_id.should.equal('Light1');
218
213
  done();
219
214
  });
220
215
  });
@@ -223,12 +218,10 @@ describe('NGSI-LD - Device provisioning API: List provisioned devices', function
223
218
  request(options, function (error, response, body) {
224
219
  /* jshint camelcase:false */
225
220
  should.not.exist(error);
226
-
227
- const parsedBody = JSON.parse(body);
228
- should.exist(parsedBody.attributes[0].object_id);
229
- parsedBody.attributes[0].object_id.should.equal('attr_name');
230
- parsedBody.attributes[0].name.should.equal('attr_name');
231
- parsedBody.attributes[0].type.should.equal('string');
221
+ should.exist(body.attributes[0].object_id);
222
+ body.attributes[0].object_id.should.equal('attr_name');
223
+ body.attributes[0].name.should.equal('attr_name');
224
+ body.attributes[0].type.should.equal('string');
232
225
  done();
233
226
  });
234
227
  });
@@ -248,15 +241,14 @@ describe('NGSI-LD - Device provisioning API: List provisioned devices', function
248
241
  /* jshint camelcase:false */
249
242
  should.not.exist(error);
250
243
 
251
- const parsedBody = JSON.parse(body);
252
- should.exist(parsedBody.attributes[0].entity_name);
253
- should.exist(parsedBody.attributes[0].entity_type);
254
- should.exist(parsedBody.attributes[1].expression);
255
- should.exist(parsedBody.attributes[2].reverse);
256
- parsedBody.attributes[0].entity_name.should.equal('Higro2000');
257
- parsedBody.attributes[0].entity_type.should.equal('Higrometer');
258
- parsedBody.attributes[1].expression.should.equal('${@humidity * 20}');
259
- parsedBody.attributes[2].reverse.length.should.equal(2);
244
+ should.exist(body.attributes[0].entity_name);
245
+ should.exist(body.attributes[0].entity_type);
246
+ should.exist(body.attributes[1].expression);
247
+ should.exist(body.attributes[2].reverse);
248
+ body.attributes[0].entity_name.should.equal('Higro2000');
249
+ body.attributes[0].entity_type.should.equal('Higrometer');
250
+ body.attributes[1].expression.should.equal('${@humidity * 20}');
251
+ body.attributes[2].reverse.length.should.equal(2);
260
252
  done();
261
253
  });
262
254
  });
@@ -332,18 +324,16 @@ describe('NGSI-LD - Device provisioning API: List provisioned devices', function
332
324
 
333
325
  it('should return just 3 devices', function (done) {
334
326
  request(options, function (error, response, body) {
335
- const parsedBody = JSON.parse(body);
336
327
  should.not.exist(error);
337
- parsedBody.devices.length.should.equal(3);
328
+ body.devices.length.should.equal(3);
338
329
  done();
339
330
  });
340
331
  });
341
332
 
342
333
  it('should return a count with the complete number of devices', function (done) {
343
334
  request(options, function (error, response, body) {
344
- const parsedBody = JSON.parse(body);
345
335
  should.not.exist(error);
346
- parsedBody.count.should.equal(10);
336
+ body.count.should.equal(10);
347
337
  done();
348
338
  });
349
339
  });
@@ -396,11 +386,10 @@ describe('NGSI-LD - Device provisioning API: List provisioned devices', function
396
386
 
397
387
  it('should skip the first 3 devices', function (done) {
398
388
  request(options, function (error, response, body) {
399
- const parsedBody = JSON.parse(body);
400
389
  should.not.exist(error);
401
390
 
402
- for (let i = 0; i < parsedBody.devices.length; i++) {
403
- ['Light1_0', 'Light1_1', 'Light1_2'].indexOf(parsedBody.devices[i].id).should.equal(-1);
391
+ for (let i = 0; i < body.devices.length; i++) {
392
+ ['Light1_0', 'Light1_1', 'Light1_2'].indexOf(body.devices[i].id).should.equal(-1);
404
393
  }
405
394
 
406
395
  done();
@@ -442,10 +431,9 @@ describe('NGSI-LD - Device provisioning API: List provisioned devices', function
442
431
 
443
432
  it('should return just the ones in the selected service', function (done) {
444
433
  request(options, function (error, response, body) {
445
- const parsedBody = JSON.parse(body);
446
434
  should.not.exist(error);
447
435
  response.statusCode.should.equal(200);
448
- parsedBody.devices.length.should.equal(3);
436
+ body.devices.length.should.equal(3);
449
437
  done();
450
438
  });
451
439
  });
@@ -27,10 +27,11 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
 
31
32
  const should = require('should');
32
33
  const nock = require('nock');
33
- const request = require('request');
34
+
34
35
  let contextBrokerMock;
35
36
  const iotAgentConfig = {
36
37
  logLevel: 'FATAL',
@@ -27,10 +27,11 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
  const should = require('should');
31
32
  const nock = require('nock');
32
33
  const async = require('async');
33
- const request = require('request');
34
+
34
35
  let contextBrokerMock;
35
36
  const iotAgentConfig = {
36
37
  logLevel: 'ERROR',
@@ -115,7 +116,7 @@ describe('NGSI-LD - Device provisioning API: Remove provisioned devices', functi
115
116
 
116
117
  contextBrokerMock
117
118
  .matchHeader('fiware-service', 'smartgondor')
118
- .delete('/ngsi-ld/v1/csourceRegistrations/6319a7f5254b05844116584d')
119
+ .delete('/ngsi-ld/v1/csourceRegistrations/6319a7f5254b05844116584d', '')
119
120
  .reply(204);
120
121
 
121
122
  // This mock does not check the payload since the aim of the test is not to verify
@@ -174,8 +175,7 @@ describe('NGSI-LD - Device provisioning API: Remove provisioned devices', functi
174
175
  };
175
176
 
176
177
  request(options, function (error, response, body) {
177
- const parsedBody = JSON.parse(body);
178
- parsedBody.devices.length.should.equal(2);
178
+ body.devices.length.should.equal(2);
179
179
  done();
180
180
  });
181
181
  });
@@ -27,11 +27,12 @@
27
27
 
28
28
  const iotAgentLib = require('../../../../lib/fiware-iotagent-lib');
29
29
  const utils = require('../../../tools/utils');
30
+ const request = utils.request;
30
31
 
31
32
  const should = require('should');
32
33
  const nock = require('nock');
33
34
  let contextBrokerMock;
34
- const request = require('request');
35
+
35
36
  const iotAgentConfig = {
36
37
  logLevel: 'FATAL',
37
38
  contextBroker: {
@@ -258,10 +259,7 @@ describe('NGSI-LD - Provisioning API: Single service mode', function () {
258
259
  it('should be provisioned with the default type', function (done) {
259
260
  request(deviceCreation, function (error, response, body) {
260
261
  request(getDevice, function (error, response, body) {
261
- const parsedBody = JSON.parse(body);
262
-
263
- parsedBody.entity_type.should.equal('SensorMachine');
264
-
262
+ body.entity_type.should.equal('SensorMachine');
265
263
  done();
266
264
  });
267
265
  });