@webex/webex-core 3.0.0-beta.4 → 3.0.0-beta.400
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/dist/config.js +1 -11
- package/dist/config.js.map +1 -1
- package/dist/credentials-config.js +44 -64
- package/dist/credentials-config.js.map +1 -1
- package/dist/index.js +0 -76
- package/dist/index.js.map +1 -1
- package/dist/interceptors/auth.js +22 -55
- package/dist/interceptors/auth.js.map +1 -1
- package/dist/interceptors/default-options.js +0 -20
- package/dist/interceptors/default-options.js.map +1 -1
- package/dist/interceptors/embargo.js +0 -21
- package/dist/interceptors/embargo.js.map +1 -1
- package/dist/interceptors/network-timing.js +2 -21
- package/dist/interceptors/network-timing.js.map +1 -1
- package/dist/interceptors/payload-transformer.js +2 -22
- package/dist/interceptors/payload-transformer.js.map +1 -1
- package/dist/interceptors/rate-limit.js +25 -57
- package/dist/interceptors/rate-limit.js.map +1 -1
- package/dist/interceptors/redirect.js +4 -33
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/interceptors/request-event.js +3 -30
- package/dist/interceptors/request-event.js.map +1 -1
- package/dist/interceptors/request-logger.js +1 -30
- package/dist/interceptors/request-logger.js.map +1 -1
- package/dist/interceptors/request-timing.js +3 -22
- package/dist/interceptors/request-timing.js.map +1 -1
- package/dist/interceptors/response-logger.js +2 -31
- package/dist/interceptors/response-logger.js.map +1 -1
- package/dist/interceptors/user-agent.js +2 -29
- package/dist/interceptors/user-agent.js.map +1 -1
- package/dist/interceptors/webex-tracking-id.js +5 -28
- package/dist/interceptors/webex-tracking-id.js.map +1 -1
- package/dist/interceptors/webex-user-agent.js +5 -38
- package/dist/interceptors/webex-user-agent.js.map +1 -1
- package/dist/lib/batcher.js +3 -51
- package/dist/lib/batcher.js.map +1 -1
- package/dist/lib/constants.js +14 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/credentials/credentials.js +98 -139
- package/dist/lib/credentials/credentials.js.map +1 -1
- package/dist/lib/credentials/grant-errors.js +0 -49
- package/dist/lib/credentials/grant-errors.js.map +1 -1
- package/dist/lib/credentials/index.js +1 -13
- package/dist/lib/credentials/index.js.map +1 -1
- package/dist/lib/credentials/scope.js +25 -14
- package/dist/lib/credentials/scope.js.map +1 -1
- package/dist/lib/credentials/token-collection.js +1 -7
- package/dist/lib/credentials/token-collection.js.map +1 -1
- package/dist/lib/credentials/token.js +42 -118
- package/dist/lib/credentials/token.js.map +1 -1
- package/dist/lib/page.js +13 -26
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/services/constants.js +0 -2
- package/dist/lib/services/constants.js.map +1 -1
- package/dist/lib/services/index.js +1 -28
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/interceptors/server-error.js +2 -23
- package/dist/lib/services/interceptors/server-error.js.map +1 -1
- package/dist/lib/services/interceptors/service.js +15 -35
- package/dist/lib/services/interceptors/service.js.map +1 -1
- package/dist/lib/services/metrics.js +0 -2
- package/dist/lib/services/metrics.js.map +1 -1
- package/dist/lib/services/service-catalog.js +12 -91
- package/dist/lib/services/service-catalog.js.map +1 -1
- package/dist/lib/services/service-fed-ramp.js +0 -2
- package/dist/lib/services/service-fed-ramp.js.map +1 -1
- package/dist/lib/services/service-host.js +47 -62
- package/dist/lib/services/service-host.js.map +1 -1
- package/dist/lib/services/service-registry.js +78 -90
- package/dist/lib/services/service-registry.js.map +1 -1
- package/dist/lib/services/service-state.js +3 -15
- package/dist/lib/services/service-state.js.map +1 -1
- package/dist/lib/services/service-url.js +4 -25
- package/dist/lib/services/service-url.js.map +1 -1
- package/dist/lib/services/services.js +135 -239
- package/dist/lib/services/services.js.map +1 -1
- package/dist/lib/stateless-webex-plugin.js +5 -28
- package/dist/lib/stateless-webex-plugin.js.map +1 -1
- package/dist/lib/storage/decorators.js +19 -62
- package/dist/lib/storage/decorators.js.map +1 -1
- package/dist/lib/storage/errors.js +0 -23
- package/dist/lib/storage/errors.js.map +1 -1
- package/dist/lib/storage/index.js +2 -16
- package/dist/lib/storage/index.js.map +1 -1
- package/dist/lib/storage/make-webex-plugin-store.js +11 -41
- package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
- package/dist/lib/storage/make-webex-store.js +8 -30
- package/dist/lib/storage/make-webex-store.js.map +1 -1
- package/dist/lib/storage/memory-store-adapter.js +1 -19
- package/dist/lib/storage/memory-store-adapter.js.map +1 -1
- package/dist/lib/webex-core-plugin-mixin.js +9 -29
- package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-http-error.js +1 -31
- package/dist/lib/webex-http-error.js.map +1 -1
- package/dist/lib/webex-internal-core-plugin-mixin.js +9 -29
- package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-plugin.js +6 -40
- package/dist/lib/webex-plugin.js.map +1 -1
- package/dist/plugins/logger.js +3 -17
- package/dist/plugins/logger.js.map +1 -1
- package/dist/webex-core.js +84 -203
- package/dist/webex-core.js.map +1 -1
- package/dist/webex-internal-core.js +0 -10
- package/dist/webex-internal-core.js.map +1 -1
- package/package.json +14 -14
- package/src/config.js +9 -11
- package/src/credentials-config.js +110 -72
- package/src/index.js +4 -14
- package/src/interceptors/auth.js +36 -37
- package/src/interceptors/default-options.js +0 -1
- package/src/interceptors/embargo.js +1 -1
- package/src/interceptors/payload-transformer.js +1 -2
- package/src/interceptors/rate-limit.js +8 -5
- package/src/interceptors/redirect.js +14 -8
- package/src/interceptors/request-event.js +4 -8
- package/src/interceptors/request-logger.js +8 -5
- package/src/interceptors/response-logger.js +11 -8
- package/src/interceptors/user-agent.js +1 -2
- package/src/interceptors/webex-user-agent.js +3 -9
- package/src/lib/batcher.js +70 -69
- package/src/lib/constants.js +6 -0
- package/src/lib/credentials/credentials.js +173 -141
- package/src/lib/credentials/grant-errors.js +6 -7
- package/src/lib/credentials/index.js +1 -4
- package/src/lib/credentials/scope.js +24 -8
- package/src/lib/credentials/token-collection.js +1 -1
- package/src/lib/credentials/token.js +95 -81
- package/src/lib/page.js +10 -11
- package/src/lib/services/constants.js +3 -13
- package/src/lib/services/index.js +2 -2
- package/src/lib/services/interceptors/server-error.js +12 -7
- package/src/lib/services/interceptors/service.js +7 -6
- package/src/lib/services/metrics.js +1 -1
- package/src/lib/services/service-catalog.js +112 -100
- package/src/lib/services/service-fed-ramp.js +1 -2
- package/src/lib/services/service-host.js +10 -17
- package/src/lib/services/service-registry.js +69 -96
- package/src/lib/services/service-state.js +4 -6
- package/src/lib/services/service-url.js +24 -23
- package/src/lib/services/services.js +272 -249
- package/src/lib/stateless-webex-plugin.js +4 -2
- package/src/lib/storage/decorators.js +68 -66
- package/src/lib/storage/index.js +4 -6
- package/src/lib/storage/make-webex-plugin-store.js +34 -21
- package/src/lib/storage/make-webex-store.js +6 -7
- package/src/lib/storage/memory-store-adapter.js +3 -3
- package/src/lib/webex-core-plugin-mixin.js +10 -7
- package/src/lib/webex-http-error.js +7 -8
- package/src/lib/webex-internal-core-plugin-mixin.js +9 -6
- package/src/lib/webex-plugin.js +41 -34
- package/src/plugins/logger.js +8 -3
- package/src/webex-core.js +198 -117
- package/src/webex-internal-core.js +15 -9
- package/test/integration/spec/credentials/credentials.js +26 -30
- package/test/integration/spec/credentials/token.js +36 -33
- package/test/integration/spec/services/service-catalog.js +177 -156
- package/test/integration/spec/services/services.js +313 -304
- package/test/integration/spec/webex-core.js +98 -86
- package/test/unit/spec/_setup.js +26 -18
- package/test/unit/spec/credentials/credentials.js +352 -162
- package/test/unit/spec/credentials/scope.js +80 -0
- package/test/unit/spec/credentials/token.js +105 -77
- package/test/unit/spec/interceptors/auth.js +294 -243
- package/test/unit/spec/interceptors/default-options.js +36 -24
- package/test/unit/spec/interceptors/embargo.js +32 -27
- package/test/unit/spec/interceptors/network-timing.js +2 -2
- package/test/unit/spec/interceptors/payload-transformer.js +61 -52
- package/test/unit/spec/interceptors/rate-limit.js +104 -75
- package/test/unit/spec/interceptors/redirect.js +22 -20
- package/test/unit/spec/interceptors/request-timing.js +18 -22
- package/test/unit/spec/interceptors/user-agent.js +28 -16
- package/test/unit/spec/interceptors/webex-tracking-id.js +14 -8
- package/test/unit/spec/interceptors/webex-user-agent.js +83 -37
- package/test/unit/spec/lib/batcher.js +36 -32
- package/test/unit/spec/lib/page.js +36 -32
- package/test/unit/spec/lib/webex-plugin.js +1 -1
- package/test/unit/spec/services/interceptors/server-error.js +67 -90
- package/test/unit/spec/services/interceptors/service.js +23 -28
- package/test/unit/spec/services/service-catalog.js +19 -27
- package/test/unit/spec/services/service-host.js +29 -26
- package/test/unit/spec/services/service-registry.js +128 -170
- package/test/unit/spec/services/service-state.js +13 -22
- package/test/unit/spec/services/service-url.js +24 -43
- package/test/unit/spec/services/services.js +147 -41
- package/test/unit/spec/storage/persist.js +6 -9
- package/test/unit/spec/storage/wait-for-value.js +22 -21
- package/test/unit/spec/webex-core.js +90 -57
- package/test/unit/spec/webex-internal-core.js +56 -31
|
@@ -11,57 +11,48 @@ describe('webex-core', () => {
|
|
|
11
11
|
|
|
12
12
|
describe('#constructor()', () => {
|
|
13
13
|
it('should create a collection of catalog states', () => {
|
|
14
|
-
assert.isTrue(
|
|
15
|
-
(catalog) => !!
|
|
16
|
-
)
|
|
14
|
+
assert.isTrue(
|
|
15
|
+
serviceConstants.SERVICE_CATALOGS.every((catalog) => !!serviceState[catalog])
|
|
16
|
+
);
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
it('should initialize states with false collecting values', () => {
|
|
20
|
-
assert.isTrue(
|
|
21
|
-
(
|
|
22
|
-
|
|
20
|
+
assert.isTrue(
|
|
21
|
+
serviceConstants.SERVICE_CATALOGS.every(
|
|
22
|
+
(catalog) => serviceState[catalog].collecting === false
|
|
23
|
+
)
|
|
24
|
+
);
|
|
23
25
|
});
|
|
24
26
|
});
|
|
25
27
|
|
|
26
28
|
describe('#setCollecting()', () => {
|
|
27
29
|
it('should set the collecting value of a catalog state to true', () => {
|
|
28
30
|
serviceState.setCollecting(serviceConstants.SERVICE_CATALOGS[0], true);
|
|
29
|
-
assert.isTrue(
|
|
30
|
-
serviceState[serviceConstants.SERVICE_CATALOGS[0]].collecting
|
|
31
|
-
);
|
|
31
|
+
assert.isTrue(serviceState[serviceConstants.SERVICE_CATALOGS[0]].collecting);
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
it('should set the collecting value of a catalog state to false', () => {
|
|
35
35
|
serviceState.setCollecting(serviceConstants.SERVICE_CATALOGS[0], false);
|
|
36
|
-
assert.isFalse(
|
|
37
|
-
serviceState[serviceConstants.SERVICE_CATALOGS[0]].collecting
|
|
38
|
-
);
|
|
36
|
+
assert.isFalse(serviceState[serviceConstants.SERVICE_CATALOGS[0]].collecting);
|
|
39
37
|
});
|
|
40
38
|
});
|
|
41
39
|
|
|
42
40
|
describe('#setReady()', () => {
|
|
43
41
|
it('should set the collecting value of a catalog state to true', () => {
|
|
44
42
|
serviceState.setReady(serviceConstants.SERVICE_CATALOGS[0], true);
|
|
45
|
-
assert.isTrue(
|
|
46
|
-
serviceState[serviceConstants.SERVICE_CATALOGS[0]].ready
|
|
47
|
-
);
|
|
43
|
+
assert.isTrue(serviceState[serviceConstants.SERVICE_CATALOGS[0]].ready);
|
|
48
44
|
});
|
|
49
45
|
|
|
50
46
|
it('should set the collecting value of a catalog state to false', () => {
|
|
51
47
|
serviceState.setReady(serviceConstants.SERVICE_CATALOGS[0], false);
|
|
52
|
-
assert.isFalse(
|
|
53
|
-
serviceState[serviceConstants.SERVICE_CATALOGS[0]].ready
|
|
54
|
-
);
|
|
48
|
+
assert.isFalse(serviceState[serviceConstants.SERVICE_CATALOGS[0]].ready);
|
|
55
49
|
});
|
|
56
50
|
});
|
|
57
51
|
|
|
58
52
|
describe('static methods', () => {
|
|
59
53
|
describe('#generateCatalogState()', () => {
|
|
60
54
|
it('returns an object with the correct keys', () => {
|
|
61
|
-
assert.containsAllKeys(
|
|
62
|
-
ServiceState.generateCatalogState(),
|
|
63
|
-
['collecting', 'ready']
|
|
64
|
-
);
|
|
55
|
+
assert.containsAllKeys(ServiceState.generateCatalogState(), ['collecting', 'ready']);
|
|
65
56
|
});
|
|
66
57
|
});
|
|
67
58
|
});
|
|
@@ -26,38 +26,38 @@ describe('webex-core', () => {
|
|
|
26
26
|
priority: 1,
|
|
27
27
|
ttl: -1,
|
|
28
28
|
id: '1',
|
|
29
|
-
homeCluster: false
|
|
29
|
+
homeCluster: false,
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
host: 'example-host-p2.com',
|
|
33
33
|
priority: 2,
|
|
34
34
|
ttl: -1,
|
|
35
35
|
id: '2',
|
|
36
|
-
homeCluster: false
|
|
36
|
+
homeCluster: false,
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
host: 'example-host-p3.com',
|
|
40
40
|
priority: 3,
|
|
41
41
|
ttl: -1,
|
|
42
42
|
id: '3',
|
|
43
|
-
homeCluster: true
|
|
43
|
+
homeCluster: true,
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
host: 'example-host-p4.com',
|
|
47
47
|
priority: 4,
|
|
48
48
|
ttl: -1,
|
|
49
49
|
id: '4',
|
|
50
|
-
homeCluster: true
|
|
50
|
+
homeCluster: true,
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
host: 'example-host-p5.com',
|
|
54
54
|
priority: 5,
|
|
55
55
|
ttl: -1,
|
|
56
56
|
id: '5',
|
|
57
|
-
homeCluster: true
|
|
58
|
-
}
|
|
57
|
+
homeCluster: true,
|
|
58
|
+
},
|
|
59
59
|
],
|
|
60
|
-
name: 'example'
|
|
60
|
+
name: 'example',
|
|
61
61
|
};
|
|
62
62
|
serviceUrl = new ServiceUrl({...template});
|
|
63
63
|
});
|
|
@@ -103,8 +103,7 @@ describe('webex-core', () => {
|
|
|
103
103
|
|
|
104
104
|
it('replaces the host of a pass in url', () => {
|
|
105
105
|
serviceUrl.hosts.forEach(({host}) => {
|
|
106
|
-
assert.include(serviceUrl._generateHostUrl(host),
|
|
107
|
-
`https://${host}/api/v1`);
|
|
106
|
+
assert.include(serviceUrl._generateHostUrl(host), `https://${host}/api/v1`);
|
|
108
107
|
});
|
|
109
108
|
});
|
|
110
109
|
});
|
|
@@ -120,8 +119,7 @@ describe('webex-core', () => {
|
|
|
120
119
|
const hostUrls = serviceUrl._getHostUrls();
|
|
121
120
|
|
|
122
121
|
hostUrls.forEach((hu, i) => {
|
|
123
|
-
assert.equal(hu.url,
|
|
124
|
-
serviceUrl._generateHostUrl(serviceUrl.hosts[i].host));
|
|
122
|
+
assert.equal(hu.url, serviceUrl._generateHostUrl(serviceUrl.hosts[i].host));
|
|
125
123
|
assert.equal(hu.priority, serviceUrl.hosts[i].priority);
|
|
126
124
|
});
|
|
127
125
|
});
|
|
@@ -132,9 +130,8 @@ describe('webex-core', () => {
|
|
|
132
130
|
|
|
133
131
|
beforeEach('get a high priority host manually', () => {
|
|
134
132
|
highPriorityHost = serviceUrl._generateHostUrl(
|
|
135
|
-
serviceUrl.hosts.reduce((o, c) => (
|
|
136
|
-
|
|
137
|
-
)).host
|
|
133
|
+
serviceUrl.hosts.reduce((o, c) => (o.priority > c.priority || !o.homeCluster ? c : o))
|
|
134
|
+
.host
|
|
138
135
|
);
|
|
139
136
|
});
|
|
140
137
|
|
|
@@ -143,22 +140,16 @@ describe('webex-core', () => {
|
|
|
143
140
|
});
|
|
144
141
|
|
|
145
142
|
it('should reset the hosts when all have failed', () => {
|
|
146
|
-
serviceUrl.hosts.forEach(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
);
|
|
143
|
+
serviceUrl.hosts.forEach((host) => {
|
|
144
|
+
/* eslint-disable-next-line no-param-reassign */
|
|
145
|
+
host.failed = true;
|
|
146
|
+
});
|
|
152
147
|
|
|
153
148
|
serviceUrl._getPriorityHostUrl();
|
|
154
149
|
|
|
155
|
-
const homeClusterUrls = serviceUrl.hosts.filter(
|
|
156
|
-
(host) => host.homeCluster
|
|
157
|
-
);
|
|
150
|
+
const homeClusterUrls = serviceUrl.hosts.filter((host) => host.homeCluster);
|
|
158
151
|
|
|
159
|
-
assert.isTrue(homeClusterUrls.every(
|
|
160
|
-
(host) => !host.failed
|
|
161
|
-
));
|
|
152
|
+
assert.isTrue(homeClusterUrls.every((host) => !host.failed));
|
|
162
153
|
});
|
|
163
154
|
});
|
|
164
155
|
|
|
@@ -175,9 +166,7 @@ describe('webex-core', () => {
|
|
|
175
166
|
it('marks a host as failed', () => {
|
|
176
167
|
serviceUrl.failHost(hostUrl);
|
|
177
168
|
|
|
178
|
-
const removedHost = serviceUrl.hosts.find(
|
|
179
|
-
(currentHost) => currentHost.host === host
|
|
180
|
-
);
|
|
169
|
+
const removedHost = serviceUrl.hosts.find((currentHost) => currentHost.host === host);
|
|
181
170
|
|
|
182
171
|
assert.isTrue(removedHost.failed);
|
|
183
172
|
});
|
|
@@ -202,9 +191,7 @@ describe('webex-core', () => {
|
|
|
202
191
|
});
|
|
203
192
|
|
|
204
193
|
it('returns false if hostUrl was not found', () => {
|
|
205
|
-
const removedHostResult = serviceUrl.failHost(
|
|
206
|
-
'https://someurl.com/api/vq'
|
|
207
|
-
);
|
|
194
|
+
const removedHostResult = serviceUrl.failHost('https://someurl.com/api/vq');
|
|
208
195
|
|
|
209
196
|
assert.isFalse(removedHostResult);
|
|
210
197
|
});
|
|
@@ -225,9 +212,7 @@ describe('webex-core', () => {
|
|
|
225
212
|
const hpUrl = serviceUrl.get(true);
|
|
226
213
|
|
|
227
214
|
assert.equal(hpUrl, serviceUrl._getPriorityHostUrl());
|
|
228
|
-
assert.isDefined(serviceUrl.hosts.find(
|
|
229
|
-
(hostObj) => hpUrl.includes(hostObj.host)
|
|
230
|
-
));
|
|
215
|
+
assert.isDefined(serviceUrl.hosts.find((hostObj) => hpUrl.includes(hostObj.host)));
|
|
231
216
|
});
|
|
232
217
|
|
|
233
218
|
describe('when a clusterId is provided', () => {
|
|
@@ -239,10 +224,8 @@ describe('webex-core', () => {
|
|
|
239
224
|
beforeEach(() => {
|
|
240
225
|
hosts = serviceUrl.hosts.filter((host) => host.homeCluster);
|
|
241
226
|
|
|
242
|
-
highPriorityHost = hosts.reduce(
|
|
243
|
-
|
|
244
|
-
current :
|
|
245
|
-
next)
|
|
227
|
+
highPriorityHost = hosts.reduce((current, next) =>
|
|
228
|
+
current.priority <= next.priority ? current : next
|
|
246
229
|
).host;
|
|
247
230
|
|
|
248
231
|
url = serviceUrl.get(true, hosts[0].id);
|
|
@@ -257,10 +240,8 @@ describe('webex-core', () => {
|
|
|
257
240
|
beforeEach(() => {
|
|
258
241
|
hosts = serviceUrl.hosts.filter((host) => !host.homeCluster);
|
|
259
242
|
|
|
260
|
-
highPriorityHost = hosts.reduce(
|
|
261
|
-
|
|
262
|
-
current :
|
|
263
|
-
next)
|
|
243
|
+
highPriorityHost = hosts.reduce((current, next) =>
|
|
244
|
+
current.priority <= next.priority ? current : next
|
|
264
245
|
).host;
|
|
265
246
|
|
|
266
247
|
url = serviceUrl.get(true, hosts[0].id);
|
|
@@ -6,6 +6,7 @@ import {assert} from '@webex/test-helper-chai';
|
|
|
6
6
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
7
7
|
import sinon from 'sinon';
|
|
8
8
|
import {Services, ServiceRegistry, ServiceState} from '@webex/webex-core';
|
|
9
|
+
import {NewMetrics} from '@webex/internal-plugin-metrics';
|
|
9
10
|
|
|
10
11
|
/* eslint-disable no-underscore-dangle */
|
|
11
12
|
describe('webex-core', () => {
|
|
@@ -17,8 +18,9 @@ describe('webex-core', () => {
|
|
|
17
18
|
before('initialize webex', () => {
|
|
18
19
|
webex = new MockWebex({
|
|
19
20
|
children: {
|
|
20
|
-
services: Services
|
|
21
|
-
|
|
21
|
+
services: Services,
|
|
22
|
+
newMetrics: NewMetrics,
|
|
23
|
+
},
|
|
22
24
|
});
|
|
23
25
|
services = webex.internal.services;
|
|
24
26
|
catalog = services._getCatalog();
|
|
@@ -93,10 +95,9 @@ describe('webex-core', () => {
|
|
|
93
95
|
it('successfully resolves with undefined if fetch request failed', () => {
|
|
94
96
|
webex.request = sinon.stub().returns(Promise.reject());
|
|
95
97
|
|
|
96
|
-
return assert.isFulfilled(services.fetchClientRegionInfo())
|
|
97
|
-
.
|
|
98
|
-
|
|
99
|
-
});
|
|
98
|
+
return assert.isFulfilled(services.fetchClientRegionInfo()).then((r) => {
|
|
99
|
+
assert.isUndefined(r);
|
|
100
|
+
});
|
|
100
101
|
});
|
|
101
102
|
});
|
|
102
103
|
|
|
@@ -111,7 +112,7 @@ describe('webex-core', () => {
|
|
|
111
112
|
assert.calledWith(webex.request, {
|
|
112
113
|
method: 'GET',
|
|
113
114
|
service: 'hydra',
|
|
114
|
-
resource: 'meetingPreferences'
|
|
115
|
+
resource: 'meetingPreferences',
|
|
115
116
|
});
|
|
116
117
|
assert.isDefined(res);
|
|
117
118
|
assert.equal(res, userPreferences);
|
|
@@ -125,12 +126,66 @@ describe('webex-core', () => {
|
|
|
125
126
|
assert.calledWith(webex.request, {
|
|
126
127
|
method: 'GET',
|
|
127
128
|
service: 'hydra',
|
|
128
|
-
resource: 'meetingPreferences'
|
|
129
|
+
resource: 'meetingPreferences',
|
|
129
130
|
});
|
|
130
131
|
assert.isUndefined(res);
|
|
131
132
|
});
|
|
132
133
|
});
|
|
133
134
|
|
|
135
|
+
describe('#_fetchNewServiceHostmap()', () => {
|
|
136
|
+
|
|
137
|
+
beforeEach(() => {
|
|
138
|
+
sinon.spy(webex.internal.newMetrics.callDiagnosticLatencies, 'measureLatency');
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
afterEach(() => {
|
|
142
|
+
sinon.restore();
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it('checks service request resolves', async () => {
|
|
146
|
+
const mapResponse = 'map response';
|
|
147
|
+
|
|
148
|
+
sinon.stub(services, '_formatReceivedHostmap').resolves(mapResponse);
|
|
149
|
+
sinon.stub(services, 'request').resolves({});
|
|
150
|
+
|
|
151
|
+
const mapResult = await services._fetchNewServiceHostmap({from: 'limited'});
|
|
152
|
+
|
|
153
|
+
assert.deepEqual(mapResult, mapResponse);
|
|
154
|
+
|
|
155
|
+
assert.calledOnceWithExactly(services.request, {
|
|
156
|
+
method: 'GET',
|
|
157
|
+
service: 'u2c',
|
|
158
|
+
resource: '/limited/catalog',
|
|
159
|
+
qs: {format: 'hostmap'}
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
assert.calledOnceWithExactly(webex.internal.newMetrics.callDiagnosticLatencies.measureLatency, sinon.match.func, 'internal.get.u2c.time');
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('checks service request rejects', async () => {
|
|
166
|
+
const error = new Error('some error');
|
|
167
|
+
|
|
168
|
+
sinon.spy(services, '_formatReceivedHostmap');
|
|
169
|
+
sinon.stub(services, 'request').rejects(error);
|
|
170
|
+
|
|
171
|
+
const promise = services._fetchNewServiceHostmap({from: 'limited'});
|
|
172
|
+
const rejectedValue = await assert.isRejected(promise);
|
|
173
|
+
|
|
174
|
+
assert.deepEqual(rejectedValue, error);
|
|
175
|
+
|
|
176
|
+
assert.notCalled(services._formatReceivedHostmap);
|
|
177
|
+
|
|
178
|
+
assert.calledOnceWithExactly(services.request, {
|
|
179
|
+
method: 'GET',
|
|
180
|
+
service: 'u2c',
|
|
181
|
+
resource: '/limited/catalog',
|
|
182
|
+
qs: {format: 'hostmap'}
|
|
183
|
+
}
|
|
184
|
+
);
|
|
185
|
+
assert.calledOnceWithExactly(webex.internal.newMetrics.callDiagnosticLatencies.measureLatency, sinon.match.func, 'internal.get.u2c.time');
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
|
|
134
189
|
describe('#_formatReceivedHostmap()', () => {
|
|
135
190
|
let serviceHostmap;
|
|
136
191
|
let formattedHM;
|
|
@@ -141,78 +196,117 @@ describe('webex-core', () => {
|
|
|
141
196
|
'example-a': 'https://example-a.com/api/v1',
|
|
142
197
|
'example-b': 'https://example-b.com/api/v1',
|
|
143
198
|
'example-c': 'https://example-c.com/api/v1',
|
|
144
|
-
'example-d': 'https://example-d.com/api/v1'
|
|
199
|
+
'example-d': 'https://example-d.com/api/v1',
|
|
145
200
|
},
|
|
146
201
|
hostCatalog: {
|
|
147
202
|
'example-a.com': [
|
|
148
203
|
{
|
|
149
|
-
host: 'example-a-1.com',
|
|
204
|
+
host: 'example-a-1.com',
|
|
205
|
+
ttl: -1,
|
|
206
|
+
priority: 5,
|
|
207
|
+
id: '0:0:0:example-a',
|
|
150
208
|
},
|
|
151
209
|
{
|
|
152
|
-
host: 'example-a-2.com',
|
|
210
|
+
host: 'example-a-2.com',
|
|
211
|
+
ttl: -1,
|
|
212
|
+
priority: 3,
|
|
213
|
+
id: '0:0:0:example-a',
|
|
153
214
|
},
|
|
154
215
|
{
|
|
155
|
-
host: 'example-a-3.com',
|
|
156
|
-
|
|
216
|
+
host: 'example-a-3.com',
|
|
217
|
+
ttl: -1,
|
|
218
|
+
priority: 1,
|
|
219
|
+
id: '0:0:0:example-a-x',
|
|
220
|
+
},
|
|
157
221
|
],
|
|
158
222
|
'example-b.com': [
|
|
159
223
|
{
|
|
160
|
-
host: 'example-b-1.com',
|
|
224
|
+
host: 'example-b-1.com',
|
|
225
|
+
ttl: -1,
|
|
226
|
+
priority: 5,
|
|
227
|
+
id: '0:0:0:example-b',
|
|
161
228
|
},
|
|
162
229
|
{
|
|
163
|
-
host: 'example-b-2.com',
|
|
230
|
+
host: 'example-b-2.com',
|
|
231
|
+
ttl: -1,
|
|
232
|
+
priority: 3,
|
|
233
|
+
id: '0:0:0:example-b',
|
|
164
234
|
},
|
|
165
235
|
{
|
|
166
|
-
host: 'example-b-3.com',
|
|
167
|
-
|
|
236
|
+
host: 'example-b-3.com',
|
|
237
|
+
ttl: -1,
|
|
238
|
+
priority: 1,
|
|
239
|
+
id: '0:0:0:example-b-x',
|
|
240
|
+
},
|
|
168
241
|
],
|
|
169
242
|
'example-c.com': [
|
|
170
243
|
{
|
|
171
|
-
host: 'example-c-1.com',
|
|
244
|
+
host: 'example-c-1.com',
|
|
245
|
+
ttl: -1,
|
|
246
|
+
priority: 5,
|
|
247
|
+
id: '0:0:0:example-c',
|
|
172
248
|
},
|
|
173
249
|
{
|
|
174
|
-
host: 'example-c-2.com',
|
|
250
|
+
host: 'example-c-2.com',
|
|
251
|
+
ttl: -1,
|
|
252
|
+
priority: 3,
|
|
253
|
+
id: '0:0:0:example-c',
|
|
175
254
|
},
|
|
176
255
|
{
|
|
177
|
-
host: 'example-c-3.com',
|
|
178
|
-
|
|
256
|
+
host: 'example-c-3.com',
|
|
257
|
+
ttl: -1,
|
|
258
|
+
priority: 1,
|
|
259
|
+
id: '0:0:0:example-c-x',
|
|
260
|
+
},
|
|
179
261
|
],
|
|
180
262
|
'example-d.com': [
|
|
181
263
|
{
|
|
182
|
-
host: 'example-c-1.com',
|
|
264
|
+
host: 'example-c-1.com',
|
|
265
|
+
ttl: -1,
|
|
266
|
+
priority: 5,
|
|
267
|
+
id: '0:0:0:example-d',
|
|
183
268
|
},
|
|
184
269
|
{
|
|
185
|
-
host: 'example-c-2.com',
|
|
270
|
+
host: 'example-c-2.com',
|
|
271
|
+
ttl: -1,
|
|
272
|
+
priority: 3,
|
|
273
|
+
id: '0:0:0:example-d',
|
|
186
274
|
},
|
|
187
275
|
{
|
|
188
|
-
host: 'example-c-3.com',
|
|
189
|
-
|
|
190
|
-
|
|
276
|
+
host: 'example-c-3.com',
|
|
277
|
+
ttl: -1,
|
|
278
|
+
priority: 1,
|
|
279
|
+
id: '0:0:0:example-d-x',
|
|
280
|
+
},
|
|
281
|
+
],
|
|
191
282
|
},
|
|
192
|
-
format: 'hostmap'
|
|
283
|
+
format: 'hostmap',
|
|
193
284
|
};
|
|
194
285
|
});
|
|
195
286
|
|
|
196
287
|
it('creates a formmatted host map that contains the same amount of entries as the original received hostmap', () => {
|
|
197
288
|
formattedHM = services._formatReceivedHostmap(serviceHostmap);
|
|
198
289
|
|
|
199
|
-
assert(
|
|
200
|
-
formattedHM.length,
|
|
290
|
+
assert(
|
|
291
|
+
Object.keys(serviceHostmap.serviceLinks).length >= formattedHM.length,
|
|
292
|
+
'length is not equal or less than'
|
|
293
|
+
);
|
|
201
294
|
});
|
|
202
295
|
|
|
203
296
|
it.skip('creates an array of equal or less length of hostMap', () => {
|
|
204
297
|
formattedHM = services._formatReceivedHostmap(serviceHostmap);
|
|
205
298
|
|
|
206
|
-
assert(
|
|
207
|
-
formattedHM.length,
|
|
299
|
+
assert(
|
|
300
|
+
Object.keys(serviceHostmap.hostCatalog).length >= formattedHM.length,
|
|
301
|
+
'length is not equal or less than'
|
|
302
|
+
);
|
|
208
303
|
});
|
|
209
304
|
|
|
210
305
|
it('creates an array with matching url data', () => {
|
|
211
306
|
formattedHM = services._formatReceivedHostmap(serviceHostmap);
|
|
212
307
|
|
|
213
308
|
formattedHM.forEach((entry) => {
|
|
214
|
-
assert.equal(serviceHostmap.serviceLinks[entry.name],
|
|
215
|
-
entry.defaultUrl);
|
|
309
|
+
assert.equal(serviceHostmap.serviceLinks[entry.name], entry.defaultUrl);
|
|
216
310
|
});
|
|
217
311
|
});
|
|
218
312
|
|
|
@@ -221,8 +315,11 @@ describe('webex-core', () => {
|
|
|
221
315
|
|
|
222
316
|
formattedHM.forEach((service) => {
|
|
223
317
|
service.hosts.forEach((host) => {
|
|
224
|
-
assert.hasAllKeys(
|
|
225
|
-
|
|
318
|
+
assert.hasAllKeys(
|
|
319
|
+
host,
|
|
320
|
+
['homeCluster', 'host', 'id', 'priority', 'ttl'],
|
|
321
|
+
`${service.name} has an invalid host shape`
|
|
322
|
+
);
|
|
226
323
|
});
|
|
227
324
|
});
|
|
228
325
|
});
|
|
@@ -231,8 +328,9 @@ describe('webex-core', () => {
|
|
|
231
328
|
formattedHM = services._formatReceivedHostmap(serviceHostmap);
|
|
232
329
|
|
|
233
330
|
formattedHM.forEach((service) => {
|
|
234
|
-
const foundServiceKey = Object.keys(serviceHostmap.serviceLinks)
|
|
235
|
-
|
|
331
|
+
const foundServiceKey = Object.keys(serviceHostmap.serviceLinks).find(
|
|
332
|
+
(key) => service.name === key
|
|
333
|
+
);
|
|
236
334
|
|
|
237
335
|
assert.isDefined(foundServiceKey);
|
|
238
336
|
});
|
|
@@ -251,8 +349,16 @@ describe('webex-core', () => {
|
|
|
251
349
|
it('creates an array with matching names', () => {
|
|
252
350
|
formattedHM = services._formatReceivedHostmap(serviceHostmap);
|
|
253
351
|
|
|
254
|
-
assert.hasAllKeys(
|
|
255
|
-
|
|
352
|
+
assert.hasAllKeys(
|
|
353
|
+
serviceHostmap.serviceLinks,
|
|
354
|
+
formattedHM.map((item) => item.name)
|
|
355
|
+
);
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
it('has hostCatalog updated', () => {
|
|
359
|
+
services._formatReceivedHostmap(serviceHostmap);
|
|
360
|
+
|
|
361
|
+
assert.deepStrictEqual(services._hostCatalog, serviceHostmap.hostCatalog);
|
|
256
362
|
});
|
|
257
363
|
});
|
|
258
364
|
|
|
@@ -260,13 +366,13 @@ describe('webex-core', () => {
|
|
|
260
366
|
// updateCredentialsConfig must remove `/` if exist. so expected serviceList must be.
|
|
261
367
|
const expectedServiceList = {
|
|
262
368
|
idbroker: 'https://idbroker.webex.com',
|
|
263
|
-
identity: 'https://identity.webex.com'
|
|
369
|
+
identity: 'https://identity.webex.com',
|
|
264
370
|
};
|
|
265
371
|
|
|
266
372
|
beforeEach('get services list', async () => {
|
|
267
373
|
const servicesList = {
|
|
268
374
|
idbroker: 'https://idbroker.webex.com',
|
|
269
|
-
identity: 'https://identity.webex.com/'
|
|
375
|
+
identity: 'https://identity.webex.com/',
|
|
270
376
|
};
|
|
271
377
|
|
|
272
378
|
catalog.list = sinon.stub().returns(servicesList);
|
|
@@ -6,10 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import {assert} from '@webex/test-helper-chai';
|
|
8
8
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
9
|
-
import {
|
|
10
|
-
persist,
|
|
11
|
-
WebexPlugin
|
|
12
|
-
} from '@webex/webex-core';
|
|
9
|
+
import {persist, WebexPlugin} from '@webex/webex-core';
|
|
13
10
|
|
|
14
11
|
describe('webex-core', () => {
|
|
15
12
|
describe('@persist', () => {
|
|
@@ -18,8 +15,8 @@ describe('webex-core', () => {
|
|
|
18
15
|
props: {
|
|
19
16
|
test: {
|
|
20
17
|
default: false,
|
|
21
|
-
type: 'boolean'
|
|
22
|
-
}
|
|
18
|
+
type: 'boolean',
|
|
19
|
+
},
|
|
23
20
|
},
|
|
24
21
|
|
|
25
22
|
namespace: 'MockChild',
|
|
@@ -27,13 +24,13 @@ describe('webex-core', () => {
|
|
|
27
24
|
@persist('@')
|
|
28
25
|
initialize(...args) {
|
|
29
26
|
return Reflect.apply(WebexPlugin.prototype.initialize, this, args);
|
|
30
|
-
}
|
|
27
|
+
},
|
|
31
28
|
});
|
|
32
29
|
|
|
33
30
|
const webex = new MockWebex({
|
|
34
31
|
children: {
|
|
35
|
-
mockChild: MockChild
|
|
36
|
-
}
|
|
32
|
+
mockChild: MockChild,
|
|
33
|
+
},
|
|
37
34
|
});
|
|
38
35
|
|
|
39
36
|
webex.internal.mockChild.test = true;
|
|
@@ -7,11 +7,7 @@
|
|
|
7
7
|
import {assert} from '@webex/test-helper-chai';
|
|
8
8
|
import sinon from 'sinon';
|
|
9
9
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
10
|
-
import {
|
|
11
|
-
persist,
|
|
12
|
-
WebexPlugin,
|
|
13
|
-
waitForValue
|
|
14
|
-
} from '@webex/webex-core';
|
|
10
|
+
import {persist, WebexPlugin, waitForValue} from '@webex/webex-core';
|
|
15
11
|
|
|
16
12
|
describe('webex-core', () => {
|
|
17
13
|
describe('@waitForValue', () => {
|
|
@@ -20,8 +16,8 @@ describe('webex-core', () => {
|
|
|
20
16
|
props: {
|
|
21
17
|
test: {
|
|
22
18
|
default: false,
|
|
23
|
-
type: 'boolean'
|
|
24
|
-
}
|
|
19
|
+
type: 'boolean',
|
|
20
|
+
},
|
|
25
21
|
},
|
|
26
22
|
|
|
27
23
|
namespace: 'MockChild',
|
|
@@ -33,29 +29,34 @@ describe('webex-core', () => {
|
|
|
33
29
|
|
|
34
30
|
@waitForValue('@')
|
|
35
31
|
testMethod() {
|
|
36
|
-
return this.webex.request()
|
|
37
|
-
.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
32
|
+
return this.webex.request().then(() => {
|
|
33
|
+
this.test = true;
|
|
34
|
+
});
|
|
35
|
+
},
|
|
41
36
|
});
|
|
42
37
|
|
|
43
38
|
const webex = new MockWebex({
|
|
44
39
|
children: {
|
|
45
|
-
mockChild: MockChild
|
|
46
|
-
}
|
|
40
|
+
mockChild: MockChild,
|
|
41
|
+
},
|
|
47
42
|
});
|
|
48
43
|
|
|
49
44
|
let resolve;
|
|
50
45
|
|
|
51
|
-
sinon.stub(webex.boundedStorage, 'get').returns(
|
|
46
|
+
sinon.stub(webex.boundedStorage, 'get').returns(
|
|
47
|
+
new Promise((r) => {
|
|
48
|
+
resolve = r;
|
|
49
|
+
})
|
|
50
|
+
);
|
|
52
51
|
|
|
53
|
-
webex.request.returns(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
webex.request.returns(
|
|
53
|
+
Promise.resolve({
|
|
54
|
+
body: {
|
|
55
|
+
access_token: 'fake token @waitForValue',
|
|
56
|
+
token_type: 'Bearer',
|
|
57
|
+
},
|
|
58
|
+
})
|
|
59
|
+
);
|
|
59
60
|
|
|
60
61
|
const promise = webex.internal.mockChild.testMethod();
|
|
61
62
|
|