teraslice 3.3.0 → 3.3.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 (108) hide show
  1. package/LICENSE +202 -0
  2. package/package.json +25 -28
  3. package/dist/src/interfaces.js +0 -12
  4. package/dist/src/lib/cluster/cluster_master.js +0 -246
  5. package/dist/src/lib/cluster/node_master.js +0 -355
  6. package/dist/src/lib/cluster/services/api.js +0 -663
  7. package/dist/src/lib/cluster/services/assets.js +0 -224
  8. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/index.js +0 -192
  9. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/interfaces.js +0 -2
  10. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8s.js +0 -419
  11. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sDeploymentResource.js +0 -60
  12. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sJobResource.js +0 -55
  13. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sResource.js +0 -357
  14. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sServiceResource.js +0 -37
  15. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sState.js +0 -60
  16. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/utils.js +0 -170
  17. package/dist/src/lib/cluster/services/cluster/backends/native/dispatch.js +0 -13
  18. package/dist/src/lib/cluster/services/cluster/backends/native/index.js +0 -526
  19. package/dist/src/lib/cluster/services/cluster/backends/native/messaging.js +0 -548
  20. package/dist/src/lib/cluster/services/cluster/backends/state-utils.js +0 -26
  21. package/dist/src/lib/cluster/services/cluster/index.js +0 -13
  22. package/dist/src/lib/cluster/services/execution.js +0 -435
  23. package/dist/src/lib/cluster/services/index.js +0 -6
  24. package/dist/src/lib/cluster/services/interfaces.js +0 -2
  25. package/dist/src/lib/cluster/services/jobs.js +0 -458
  26. package/dist/src/lib/config/default-sysconfig.js +0 -25
  27. package/dist/src/lib/config/index.js +0 -20
  28. package/dist/src/lib/config/schemas/system.js +0 -360
  29. package/dist/src/lib/storage/analytics.js +0 -86
  30. package/dist/src/lib/storage/assets.js +0 -401
  31. package/dist/src/lib/storage/backends/elasticsearch_store.js +0 -496
  32. package/dist/src/lib/storage/backends/mappings/analytics.js +0 -20
  33. package/dist/src/lib/storage/backends/mappings/asset.js +0 -32
  34. package/dist/src/lib/storage/backends/mappings/ex.js +0 -53
  35. package/dist/src/lib/storage/backends/mappings/job.js +0 -42
  36. package/dist/src/lib/storage/backends/mappings/state.js +0 -16
  37. package/dist/src/lib/storage/backends/s3_store.js +0 -237
  38. package/dist/src/lib/storage/execution.js +0 -302
  39. package/dist/src/lib/storage/index.js +0 -7
  40. package/dist/src/lib/storage/jobs.js +0 -81
  41. package/dist/src/lib/storage/state.js +0 -254
  42. package/dist/src/lib/utils/api_utils.js +0 -128
  43. package/dist/src/lib/utils/asset_utils.js +0 -94
  44. package/dist/src/lib/utils/date_utils.js +0 -52
  45. package/dist/src/lib/utils/encoding_utils.js +0 -27
  46. package/dist/src/lib/utils/events.js +0 -4
  47. package/dist/src/lib/utils/file_utils.js +0 -124
  48. package/dist/src/lib/utils/id_utils.js +0 -15
  49. package/dist/src/lib/utils/port_utils.js +0 -32
  50. package/dist/src/lib/workers/assets/index.js +0 -3
  51. package/dist/src/lib/workers/assets/loader-executable.js +0 -40
  52. package/dist/src/lib/workers/assets/loader.js +0 -73
  53. package/dist/src/lib/workers/assets/spawn.js +0 -55
  54. package/dist/src/lib/workers/context/execution-context.js +0 -12
  55. package/dist/src/lib/workers/context/terafoundation-context.js +0 -8
  56. package/dist/src/lib/workers/execution-controller/execution-analytics.js +0 -188
  57. package/dist/src/lib/workers/execution-controller/index.js +0 -1024
  58. package/dist/src/lib/workers/execution-controller/recovery.js +0 -151
  59. package/dist/src/lib/workers/execution-controller/scheduler.js +0 -390
  60. package/dist/src/lib/workers/execution-controller/slice-analytics.js +0 -96
  61. package/dist/src/lib/workers/helpers/job.js +0 -80
  62. package/dist/src/lib/workers/helpers/op-analytics.js +0 -22
  63. package/dist/src/lib/workers/helpers/terafoundation.js +0 -34
  64. package/dist/src/lib/workers/helpers/worker-shutdown.js +0 -147
  65. package/dist/src/lib/workers/metrics/index.js +0 -108
  66. package/dist/src/lib/workers/worker/index.js +0 -378
  67. package/dist/src/lib/workers/worker/slice.js +0 -122
  68. package/dist/test/config/schemas/system_schema-spec.js +0 -26
  69. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/k8s-v2-spec.js +0 -458
  70. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/k8sResource-v2-spec.js +0 -818
  71. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/k8sState-multicluster-v2-spec.js +0 -67
  72. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/k8sState-v2-spec.js +0 -84
  73. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/utils-v2-spec.js +0 -320
  74. package/dist/test/lib/cluster/services/cluster/backends/state-utils-spec.js +0 -37
  75. package/dist/test/node_master-spec.js +0 -194
  76. package/dist/test/services/api-spec.js +0 -79
  77. package/dist/test/services/assets-spec.js +0 -158
  78. package/dist/test/services/messaging-spec.js +0 -440
  79. package/dist/test/storage/assets_storage-spec.js +0 -95
  80. package/dist/test/storage/s3_store-spec.js +0 -149
  81. package/dist/test/test.config.js +0 -23
  82. package/dist/test/test.setup.js +0 -6
  83. package/dist/test/utils/api_utils-spec.js +0 -25
  84. package/dist/test/utils/asset_utils-spec.js +0 -141
  85. package/dist/test/utils/elastic_utils-spec.js +0 -25
  86. package/dist/test/workers/execution-controller/execution-controller-spec.js +0 -371
  87. package/dist/test/workers/execution-controller/execution-special-test-cases-spec.js +0 -519
  88. package/dist/test/workers/execution-controller/execution-test-cases-spec.js +0 -343
  89. package/dist/test/workers/execution-controller/recovery-spec.js +0 -160
  90. package/dist/test/workers/execution-controller/scheduler-spec.js +0 -249
  91. package/dist/test/workers/execution-controller/slice-analytics-spec.js +0 -121
  92. package/dist/test/workers/fixtures/ops/example-op/processor.js +0 -20
  93. package/dist/test/workers/fixtures/ops/example-op/schema.js +0 -19
  94. package/dist/test/workers/fixtures/ops/example-reader/fetcher.js +0 -20
  95. package/dist/test/workers/fixtures/ops/example-reader/schema.js +0 -41
  96. package/dist/test/workers/fixtures/ops/example-reader/slicer.js +0 -37
  97. package/dist/test/workers/fixtures/ops/new-op/processor.js +0 -29
  98. package/dist/test/workers/fixtures/ops/new-op/schema.js +0 -18
  99. package/dist/test/workers/fixtures/ops/new-reader/fetcher.js +0 -19
  100. package/dist/test/workers/fixtures/ops/new-reader/schema.js +0 -23
  101. package/dist/test/workers/fixtures/ops/new-reader/slicer.js +0 -13
  102. package/dist/test/workers/helpers/configs.js +0 -128
  103. package/dist/test/workers/helpers/execution-controller-helper.js +0 -49
  104. package/dist/test/workers/helpers/index.js +0 -5
  105. package/dist/test/workers/helpers/test-context.js +0 -210
  106. package/dist/test/workers/helpers/zip-directory.js +0 -25
  107. package/dist/test/workers/worker/slice-spec.js +0 -333
  108. package/dist/test/workers/worker/worker-spec.js +0 -356
@@ -1,458 +0,0 @@
1
- import { V1Deployment, V1Job, V1Pod, V1ReplicaSet, V1Service } from '@kubernetes/client-node';
2
- import nock from 'nock';
3
- import { debugLogger } from '@terascope/core-utils';
4
- import { K8s } from '../../../../../../../../src/lib/cluster/services/cluster/backends/kubernetesV2/k8s.js';
5
- const logger = debugLogger('k8s-v2-spec');
6
- const _url = 'http://mock.kube.api';
7
- // const _url = 'https://192.168.99.100:8443';
8
- describe('k8s', () => {
9
- let k8s;
10
- const job = Object.assign(new V1Job(), {
11
- apiVersion: '1.0.0',
12
- kind: 'Job',
13
- metadata: {
14
- labels: {
15
- 'app.kubernetes.io/name': 'teraslice'
16
- },
17
- name: 'testJob1',
18
- uid: 'uid1'
19
- },
20
- spec: {
21
- template: {
22
- metadata: {
23
- labels: {
24
- 'app.kubernetes.io/name': 'teraslice'
25
- },
26
- },
27
- spec: {
28
- containers: [{
29
- volumeMounts: []
30
- }],
31
- volumes: []
32
- }
33
- },
34
- selector: {
35
- matchLabels: {
36
- 'app.kubernetes.io/component': 'execution_controller'
37
- }
38
- }
39
- }
40
- });
41
- const testPod1 = Object.assign(new V1Pod(), {
42
- apiVersion: 'v1',
43
- kind: 'Pod',
44
- metadata: { name: 'testPod1' },
45
- status: {}
46
- });
47
- const testPod2 = Object.assign(new V1Pod(), {
48
- apiVersion: 'v1',
49
- kind: 'Pod',
50
- metadata: { name: 'testPod2' },
51
- status: {}
52
- });
53
- const service = Object.assign(new V1Service(), {
54
- kind: 'Service',
55
- metadata: {
56
- name: 'service1'
57
- },
58
- spec: {
59
- selector: {
60
- 'app.kubernetes.io/component': 'execution_controller'
61
- },
62
- ports: [
63
- { port: 45680 }
64
- ]
65
- }
66
- });
67
- const deployment = Object.assign(new V1Deployment(), {
68
- apiVersion: 'v1',
69
- kind: 'Deployment',
70
- metadata: {
71
- labels: {
72
- 'app.kubernetes.io/name': 'teraslice'
73
- },
74
- name: 'dname'
75
- },
76
- spec: {
77
- replicas: 5,
78
- template: {
79
- metadata: {
80
- labels: {
81
- 'app.kubernetes.io/name': 'teraslice'
82
- },
83
- },
84
- spec: {
85
- volumes: [{ name: 'volume1' }],
86
- containers: [{
87
- volumeMounts: [],
88
- }]
89
- }
90
- },
91
- selector: {}
92
- },
93
- status: {}
94
- });
95
- const replicaSet = Object.assign(new V1ReplicaSet(), {
96
- kind: 'ReplicaSet',
97
- metadata: {
98
- name: 'replicaset1'
99
- },
100
- status: {}
101
- });
102
- const status = {
103
- apiVersion: 'v1',
104
- details: {
105
- group: 'batch',
106
- kind: 'jobs',
107
- name: 'testJob1',
108
- uid: 'f29935a1-9f36-4104-a840-f6534d7f2ef8'
109
- },
110
- kind: 'Status',
111
- status: 'Success'
112
- };
113
- const apiException = {
114
- 'HTTP-Code': 400,
115
- Message: 'Unknown API Status Code!',
116
- Body: { statusCode: 400 },
117
- Headers: { 'content-type': 'application/json' }
118
- };
119
- beforeEach(async () => {
120
- nock(_url)
121
- .get('/api/v1/namespaces')
122
- .reply(200, {
123
- kind: 'NamespaceList',
124
- apiVersion: 'v1',
125
- metadata: {
126
- selfLink: '/api/v1/namespaces',
127
- resourceVersion: '1961000'
128
- },
129
- items: [
130
- {
131
- metadata: {
132
- name: 'default'
133
- }
134
- }
135
- ]
136
- });
137
- const clientConfig = {
138
- clusters: [{
139
- name: 'cluster',
140
- server: _url,
141
- skipTLSVerify: true
142
- }],
143
- users: [{
144
- name: 'admin',
145
- password: 'fakepass'
146
- }],
147
- contexts: [{
148
- name: 'context',
149
- user: 'user',
150
- cluster: 'cluster'
151
- }],
152
- currentContext: 'context'
153
- };
154
- k8s = new K8s(logger, clientConfig, null, 1, 1);
155
- });
156
- afterEach(() => {
157
- nock.cleanAll();
158
- });
159
- it('can get the "default" namespace', async () => {
160
- const namespaces = await k8s.getNamespaces();
161
- expect(namespaces.items[0].metadata?.name).toEqual('default');
162
- });
163
- describe('->list', () => {
164
- it('can get PodList', async () => {
165
- nock(_url)
166
- .get('/api/v1/namespaces/default/pods')
167
- .query({ labelSelector: 'app=teraslice' })
168
- .reply(200, {
169
- kind: 'PodList',
170
- items: [testPod1]
171
- });
172
- const pods = await k8s.list('app=teraslice', 'pods');
173
- expect(pods.kind).toEqual('PodList');
174
- });
175
- it('can get ServiceList', async () => {
176
- nock(_url)
177
- .get('/api/v1/namespaces/default/services')
178
- .query({ labelSelector: 'app=teraslice' })
179
- .reply(200, {
180
- kind: 'ServiceList',
181
- items: [service]
182
- });
183
- const pods = await k8s.list('app=teraslice', 'services');
184
- expect(pods.kind).toEqual('ServiceList');
185
- });
186
- it('can get DeploymentList', async () => {
187
- nock(_url)
188
- .get('/apis/apps/v1/namespaces/default/deployments')
189
- .query({ labelSelector: 'app=teraslice' })
190
- .reply(200, {
191
- kind: 'DeploymentList',
192
- items: [deployment]
193
- });
194
- const deployments = await k8s.list('app=teraslice', 'deployments');
195
- expect(deployments.kind).toEqual('DeploymentList');
196
- });
197
- it('can get JobList', async () => {
198
- nock(_url)
199
- .get('/apis/batch/v1/namespaces/default/jobs')
200
- .query({ labelSelector: 'app=teraslice' })
201
- .reply(200, {
202
- kind: 'JobList',
203
- items: [job]
204
- });
205
- const jobs = await k8s.list('app=teraslice', 'jobs');
206
- expect(jobs.kind).toEqual('JobList');
207
- });
208
- it('can get ReplicaSetList', async () => {
209
- nock(_url)
210
- .get('/apis/apps/v1/namespaces/default/replicasets')
211
- .query({ labelSelector: 'app=teraslice' })
212
- .reply(200, {
213
- kind: 'ReplicaSetList',
214
- items: [replicaSet]
215
- });
216
- const jobs = await k8s.list('app=teraslice', 'replicasets');
217
- expect(jobs.kind).toEqual('ReplicaSetList');
218
- });
219
- });
220
- describe('->nonEmptyList', () => {
221
- it('can get list with one item', async () => {
222
- nock(_url)
223
- .get('/apis/batch/v1/namespaces/default/jobs')
224
- .query({ labelSelector: 'app=teraslice' })
225
- .reply(200, {
226
- kind: 'JobList',
227
- items: [job]
228
- });
229
- const jobs = await k8s.nonEmptyJobList('app=teraslice');
230
- expect(jobs.items[0]).toEqual(job);
231
- });
232
- it('throws with an empty list', async () => {
233
- nock(_url)
234
- .get('/apis/batch/v1/namespaces/default/jobs')
235
- .query({ labelSelector: 'app=teraslice' })
236
- .reply(200, {
237
- kind: 'JobList',
238
- items: []
239
- });
240
- await expect(k8s.nonEmptyJobList('app=teraslice'))
241
- .rejects.toThrow('Teraslice job matching the following selector was not found: app=teraslice (retriable)');
242
- });
243
- });
244
- describe('->post', () => {
245
- it('can post a deployment', async () => {
246
- nock(_url, { encodedQueryParams: true })
247
- .post('/apis/apps/v1/namespaces/default/deployments')
248
- .reply(201, deployment);
249
- const response = await k8s.post(deployment);
250
- expect(response.kind).toEqual('Deployment');
251
- });
252
- it('can post a job', async () => {
253
- nock(_url, { encodedQueryParams: true })
254
- .post('/apis/batch/v1/namespaces/default/jobs')
255
- .reply(201, job);
256
- const response = await k8s.post(job);
257
- expect(response.kind).toEqual('Job');
258
- });
259
- it('can post a pod', async () => {
260
- nock(_url, { encodedQueryParams: true })
261
- .post('/api/v1/namespaces/default/pods')
262
- .reply(201, testPod1);
263
- const response = await k8s.post(testPod1);
264
- expect(response.kind).toEqual('Pod');
265
- });
266
- it('can post a replicaSet', async () => {
267
- nock(_url, { encodedQueryParams: true })
268
- .post('/apis/apps/v1/namespaces/default/replicasets')
269
- .reply(201, replicaSet);
270
- const response = await k8s.post(replicaSet);
271
- expect(response.kind).toEqual('ReplicaSet');
272
- });
273
- it('can post a service', async () => {
274
- nock(_url, { encodedQueryParams: true })
275
- .post('/api/v1/namespaces/default/services')
276
- .reply(201, service);
277
- const response = await k8s.post(service);
278
- expect(response.kind).toEqual('Service');
279
- });
280
- });
281
- describe('->patch', () => {
282
- it('can patch a deployment by name', async () => {
283
- nock(_url, { encodedQueryParams: true })
284
- .patch('/apis/apps/v1/namespaces/default/deployments/test1')
285
- .reply(200, {});
286
- const response = await k8s.patch({ name: 'testName' }, 'test1');
287
- expect(response).toEqual({});
288
- });
289
- it('will throw on a response code >= 400', async () => {
290
- nock(_url)
291
- .patch('/apis/apps/v1/namespaces/default/deployments/bad-response')
292
- .reply(400, apiException)
293
- .patch('/apis/apps/v1/namespaces/default/deployments/bad-response')
294
- .reply(400, apiException)
295
- .patch('/apis/apps/v1/namespaces/default/deployments/bad-response')
296
- .reply(400, apiException);
297
- await expect(k8s.patch({ name: 'bad-response' }, 'bad-response'))
298
- .rejects.toThrow('HTTP-Code: 400');
299
- });
300
- });
301
- describe('->delete', () => {
302
- it('will throw if name is undefined', async () => {
303
- await expect(k8s.delete(undefined, 'deployments'))
304
- .rejects.toThrow('Name of resource to delete must be specified. Received: "undefined".');
305
- });
306
- it('will throw if name is an empty string', async () => {
307
- await expect(k8s.delete('', 'deployments'))
308
- .rejects.toThrow('Name of resource to delete must be specified. Received: "".');
309
- });
310
- it('can delete a deployment by name', async () => {
311
- nock(_url)
312
- .delete('/apis/apps/v1/namespaces/default/deployments/test1')
313
- .reply(200, {});
314
- const response = await k8s.delete('test1', 'deployments');
315
- expect(response).toEqual({});
316
- });
317
- it('can delete a service by name', async () => {
318
- nock(_url)
319
- .delete('/api/v1/namespaces/default/services/test1')
320
- .reply(200, {});
321
- const response = await k8s.delete('test1', 'services');
322
- expect(response).toEqual({});
323
- });
324
- it('can delete a job by name', async () => {
325
- nock(_url)
326
- .delete('/apis/batch/v1/namespaces/default/jobs/test1')
327
- .reply(200, {});
328
- const response = await k8s.delete('test1', 'jobs');
329
- expect(response).toEqual({});
330
- });
331
- it('can delete a pod by name', async () => {
332
- nock(_url)
333
- .delete('/api/v1/namespaces/default/pods/test1')
334
- .reply(200, {});
335
- const response = await k8s.delete('test1', 'pods');
336
- expect(response).toEqual({});
337
- });
338
- it('can delete a replicaset by name', async () => {
339
- nock(_url)
340
- .delete('/apis/apps/v1/namespaces/default/replicasets/test1')
341
- .reply(200, {});
342
- const response = await k8s.delete('test1', 'replicasets');
343
- expect(response).toEqual({});
344
- });
345
- it('will throw on a response code >= 400, excluding 404', async () => {
346
- nock(_url)
347
- .delete('/api/v1/namespaces/default/pods/bad-response')
348
- .reply(400, apiException)
349
- .delete('/api/v1/namespaces/default/pods/bad-response')
350
- .reply(400, apiException)
351
- .delete('/api/v1/namespaces/default/pods/bad-response')
352
- .reply(400, apiException);
353
- await expect(k8s.delete('bad-response', 'pods'))
354
- .rejects.toThrow('HTTP-Code: 400');
355
- });
356
- it('will succeed on a 404 response code', async () => {
357
- const notFoundResponse = {
358
- kind: 'Status',
359
- apiVersion: 'v1',
360
- metadata: {},
361
- status: 'Failure',
362
- message: 'pods "non-existent" not found',
363
- reason: 'NotFound',
364
- details: { name: 'non-existent', kind: 'pods' },
365
- code: 404
366
- };
367
- nock(_url)
368
- .delete('/api/v1/namespaces/default/pods/non-existent')
369
- .reply(404, notFoundResponse);
370
- const response = await k8s.delete('non-existent', 'pods');
371
- expect(response).toEqual(notFoundResponse);
372
- });
373
- });
374
- describe('->_deleteObjByExId', () => {
375
- it('can delete a single object', async () => {
376
- nock(_url)
377
- .get('/apis/batch/v1/namespaces/default/jobs')
378
- .query({ labelSelector: /app\.kubernetes\.io\/component=execution_controller,teraslice\.terascope\.io\/exId=.*/ })
379
- .reply(200, {
380
- kind: 'JobList',
381
- items: [job]
382
- });
383
- nock(_url)
384
- .delete('/apis/batch/v1/namespaces/default/jobs/testJob1')
385
- .reply(200, status);
386
- const response = await k8s._deleteObjByExId('testJob1', 'execution_controller', 'jobs');
387
- expect(response).toEqual([expect.objectContaining(status)]);
388
- });
389
- it('can delete a multiple objects', async () => {
390
- nock(_url)
391
- .get('/api/v1/namespaces/default/pods')
392
- .query({ labelSelector: /app\.kubernetes\.io\/component=worker,teraslice\.terascope\.io\/exId=.*/ })
393
- .reply(200, {
394
- kind: 'PodList',
395
- items: [testPod1, testPod2]
396
- })
397
- .delete('/api/v1/namespaces/default/pods/testPod1')
398
- .reply(200, testPod1)
399
- .delete('/api/v1/namespaces/default/pods/testPod2')
400
- .reply(200, testPod2);
401
- const response = await k8s._deleteObjByExId('testPods', 'worker', 'pods');
402
- expect(response).toEqual([
403
- expect.objectContaining(testPod1),
404
- expect.objectContaining(testPod2)
405
- ]);
406
- });
407
- });
408
- describe('->scaleExecution', () => {
409
- let scope;
410
- beforeEach(() => {
411
- deployment.spec.replicas = 5;
412
- scope = nock(_url)
413
- .get('/apis/apps/v1/namespaces/default/deployments')
414
- .query({ labelSelector: /app\.kubernetes\.io\/component=worker,teraslice\.terascope\.io\/exId=.*/ })
415
- .reply(200, {
416
- kind: 'DeploymentList',
417
- items: [deployment]
418
- });
419
- });
420
- it('can set nodes to a deployment to 2', async () => {
421
- deployment.spec.replicas = 2;
422
- scope.patch('/apis/apps/v1/namespaces/default/deployments/dname', [
423
- {
424
- op: 'replace',
425
- path: '/spec/replicas',
426
- value: 2
427
- }
428
- ]).reply(200, deployment);
429
- const response = await k8s.scaleExecution('abcde1234', 2, 'set');
430
- expect(response.spec?.replicas).toEqual(2);
431
- });
432
- it('can add 2 nodes to a deployment with 5 to get 7', async () => {
433
- deployment.spec.replicas = 7;
434
- scope.patch('/apis/apps/v1/namespaces/default/deployments/dname', [
435
- {
436
- op: 'replace',
437
- path: '/spec/replicas',
438
- value: 7
439
- }
440
- ]).reply(200, deployment);
441
- const response = await k8s.scaleExecution('abcde1234', 2, 'add');
442
- expect(response.spec?.replicas).toEqual(7);
443
- });
444
- it('can remove 2 nodes from a deployment with 5 to get 3', async () => {
445
- deployment.spec.replicas = 3;
446
- scope.patch('/apis/apps/v1/namespaces/default/deployments/dname', [
447
- {
448
- op: 'replace',
449
- path: '/spec/replicas',
450
- value: 3
451
- }
452
- ]).reply(200, deployment);
453
- const response = await k8s.scaleExecution('abcde1234', 2, 'remove');
454
- expect(response.spec?.replicas).toEqual(3);
455
- });
456
- });
457
- });
458
- //# sourceMappingURL=k8s-v2-spec.js.map