@itentialopensource/adapter-att_mobility 0.1.2 → 0.2.2

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 (48) hide show
  1. package/.eslintignore +0 -1
  2. package/.jshintrc +3 -0
  3. package/AUTH.md +11 -14
  4. package/BROKER.md +3 -3
  5. package/CALLS.md +59 -23
  6. package/CHANGELOG.md +24 -0
  7. package/CONTRIBUTING.md +1 -160
  8. package/ENHANCE.md +4 -4
  9. package/PROPERTIES.md +19 -19
  10. package/README.md +45 -36
  11. package/SUMMARY.md +2 -2
  12. package/SYSTEMINFO.md +9 -4
  13. package/TROUBLESHOOT.md +6 -6
  14. package/adapter.js +159 -330
  15. package/adapterBase.js +538 -873
  16. package/changelogs/changelog.md +16 -0
  17. package/metadata.json +61 -0
  18. package/package.json +24 -26
  19. package/pronghorn.json +474 -142
  20. package/propertiesSchema.json +447 -43
  21. package/refs?service=git-upload-pack +0 -0
  22. package/report/adapter-openapi.json +149 -0
  23. package/report/adapter-openapi.yaml +133 -0
  24. package/report/adapterInfo.json +8 -8
  25. package/report/updateReport1691508426658.json +120 -0
  26. package/report/updateReport1692202905234.json +120 -0
  27. package/report/updateReport1694465385247.json +120 -0
  28. package/sampleProperties.json +64 -3
  29. package/test/integration/adapterTestBasicGet.js +1 -1
  30. package/test/integration/adapterTestConnectivity.js +91 -42
  31. package/test/integration/adapterTestIntegration.js +142 -17
  32. package/test/unit/adapterBaseTestUnit.js +388 -313
  33. package/test/unit/adapterTestUnit.js +320 -123
  34. package/utils/adapterInfo.js +1 -1
  35. package/utils/addAuth.js +1 -1
  36. package/utils/artifactize.js +1 -1
  37. package/utils/checkMigrate.js +1 -1
  38. package/utils/entitiesToDB.js +1 -0
  39. package/utils/findPath.js +1 -1
  40. package/utils/methodDocumentor.js +57 -22
  41. package/utils/modify.js +13 -15
  42. package/utils/packModificationScript.js +1 -1
  43. package/utils/taskMover.js +309 -0
  44. package/utils/tbScript.js +3 -10
  45. package/utils/tbUtils.js +2 -3
  46. package/utils/testRunner.js +1 -1
  47. package/utils/troubleshootingAdapter.js +1 -3
  48. package/workflows/README.md +0 -3
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "id": "Adapter-att_mobility",
3
- "type": "att_mobility",
3
+ "type": "AttMobility",
4
4
  "properties": {
5
5
  "host": "apsapi.att.com",
6
6
  "port": 8082,
7
+ "choosepath": "",
7
8
  "base_path": "/",
8
9
  "version": "",
9
10
  "cache_location": "none",
@@ -25,12 +26,27 @@
25
26
  "auth_logging": false,
26
27
  "client_id": "",
27
28
  "client_secret": "",
28
- "grant_type": ""
29
+ "grant_type": "",
30
+ "sensitive": [],
31
+ "sso": {
32
+ "protocol": "",
33
+ "host": "",
34
+ "port": 0
35
+ },
36
+ "multiStepAuthCalls": [
37
+ {
38
+ "name": "",
39
+ "requestFields": {},
40
+ "responseFields": {},
41
+ "successfullResponseCode": 200
42
+ }
43
+ ]
29
44
  },
30
45
  "healthcheck": {
31
46
  "type": "none",
32
47
  "frequency": 60000,
33
- "query_object": {}
48
+ "query_object": {},
49
+ "addlHeaders": {}
34
50
  },
35
51
  "throttle": {
36
52
  "throttle_enabled": false,
@@ -125,6 +141,12 @@
125
141
  {
126
142
  "path": "/get/devices",
127
143
  "method": "GET",
144
+ "pagination": {
145
+ "offsetVar": "",
146
+ "limitVar": "",
147
+ "incrementBy": "limit",
148
+ "requestLocation": "query"
149
+ },
128
150
  "query": {},
129
151
  "body": {},
130
152
  "headers": {},
@@ -186,6 +208,45 @@
186
208
  "responseFields": {}
187
209
  }
188
210
  ]
211
+ },
212
+ "cache": {
213
+ "enabled": false,
214
+ "entities": [
215
+ {
216
+ "entityType": "",
217
+ "frequency": 1440,
218
+ "flushOnFail": false,
219
+ "limit": 1000,
220
+ "retryAttempts": 5,
221
+ "sort": true,
222
+ "populate": [
223
+ {
224
+ "path": "",
225
+ "method": "GET",
226
+ "pagination": {
227
+ "offsetVar": "",
228
+ "limitVar": "",
229
+ "incrementBy": "limit",
230
+ "requestLocation": "query"
231
+ },
232
+ "query": {},
233
+ "body": {},
234
+ "headers": {},
235
+ "handleFailure": "ignore",
236
+ "requestFields": {},
237
+ "responseDatakey": "",
238
+ "responseFields": {}
239
+ }
240
+ ],
241
+ "cachedTasks": [
242
+ {
243
+ "name": "",
244
+ "filterField": "",
245
+ "filterLoc": ""
246
+ }
247
+ ]
248
+ }
249
+ ]
189
250
  }
190
251
  },
191
252
  "groups": [],
@@ -7,9 +7,9 @@
7
7
  /* eslint import/no-dynamic-require: warn */
8
8
  /* eslint import/no-unresolved: warn */
9
9
 
10
- const mocha = require('mocha');
11
10
  const path = require('path');
12
11
  const assert = require('assert');
12
+ const mocha = require('mocha');
13
13
  const itParam = require('mocha-param');
14
14
 
15
15
  const utils = require('../../utils/tbUtils');
@@ -3,9 +3,12 @@
3
3
  /* global describe it context before after */
4
4
  /* eslint no-unused-vars: warn */
5
5
 
6
- const mocha = require('mocha');
7
6
  const assert = require('assert');
8
- const diagnostics = require('network-diagnostics');
7
+ const http = require('http');
8
+ const https = require('https');
9
+ const mocha = require('mocha');
10
+ const ping = require('ping');
11
+ const dnsLookup = require('dns-lookup-promise');
9
12
 
10
13
  let host;
11
14
  process.argv.forEach((val) => {
@@ -16,78 +19,124 @@ process.argv.forEach((val) => {
16
19
 
17
20
  describe('[integration] Adapter Test', () => {
18
21
  context(`Testing network connection on ${host}`, () => {
19
- before(() => {
20
- diagnostics.setTestURL(host);
21
- });
22
-
23
22
  after((done) => {
24
23
  done();
25
24
  });
26
25
 
27
26
  it('DNS resolve', (done) => {
28
- diagnostics.haveDNS((result) => {
29
- try {
30
- assert.equal(result, true);
31
- done();
32
- } catch (error) {
33
- done(error);
34
- }
35
- });
27
+ dnsLookup(host)
28
+ .then((addresses) => {
29
+ try {
30
+ assert.ok(addresses.length > 0);
31
+ done();
32
+ } catch (error) {
33
+ done(error);
34
+ }
35
+ })
36
+ .catch((err) => {
37
+ done(err);
38
+ });
36
39
  });
37
40
 
38
41
  it('Responds to ping', (done) => {
39
- diagnostics.havePing((result) => {
40
- try {
41
- assert.equal(result, true);
42
- done();
43
- } catch (error) {
44
- done(error);
45
- }
46
- });
42
+ ping.promise.probe(host)
43
+ .then((result) => {
44
+ try {
45
+ assert.ok(result.alive);
46
+ done();
47
+ } catch (error) {
48
+ done(error);
49
+ }
50
+ })
51
+ .catch((err) => {
52
+ done(err);
53
+ });
47
54
  });
48
55
 
49
56
  it('Support HTTP on port 80', (done) => {
50
- diagnostics.haveHTTP((result) => {
57
+ const requestOptions = {
58
+ host,
59
+ port: 80,
60
+ method: 'HEAD'
61
+ };
62
+
63
+ const req = http.request(requestOptions, (res) => {
51
64
  try {
52
- assert.equal(result, true);
65
+ assert.ok(res.statusCode >= 200 && res.statusCode < 400);
53
66
  done();
54
67
  } catch (error) {
55
68
  done(error);
56
69
  }
57
70
  });
71
+
72
+ req.on('error', (err) => {
73
+ done(err);
74
+ });
75
+
76
+ req.end();
58
77
  });
59
78
 
60
79
  it('Support HTTPS on port 443', (done) => {
61
- diagnostics.haveHTTPS((result) => {
80
+ const requestOptions = {
81
+ host,
82
+ port: 443,
83
+ method: 'HEAD'
84
+ };
85
+
86
+ const req = https.request(requestOptions, (res) => {
62
87
  try {
63
- assert.equal(result, true);
88
+ assert.ok(res.statusCode >= 200 && res.statusCode < 400);
64
89
  done();
65
90
  } catch (error) {
66
91
  done(error);
67
92
  }
68
93
  });
94
+
95
+ req.on('error', (err) => {
96
+ done(err);
97
+ });
98
+
99
+ req.end();
69
100
  });
70
101
 
71
102
  it('Support IPv4', (done) => {
72
- diagnostics.haveIPv4Async((result) => {
73
- try {
74
- assert.equal(result, true);
75
- done();
76
- } catch (error) {
77
- done(error);
78
- }
79
- });
103
+ const options = {
104
+ family: 4,
105
+ hints: dnsLookup.ADDRCONFIG
106
+ };
107
+
108
+ dnsLookup.lookup(host, options)
109
+ .then((address, family) => {
110
+ try {
111
+ assert.ok(address !== null && family === 4);
112
+ done();
113
+ } catch (error) {
114
+ done(error);
115
+ }
116
+ })
117
+ .catch((err) => {
118
+ done(err);
119
+ });
80
120
  });
81
121
 
82
122
  it('Support IPv6', (done) => {
83
- diagnostics.haveIPv6Async((result) => {
84
- try {
85
- assert.equal(result, true);
86
- done();
87
- } catch (error) {
88
- done(error);
89
- }
90
- });
123
+ const options = {
124
+ family: 6,
125
+ hints: dnsLookup.ADDRCONFIG
126
+ };
127
+
128
+ dnsLookup.lookup(host, options)
129
+ .then((address, family) => {
130
+ try {
131
+ assert.ok(address !== null && family === 6);
132
+ done();
133
+ } catch (error) {
134
+ done(error);
135
+ }
136
+ })
137
+ .catch((err) => {
138
+ done(err);
139
+ });
91
140
  });
92
141
  });
93
142
  });
@@ -1,6 +1,3 @@
1
- /* eslint-disable import/no-dynamic-require */
2
- /* eslint-disable no-unused-vars */
3
- /* eslint-disable max-len */
4
1
  /* @copyright Itential, LLC 2019 (pre-modifications) */
5
2
 
6
3
  // Set globals
@@ -12,13 +9,13 @@
12
9
  // include required items for testing & logging
13
10
  const assert = require('assert');
14
11
  const fs = require('fs');
15
- const mocha = require('mocha');
16
12
  const path = require('path');
13
+ const util = require('util');
14
+ const mocha = require('mocha');
17
15
  const winston = require('winston');
18
16
  const { expect } = require('chai');
19
17
  const { use } = require('chai');
20
18
  const td = require('testdouble');
21
- const util = require('util');
22
19
 
23
20
  const anything = td.matchers.anything();
24
21
 
@@ -60,8 +57,8 @@ global.pronghornProps = {
60
57
  },
61
58
  adapterProps: {
62
59
  adapters: [{
63
- id: 'Test-attmobility',
64
- type: 'Attmobility',
60
+ id: 'Test-att_mobility',
61
+ type: 'AttMobility',
65
62
  properties: samProps
66
63
  }]
67
64
  }
@@ -237,12 +234,12 @@ function saveMockData(entityName, actionName, descriptor, responseData) {
237
234
  }
238
235
 
239
236
  // require the adapter that we are going to be using
240
- const Attmobility = require('../../adapter');
237
+ const AttMobility = require('../../adapter');
241
238
 
242
239
  // begin the testing - these should be pretty well defined between the describe and the it!
243
- describe('[integration] Attmobility Adapter Test', () => {
244
- describe('Attmobility Class Tests', () => {
245
- const a = new Attmobility(
240
+ describe('[integration] AttMobility Adapter Test', () => {
241
+ describe('AttMobility Class Tests', () => {
242
+ const a = new AttMobility(
246
243
  pronghornProps.adapterProps.adapters[0].id,
247
244
  pronghornProps.adapterProps.adapters[0].properties
248
245
  );
@@ -338,6 +335,134 @@ describe('[integration] Attmobility Adapter Test', () => {
338
335
  }).timeout(attemptTimeout);
339
336
  });
340
337
 
338
+ // broker tests
339
+ describe('#getDevicesFiltered - errors', () => {
340
+ it('should work if integrated but since no mockdata should error when run standalone', (done) => {
341
+ try {
342
+ const opts = {
343
+ filter: {
344
+ name: 'deviceName'
345
+ }
346
+ };
347
+ a.getDevicesFiltered(opts, (data, error) => {
348
+ try {
349
+ if (stub) {
350
+ if (samProps.devicebroker.getDevicesFiltered[0].handleFailure === 'ignore') {
351
+ assert.equal(null, error);
352
+ assert.notEqual(undefined, data);
353
+ assert.notEqual(null, data);
354
+ assert.equal(0, data.total);
355
+ assert.equal(0, data.list.length);
356
+ } else {
357
+ const displayE = 'Error 400 received on request';
358
+ runErrorAsserts(data, error, 'AD.500', 'Test-att_mobility-connectorRest-handleEndResponse', displayE);
359
+ }
360
+ } else {
361
+ runCommonAsserts(data, error);
362
+ }
363
+ done();
364
+ } catch (err) {
365
+ log.error(`Test Failure: ${err}`);
366
+ done(err);
367
+ }
368
+ });
369
+ } catch (error) {
370
+ log.error(`Adapter Exception: ${error}`);
371
+ done(error);
372
+ }
373
+ }).timeout(attemptTimeout);
374
+ });
375
+
376
+ describe('#iapGetDeviceCount - errors', () => {
377
+ it('should work if integrated but since no mockdata should error when run standalone', (done) => {
378
+ try {
379
+ const opts = {
380
+ filter: {
381
+ name: 'deviceName'
382
+ }
383
+ };
384
+ a.iapGetDeviceCount((data, error) => {
385
+ try {
386
+ if (stub) {
387
+ if (samProps.devicebroker.getDevicesFiltered[0].handleFailure === 'ignore') {
388
+ assert.equal(null, error);
389
+ assert.notEqual(undefined, data);
390
+ assert.notEqual(null, data);
391
+ assert.equal(0, data.count);
392
+ } else {
393
+ const displayE = 'Error 400 received on request';
394
+ runErrorAsserts(data, error, 'AD.500', 'Test-att_mobility-connectorRest-handleEndResponse', displayE);
395
+ }
396
+ } else {
397
+ runCommonAsserts(data, error);
398
+ }
399
+ done();
400
+ } catch (err) {
401
+ log.error(`Test Failure: ${err}`);
402
+ done(err);
403
+ }
404
+ });
405
+ } catch (error) {
406
+ log.error(`Adapter Exception: ${error}`);
407
+ done(error);
408
+ }
409
+ }).timeout(attemptTimeout);
410
+ });
411
+
412
+ // exposed cache tests
413
+ describe('#iapPopulateEntityCache - errors', () => {
414
+ it('should work if integrated but since no mockdata should error when run standalone', (done) => {
415
+ try {
416
+ a.iapPopulateEntityCache('Device', (data, error) => {
417
+ try {
418
+ if (stub) {
419
+ assert.equal(null, data);
420
+ assert.notEqual(undefined, error);
421
+ assert.notEqual(null, error);
422
+ done();
423
+ } else {
424
+ assert.equal(undefined, error);
425
+ assert.equal('success', data[0]);
426
+ done();
427
+ }
428
+ } catch (err) {
429
+ log.error(`Test Failure: ${err}`);
430
+ done(err);
431
+ }
432
+ });
433
+ } catch (error) {
434
+ log.error(`Adapter Exception: ${error}`);
435
+ done(error);
436
+ }
437
+ }).timeout(attemptTimeout);
438
+ });
439
+
440
+ describe('#iapRetrieveEntitiesCache - errors', () => {
441
+ it('should work if integrated but since no mockdata should error when run standalone', (done) => {
442
+ try {
443
+ a.iapRetrieveEntitiesCache('Device', {}, (data, error) => {
444
+ try {
445
+ if (stub) {
446
+ assert.equal(null, data);
447
+ assert.notEqual(null, error);
448
+ assert.notEqual(undefined, error);
449
+ } else {
450
+ assert.equal(undefined, error);
451
+ assert.notEqual(null, data);
452
+ assert.notEqual(undefined, data);
453
+ }
454
+ done();
455
+ } catch (err) {
456
+ log.error(`Test Failure: ${err}`);
457
+ done(err);
458
+ }
459
+ });
460
+ } catch (error) {
461
+ log.error(`Adapter Exception: ${error}`);
462
+ done(error);
463
+ }
464
+ }).timeout(attemptTimeout);
465
+ });
341
466
  /*
342
467
  -----------------------------------------------------------------------
343
468
  -----------------------------------------------------------------------
@@ -355,7 +480,7 @@ describe('[integration] Attmobility Adapter Test', () => {
355
480
  try {
356
481
  if (stub) {
357
482
  const displayE = 'Error 400 received on request';
358
- runErrorAsserts(data, error, 'AD.500', 'Test-attmobility-connectorRest-handleEndResponse', displayE);
483
+ runErrorAsserts(data, error, 'AD.500', 'Test-att_mobility-connectorRest-handleEndResponse', displayE);
359
484
  } else {
360
485
  runCommonAsserts(data, error);
361
486
  }
@@ -381,7 +506,7 @@ describe('[integration] Attmobility Adapter Test', () => {
381
506
  try {
382
507
  if (stub) {
383
508
  const displayE = 'Error 400 received on request';
384
- runErrorAsserts(data, error, 'AD.500', 'Test-attmobility-connectorRest-handleEndResponse', displayE);
509
+ runErrorAsserts(data, error, 'AD.500', 'Test-att_mobility-connectorRest-handleEndResponse', displayE);
385
510
  } else {
386
511
  runCommonAsserts(data, error);
387
512
  }
@@ -408,7 +533,7 @@ describe('[integration] Attmobility Adapter Test', () => {
408
533
  try {
409
534
  if (stub) {
410
535
  const displayE = 'Error 400 received on request';
411
- runErrorAsserts(data, error, 'AD.500', 'Test-attmobility-connectorRest-handleEndResponse', displayE);
536
+ runErrorAsserts(data, error, 'AD.500', 'Test-att_mobility-connectorRest-handleEndResponse', displayE);
412
537
  } else {
413
538
  runCommonAsserts(data, error);
414
539
  }
@@ -434,7 +559,7 @@ describe('[integration] Attmobility Adapter Test', () => {
434
559
  try {
435
560
  if (stub) {
436
561
  const displayE = 'Error 400 received on request';
437
- runErrorAsserts(data, error, 'AD.500', 'Test-attmobility-connectorRest-handleEndResponse', displayE);
562
+ runErrorAsserts(data, error, 'AD.500', 'Test-att_mobility-connectorRest-handleEndResponse', displayE);
438
563
  } else {
439
564
  runCommonAsserts(data, error);
440
565
  }
@@ -460,7 +585,7 @@ describe('[integration] Attmobility Adapter Test', () => {
460
585
  try {
461
586
  if (stub) {
462
587
  const displayE = 'Error 400 received on request';
463
- runErrorAsserts(data, error, 'AD.500', 'Test-attmobility-connectorRest-handleEndResponse', displayE);
588
+ runErrorAsserts(data, error, 'AD.500', 'Test-att_mobility-connectorRest-handleEndResponse', displayE);
464
589
  } else {
465
590
  runCommonAsserts(data, error);
466
591
  }
@@ -486,7 +611,7 @@ describe('[integration] Attmobility Adapter Test', () => {
486
611
  try {
487
612
  if (stub) {
488
613
  const displayE = 'Error 400 received on request';
489
- runErrorAsserts(data, error, 'AD.500', 'Test-attmobility-connectorRest-handleEndResponse', displayE);
614
+ runErrorAsserts(data, error, 'AD.500', 'Test-att_mobility-connectorRest-handleEndResponse', displayE);
490
615
  } else {
491
616
  runCommonAsserts(data, error);
492
617
  }