@itentialopensource/adapter-robustel 0.1.1 → 0.3.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 (54) hide show
  1. package/AUTH.md +39 -0
  2. package/BROKER.md +199 -0
  3. package/CALLS.md +205 -0
  4. package/CHANGELOG.md +17 -2
  5. package/CODE_OF_CONDUCT.md +12 -17
  6. package/CONTRIBUTING.md +3 -148
  7. package/ENHANCE.md +69 -0
  8. package/PROPERTIES.md +641 -0
  9. package/README.md +235 -576
  10. package/SUMMARY.md +9 -0
  11. package/SYSTEMINFO.md +11 -0
  12. package/TROUBLESHOOT.md +47 -0
  13. package/adapter.js +402 -573
  14. package/adapterBase.js +843 -419
  15. package/changelogs/changelog.md +16 -0
  16. package/entities/.generic/action.json +105 -0
  17. package/entities/.generic/schema.json +6 -1
  18. package/error.json +6 -0
  19. package/metadata.json +47 -0
  20. package/package.json +24 -24
  21. package/pronghorn.json +559 -148
  22. package/propertiesDecorators.json +14 -0
  23. package/propertiesSchema.json +842 -6
  24. package/refs?service=git-upload-pack +0 -0
  25. package/report/adapter-openapi.json +204 -0
  26. package/report/adapter-openapi.yaml +163 -0
  27. package/report/adapterInfo.json +10 -0
  28. package/report/updateReport1653173664637.json +120 -0
  29. package/report/updateReport1691507608338.json +120 -0
  30. package/report/updateReport1692202610637.json +120 -0
  31. package/report/updateReport1694462053440.json +120 -0
  32. package/report/updateReport1698421016757.json +120 -0
  33. package/sampleProperties.json +158 -5
  34. package/test/integration/adapterTestBasicGet.js +3 -5
  35. package/test/integration/adapterTestConnectivity.js +91 -42
  36. package/test/integration/adapterTestIntegration.js +269 -271
  37. package/test/unit/adapterBaseTestUnit.js +388 -308
  38. package/test/unit/adapterTestUnit.js +399 -260
  39. package/utils/adapterInfo.js +206 -0
  40. package/utils/addAuth.js +1 -1
  41. package/utils/artifactize.js +1 -1
  42. package/utils/checkMigrate.js +1 -1
  43. package/utils/entitiesToDB.js +12 -57
  44. package/utils/findPath.js +1 -1
  45. package/utils/methodDocumentor.js +273 -0
  46. package/utils/modify.js +13 -15
  47. package/utils/packModificationScript.js +1 -1
  48. package/utils/pre-commit.sh +5 -0
  49. package/utils/taskMover.js +309 -0
  50. package/utils/tbScript.js +123 -53
  51. package/utils/tbUtils.js +87 -49
  52. package/utils/testRunner.js +17 -17
  53. package/utils/troubleshootingAdapter.js +9 -6
  54. package/workflows/README.md +0 -3
@@ -4,36 +4,48 @@
4
4
  /* global describe it log pronghornProps */
5
5
  /* eslint global-require: warn */
6
6
  /* eslint no-unused-vars: warn */
7
+ /* eslint import/no-dynamic-require:warn */
7
8
 
8
9
  // include required items for testing & logging
9
10
  const assert = require('assert');
10
- const fs = require('fs-extra');
11
- const mocha = require('mocha');
12
11
  const path = require('path');
13
12
  const util = require('util');
14
- const winston = require('winston');
15
13
  const execute = require('child_process').execSync;
14
+ const fs = require('fs-extra');
15
+ const mocha = require('mocha');
16
+ const winston = require('winston');
16
17
  const { expect } = require('chai');
17
18
  const { use } = require('chai');
18
19
  const td = require('testdouble');
20
+ const Ajv = require('ajv');
19
21
 
22
+ const ajv = new Ajv({ strictSchema: false, allErrors: true, allowUnionTypes: true });
20
23
  const anything = td.matchers.anything();
21
-
22
- // stub and attemptTimeout are used throughout the code so set them here
23
24
  let logLevel = 'none';
24
- const stub = true;
25
25
  const isRapidFail = false;
26
- const attemptTimeout = 600000;
26
+
27
+ // read in the properties from the sampleProperties files
28
+ let adaptdir = __dirname;
29
+ if (adaptdir.endsWith('/test/integration')) {
30
+ adaptdir = adaptdir.substring(0, adaptdir.length - 17);
31
+ } else if (adaptdir.endsWith('/test/unit')) {
32
+ adaptdir = adaptdir.substring(0, adaptdir.length - 10);
33
+ }
34
+ const samProps = require(`${adaptdir}/sampleProperties.json`).properties;
27
35
 
28
36
  // these variables can be changed to run in integrated mode so easier to set them here
29
37
  // always check these in with bogus data!!!
30
- const host = 'replace.hostorip.here';
31
- const username = 'username';
32
- const password = 'password';
33
- const protocol = 'http';
34
- const port = 80;
35
- const sslenable = false;
36
- const sslinvalid = false;
38
+ samProps.stub = true;
39
+ samProps.host = 'replace.hostorip.here';
40
+ samProps.authentication.username = 'username';
41
+ samProps.authentication.password = 'password';
42
+ samProps.protocol = 'http';
43
+ samProps.port = 80;
44
+ samProps.ssl.enabled = false;
45
+ samProps.ssl.accept_invalid_cert = false;
46
+ samProps.request.attempt_timeout = 1200000;
47
+ const attemptTimeout = samProps.request.attempt_timeout;
48
+ const { stub } = samProps;
37
49
 
38
50
  // these are the adapter properties. You generally should not need to alter
39
51
  // any of these after they are initially set up
@@ -45,102 +57,7 @@ global.pronghornProps = {
45
57
  adapters: [{
46
58
  id: 'Test-robustel',
47
59
  type: 'Robustel',
48
- properties: {
49
- host,
50
- port,
51
- base_path: '/api/link',
52
- version: '',
53
- cache_location: 'none',
54
- encode_pathvars: true,
55
- save_metric: false,
56
- stub,
57
- protocol,
58
- authentication: {
59
- auth_method: 'no_authentication',
60
- username,
61
- password,
62
- token: '',
63
- invalid_token_error: 401,
64
- token_timeout: -1,
65
- token_cache: 'local',
66
- auth_field: 'header.headers.Authorization',
67
- auth_field_format: 'Basic {b64}{username}:{password}{/b64}',
68
- auth_logging: false,
69
- client_id: '',
70
- client_secret: '',
71
- grant_type: ''
72
- },
73
- healthcheck: {
74
- type: 'none',
75
- frequency: 60000,
76
- query_object: {}
77
- },
78
- throttle: {
79
- throttle_enabled: false,
80
- number_pronghorns: 1,
81
- sync_async: 'sync',
82
- max_in_queue: 1000,
83
- concurrent_max: 1,
84
- expire_timeout: 0,
85
- avg_runtime: 200,
86
- priorities: [
87
- {
88
- value: 0,
89
- percent: 100
90
- }
91
- ]
92
- },
93
- request: {
94
- number_redirects: 0,
95
- number_retries: 3,
96
- limit_retry_error: [0],
97
- failover_codes: [],
98
- attempt_timeout: attemptTimeout,
99
- global_request: {
100
- payload: {},
101
- uriOptions: {},
102
- addlHeaders: {},
103
- authData: {}
104
- },
105
- healthcheck_on_timeout: true,
106
- return_raw: true,
107
- archiving: false,
108
- return_request: false
109
- },
110
- proxy: {
111
- enabled: false,
112
- host: '',
113
- port: 1,
114
- protocol: 'http',
115
- username: '',
116
- password: ''
117
- },
118
- ssl: {
119
- ecdhCurve: '',
120
- enabled: sslenable,
121
- accept_invalid_cert: sslinvalid,
122
- ca_file: '',
123
- key_file: '',
124
- cert_file: '',
125
- secure_protocol: '',
126
- ciphers: ''
127
- },
128
- mongo: {
129
- host: '',
130
- port: 0,
131
- database: '',
132
- username: '',
133
- password: '',
134
- replSet: '',
135
- db_ssl: {
136
- enabled: false,
137
- accept_invalid_cert: false,
138
- ca_file: '',
139
- key_file: '',
140
- cert_file: ''
141
- }
142
- }
143
- }
60
+ properties: samProps
144
61
  }]
145
62
  }
146
63
  };
@@ -271,10 +188,10 @@ describe('[unit] Robustel Adapter Test', () => {
271
188
  });
272
189
 
273
190
  let wffunctions = [];
274
- describe('#getWorkflowFunctions', () => {
191
+ describe('#iapGetAdapterWorkflowFunctions', () => {
275
192
  it('should retrieve workflow functions', (done) => {
276
193
  try {
277
- wffunctions = a.getWorkflowFunctions([]);
194
+ wffunctions = a.iapGetAdapterWorkflowFunctions([]);
278
195
 
279
196
  try {
280
197
  assert.notEqual(0, wffunctions.length);
@@ -305,19 +222,24 @@ describe('[unit] Robustel Adapter Test', () => {
305
222
  it('package.json should be validated', (done) => {
306
223
  try {
307
224
  const packageDotJson = require('../../package.json');
308
- const { PJV } = require('package-json-validator');
309
- const options = {
310
- warnings: true, // show warnings
311
- recommendations: true // show recommendations
225
+ // Define the JSON schema for package.json
226
+ const packageJsonSchema = {
227
+ type: 'object',
228
+ properties: {
229
+ name: { type: 'string' },
230
+ version: { type: 'string' }
231
+ // May need to add more properties as needed
232
+ },
233
+ required: ['name', 'version']
312
234
  };
313
- const results = PJV.validate(JSON.stringify(packageDotJson), 'npm', options);
235
+ const validate = ajv.compile(packageJsonSchema);
236
+ const isValid = validate(packageDotJson);
314
237
 
315
- if (results.valid === false) {
316
- log.error('The package.json contains the following errors: ');
317
- log.error(util.inspect(results));
318
- assert.equal(true, results.valid);
238
+ if (isValid === false) {
239
+ log.error('The package.json contains errors');
240
+ assert.equal(true, isValid);
319
241
  } else {
320
- assert.equal(true, results.valid);
242
+ assert.equal(true, isValid);
321
243
  }
322
244
 
323
245
  done();
@@ -356,7 +278,7 @@ describe('[unit] Robustel Adapter Test', () => {
356
278
  assert.notEqual(undefined, packageDotJson.scripts);
357
279
  assert.notEqual(null, packageDotJson.scripts);
358
280
  assert.notEqual('', packageDotJson.scripts);
359
- assert.equal('node utils/setup.js && npm install --package-lock-only --ignore-scripts && npx npm-force-resolutions', packageDotJson.scripts.preinstall);
281
+ assert.equal('node utils/setup.js', packageDotJson.scripts.preinstall);
360
282
  assert.equal('node --max_old_space_size=4096 ./node_modules/eslint/bin/eslint.js . --ext .json --ext .js', packageDotJson.scripts.lint);
361
283
  assert.equal('node --max_old_space_size=4096 ./node_modules/eslint/bin/eslint.js . --ext .json --ext .js --quiet', packageDotJson.scripts['lint:errors']);
362
284
  assert.equal('mocha test/unit/adapterBaseTestUnit.js --LOG=error', packageDotJson.scripts['test:baseunit']);
@@ -393,17 +315,17 @@ describe('[unit] Robustel Adapter Test', () => {
393
315
  assert.notEqual(undefined, packageDotJson.dependencies);
394
316
  assert.notEqual(null, packageDotJson.dependencies);
395
317
  assert.notEqual('', packageDotJson.dependencies);
396
- assert.equal('^6.12.0', packageDotJson.dependencies.ajv);
397
- assert.equal('^0.21.0', packageDotJson.dependencies.axios);
398
- assert.equal('^2.20.0', packageDotJson.dependencies.commander);
399
- assert.equal('^8.1.0', packageDotJson.dependencies['fs-extra']);
400
- assert.equal('^9.0.1', packageDotJson.dependencies.mocha);
318
+ assert.equal('^8.12.0', packageDotJson.dependencies.ajv);
319
+ assert.equal('^1.6.3', packageDotJson.dependencies.axios);
320
+ assert.equal('^11.0.0', packageDotJson.dependencies.commander);
321
+ assert.equal('^11.1.1', packageDotJson.dependencies['fs-extra']);
322
+ assert.equal('^10.2.0', packageDotJson.dependencies.mocha);
401
323
  assert.equal('^2.0.1', packageDotJson.dependencies['mocha-param']);
402
- assert.equal('^0.5.3', packageDotJson.dependencies['network-diagnostics']);
403
324
  assert.equal('^15.1.0', packageDotJson.dependencies.nyc);
325
+ assert.equal('^0.4.4', packageDotJson.dependencies.ping);
404
326
  assert.equal('^1.4.10', packageDotJson.dependencies['readline-sync']);
405
- assert.equal('^7.3.2', packageDotJson.dependencies.semver);
406
- assert.equal('^3.3.3', packageDotJson.dependencies.winston);
327
+ assert.equal('^7.5.3', packageDotJson.dependencies.semver);
328
+ assert.equal('^3.9.0', packageDotJson.dependencies.winston);
407
329
  done();
408
330
  } catch (error) {
409
331
  log.error(`Test Failure: ${error}`);
@@ -416,13 +338,12 @@ describe('[unit] Robustel Adapter Test', () => {
416
338
  assert.notEqual(undefined, packageDotJson.devDependencies);
417
339
  assert.notEqual(null, packageDotJson.devDependencies);
418
340
  assert.notEqual('', packageDotJson.devDependencies);
419
- assert.equal('^4.3.4', packageDotJson.devDependencies.chai);
420
- assert.equal('^7.29.0', packageDotJson.devDependencies.eslint);
421
- assert.equal('^14.2.1', packageDotJson.devDependencies['eslint-config-airbnb-base']);
422
- assert.equal('^2.23.4', packageDotJson.devDependencies['eslint-plugin-import']);
423
- assert.equal('^3.0.0', packageDotJson.devDependencies['eslint-plugin-json']);
424
- assert.equal('^0.6.3', packageDotJson.devDependencies['package-json-validator']);
425
- assert.equal('^3.16.1', packageDotJson.devDependencies.testdouble);
341
+ assert.equal('^4.3.7', packageDotJson.devDependencies.chai);
342
+ assert.equal('^8.44.0', packageDotJson.devDependencies.eslint);
343
+ assert.equal('^15.0.0', packageDotJson.devDependencies['eslint-config-airbnb-base']);
344
+ assert.equal('^2.27.5', packageDotJson.devDependencies['eslint-plugin-import']);
345
+ assert.equal('^3.1.0', packageDotJson.devDependencies['eslint-plugin-json']);
346
+ assert.equal('^3.18.0', packageDotJson.devDependencies.testdouble);
426
347
  done();
427
348
  } catch (error) {
428
349
  log.error(`Test Failure: ${error}`);
@@ -465,16 +386,31 @@ describe('[unit] Robustel Adapter Test', () => {
465
386
  assert.notEqual('', pronghornDotJson.methods);
466
387
  assert.equal(true, Array.isArray(pronghornDotJson.methods));
467
388
  assert.notEqual(0, pronghornDotJson.methods.length);
468
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'updateAdapterConfiguration'));
469
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'findPath'));
470
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'troubleshoot'));
471
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'runHealthcheck'));
472
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'runConnectivity'));
473
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'runBasicGet'));
474
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'suspend'));
475
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'unsuspend'));
476
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'getQueue'));
389
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapUpdateAdapterConfiguration'));
390
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapSuspendAdapter'));
391
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapUnsuspendAdapter'));
392
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapGetAdapterQueue'));
393
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapFindAdapterPath'));
394
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapTroubleshootAdapter'));
395
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterHealthcheck'));
396
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterConnectivity'));
397
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterBasicGet'));
398
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapMoveAdapterEntitiesToDB'));
399
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapDeactivateTasks'));
400
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapActivateTasks'));
401
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapPopulateEntityCache'));
402
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRetrieveEntitiesCache'));
403
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'getDevice'));
404
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'getDevicesFiltered'));
405
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'isAlive'));
406
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'getConfig'));
407
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapGetDeviceCount'));
408
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapExpandedGenericAdapterRequest'));
477
409
  assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'genericAdapterRequest'));
410
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'genericAdapterRequestNoBasePath'));
411
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterLint'));
412
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterTests'));
413
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapGetAdapterInventory'));
478
414
  done();
479
415
  } catch (error) {
480
416
  log.error(`Test Failure: ${error}`);
@@ -595,6 +531,39 @@ describe('[unit] Robustel Adapter Test', () => {
595
531
  done(error);
596
532
  }
597
533
  });
534
+ it('pronghorn.json verify input/output schema objects', (done) => {
535
+ const verifySchema = (methodName, schema) => {
536
+ try {
537
+ ajv.compile(schema);
538
+ } catch (error) {
539
+ const errorMessage = `Invalid schema found in '${methodName}' method.
540
+ Schema => ${JSON.stringify(schema)}.
541
+ Details => ${error.message}`;
542
+ throw new Error(errorMessage);
543
+ }
544
+ };
545
+
546
+ try {
547
+ const pronghornDotJson = require('../../pronghorn.json');
548
+ const { methods } = pronghornDotJson;
549
+ for (let i = 0; i < methods.length; i += 1) {
550
+ for (let j = 0; j < methods[i].input.length; j += 1) {
551
+ const inputSchema = methods[i].input[j].schema;
552
+ if (inputSchema) {
553
+ verifySchema(methods[i].name, inputSchema);
554
+ }
555
+ }
556
+ const outputSchema = methods[i].output.schema;
557
+ if (outputSchema) {
558
+ verifySchema(methods[i].name, outputSchema);
559
+ }
560
+ }
561
+ done();
562
+ } catch (error) {
563
+ log.error(`Adapter Exception: ${error}`);
564
+ done(error);
565
+ }
566
+ });
598
567
  });
599
568
 
600
569
  describe('propertiesSchema.json', () => {
@@ -630,6 +599,7 @@ describe('[unit] Robustel Adapter Test', () => {
630
599
  assert.equal('string', propertiesDotJson.properties.host.type);
631
600
  assert.equal('integer', propertiesDotJson.properties.port.type);
632
601
  assert.equal('boolean', propertiesDotJson.properties.stub.type);
602
+ assert.equal('string', propertiesDotJson.properties.protocol.type);
633
603
  assert.notEqual(undefined, propertiesDotJson.definitions.authentication);
634
604
  assert.notEqual(null, propertiesDotJson.definitions.authentication);
635
605
  assert.notEqual('', propertiesDotJson.definitions.authentication);
@@ -646,6 +616,8 @@ describe('[unit] Robustel Adapter Test', () => {
646
616
  assert.equal('string', propertiesDotJson.definitions.authentication.properties.client_id.type);
647
617
  assert.equal('string', propertiesDotJson.definitions.authentication.properties.client_secret.type);
648
618
  assert.equal('string', propertiesDotJson.definitions.authentication.properties.grant_type.type);
619
+ assert.notEqual(undefined, propertiesDotJson.definitions.ssl);
620
+ assert.notEqual(null, propertiesDotJson.definitions.ssl);
649
621
  assert.notEqual('', propertiesDotJson.definitions.ssl);
650
622
  assert.equal('string', propertiesDotJson.definitions.ssl.properties.ecdhCurve.type);
651
623
  assert.equal('boolean', propertiesDotJson.definitions.ssl.properties.enabled.type);
@@ -659,8 +631,8 @@ describe('[unit] Robustel Adapter Test', () => {
659
631
  assert.equal('string', propertiesDotJson.properties.version.type);
660
632
  assert.equal('string', propertiesDotJson.properties.cache_location.type);
661
633
  assert.equal('boolean', propertiesDotJson.properties.encode_pathvars.type);
634
+ assert.equal('boolean', propertiesDotJson.properties.encode_queryvars.type);
662
635
  assert.equal(true, Array.isArray(propertiesDotJson.properties.save_metric.type));
663
- assert.equal('string', propertiesDotJson.properties.protocol.type);
664
636
  assert.notEqual(undefined, propertiesDotJson.definitions);
665
637
  assert.notEqual(null, propertiesDotJson.definitions);
666
638
  assert.notEqual('', propertiesDotJson.definitions);
@@ -707,8 +679,6 @@ describe('[unit] Robustel Adapter Test', () => {
707
679
  assert.equal('string', propertiesDotJson.definitions.proxy.properties.protocol.type);
708
680
  assert.equal('string', propertiesDotJson.definitions.proxy.properties.username.type);
709
681
  assert.equal('string', propertiesDotJson.definitions.proxy.properties.password.type);
710
- assert.notEqual(undefined, propertiesDotJson.definitions.ssl);
711
- assert.notEqual(null, propertiesDotJson.definitions.ssl);
712
682
  assert.notEqual(undefined, propertiesDotJson.definitions.mongo);
713
683
  assert.notEqual(null, propertiesDotJson.definitions.mongo);
714
684
  assert.notEqual('', propertiesDotJson.definitions.mongo);
@@ -724,6 +694,12 @@ describe('[unit] Robustel Adapter Test', () => {
724
694
  assert.equal('string', propertiesDotJson.definitions.mongo.properties.db_ssl.properties.ca_file.type);
725
695
  assert.equal('string', propertiesDotJson.definitions.mongo.properties.db_ssl.properties.key_file.type);
726
696
  assert.equal('string', propertiesDotJson.definitions.mongo.properties.db_ssl.properties.cert_file.type);
697
+ assert.notEqual('', propertiesDotJson.definitions.devicebroker);
698
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getDevice.type);
699
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getDevicesFiltered.type);
700
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.isAlive.type);
701
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getConfig.type);
702
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getCount.type);
727
703
  done();
728
704
  } catch (error) {
729
705
  log.error(`Test Failure: ${error}`);
@@ -813,6 +789,7 @@ describe('[unit] Robustel Adapter Test', () => {
813
789
  assert.notEqual(undefined, sampleDotJson.properties.host);
814
790
  assert.notEqual(undefined, sampleDotJson.properties.port);
815
791
  assert.notEqual(undefined, sampleDotJson.properties.stub);
792
+ assert.notEqual(undefined, sampleDotJson.properties.protocol);
816
793
  assert.notEqual(undefined, sampleDotJson.properties.authentication);
817
794
  assert.notEqual(null, sampleDotJson.properties.authentication);
818
795
  assert.notEqual('', sampleDotJson.properties.authentication);
@@ -840,17 +817,12 @@ describe('[unit] Robustel Adapter Test', () => {
840
817
  assert.notEqual(undefined, sampleDotJson.properties.ssl.cert_file);
841
818
  assert.notEqual(undefined, sampleDotJson.properties.ssl.secure_protocol);
842
819
  assert.notEqual(undefined, sampleDotJson.properties.ssl.ciphers);
843
-
844
820
  assert.notEqual(undefined, sampleDotJson.properties.base_path);
845
821
  assert.notEqual(undefined, sampleDotJson.properties.version);
846
822
  assert.notEqual(undefined, sampleDotJson.properties.cache_location);
847
823
  assert.notEqual(undefined, sampleDotJson.properties.encode_pathvars);
824
+ assert.notEqual(undefined, sampleDotJson.properties.encode_queryvars);
848
825
  assert.notEqual(undefined, sampleDotJson.properties.save_metric);
849
- assert.notEqual(undefined, sampleDotJson.properties.protocol);
850
- assert.notEqual(undefined, sampleDotJson.properties.stub);
851
- assert.notEqual(undefined, sampleDotJson.properties.stub);
852
- assert.notEqual(undefined, sampleDotJson.properties.stub);
853
- assert.notEqual(undefined, sampleDotJson.properties.stub);
854
826
  assert.notEqual(undefined, sampleDotJson.properties.healthcheck);
855
827
  assert.notEqual(null, sampleDotJson.properties.healthcheck);
856
828
  assert.notEqual('', sampleDotJson.properties.healthcheck);
@@ -909,6 +881,14 @@ describe('[unit] Robustel Adapter Test', () => {
909
881
  assert.notEqual(undefined, sampleDotJson.properties.mongo.db_ssl.ca_file);
910
882
  assert.notEqual(undefined, sampleDotJson.properties.mongo.db_ssl.key_file);
911
883
  assert.notEqual(undefined, sampleDotJson.properties.mongo.db_ssl.cert_file);
884
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker);
885
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getDevice);
886
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getDevicesFiltered);
887
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.isAlive);
888
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getConfig);
889
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getCount);
890
+ assert.notEqual(undefined, sampleDotJson.properties.cache);
891
+ assert.notEqual(undefined, sampleDotJson.properties.cache.entities);
912
892
  done();
913
893
  } catch (error) {
914
894
  log.error(`Test Failure: ${error}`);
@@ -1002,10 +982,10 @@ describe('[unit] Robustel Adapter Test', () => {
1002
982
  });
1003
983
  });
1004
984
 
1005
- describe('#updateAdapterConfiguration', () => {
1006
- it('should have a updateAdapterConfiguration function', (done) => {
985
+ describe('#iapUpdateAdapterConfiguration', () => {
986
+ it('should have a iapUpdateAdapterConfiguration function', (done) => {
1007
987
  try {
1008
- assert.equal(true, typeof a.updateAdapterConfiguration === 'function');
988
+ assert.equal(true, typeof a.iapUpdateAdapterConfiguration === 'function');
1009
989
  done();
1010
990
  } catch (error) {
1011
991
  log.error(`Test Failure: ${error}`);
@@ -1014,44 +994,22 @@ describe('[unit] Robustel Adapter Test', () => {
1014
994
  });
1015
995
  });
1016
996
 
1017
- describe('#findPath', () => {
1018
- it('should have a findPath function', (done) => {
997
+ describe('#iapSuspendAdapter', () => {
998
+ it('should have a iapSuspendAdapter function', (done) => {
1019
999
  try {
1020
- assert.equal(true, typeof a.findPath === 'function');
1000
+ assert.equal(true, typeof a.iapSuspendAdapter === 'function');
1021
1001
  done();
1022
1002
  } catch (error) {
1023
1003
  log.error(`Test Failure: ${error}`);
1024
1004
  done(error);
1025
1005
  }
1026
1006
  });
1027
- it('findPath should find atleast one path that matches', (done) => {
1028
- try {
1029
- a.findPath('{base_path}/{version}', (data, error) => {
1030
- try {
1031
- assert.equal(undefined, error);
1032
- assert.notEqual(undefined, data);
1033
- assert.notEqual(null, data);
1034
- assert.equal(true, data.found);
1035
- assert.notEqual(undefined, data.foundIn);
1036
- assert.notEqual(null, data.foundIn);
1037
- assert.notEqual(0, data.foundIn.length);
1038
- done();
1039
- } catch (err) {
1040
- log.error(`Test Failure: ${err}`);
1041
- done(err);
1042
- }
1043
- });
1044
- } catch (error) {
1045
- log.error(`Adapter Exception: ${error}`);
1046
- done(error);
1047
- }
1048
- }).timeout(attemptTimeout);
1049
1007
  });
1050
1008
 
1051
- describe('#suspend', () => {
1052
- it('should have a suspend function', (done) => {
1009
+ describe('#iapUnsuspendAdapter', () => {
1010
+ it('should have a iapUnsuspendAdapter function', (done) => {
1053
1011
  try {
1054
- assert.equal(true, typeof a.suspend === 'function');
1012
+ assert.equal(true, typeof a.iapUnsuspendAdapter === 'function');
1055
1013
  done();
1056
1014
  } catch (error) {
1057
1015
  log.error(`Test Failure: ${error}`);
@@ -1060,10 +1018,10 @@ describe('[unit] Robustel Adapter Test', () => {
1060
1018
  });
1061
1019
  });
1062
1020
 
1063
- describe('#unsuspend', () => {
1064
- it('should have a unsuspend function', (done) => {
1021
+ describe('#iapGetAdapterQueue', () => {
1022
+ it('should have a iapGetAdapterQueue function', (done) => {
1065
1023
  try {
1066
- assert.equal(true, typeof a.unsuspend === 'function');
1024
+ assert.equal(true, typeof a.iapGetAdapterQueue === 'function');
1067
1025
  done();
1068
1026
  } catch (error) {
1069
1027
  log.error(`Test Failure: ${error}`);
@@ -1072,22 +1030,44 @@ describe('[unit] Robustel Adapter Test', () => {
1072
1030
  });
1073
1031
  });
1074
1032
 
1075
- describe('#getQueue', () => {
1076
- it('should have a getQueue function', (done) => {
1033
+ describe('#iapFindAdapterPath', () => {
1034
+ it('should have a iapFindAdapterPath function', (done) => {
1077
1035
  try {
1078
- assert.equal(true, typeof a.getQueue === 'function');
1036
+ assert.equal(true, typeof a.iapFindAdapterPath === 'function');
1079
1037
  done();
1080
1038
  } catch (error) {
1081
1039
  log.error(`Test Failure: ${error}`);
1082
1040
  done(error);
1083
1041
  }
1084
1042
  });
1043
+ it('iapFindAdapterPath should find atleast one path that matches', (done) => {
1044
+ try {
1045
+ a.iapFindAdapterPath('{base_path}/{version}', (data, error) => {
1046
+ try {
1047
+ assert.equal(undefined, error);
1048
+ assert.notEqual(undefined, data);
1049
+ assert.notEqual(null, data);
1050
+ assert.equal(true, data.found);
1051
+ assert.notEqual(undefined, data.foundIn);
1052
+ assert.notEqual(null, data.foundIn);
1053
+ assert.notEqual(0, data.foundIn.length);
1054
+ done();
1055
+ } catch (err) {
1056
+ log.error(`Test Failure: ${err}`);
1057
+ done(err);
1058
+ }
1059
+ });
1060
+ } catch (error) {
1061
+ log.error(`Adapter Exception: ${error}`);
1062
+ done(error);
1063
+ }
1064
+ }).timeout(attemptTimeout);
1085
1065
  });
1086
1066
 
1087
- describe('#troubleshoot', () => {
1088
- it('should have a troubleshoot function', (done) => {
1067
+ describe('#iapTroubleshootAdapter', () => {
1068
+ it('should have a iapTroubleshootAdapter function', (done) => {
1089
1069
  try {
1090
- assert.equal(true, typeof a.troubleshoot === 'function');
1070
+ assert.equal(true, typeof a.iapTroubleshootAdapter === 'function');
1091
1071
  done();
1092
1072
  } catch (error) {
1093
1073
  log.error(`Test Failure: ${error}`);
@@ -1096,10 +1076,10 @@ describe('[unit] Robustel Adapter Test', () => {
1096
1076
  });
1097
1077
  });
1098
1078
 
1099
- describe('#runHealthcheck', () => {
1100
- it('should have a runHealthcheck function', (done) => {
1079
+ describe('#iapRunAdapterHealthcheck', () => {
1080
+ it('should have a iapRunAdapterHealthcheck function', (done) => {
1101
1081
  try {
1102
- assert.equal(true, typeof a.runHealthcheck === 'function');
1082
+ assert.equal(true, typeof a.iapRunAdapterHealthcheck === 'function');
1103
1083
  done();
1104
1084
  } catch (error) {
1105
1085
  log.error(`Test Failure: ${error}`);
@@ -1108,10 +1088,10 @@ describe('[unit] Robustel Adapter Test', () => {
1108
1088
  });
1109
1089
  });
1110
1090
 
1111
- describe('#runConnectivity', () => {
1112
- it('should have a runConnectivity function', (done) => {
1091
+ describe('#iapRunAdapterConnectivity', () => {
1092
+ it('should have a iapRunAdapterConnectivity function', (done) => {
1113
1093
  try {
1114
- assert.equal(true, typeof a.runConnectivity === 'function');
1094
+ assert.equal(true, typeof a.iapRunAdapterConnectivity === 'function');
1115
1095
  done();
1116
1096
  } catch (error) {
1117
1097
  log.error(`Test Failure: ${error}`);
@@ -1120,10 +1100,10 @@ describe('[unit] Robustel Adapter Test', () => {
1120
1100
  });
1121
1101
  });
1122
1102
 
1123
- describe('#runBasicGet', () => {
1124
- it('should have a runBasicGet function', (done) => {
1103
+ describe('#iapRunAdapterBasicGet', () => {
1104
+ it('should have a iapRunAdapterBasicGet function', (done) => {
1125
1105
  try {
1126
- assert.equal(true, typeof a.runBasicGet === 'function');
1106
+ assert.equal(true, typeof a.iapRunAdapterBasicGet === 'function');
1127
1107
  done();
1128
1108
  } catch (error) {
1129
1109
  log.error(`Test Failure: ${error}`);
@@ -1132,10 +1112,10 @@ describe('[unit] Robustel Adapter Test', () => {
1132
1112
  });
1133
1113
  });
1134
1114
 
1135
- describe('#moveEntitiesToDB', () => {
1136
- it('should have a moveEntitiesToDB function', (done) => {
1115
+ describe('#iapMoveAdapterEntitiesToDB', () => {
1116
+ it('should have a iapMoveAdapterEntitiesToDB function', (done) => {
1137
1117
  try {
1138
- assert.equal(true, typeof a.moveEntitiesToDB === 'function');
1118
+ assert.equal(true, typeof a.iapMoveAdapterEntitiesToDB === 'function');
1139
1119
  done();
1140
1120
  } catch (error) {
1141
1121
  log.error(`Test Failure: ${error}`);
@@ -1229,54 +1209,34 @@ describe('[unit] Robustel Adapter Test', () => {
1229
1209
  }).timeout(attemptTimeout);
1230
1210
  });
1231
1211
 
1232
- // describe('#hasEntity', () => {
1233
- // it('should have a hasEntity function', (done) => {
1234
- // try {
1235
- // assert.equal(true, typeof a.hasEntity === 'function');
1236
- // done();
1237
- // } catch (error) {
1238
- // log.error(`Test Failure: ${error}`);
1239
- // done(error);
1240
- // }
1241
- // });
1242
- // it('should find entity', (done) => {
1243
- // try {
1244
- // a.hasEntity('template_entity', // 'a9e9c33dc61122760072455df62663d2', (data) => {
1245
- // try {
1246
- // assert.equal(true, data[0]);
1247
- // done();
1248
- // } catch (err) {
1249
- // log.error(`Test Failure: ${err}`);
1250
- // done(err);
1251
- // }
1252
- // });
1253
- // } catch (error) {
1254
- // log.error(`Adapter Exception: ${error}`);
1255
- // done(error);
1256
- // }
1257
- // }).timeout(attemptTimeout);
1258
- // it('should not find entity', (done) => {
1259
- // try {
1260
- // a.hasEntity('template_entity', 'blah', (data) => {
1261
- // try {
1262
- // assert.equal(false, data[0]);
1263
- // done();
1264
- // } catch (err) {
1265
- // log.error(`Test Failure: ${err}`);
1266
- // done(err);
1267
- // }
1268
- // });
1269
- // } catch (error) {
1270
- // log.error(`Adapter Exception: ${error}`);
1271
- // done(error);
1272
- // }
1273
- // }).timeout(attemptTimeout);
1274
- // });
1212
+ describe('#iapDeactivateTasks', () => {
1213
+ it('should have a iapDeactivateTasks function', (done) => {
1214
+ try {
1215
+ assert.equal(true, typeof a.iapDeactivateTasks === 'function');
1216
+ done();
1217
+ } catch (error) {
1218
+ log.error(`Test Failure: ${error}`);
1219
+ done(error);
1220
+ }
1221
+ });
1222
+ });
1275
1223
 
1276
- describe('#hasEntities', () => {
1277
- it('should have a hasEntities function', (done) => {
1224
+ describe('#iapActivateTasks', () => {
1225
+ it('should have a iapActivateTasks function', (done) => {
1278
1226
  try {
1279
- assert.equal(true, typeof a.hasEntities === 'function');
1227
+ assert.equal(true, typeof a.iapActivateTasks === 'function');
1228
+ done();
1229
+ } catch (error) {
1230
+ log.error(`Test Failure: ${error}`);
1231
+ done(error);
1232
+ }
1233
+ });
1234
+ });
1235
+
1236
+ describe('#iapPopulateEntityCache', () => {
1237
+ it('should have a iapPopulateEntityCache function', (done) => {
1238
+ try {
1239
+ assert.equal(true, typeof a.iapPopulateEntityCache === 'function');
1280
1240
  done();
1281
1241
  } catch (error) {
1282
1242
  log.error(`Test Failure: ${error}`);
@@ -1285,10 +1245,22 @@ describe('[unit] Robustel Adapter Test', () => {
1285
1245
  });
1286
1246
  });
1287
1247
 
1288
- describe('#hasDevices', () => {
1289
- it('should have a hasDevices function', (done) => {
1248
+ describe('#iapRetrieveEntitiesCache', () => {
1249
+ it('should have a iapRetrieveEntitiesCache function', (done) => {
1290
1250
  try {
1291
- assert.equal(true, typeof a.hasDevices === 'function');
1251
+ assert.equal(true, typeof a.iapRetrieveEntitiesCache === 'function');
1252
+ done();
1253
+ } catch (error) {
1254
+ log.error(`Test Failure: ${error}`);
1255
+ done(error);
1256
+ }
1257
+ });
1258
+ });
1259
+
1260
+ describe('#hasEntities', () => {
1261
+ it('should have a hasEntities function', (done) => {
1262
+ try {
1263
+ assert.equal(true, typeof a.hasEntities === 'function');
1292
1264
  done();
1293
1265
  } catch (error) {
1294
1266
  log.error(`Test Failure: ${error}`);
@@ -1345,10 +1317,91 @@ describe('[unit] Robustel Adapter Test', () => {
1345
1317
  });
1346
1318
  });
1347
1319
 
1348
- describe('#getCount', () => {
1349
- it('should have a getCount function', (done) => {
1320
+ describe('#iapGetDeviceCount', () => {
1321
+ it('should have a iapGetDeviceCount function', (done) => {
1322
+ try {
1323
+ assert.equal(true, typeof a.iapGetDeviceCount === 'function');
1324
+ done();
1325
+ } catch (error) {
1326
+ log.error(`Test Failure: ${error}`);
1327
+ done(error);
1328
+ }
1329
+ });
1330
+ });
1331
+
1332
+ describe('#iapExpandedGenericAdapterRequest', () => {
1333
+ it('should have a iapExpandedGenericAdapterRequest function', (done) => {
1334
+ try {
1335
+ assert.equal(true, typeof a.iapExpandedGenericAdapterRequest === 'function');
1336
+ done();
1337
+ } catch (error) {
1338
+ log.error(`Test Failure: ${error}`);
1339
+ done(error);
1340
+ }
1341
+ });
1342
+ });
1343
+
1344
+ describe('#genericAdapterRequest', () => {
1345
+ it('should have a genericAdapterRequest function', (done) => {
1346
+ try {
1347
+ assert.equal(true, typeof a.genericAdapterRequest === 'function');
1348
+ done();
1349
+ } catch (error) {
1350
+ log.error(`Test Failure: ${error}`);
1351
+ done(error);
1352
+ }
1353
+ });
1354
+ });
1355
+
1356
+ describe('#genericAdapterRequestNoBasePath', () => {
1357
+ it('should have a genericAdapterRequestNoBasePath function', (done) => {
1358
+ try {
1359
+ assert.equal(true, typeof a.genericAdapterRequestNoBasePath === 'function');
1360
+ done();
1361
+ } catch (error) {
1362
+ log.error(`Test Failure: ${error}`);
1363
+ done(error);
1364
+ }
1365
+ });
1366
+ });
1367
+
1368
+ describe('#iapRunAdapterLint', () => {
1369
+ it('should have a iapRunAdapterLint function', (done) => {
1370
+ try {
1371
+ assert.equal(true, typeof a.iapRunAdapterLint === 'function');
1372
+ done();
1373
+ } catch (error) {
1374
+ log.error(`Test Failure: ${error}`);
1375
+ done(error);
1376
+ }
1377
+ });
1378
+ it('retrieve the lint results', (done) => {
1379
+ try {
1380
+ a.iapRunAdapterLint((data, error) => {
1381
+ try {
1382
+ assert.equal(undefined, error);
1383
+ assert.notEqual(undefined, data);
1384
+ assert.notEqual(null, data);
1385
+ assert.notEqual(undefined, data.status);
1386
+ assert.notEqual(null, data.status);
1387
+ assert.equal('SUCCESS', data.status);
1388
+ done();
1389
+ } catch (err) {
1390
+ log.error(`Test Failure: ${err}`);
1391
+ done(err);
1392
+ }
1393
+ });
1394
+ } catch (error) {
1395
+ log.error(`Adapter Exception: ${error}`);
1396
+ done(error);
1397
+ }
1398
+ }).timeout(attemptTimeout);
1399
+ });
1400
+
1401
+ describe('#iapRunAdapterTests', () => {
1402
+ it('should have a iapRunAdapterTests function', (done) => {
1350
1403
  try {
1351
- assert.equal(true, typeof a.getCount === 'function');
1404
+ assert.equal(true, typeof a.iapRunAdapterTests === 'function');
1352
1405
  done();
1353
1406
  } catch (error) {
1354
1407
  log.error(`Test Failure: ${error}`);
@@ -1357,6 +1410,92 @@ describe('[unit] Robustel Adapter Test', () => {
1357
1410
  });
1358
1411
  });
1359
1412
 
1413
+ describe('#iapGetAdapterInventory', () => {
1414
+ it('should have a iapGetAdapterInventory function', (done) => {
1415
+ try {
1416
+ assert.equal(true, typeof a.iapGetAdapterInventory === 'function');
1417
+ done();
1418
+ } catch (error) {
1419
+ log.error(`Test Failure: ${error}`);
1420
+ done(error);
1421
+ }
1422
+ });
1423
+ it('retrieve the inventory', (done) => {
1424
+ try {
1425
+ a.iapGetAdapterInventory((data, error) => {
1426
+ try {
1427
+ assert.equal(undefined, error);
1428
+ assert.notEqual(undefined, data);
1429
+ assert.notEqual(null, data);
1430
+ done();
1431
+ } catch (err) {
1432
+ log.error(`Test Failure: ${err}`);
1433
+ done(err);
1434
+ }
1435
+ });
1436
+ } catch (error) {
1437
+ log.error(`Adapter Exception: ${error}`);
1438
+ done(error);
1439
+ }
1440
+ }).timeout(attemptTimeout);
1441
+ });
1442
+ describe('metadata.json', () => {
1443
+ it('should have a metadata.json', (done) => {
1444
+ try {
1445
+ fs.exists('metadata.json', (val) => {
1446
+ assert.equal(true, val);
1447
+ done();
1448
+ });
1449
+ } catch (error) {
1450
+ log.error(`Test Failure: ${error}`);
1451
+ done(error);
1452
+ }
1453
+ });
1454
+ it('metadata.json is customized', (done) => {
1455
+ try {
1456
+ const metadataDotJson = require('../../metadata.json');
1457
+ assert.equal('adapter-robustel', metadataDotJson.name);
1458
+ assert.notEqual(undefined, metadataDotJson.webName);
1459
+ assert.notEqual(null, metadataDotJson.webName);
1460
+ assert.notEqual('', metadataDotJson.webName);
1461
+ assert.equal('Adapter', metadataDotJson.type);
1462
+ done();
1463
+ } catch (error) {
1464
+ log.error(`Test Failure: ${error}`);
1465
+ done(error);
1466
+ }
1467
+ });
1468
+ it('metadata.json contains accurate documentation', (done) => {
1469
+ try {
1470
+ const metadataDotJson = require('../../metadata.json');
1471
+ assert.notEqual(undefined, metadataDotJson.documentation);
1472
+ assert.equal('https://www.npmjs.com/package/@itentialopensource/adapter-robustel', metadataDotJson.documentation.npmLink);
1473
+ assert.equal('https://docs.itential.com/opensource/docs/troubleshooting-an-adapter', metadataDotJson.documentation.faqLink);
1474
+ assert.equal('https://gitlab.com/itentialopensource/adapters/contributing-guide', metadataDotJson.documentation.contributeLink);
1475
+ assert.equal('https://itential.atlassian.net/servicedesk/customer/portals', metadataDotJson.documentation.issueLink);
1476
+ done();
1477
+ } catch (error) {
1478
+ log.error(`Test Failure: ${error}`);
1479
+ done(error);
1480
+ }
1481
+ });
1482
+ it('metadata.json has related items', (done) => {
1483
+ try {
1484
+ const metadataDotJson = require('../../metadata.json');
1485
+ assert.notEqual(undefined, metadataDotJson.relatedItems);
1486
+ assert.notEqual(undefined, metadataDotJson.relatedItems.adapters);
1487
+ assert.notEqual(undefined, metadataDotJson.relatedItems.integrations);
1488
+ assert.notEqual(undefined, metadataDotJson.relatedItems.ecosystemApplications);
1489
+ assert.notEqual(undefined, metadataDotJson.relatedItems.workflowProjects);
1490
+ assert.notEqual(undefined, metadataDotJson.relatedItems.transformationProjects);
1491
+ assert.notEqual(undefined, metadataDotJson.relatedItems.exampleProjects);
1492
+ done();
1493
+ } catch (error) {
1494
+ log.error(`Test Failure: ${error}`);
1495
+ done(error);
1496
+ }
1497
+ });
1498
+ });
1360
1499
  /*
1361
1500
  -----------------------------------------------------------------------
1362
1501
  -----------------------------------------------------------------------