@itentialopensource/adapter-aruba_central 0.1.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 (189) hide show
  1. package/.eslintignore +6 -0
  2. package/.eslintrc.js +18 -0
  3. package/.gitlab/.gitkeep +0 -0
  4. package/.gitlab/issue_templates/.gitkeep +0 -0
  5. package/.gitlab/issue_templates/Default.md +17 -0
  6. package/.gitlab/issue_templates/bugReportTemplate.md +76 -0
  7. package/.gitlab/issue_templates/featureRequestTemplate.md +14 -0
  8. package/.jshintrc +0 -0
  9. package/AUTH.md +39 -0
  10. package/BROKER.md +199 -0
  11. package/CALLS.md +170 -0
  12. package/CHANGELOG.md +9 -0
  13. package/CODE_OF_CONDUCT.md +43 -0
  14. package/CONTRIBUTING.md +172 -0
  15. package/ENHANCE.md +69 -0
  16. package/LICENSE +201 -0
  17. package/PROPERTIES.md +641 -0
  18. package/README.md +337 -0
  19. package/SUMMARY.md +9 -0
  20. package/SYSTEMINFO.md +11 -0
  21. package/TROUBLESHOOT.md +47 -0
  22. package/adapter.js +23717 -0
  23. package/adapterBase.js +1787 -0
  24. package/adapter_modifications/README.md +59 -0
  25. package/adapter_modifications/specificCallScript.js +97 -0
  26. package/adapter_modifications/update.js +532 -0
  27. package/adapter_modifications/updateFiles/components/adapter.js +164 -0
  28. package/adapter_modifications/updateFiles/components/entities/Installers/action.json +22 -0
  29. package/adapter_modifications/updateFiles/components/entities/Installers/mockdatafiles/mockdata.json +1 -0
  30. package/adapter_modifications/updateFiles/components/entities/Installers/schema.json +20 -0
  31. package/adapter_modifications/updateFiles/components/entities/Sites/action.json +22 -0
  32. package/adapter_modifications/updateFiles/components/entities/Sites/mockdatafiles/mockdata.json +1 -0
  33. package/adapter_modifications/updateFiles/components/entities/Sites/schema.json +20 -0
  34. package/adapter_modifications/updateFiles/components/methods.json +204 -0
  35. package/adapter_modifications/updateFiles/components/pronghorn.json +77 -0
  36. package/adapter_modifications/updateFiles/components/test/integration/adapterTestIntegration.js +76 -0
  37. package/adapter_modifications/updateFiles/components/test/unit/adapterTestUnit.js +58 -0
  38. package/entities/.generic/action.json +214 -0
  39. package/entities/.generic/schema.json +28 -0
  40. package/entities/.system/action.json +50 -0
  41. package/entities/.system/mockdatafiles/getToken-default.json +3 -0
  42. package/entities/.system/mockdatafiles/healthcheck-default.json +3 -0
  43. package/entities/.system/schema.json +19 -0
  44. package/entities/.system/schemaTokenReq.json +53 -0
  45. package/entities/.system/schemaTokenResp.json +53 -0
  46. package/entities/AOSS/action.json +168 -0
  47. package/entities/AOSS/mockdatafiles/apiHppcSwitchGetDevicePorts-default.json +17 -0
  48. package/entities/AOSS/mockdatafiles/apiHppcSwitchGetDeviceVlans-default.json +65 -0
  49. package/entities/AOSS/mockdatafiles/apiHppcSwitchGetGroupPorts-default.json +17 -0
  50. package/entities/AOSS/mockdatafiles/apiHppcSwitchGetGroupVlans-default.json +125 -0
  51. package/entities/AOSS/schema.json +26 -0
  52. package/entities/AP/action.json +150 -0
  53. package/entities/AP/schema.json +135 -0
  54. package/entities/APConfiguration/action.json +394 -0
  55. package/entities/APConfiguration/mockdatafiles/apiApClisGetApSettingsClis-default.json +3 -0
  56. package/entities/APConfiguration/mockdatafiles/apiApClisGetConfigurationClis-default.json +3 -0
  57. package/entities/APConfiguration/mockdatafiles/apiApClisGetDirtyDiff-default.json +10 -0
  58. package/entities/APConfiguration/mockdatafiles/apiApClisGetSwarmVariables-default.json +112 -0
  59. package/entities/APConfiguration/mockdatafiles/apiSystemConfigGetSystemConfig-default.json +10 -0
  60. package/entities/APConfiguration/schema.json +37 -0
  61. package/entities/APSettings/action.json +86 -0
  62. package/entities/APSettings/mockdatafiles/apiApSettingsGetApSettings-default.json +4 -0
  63. package/entities/APSettings/mockdatafiles/apiApSettingsGetApSettingsV2-default.json +5 -0
  64. package/entities/APSettings/schema.json +22 -0
  65. package/entities/CXConfiguration/action.json +250 -0
  66. package/entities/CXConfiguration/schema.json +30 -0
  67. package/entities/CaptivePortalLogo/action.json +65 -0
  68. package/entities/CaptivePortalLogo/mockdatafiles/apiCpLogoGetCpLogos-default.json +21 -0
  69. package/entities/CaptivePortalLogo/schema.json +21 -0
  70. package/entities/Certificates/action.json +85 -0
  71. package/entities/Certificates/mockdatafiles/apiCertificatesGetCertificates-default.json +29 -0
  72. package/entities/Certificates/schema.json +22 -0
  73. package/entities/Client/action.json +214 -0
  74. package/entities/Client/schema.json +193 -0
  75. package/entities/ConfigurationBackupAndRestore/action.json +189 -0
  76. package/entities/ConfigurationBackupAndRestore/mockdatafiles/apiGroupsGetBackupLogForSnapshot-default.json +3 -0
  77. package/entities/ConfigurationBackupAndRestore/mockdatafiles/apiGroupsGetBackupStatusForSnapshot-default.json +3 -0
  78. package/entities/ConfigurationBackupAndRestore/mockdatafiles/apiGroupsGetLastRestoreLogsForGroup-default.json +3 -0
  79. package/entities/ConfigurationBackupAndRestore/mockdatafiles/apiGroupsGetRestoreStatusForSnapshot-default.json +3 -0
  80. package/entities/ConfigurationBackupAndRestore/mockdatafiles/apiGroupsGetSnapshotsForGroup-default.json +65 -0
  81. package/entities/ConfigurationBackupAndRestore/schema.json +27 -0
  82. package/entities/ConfigurationMode/action.json +148 -0
  83. package/entities/ConfigurationMode/mockdatafiles/apiConfigModeGetCustConfigMode-default.json +35 -0
  84. package/entities/ConfigurationMode/mockdatafiles/apiConfigModeGetDeviceConfigMode-default.json +21 -0
  85. package/entities/ConfigurationMode/mockdatafiles/apiConfigModeGetDeviceSerialsConfigMode-default.json +13 -0
  86. package/entities/ConfigurationMode/mockdatafiles/apiConfigModeGetGroupConfigMode-default.json +17 -0
  87. package/entities/ConfigurationMode/schema.json +25 -0
  88. package/entities/DenylistClients/action.json +65 -0
  89. package/entities/DenylistClients/mockdatafiles/apiBlacklistClientGetBlacklistClients-default.json +13 -0
  90. package/entities/DenylistClients/schema.json +21 -0
  91. package/entities/Devices/action.json +191 -0
  92. package/entities/Devices/mockdatafiles/apiDevicesGetDevicesTemplateDetails-default.json +13 -0
  93. package/entities/Devices/mockdatafiles/apiDevicesGetGroupsTemplateDetails-default.json +13 -0
  94. package/entities/Devices/mockdatafiles/apiDevicesGetHashTemplateDetails-default.json +13 -0
  95. package/entities/Devices/schema.json +27 -0
  96. package/entities/Events/action.json +46 -0
  97. package/entities/Events/schema.json +130 -0
  98. package/entities/Gateway/action.json +318 -0
  99. package/entities/Gateway/schema.json +99 -0
  100. package/entities/Groups/action.json +290 -0
  101. package/entities/Groups/mockdatafiles/apiGroupsGetGroups-default.json +54 -0
  102. package/entities/Groups/mockdatafiles/apiGroupsGetGroupsProperties-default.json +224 -0
  103. package/entities/Groups/mockdatafiles/apiGroupsGetGroupsTemplateData-default.json +11 -0
  104. package/entities/Groups/mockdatafiles/apiGroupsGetGroupsV2-default.json +11 -0
  105. package/entities/Groups/schema.json +32 -0
  106. package/entities/Installers/action.json +24 -0
  107. package/entities/Installers/schema.json +19 -0
  108. package/entities/Label/action.json +228 -0
  109. package/entities/Label/schema.json +62 -0
  110. package/entities/MMMD/action.json +24 -0
  111. package/entities/MMMD/schema.json +19 -0
  112. package/entities/MSPTemplates/action.json +250 -0
  113. package/entities/MSPTemplates/mockdatafiles/apiTemplatesGetEndCustomerTemplates-default.json +23 -0
  114. package/entities/MSPTemplates/mockdatafiles/apiTemplatesGetMspCustomerTemplates-default.json +65 -0
  115. package/entities/MSPTemplates/mockdatafiles/apiTemplatesGetMspTmplDifferCustsGroups-default.json +110 -0
  116. package/entities/MSPTemplates/mockdatafiles/apiTemplatesGetMspTmplEndCustDifferGroups-default.json +13 -0
  117. package/entities/MSPTemplates/schema.json +30 -0
  118. package/entities/MobilityController/action.json +191 -0
  119. package/entities/MobilityController/schema.json +71 -0
  120. package/entities/NBUIGroupConfiguration/action.json +45 -0
  121. package/entities/NBUIGroupConfiguration/mockdatafiles/apiNbUiGroupConfigGetGroupCountry-default.json +3 -0
  122. package/entities/NBUIGroupConfiguration/schema.json +20 -0
  123. package/entities/Network/action.json +67 -0
  124. package/entities/Network/schema.json +76 -0
  125. package/entities/PreProvisionedGroup/action.json +44 -0
  126. package/entities/PreProvisionedGroup/schema.json +20 -0
  127. package/entities/SaveCommit/action.json +126 -0
  128. package/entities/SaveCommit/mockdatafiles/apiSaveCommitGetDeviceSerialsAutoCommitState-default.json +17 -0
  129. package/entities/SaveCommit/mockdatafiles/apiSaveCommitGetGroupsAutoCommitState-default.json +29 -0
  130. package/entities/SaveCommit/schema.json +24 -0
  131. package/entities/Site/action.json +186 -0
  132. package/entities/Site/schema.json +49 -0
  133. package/entities/Sites/action.json +24 -0
  134. package/entities/Sites/schema.json +19 -0
  135. package/entities/Swarm/action.json +88 -0
  136. package/entities/Swarm/schema.json +88 -0
  137. package/entities/SwarmConfig/action.json +86 -0
  138. package/entities/SwarmConfig/mockdatafiles/apiSwarmConfigGetSwarmConfig-default.json +4 -0
  139. package/entities/SwarmConfig/mockdatafiles/apiSwarmConfigGetSwarmConfigV2-default.json +7 -0
  140. package/entities/SwarmConfig/schema.json +22 -0
  141. package/entities/Switch/action.json +548 -0
  142. package/entities/Switch/schema.json +198 -0
  143. package/entities/Templates/action.json +106 -0
  144. package/entities/Templates/mockdatafiles/apiTemplatesGetTemplates-default.json +37 -0
  145. package/entities/Templates/schema.json +23 -0
  146. package/entities/VPN/action.json +45 -0
  147. package/entities/VPN/schema.json +31 -0
  148. package/entities/Variables/action.json +186 -0
  149. package/entities/Variables/mockdatafiles/apiDevicesGetDeviceTemplateVariables-default.json +10 -0
  150. package/entities/Variables/schema.json +27 -0
  151. package/entities/VariablesFirewall/action.json +126 -0
  152. package/entities/VariablesFirewall/schema.json +24 -0
  153. package/entities/WLANConfiguration/action.json +579 -0
  154. package/entities/WLANConfiguration/schema.json +46 -0
  155. package/error.json +190 -0
  156. package/package.json +86 -0
  157. package/pronghorn.json +20904 -0
  158. package/propertiesDecorators.json +14 -0
  159. package/propertiesSchema.json +1248 -0
  160. package/refs?service=git-upload-pack +0 -0
  161. package/report/aruba_central_monitoring.json +14224 -0
  162. package/report/creationReport.json +850 -0
  163. package/sampleProperties.json +195 -0
  164. package/test/integration/adapterTestBasicGet.js +83 -0
  165. package/test/integration/adapterTestConnectivity.js +93 -0
  166. package/test/integration/adapterTestIntegration.js +7773 -0
  167. package/test/unit/adapterBaseTestUnit.js +949 -0
  168. package/test/unit/adapterTestUnit.js +10516 -0
  169. package/updatePackage.zip +0 -0
  170. package/utils/adapterInfo.js +206 -0
  171. package/utils/addAuth.js +94 -0
  172. package/utils/artifactize.js +146 -0
  173. package/utils/basicGet.js +50 -0
  174. package/utils/checkMigrate.js +63 -0
  175. package/utils/entitiesToDB.js +178 -0
  176. package/utils/findPath.js +74 -0
  177. package/utils/methodDocumentor.js +225 -0
  178. package/utils/modify.js +154 -0
  179. package/utils/packModificationScript.js +35 -0
  180. package/utils/patches2bundledDeps.js +90 -0
  181. package/utils/pre-commit.sh +32 -0
  182. package/utils/removeHooks.js +20 -0
  183. package/utils/setup.js +33 -0
  184. package/utils/tbScript.js +246 -0
  185. package/utils/tbUtils.js +490 -0
  186. package/utils/testRunner.js +298 -0
  187. package/utils/troubleshootingAdapter.js +195 -0
  188. package/versions.json +257 -0
  189. package/workflows/README.md +3 -0
@@ -0,0 +1,195 @@
1
+ {
2
+ "id": "Adapter-aruba_central",
3
+ "type": "ArubaCentral",
4
+ "properties": {
5
+ "host": "localhost",
6
+ "port": 443,
7
+ "base_path": "/",
8
+ "version": "",
9
+ "cache_location": "none",
10
+ "encode_pathvars": true,
11
+ "encode_queryvars": true,
12
+ "save_metric": false,
13
+ "stub": true,
14
+ "protocol": "https",
15
+ "authentication": {
16
+ "auth_method": "no_authentication",
17
+ "username": "username",
18
+ "password": "password",
19
+ "token": "token",
20
+ "token_timeout": 600000,
21
+ "token_cache": "local",
22
+ "invalid_token_error": 401,
23
+ "auth_field": "header.headers.Authorization",
24
+ "auth_field_format": "Basic {b64}{username}:{password}{/b64}",
25
+ "auth_logging": false,
26
+ "client_id": "",
27
+ "client_secret": "",
28
+ "grant_type": ""
29
+ },
30
+ "healthcheck": {
31
+ "type": "none",
32
+ "frequency": 60000,
33
+ "query_object": {}
34
+ },
35
+ "throttle": {
36
+ "throttle_enabled": false,
37
+ "number_pronghorns": 1,
38
+ "sync_async": "sync",
39
+ "max_in_queue": 1000,
40
+ "concurrent_max": 1,
41
+ "expire_timeout": 0,
42
+ "avg_runtime": 200,
43
+ "priorities": [
44
+ {
45
+ "value": 0,
46
+ "percent": 100
47
+ }
48
+ ]
49
+ },
50
+ "request": {
51
+ "number_redirects": 0,
52
+ "number_retries": 3,
53
+ "limit_retry_error": [
54
+ 0
55
+ ],
56
+ "failover_codes": [],
57
+ "attempt_timeout": 5000,
58
+ "global_request": {
59
+ "payload": {},
60
+ "uriOptions": {},
61
+ "addlHeaders": {},
62
+ "authData": {}
63
+ },
64
+ "healthcheck_on_timeout": true,
65
+ "return_raw": false,
66
+ "archiving": false,
67
+ "return_request": false
68
+ },
69
+ "proxy": {
70
+ "enabled": false,
71
+ "host": "",
72
+ "port": 1,
73
+ "protocol": "http",
74
+ "username": "",
75
+ "password": ""
76
+ },
77
+ "ssl": {
78
+ "ecdhCurve": "",
79
+ "enabled": false,
80
+ "accept_invalid_cert": false,
81
+ "ca_file": "",
82
+ "key_file": "",
83
+ "cert_file": "",
84
+ "secure_protocol": "",
85
+ "ciphers": ""
86
+ },
87
+ "mongo": {
88
+ "host": "",
89
+ "port": 0,
90
+ "database": "",
91
+ "username": "",
92
+ "password": "",
93
+ "replSet": "",
94
+ "db_ssl": {
95
+ "enabled": false,
96
+ "accept_invalid_cert": false,
97
+ "ca_file": "",
98
+ "key_file": "",
99
+ "cert_file": ""
100
+ }
101
+ },
102
+ "devicebroker": {
103
+ "getDevice": [
104
+ {
105
+ "path": "/get/devices/{id}",
106
+ "method": "GET",
107
+ "query": {},
108
+ "body": {},
109
+ "headers": {},
110
+ "handleFailure": "ignore",
111
+ "requestFields": {
112
+ "id": "name"
113
+ },
114
+ "responseDatakey": "",
115
+ "responseFields": {
116
+ "name": "host",
117
+ "ostype": "os",
118
+ "ostypePrefix": "system-",
119
+ "ipaddress": "attributes.ipaddr",
120
+ "port": "443"
121
+ }
122
+ }
123
+ ],
124
+ "getDevicesFiltered": [
125
+ {
126
+ "path": "/get/devices",
127
+ "method": "GET",
128
+ "query": {},
129
+ "body": {},
130
+ "headers": {},
131
+ "handleFailure": "ignore",
132
+ "requestFields": {},
133
+ "responseDatakey": "",
134
+ "responseFields": {
135
+ "name": "host",
136
+ "ostype": "os",
137
+ "ostypePrefix": "system-",
138
+ "ipaddress": "attributes.ipaddr",
139
+ "port": "443"
140
+ }
141
+ }
142
+ ],
143
+ "isAlive": [
144
+ {
145
+ "path": "/get/devices/{id}/status",
146
+ "method": "GET",
147
+ "query": {},
148
+ "body": {},
149
+ "headers": {},
150
+ "handleFailure": "ignore",
151
+ "requestFields": {
152
+ "id": "name"
153
+ },
154
+ "responseDatakey": "",
155
+ "responseFields": {
156
+ "status": "status",
157
+ "statusValue": "online"
158
+ }
159
+ }
160
+ ],
161
+ "getConfig": [
162
+ {
163
+ "path": "/get/devices/{id}/configPart1",
164
+ "method": "GET",
165
+ "query": {},
166
+ "body": {},
167
+ "headers": {},
168
+ "handleFailure": "ignore",
169
+ "requestFields": {
170
+ "id": "name"
171
+ },
172
+ "responseDatakey": "",
173
+ "responseFields": {}
174
+ }
175
+ ],
176
+ "getCount": [
177
+ {
178
+ "path": "/get/devices",
179
+ "method": "GET",
180
+ "query": {},
181
+ "body": {},
182
+ "headers": {},
183
+ "handleFailure": "ignore",
184
+ "requestFields": {},
185
+ "responseDatakey": "",
186
+ "responseFields": {}
187
+ }
188
+ ]
189
+ }
190
+ },
191
+ "groups": [],
192
+ "brokers": [],
193
+ "logLevel": "none",
194
+ "timeout": 120000
195
+ }
@@ -0,0 +1,83 @@
1
+ /* @copyright Itential, LLC 2020 */
2
+
3
+ /* global describe context before after */
4
+ /* eslint global-require: warn */
5
+ /* eslint no-unused-vars: warn */
6
+ /* eslint import/no-extraneous-dependencies: warn */
7
+ /* eslint import/no-dynamic-require: warn */
8
+ /* eslint import/no-unresolved: warn */
9
+
10
+ const mocha = require('mocha');
11
+ const path = require('path');
12
+ const assert = require('assert');
13
+ const itParam = require('mocha-param');
14
+
15
+ const utils = require('../../utils/tbUtils');
16
+ const basicGet = require('../../utils/basicGet');
17
+ const { name } = require('../../package.json');
18
+ const { methods } = require('../../pronghorn.json');
19
+
20
+ const getPronghornProps = (iapDir) => {
21
+ console.log('Retrieving properties.json file...');
22
+ const rawProps = require(path.join(iapDir, 'properties.json'));
23
+ console.log('Decrypting properties...');
24
+ const pronghornProps = utils.decryptProperties(rawProps, iapDir);
25
+ console.log('Found properties.\n');
26
+ return pronghornProps;
27
+ };
28
+
29
+ let a;
30
+
31
+ describe('[integration] Adapter BasicGET Test', () => {
32
+ context('Testing GET calls without query parameters', () => {
33
+ before(async () => {
34
+ const iapDir = path.join(__dirname, '../../../../../');
35
+ if (!utils.areWeUnderIAPinstallationDirectory()) {
36
+ const sampleProperties = require('../../sampleProperties.json');
37
+ const adapter = { properties: sampleProperties };
38
+ a = basicGet.getAdapterInstance(adapter);
39
+ } else {
40
+ const pronghornProps = getPronghornProps(iapDir);
41
+ console.log('Connecting to Database...');
42
+ const database = await basicGet.connect(pronghornProps);
43
+ console.log('Connection established.');
44
+ const adapter = await database.collection(utils.SERVICE_CONFIGS_COLLECTION).findOne(
45
+ { model: name }
46
+ );
47
+ a = basicGet.getAdapterInstance(adapter);
48
+ }
49
+ });
50
+
51
+ after((done) => {
52
+ done();
53
+ });
54
+
55
+ const basicGets = methods.filter((method) => (method.route.verb === 'GET' && method.input.length === 0));
56
+ if (basicGets.length === 0) {
57
+ console.log('No non-parameter GET calls found.');
58
+ process.exit(0);
59
+ }
60
+ const functionNames = basicGets.map((g) => g.name);
61
+ const request = function request(f, ad) {
62
+ return new Promise((resolve, reject) => {
63
+ const getRespCode = (resp) => {
64
+ if (resp) {
65
+ if (resp.metrics.code !== 200) {
66
+ console.log('\x1b[31m', `Testing ${f} \nResponseCode: ${resp.metrics.code}`);
67
+ }
68
+ resolve(resp.metrics.code);
69
+ } else {
70
+ console.log('\x1b[31m', `call ${f} results in failure`);
71
+ reject(new Error(`${f} failed`));
72
+ }
73
+ };
74
+ ad[f](getRespCode, console.log);
75
+ });
76
+ };
77
+
78
+ itParam('GET call should return 200', functionNames, (fname) => {
79
+ console.log(`\t ${fname}`);
80
+ return request(fname, a).then((result) => assert.equal(result, 200));
81
+ });
82
+ });
83
+ });
@@ -0,0 +1,93 @@
1
+ /* @copyright Itential, LLC 2020 */
2
+
3
+ /* global describe it context before after */
4
+ /* eslint no-unused-vars: warn */
5
+
6
+ const mocha = require('mocha');
7
+ const assert = require('assert');
8
+ const diagnostics = require('network-diagnostics');
9
+
10
+ let host;
11
+ process.argv.forEach((val) => {
12
+ if (val.indexOf('--HOST') === 0) {
13
+ [, host] = val.split('=');
14
+ }
15
+ });
16
+
17
+ describe('[integration] Adapter Test', () => {
18
+ context(`Testing network connection on ${host}`, () => {
19
+ before(() => {
20
+ diagnostics.setTestURL(host);
21
+ });
22
+
23
+ after((done) => {
24
+ done();
25
+ });
26
+
27
+ 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
+ });
36
+ });
37
+
38
+ 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
+ });
47
+ });
48
+
49
+ it('Support HTTP on port 80', (done) => {
50
+ diagnostics.haveHTTP((result) => {
51
+ try {
52
+ assert.equal(result, true);
53
+ done();
54
+ } catch (error) {
55
+ done(error);
56
+ }
57
+ });
58
+ });
59
+
60
+ it('Support HTTPS on port 443', (done) => {
61
+ diagnostics.haveHTTPS((result) => {
62
+ try {
63
+ assert.equal(result, true);
64
+ done();
65
+ } catch (error) {
66
+ done(error);
67
+ }
68
+ });
69
+ });
70
+
71
+ 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
+ });
80
+ });
81
+
82
+ 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
+ });
91
+ });
92
+ });
93
+ });