@itentialopensource/adapter-microsoft_office365 0.1.1 → 0.2.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.
- package/AUTH.md +41 -0
- package/BROKER.md +199 -0
- package/CALLS.md +222 -0
- package/CHANGELOG.md +8 -1
- package/CODE_OF_CONDUCT.md +12 -17
- package/CONTRIBUTING.md +3 -148
- package/ENHANCE.md +69 -0
- package/PROPERTIES.md +641 -0
- package/README.md +235 -576
- package/SUMMARY.md +9 -0
- package/SYSTEMINFO.md +20 -0
- package/TROUBLESHOOT.md +47 -0
- package/adapter.js +391 -263
- package/adapterBase.js +854 -408
- package/changelogs/changelog.md +9 -0
- package/entities/.generic/action.json +110 -5
- package/entities/.generic/schema.json +6 -1
- package/error.json +6 -0
- package/metadata.json +57 -0
- package/package.json +28 -22
- package/pronghorn.json +691 -88
- package/propertiesDecorators.json +14 -0
- package/propertiesSchema.json +829 -8
- package/refs?service=git-upload-pack +0 -0
- package/report/adapter-openapi.json +509 -0
- package/report/adapter-openapi.yaml +349 -0
- package/report/adapterInfo.json +10 -0
- package/report/updateReport1691511327831.json +120 -0
- package/report/updateReport1692202817366.json +120 -0
- package/report/updateReport1694463941759.json +120 -0
- package/report/updateReport1698421603077.json +120 -0
- package/sampleProperties.json +153 -3
- package/test/integration/adapterTestBasicGet.js +3 -5
- package/test/integration/adapterTestConnectivity.js +91 -42
- package/test/integration/adapterTestIntegration.js +166 -114
- package/test/unit/adapterBaseTestUnit.js +388 -308
- package/test/unit/adapterTestUnit.js +490 -252
- package/utils/adapterInfo.js +206 -0
- package/utils/addAuth.js +94 -0
- package/utils/artifactize.js +1 -1
- package/utils/basicGet.js +1 -14
- package/utils/checkMigrate.js +1 -1
- package/utils/entitiesToDB.js +179 -0
- package/utils/findPath.js +1 -1
- package/utils/methodDocumentor.js +273 -0
- package/utils/modify.js +14 -16
- package/utils/packModificationScript.js +1 -1
- package/utils/patches2bundledDeps.js +90 -0
- package/utils/pre-commit.sh +5 -0
- package/utils/removeHooks.js +20 -0
- package/utils/taskMover.js +309 -0
- package/utils/tbScript.js +129 -53
- package/utils/tbUtils.js +125 -25
- package/utils/testRunner.js +17 -17
- package/utils/troubleshootingAdapter.js +10 -31
- package/workflows/README.md +0 -3
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
// Set globals
|
|
4
4
|
/* global describe it log pronghornProps */
|
|
5
5
|
/* eslint no-unused-vars: warn */
|
|
6
|
+
/* eslint no-underscore-dangle: warn */
|
|
7
|
+
/* eslint import/no-dynamic-require:warn */
|
|
6
8
|
|
|
7
9
|
// include required items for testing & logging
|
|
8
10
|
const assert = require('assert');
|
|
9
11
|
const fs = require('fs');
|
|
10
|
-
const mocha = require('mocha');
|
|
11
12
|
const path = require('path');
|
|
13
|
+
const util = require('util');
|
|
14
|
+
const mocha = require('mocha');
|
|
12
15
|
const winston = require('winston');
|
|
13
16
|
const { expect } = require('chai');
|
|
14
17
|
const { use } = require('chai');
|
|
@@ -18,20 +21,33 @@ const anything = td.matchers.anything();
|
|
|
18
21
|
|
|
19
22
|
// stub and attemptTimeout are used throughout the code so set them here
|
|
20
23
|
let logLevel = 'none';
|
|
21
|
-
const stub = true;
|
|
22
24
|
const isRapidFail = false;
|
|
23
25
|
const isSaveMockData = false;
|
|
24
|
-
|
|
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;
|
|
25
35
|
|
|
26
36
|
// these variables can be changed to run in integrated mode so easier to set them here
|
|
27
37
|
// always check these in with bogus data!!!
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
+
if (samProps.request.attempt_timeout < 30000) {
|
|
47
|
+
samProps.request.attempt_timeout = 30000;
|
|
48
|
+
}
|
|
49
|
+
const attemptTimeout = samProps.request.attempt_timeout;
|
|
50
|
+
const { stub } = samProps;
|
|
35
51
|
|
|
36
52
|
// these are the adapter properties. You generally should not need to alter
|
|
37
53
|
// any of these after they are initially set up
|
|
@@ -41,101 +57,9 @@ global.pronghornProps = {
|
|
|
41
57
|
},
|
|
42
58
|
adapterProps: {
|
|
43
59
|
adapters: [{
|
|
44
|
-
id: 'Test-
|
|
60
|
+
id: 'Test-microsoft_office365',
|
|
45
61
|
type: 'MicrosoftOffice365',
|
|
46
|
-
properties:
|
|
47
|
-
host,
|
|
48
|
-
port,
|
|
49
|
-
base_path: '/v1.0',
|
|
50
|
-
version: '',
|
|
51
|
-
cache_location: 'none',
|
|
52
|
-
encode_pathvars: true,
|
|
53
|
-
save_metric: false,
|
|
54
|
-
stub,
|
|
55
|
-
protocol,
|
|
56
|
-
authentication: {
|
|
57
|
-
auth_method: 'no_authentication',
|
|
58
|
-
username,
|
|
59
|
-
password,
|
|
60
|
-
token: '',
|
|
61
|
-
invalid_token_error: 401,
|
|
62
|
-
token_timeout: -1,
|
|
63
|
-
token_cache: 'local',
|
|
64
|
-
auth_field: 'header.headers.Authorization',
|
|
65
|
-
auth_field_format: 'Basic {b64}{username}:{password}{/b64}',
|
|
66
|
-
auth_logging: false
|
|
67
|
-
},
|
|
68
|
-
healthcheck: {
|
|
69
|
-
type: 'none',
|
|
70
|
-
frequency: 60000,
|
|
71
|
-
query_object: {}
|
|
72
|
-
},
|
|
73
|
-
throttle: {
|
|
74
|
-
throttle_enabled: false,
|
|
75
|
-
number_pronghorns: 1,
|
|
76
|
-
sync_async: 'sync',
|
|
77
|
-
max_in_queue: 1000,
|
|
78
|
-
concurrent_max: 1,
|
|
79
|
-
expire_timeout: 0,
|
|
80
|
-
avg_runtime: 200,
|
|
81
|
-
priorities: [
|
|
82
|
-
{
|
|
83
|
-
value: 0,
|
|
84
|
-
percent: 100
|
|
85
|
-
}
|
|
86
|
-
]
|
|
87
|
-
},
|
|
88
|
-
request: {
|
|
89
|
-
number_redirects: 0,
|
|
90
|
-
number_retries: 3,
|
|
91
|
-
limit_retry_error: [0],
|
|
92
|
-
failover_codes: [],
|
|
93
|
-
attempt_timeout: attemptTimeout,
|
|
94
|
-
global_request: {
|
|
95
|
-
payload: {},
|
|
96
|
-
uriOptions: {},
|
|
97
|
-
addlHeaders: {},
|
|
98
|
-
authData: {}
|
|
99
|
-
},
|
|
100
|
-
healthcheck_on_timeout: true,
|
|
101
|
-
return_raw: true,
|
|
102
|
-
archiving: false,
|
|
103
|
-
return_request: false
|
|
104
|
-
},
|
|
105
|
-
proxy: {
|
|
106
|
-
enabled: false,
|
|
107
|
-
host: '',
|
|
108
|
-
port: 1,
|
|
109
|
-
protocol: 'http',
|
|
110
|
-
username: '',
|
|
111
|
-
password: ''
|
|
112
|
-
},
|
|
113
|
-
ssl: {
|
|
114
|
-
ecdhCurve: '',
|
|
115
|
-
enabled: sslenable,
|
|
116
|
-
accept_invalid_cert: sslinvalid,
|
|
117
|
-
ca_file: '',
|
|
118
|
-
key_file: '',
|
|
119
|
-
cert_file: '',
|
|
120
|
-
secure_protocol: '',
|
|
121
|
-
ciphers: ''
|
|
122
|
-
},
|
|
123
|
-
mongo: {
|
|
124
|
-
host: '',
|
|
125
|
-
port: 0,
|
|
126
|
-
database: '',
|
|
127
|
-
username: '',
|
|
128
|
-
password: '',
|
|
129
|
-
replSet: '',
|
|
130
|
-
db_ssl: {
|
|
131
|
-
enabled: false,
|
|
132
|
-
accept_invalid_cert: false,
|
|
133
|
-
ca_file: '',
|
|
134
|
-
key_file: '',
|
|
135
|
-
cert_file: ''
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
62
|
+
properties: samProps
|
|
139
63
|
}]
|
|
140
64
|
}
|
|
141
65
|
};
|
|
@@ -411,6 +335,134 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
411
335
|
}).timeout(attemptTimeout);
|
|
412
336
|
});
|
|
413
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-microsoft_office365-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-microsoft_office365-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
|
+
});
|
|
414
466
|
/*
|
|
415
467
|
-----------------------------------------------------------------------
|
|
416
468
|
-----------------------------------------------------------------------
|
|
@@ -428,7 +480,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
428
480
|
try {
|
|
429
481
|
if (stub) {
|
|
430
482
|
const displayE = 'Error 400 received on request';
|
|
431
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
483
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
432
484
|
} else {
|
|
433
485
|
runCommonAsserts(data, error);
|
|
434
486
|
}
|
|
@@ -453,7 +505,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
453
505
|
try {
|
|
454
506
|
if (stub) {
|
|
455
507
|
const displayE = 'Error 400 received on request';
|
|
456
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
508
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
457
509
|
} else {
|
|
458
510
|
runCommonAsserts(data, error);
|
|
459
511
|
}
|
|
@@ -480,7 +532,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
480
532
|
try {
|
|
481
533
|
if (stub) {
|
|
482
534
|
const displayE = 'Error 400 received on request';
|
|
483
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
535
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
484
536
|
} else {
|
|
485
537
|
runCommonAsserts(data, error);
|
|
486
538
|
}
|
|
@@ -505,7 +557,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
505
557
|
try {
|
|
506
558
|
if (stub) {
|
|
507
559
|
const displayE = 'Error 400 received on request';
|
|
508
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
560
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
509
561
|
} else {
|
|
510
562
|
runCommonAsserts(data, error);
|
|
511
563
|
}
|
|
@@ -531,7 +583,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
531
583
|
try {
|
|
532
584
|
if (stub) {
|
|
533
585
|
const displayE = 'Error 400 received on request';
|
|
534
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
586
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
535
587
|
} else {
|
|
536
588
|
runCommonAsserts(data, error);
|
|
537
589
|
}
|
|
@@ -556,7 +608,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
556
608
|
try {
|
|
557
609
|
if (stub) {
|
|
558
610
|
const displayE = 'Error 400 received on request';
|
|
559
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
611
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
560
612
|
} else {
|
|
561
613
|
runCommonAsserts(data, error);
|
|
562
614
|
}
|
|
@@ -583,7 +635,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
583
635
|
try {
|
|
584
636
|
if (stub) {
|
|
585
637
|
const displayE = 'Error 400 received on request';
|
|
586
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
638
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
587
639
|
} else {
|
|
588
640
|
runCommonAsserts(data, error);
|
|
589
641
|
}
|
|
@@ -608,7 +660,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
608
660
|
try {
|
|
609
661
|
if (stub) {
|
|
610
662
|
const displayE = 'Error 400 received on request';
|
|
611
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
663
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
612
664
|
} else {
|
|
613
665
|
runCommonAsserts(data, error);
|
|
614
666
|
}
|
|
@@ -633,7 +685,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
633
685
|
try {
|
|
634
686
|
if (stub) {
|
|
635
687
|
const displayE = 'Error 400 received on request';
|
|
636
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
688
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
637
689
|
} else {
|
|
638
690
|
runCommonAsserts(data, error);
|
|
639
691
|
}
|
|
@@ -658,7 +710,7 @@ describe('[integration] MicrosoftOffice365 Adapter Test', () => {
|
|
|
658
710
|
try {
|
|
659
711
|
if (stub) {
|
|
660
712
|
const displayE = 'Error 400 received on request';
|
|
661
|
-
runErrorAsserts(data, error, 'AD.500', 'Test-
|
|
713
|
+
runErrorAsserts(data, error, 'AD.500', 'Test-microsoft_office365-connectorRest-handleEndResponse', displayE);
|
|
662
714
|
} else {
|
|
663
715
|
runCommonAsserts(data, error);
|
|
664
716
|
}
|