@itentialopensource/adapter-f5_bigiq 0.3.5 → 0.4.1

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 (49) hide show
  1. package/AUTH.md +13 -14
  2. package/CALLS.md +2117 -22
  3. package/CHANGELOG.md +16 -0
  4. package/CONTRIBUTING.md +1 -160
  5. package/ENHANCE.md +2 -2
  6. package/README.md +32 -23
  7. package/SYSTEMINFO.md +14 -6
  8. package/adapter.js +383 -333
  9. package/adapterBase.js +549 -879
  10. package/changelogs/CHANGELOG.MD +48 -0
  11. package/entities/.system/action.json +1 -1
  12. package/entities/CloudEdition/action.json +41 -0
  13. package/entities/CloudEdition/schema.json +2 -0
  14. package/entities/Device/action.json +20 -0
  15. package/entities/Device/schema.json +1 -0
  16. package/metadata.json +72 -0
  17. package/package.json +23 -24
  18. package/pronghorn.json +550 -149
  19. package/propertiesSchema.json +431 -31
  20. package/refs?service=git-upload-pack +0 -0
  21. package/report/adapter-openapi.json +13524 -0
  22. package/report/adapter-openapi.yaml +9517 -0
  23. package/report/adapterInfo.json +8 -8
  24. package/report/updateReport1691507623236.json +120 -0
  25. package/report/updateReport1692202627551.json +120 -0
  26. package/report/updateReport1694462181107.json +120 -0
  27. package/report/updateReport1698421056669.json +120 -0
  28. package/sampleProperties.json +65 -4
  29. package/test/integration/adapterTestBasicGet.js +2 -4
  30. package/test/integration/adapterTestConnectivity.js +91 -42
  31. package/test/integration/adapterTestIntegration.js +205 -2
  32. package/test/unit/adapterBaseTestUnit.js +388 -313
  33. package/test/unit/adapterTestUnit.js +374 -112
  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 +2 -2
  39. package/utils/findPath.js +1 -1
  40. package/utils/methodDocumentor.js +273 -0
  41. package/utils/modify.js +13 -15
  42. package/utils/packModificationScript.js +1 -1
  43. package/utils/pre-commit.sh +2 -0
  44. package/utils/taskMover.js +309 -0
  45. package/utils/tbScript.js +89 -34
  46. package/utils/tbUtils.js +41 -21
  47. package/utils/testRunner.js +1 -1
  48. package/utils/troubleshootingAdapter.js +9 -6
  49. package/workflows/README.md +0 -3
@@ -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
  });
@@ -9,13 +9,13 @@
9
9
  // include required items for testing & logging
10
10
  const assert = require('assert');
11
11
  const fs = require('fs');
12
- const mocha = require('mocha');
13
12
  const path = require('path');
13
+ const util = require('util');
14
+ const mocha = require('mocha');
14
15
  const winston = require('winston');
15
16
  const { expect } = require('chai');
16
17
  const { use } = require('chai');
17
18
  const td = require('testdouble');
18
- const util = require('util');
19
19
 
20
20
  const anything = td.matchers.anything();
21
21
 
@@ -335,6 +335,134 @@ describe('[integration] F5BigIQ Adapter Test', () => {
335
335
  }).timeout(attemptTimeout);
336
336
  });
337
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-f5_bigiq-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-f5_bigiq-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
+ });
338
466
  /*
339
467
  -----------------------------------------------------------------------
340
468
  -----------------------------------------------------------------------
@@ -577,6 +705,31 @@ describe('[integration] F5BigIQ Adapter Test', () => {
577
705
  }).timeout(attemptTimeout);
578
706
  });
579
707
 
708
+ describe('#listCloudEnvironments - errors', () => {
709
+ it('should work if integrated but since no mockdata should error when run standalone', (done) => {
710
+ try {
711
+ a.listCloudEnvironments((data, error) => {
712
+ try {
713
+ if (stub) {
714
+ const displayE = 'Error 400 received on request';
715
+ runErrorAsserts(data, error, 'AD.500', 'Test-f5_bigiq-connectorRest-handleEndResponse', displayE);
716
+ } else {
717
+ runCommonAsserts(data, error);
718
+ }
719
+ saveMockData('CloudEdition', 'listCloudEnvironments', 'default', data);
720
+ done();
721
+ } catch (err) {
722
+ log.error(`Test Failure: ${err}`);
723
+ done(err);
724
+ }
725
+ });
726
+ } catch (error) {
727
+ log.error(`Adapter Exception: ${error}`);
728
+ done(error);
729
+ }
730
+ }).timeout(attemptTimeout);
731
+ });
732
+
580
733
  const cloudEditionPatchCloudProviderBodyParam = {};
581
734
  describe('#patchCloudProvider - errors', () => {
582
735
  it('should work if integrated but since no mockdata should error when run standalone', (done) => {
@@ -628,6 +781,31 @@ describe('[integration] F5BigIQ Adapter Test', () => {
628
781
  }).timeout(attemptTimeout);
629
782
  });
630
783
 
784
+ describe('#listCloudProviders - errors', () => {
785
+ it('should work if integrated but since no mockdata should error when run standalone', (done) => {
786
+ try {
787
+ a.listCloudProviders((data, error) => {
788
+ try {
789
+ if (stub) {
790
+ const displayE = 'Error 400 received on request';
791
+ runErrorAsserts(data, error, 'AD.500', 'Test-f5_bigiq-connectorRest-handleEndResponse', displayE);
792
+ } else {
793
+ runCommonAsserts(data, error);
794
+ }
795
+ saveMockData('CloudEdition', 'listCloudProviders', 'default', data);
796
+ done();
797
+ } catch (err) {
798
+ log.error(`Test Failure: ${err}`);
799
+ done(err);
800
+ }
801
+ });
802
+ } catch (error) {
803
+ log.error(`Adapter Exception: ${error}`);
804
+ done(error);
805
+ }
806
+ }).timeout(attemptTimeout);
807
+ });
808
+
631
809
  const cloudEditionPatchServiceScalingGroupBodyParam = {};
632
810
  describe('#patchServiceScalingGroup - errors', () => {
633
811
  it('should work if integrated but since no mockdata should error when run standalone', (done) => {
@@ -3723,6 +3901,31 @@ describe('[integration] F5BigIQ Adapter Test', () => {
3723
3901
  }).timeout(attemptTimeout);
3724
3902
  });
3725
3903
 
3904
+ describe('#listDeviceIPPools - errors', () => {
3905
+ it('should work if integrated but since no mockdata should error when run standalone', (done) => {
3906
+ try {
3907
+ a.listDeviceIPPools((data, error) => {
3908
+ try {
3909
+ if (stub) {
3910
+ const displayE = 'Error 400 received on request';
3911
+ runErrorAsserts(data, error, 'AD.500', 'Test-f5_bigiq-connectorRest-handleEndResponse', displayE);
3912
+ } else {
3913
+ runCommonAsserts(data, error);
3914
+ }
3915
+ saveMockData('Device', 'listDeviceIPPools', 'default', data);
3916
+ done();
3917
+ } catch (err) {
3918
+ log.error(`Test Failure: ${err}`);
3919
+ done(err);
3920
+ }
3921
+ });
3922
+ } catch (error) {
3923
+ log.error(`Adapter Exception: ${error}`);
3924
+ done(error);
3925
+ }
3926
+ }).timeout(attemptTimeout);
3927
+ });
3928
+
3726
3929
  const devicePatchDeviceTemplateBodyParam = {};
3727
3930
  describe('#patchDeviceTemplate - errors', () => {
3728
3931
  it('should work if integrated but since no mockdata should error when run standalone', (done) => {