@webda/async 4.0.0-beta.2 → 4.0.0-beta.4

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 (62) hide show
  1. package/README.md +89 -4
  2. package/lib/{models.d.ts → asyncaction.model.d.ts} +75 -37
  3. package/lib/asyncaction.model.d.ts.map +1 -0
  4. package/lib/asyncaction.model.js +269 -0
  5. package/lib/asyncaction.model.js.map +1 -0
  6. package/lib/index.d.ts +6 -4
  7. package/lib/index.d.ts.map +1 -1
  8. package/lib/index.js +6 -4
  9. package/lib/index.js.map +1 -1
  10. package/lib/services/asyncevents.service.d.ts +154 -0
  11. package/lib/services/asyncevents.service.d.ts.map +1 -0
  12. package/lib/services/asyncevents.service.js +219 -0
  13. package/lib/services/asyncevents.service.js.map +1 -0
  14. package/lib/services/{asyncjobservice.d.ts → asyncjobservice.service.d.ts} +78 -61
  15. package/lib/services/asyncjobservice.service.d.ts.map +1 -0
  16. package/lib/services/asyncjobservice.service.js +584 -0
  17. package/lib/services/asyncjobservice.service.js.map +1 -0
  18. package/lib/services/{localrunner.d.ts → localrunner.service.d.ts} +24 -10
  19. package/lib/services/localrunner.service.d.ts.map +1 -0
  20. package/lib/services/localrunner.service.js +87 -0
  21. package/lib/services/localrunner.service.js.map +1 -0
  22. package/lib/services/{runner.d.ts → runner.service.d.ts} +17 -12
  23. package/lib/services/runner.service.d.ts.map +1 -0
  24. package/lib/services/{runner.js → runner.service.js} +16 -13
  25. package/lib/services/runner.service.js.map +1 -0
  26. package/lib/services/servicerunner.service.d.ts +105 -0
  27. package/lib/services/servicerunner.service.d.ts.map +1 -0
  28. package/lib/services/servicerunner.service.js +131 -0
  29. package/lib/services/servicerunner.service.js.map +1 -0
  30. package/package.json +32 -42
  31. package/webda.module.json +1925 -890
  32. package/lib/models.d.ts.map +0 -1
  33. package/lib/models.js +0 -179
  34. package/lib/models.js.map +0 -1
  35. package/lib/models.spec.d.ts +0 -7
  36. package/lib/models.spec.d.ts.map +0 -1
  37. package/lib/models.spec.js +0 -64
  38. package/lib/models.spec.js.map +0 -1
  39. package/lib/services/asyncjobservice.d.ts.map +0 -1
  40. package/lib/services/asyncjobservice.js +0 -469
  41. package/lib/services/asyncjobservice.js.map +0 -1
  42. package/lib/services/asyncjobservice.spec.d.ts +0 -2
  43. package/lib/services/asyncjobservice.spec.d.ts.map +0 -1
  44. package/lib/services/asyncjobservice.spec.js +0 -561
  45. package/lib/services/asyncjobservice.spec.js.map +0 -1
  46. package/lib/services/localrunner.d.ts.map +0 -1
  47. package/lib/services/localrunner.js +0 -70
  48. package/lib/services/localrunner.js.map +0 -1
  49. package/lib/services/localrunner.spec.d.ts +0 -2
  50. package/lib/services/localrunner.spec.d.ts.map +0 -1
  51. package/lib/services/localrunner.spec.js +0 -113
  52. package/lib/services/localrunner.spec.js.map +0 -1
  53. package/lib/services/runner.d.ts.map +0 -1
  54. package/lib/services/runner.js.map +0 -1
  55. package/lib/services/servicerunner.d.ts +0 -68
  56. package/lib/services/servicerunner.d.ts.map +0 -1
  57. package/lib/services/servicerunner.js +0 -97
  58. package/lib/services/servicerunner.js.map +0 -1
  59. package/lib/services/servicerunner.spec.d.ts +0 -2
  60. package/lib/services/servicerunner.spec.d.ts.map +0 -1
  61. package/lib/services/servicerunner.spec.js +0 -111
  62. package/lib/services/servicerunner.spec.js.map +0 -1
@@ -1,561 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { suite, test } from "@testdeck/mocha";
8
- import { CancelablePromise, Cron, HttpContext, OperationContext, Service, WebdaError } from "@webda/core";
9
- import { WebdaTest } from "@webda/core/lib/test.js";
10
- import * as assert from "assert";
11
- import axios from "axios";
12
- import * as crypto from "crypto";
13
- import * as sinon from "sinon";
14
- import { stub } from "sinon";
15
- import AsyncAction, { AsyncOperationAction, AsyncWebdaAction } from "../models.js";
16
- import AsyncJobService from "./asyncjobservice.js";
17
- import { Runner } from "./runner.js";
18
- class FakeService extends Service {
19
- cron1() { }
20
- cron2() { }
21
- scheduled() { }
22
- }
23
- __decorate([
24
- Cron("0 4 * * *")
25
- ], FakeService.prototype, "cron1", null);
26
- __decorate([
27
- Cron("0 8 * * *")
28
- ], FakeService.prototype, "cron2", null);
29
- let AsyncJobServiceTest = class AsyncJobServiceTest extends WebdaTest {
30
- async worker() {
31
- const service = this.getValidService();
32
- // @ts-ignore
33
- service.queue = {
34
- // @ts-ignore
35
- consume: async (callback) => { }
36
- };
37
- await service.worker();
38
- service.getParameters().includeSchedulerInWorker = true;
39
- // @ts-ignore
40
- service.queue = {
41
- // @ts-ignore
42
- consume: async (callback) => {
43
- return new CancelablePromise();
44
- }
45
- };
46
- await service.worker().cancel();
47
- // @ts-ignore
48
- service.runners = [];
49
- assert.rejects(() => service.worker(), /AsyncJobService.worker requires runners/);
50
- }
51
- /**
52
- * Return a good initialized service
53
- * @returns
54
- */
55
- getValidService() {
56
- const service = new AsyncJobService(this.webda, "async", {
57
- queue: "AsyncQueue",
58
- runners: ["LocalRunner"]
59
- });
60
- service.resolve();
61
- return service;
62
- }
63
- async resolve() {
64
- this.service = new AsyncJobService(this.webda, "async", {});
65
- assert.throws(() => this.service.resolve(), /requires a valid queue/);
66
- this.service = new AsyncJobService(this.webda, "async", { queue: "AsyncQueue" });
67
- this.service.resolve();
68
- // @ts-ignore
69
- assert.strictEqual(this.service.runners.length, 0);
70
- this.service = new AsyncJobService(this.webda, "async", {
71
- queue: "AsyncQueue",
72
- runners: ["unknown"],
73
- url: "/cov"
74
- });
75
- this.service.resolve();
76
- // Just for COV
77
- const stubAction = stub(this.service, "launchAction").callsFake(async () => new AsyncAction());
78
- await this.service.launchAsAsyncAction("myService", "myMethod", 2);
79
- assert.deepStrictEqual(stubAction.getCall(0).args, [new AsyncWebdaAction("myService", "myMethod", 2)]);
80
- assert.strictEqual(new AsyncAction().isInternal(), false);
81
- assert.strictEqual(new AsyncWebdaAction().isInternal(), true);
82
- assert.strictEqual(new AsyncOperationAction("ope.id", new OperationContext(this.webda)).isInternal(), true);
83
- await this.service.executeAsAsyncAction("myService", "myMethod", 2);
84
- }
85
- async checkRequest() {
86
- this.service = this.getValidService();
87
- // @ts-ignore
88
- const action = await AsyncAction.create({ uuid: "plop", __secretKey: "plop" });
89
- const jobTime = Date.now().toString();
90
- const jobHash = crypto.createHmac(AsyncJobService.HMAC_ALGO, action.__secretKey).update(jobTime).digest("hex");
91
- const context = await this.newContext();
92
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {}));
93
- assert.strictEqual(await this.service.checkRequest(context), false);
94
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {
95
- "X-Job-Id": "plop"
96
- }));
97
- assert.strictEqual(await this.service.checkRequest(context), false);
98
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {
99
- "X-Job-Id": "plop",
100
- "X-Job-Time": jobTime
101
- }));
102
- assert.strictEqual(await this.service.checkRequest(context), false);
103
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {
104
- "X-Job-Id": "plop",
105
- "X-Job-Time": jobTime,
106
- "X-Job-Hash": jobHash
107
- }));
108
- assert.strictEqual(await this.service.checkRequest(context), false);
109
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/status", "https", 443, {
110
- "X-Job-Id": "plop",
111
- "X-Job-Time": jobTime,
112
- "X-Job-Hash": jobHash
113
- }));
114
- assert.strictEqual(await this.service.checkRequest(context), false);
115
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/async/status", "https", 443, {
116
- "X-Job-Id": "plop",
117
- "X-Job-Time": jobTime,
118
- "X-Job-Hash": jobHash
119
- }));
120
- assert.strictEqual(await this.service.checkRequest(context), true);
121
- }
122
- async launchAction() {
123
- const service = this.getValidService();
124
- // @ts-ignore protected field
125
- const stub = sinon.stub(service, "handleEvent");
126
- await service.launchAction(new AsyncAction());
127
- const actions = (await AsyncAction.query()).results;
128
- assert.strictEqual(actions.length, 1);
129
- assert.strictEqual(await service.getService("AsyncQueue").size(), 1);
130
- assert.strictEqual(actions[0].status, "QUEUED");
131
- assert.strictEqual(actions[0].type, "AsyncAction");
132
- assert.notStrictEqual(actions[0].__secretKey, undefined);
133
- // @ts-ignore
134
- const msg = (await service.getService("AsyncQueue").receiveMessage()).shift().Message;
135
- assert.strictEqual(msg.type, actions[0].type);
136
- assert.strictEqual(msg.uuid, actions[0].getUuid());
137
- assert.strictEqual(msg.__secretKey, actions[0].__secretKey);
138
- assert.strictEqual(stub.callCount, 0);
139
- service.getParameters().localLaunch = true;
140
- await service.launchAction(new AsyncAction());
141
- assert.strictEqual(stub.callCount, 1);
142
- // Try to launch an existing action
143
- const action = await service.getService("AsyncJobs").create({});
144
- await service.launchAction(action);
145
- }
146
- async statusHook() {
147
- const service = this.getValidService();
148
- service.getParameters().logsLimit = 100;
149
- const context = await this.newContext();
150
- // @ts-ignore
151
- const hook = service.statusHook.bind(service);
152
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {
153
- "X-Job-Time": "12345",
154
- "X-Job-Hash": "myhash"
155
- }));
156
- await assert.rejects(() => hook(context), WebdaError.NotFound);
157
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {
158
- "X-Job-Time": "12345",
159
- "X-Job-Hash": "myhash",
160
- "X-Job-Id": "plop"
161
- }));
162
- await assert.rejects(() => hook(context), WebdaError.NotFound);
163
- await AsyncAction.create({
164
- uuid: "plop",
165
- __secretKey: "mine",
166
- logs: ["prev1"],
167
- job: {
168
- param1: "plop"
169
- }
170
- });
171
- await assert.rejects(() => hook(context), WebdaError.Forbidden);
172
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {
173
- "X-Job-Time": "12345",
174
- "X-Job-Hash": crypto.createHmac("sha256", "mine2").update("12345").digest("hex"),
175
- "X-Job-Id": "plop"
176
- }));
177
- await assert.rejects(() => hook(context), WebdaError.Forbidden);
178
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {
179
- "X-Job-Time": "12345",
180
- "X-Job-Hash": crypto.createHmac("sha256", "mine").update("12345").digest("hex"),
181
- "X-Job-Id": "plop"
182
- }));
183
- context.getHttpContext().setBody({
184
- logs: ["line 1", "line 2"],
185
- status: "RUNNING"
186
- });
187
- await hook(context);
188
- const now = Date.now().toString();
189
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {
190
- "X-Job-Time": now,
191
- "X-Job-Hash": crypto.createHmac("sha256", "mine").update(now).digest("hex"),
192
- "X-Job-Id": "plop"
193
- }));
194
- context.getHttpContext().setBody({
195
- statusDetails: {
196
- progress: 100
197
- }
198
- });
199
- await hook(context);
200
- const res = JSON.parse(context.getResponseBody());
201
- assert.strictEqual(res.job.param1, "plop");
202
- const logs = [];
203
- for (let i = 1; i < 1100; i++) {
204
- logs.push(`newline ${i}`);
205
- }
206
- context.setHttpContext(new HttpContext("test.webda.io", "GET", "/", "https", 443, {
207
- "X-Job-Time": "bouzouf",
208
- "X-Job-Hash": crypto.createHmac("sha256", "mine").update("bouzouf").digest("hex"),
209
- "X-Job-Id": "plop"
210
- }));
211
- context.getHttpContext().setBody({
212
- logs
213
- });
214
- await hook(context);
215
- assert.strictEqual(JSON.parse(context.getResponseBody())._lastJobUpdate - res._lastJobUpdate > 0, true);
216
- assert.strictEqual((await AsyncAction.ref("plop").get()).logs.length, 1000);
217
- }
218
- async handleEvent() {
219
- const service = this.getValidService();
220
- // @ts-ignore
221
- const handler = service.handleEvent.bind(service, { uuid: "plop", type: "Async", isInternal: () => false });
222
- const action = new AsyncAction();
223
- assert.strictEqual(action.__class.name, "AsyncAction");
224
- action.uuid = "plop";
225
- await AsyncAction.create(action);
226
- // @ts-ignore
227
- service.runners = [
228
- // @ts-ignore
229
- {
230
- handleType: () => true,
231
- launchAction: async () => ({ mocked: true })
232
- }
233
- ];
234
- await handler();
235
- assert.strictEqual((await AsyncAction.ref("plop").get()).status, "STARTING");
236
- // @ts-ignore
237
- service.runners = [
238
- // @ts-ignore
239
- {
240
- handleType: () => false,
241
- launchAction: async () => ({ mocked: true })
242
- }
243
- ];
244
- await handler();
245
- assert.strictEqual((await AsyncAction.ref("plop").get()).status, "ERROR");
246
- service.getParameters().fallbackOnFirst = true;
247
- await handler();
248
- assert.strictEqual((await AsyncAction.ref("plop").get()).status, "STARTING");
249
- }
250
- async postHook() {
251
- const service = this.getValidService();
252
- const action = await AsyncAction.create({ __secretKey: "plop" });
253
- const stub = sinon.stub(axios, "post").callsFake(async () => ({
254
- data: {}
255
- }));
256
- const jobInfo = {
257
- JOB_ORCHESTRATOR: "mine",
258
- JOB_ID: action.getUuid(),
259
- JOB_SECRET_KEY: action.__secretKey,
260
- JOB_HOOK: "http://plop"
261
- };
262
- await service.postHook(jobInfo, { status: "RUNNING", logs: ["axios"] });
263
- assert.strictEqual(stub.callCount, 1);
264
- assert.deepStrictEqual(stub.getCall(0).args[0], "http://plop");
265
- assert.deepStrictEqual(stub.getCall(0).args[1], { status: "RUNNING", logs: ["axios"] });
266
- assert.strictEqual(((stub.getCall(0).args[2] || {}).headers || {})["X-Job-Id"], action.getUuid());
267
- await service.postHook({
268
- JOB_ORCHESTRATOR: "mine",
269
- JOB_ID: action.getUuid(),
270
- JOB_SECRET_KEY: action.__secretKey,
271
- JOB_HOOK: "store"
272
- }, { status: "RUNNING", logs: ["store"] });
273
- await action.refresh();
274
- assert.deepStrictEqual(action.logs, ["store"]);
275
- }
276
- async runAsyncOperationAction(hook = "http://...", service = this.getValidService()) {
277
- // @ts-ignore
278
- await assert.rejects(() => service.runAsyncOperationAction({}), /Cannot run AsyncAction/);
279
- await assert.rejects(() =>
280
- // @ts-ignore
281
- service.runAsyncOperationAction({
282
- JOB_ORCHESTRATOR: "a"
283
- }), /Cannot run AsyncAction/);
284
- await assert.rejects(() =>
285
- // @ts-ignore
286
- service.runAsyncOperationAction({
287
- JOB_ORCHESTRATOR: "a",
288
- JOB_ID: "a"
289
- }), /Cannot run AsyncAction/);
290
- await assert.rejects(() =>
291
- // @ts-ignore
292
- service.runAsyncOperationAction({
293
- JOB_ORCHESTRATOR: "a",
294
- JOB_ID: "a",
295
- JOB_SECRET_KEY: "p"
296
- }), /Cannot run AsyncAction/);
297
- let calledInfo;
298
- let subcall;
299
- this.registerService({
300
- // @ts-ignore
301
- runAsyncOperationAction: async (info) => {
302
- calledInfo = info;
303
- },
304
- myMethod: async (...args) => {
305
- return {
306
- myMethod: "async",
307
- success: true,
308
- args
309
- };
310
- }
311
- }, "mine");
312
- process.env = {
313
- ...process.env,
314
- JOB_ORCHESTRATOR: "mine",
315
- JOB_ID: "a",
316
- JOB_SECRET_KEY: "a",
317
- JOB_HOOK: hook
318
- };
319
- // Check redirection to good service
320
- await service.runAsyncOperationAction();
321
- assert.deepStrictEqual(calledInfo, {
322
- JOB_ORCHESTRATOR: "mine",
323
- JOB_ID: "a",
324
- JOB_SECRET_KEY: "a",
325
- JOB_HOOK: hook
326
- });
327
- // Now test hook
328
- try {
329
- this.registerService(service);
330
- // Set a true action
331
- const action = await new AsyncWebdaAction("mine", "myMethod").save();
332
- service.getParameters().onlyHttpHook = true;
333
- service.launchAction(action);
334
- process.env.JOB_ORCHESTRATOR = "async";
335
- process.env.JOB_ID = action.getUuid();
336
- process.env.JOB_SECRET_KEY = action.__secretKey;
337
- process.env.JOB_HOOK = hook;
338
- const stub = sinon.stub(service, "postHook").callsFake(async (...args) => {
339
- const ctx = await this.newContext(args[1]);
340
- // @ts-ignore
341
- if (args.length > 2 && args[2].headers) {
342
- // @ts-ignore
343
- for (const k in args[2].headers) {
344
- // @ts-ignore
345
- }
346
- }
347
- const headers = ctx.getHttpContext()?.headers || {};
348
- headers["x-job-id"] = action.getUuid();
349
- headers["x-job-time"] = Date.now().toString();
350
- headers["x-job-hash"] = crypto
351
- .createHmac("sha256", action.__secretKey)
352
- .update(headers["x-job-time"])
353
- .digest("hex");
354
- // @ts-ignore
355
- await service.statusHook(ctx);
356
- return JSON.parse(ctx.getResponseBody());
357
- });
358
- // First run call with no method
359
- stub.onCall(0).returns({
360
- // @ts-ignore
361
- serviceName: "plop"
362
- });
363
- await service.runAsyncOperationAction();
364
- const args = stub.getCall(0).args;
365
- assert.deepStrictEqual(args[1], {
366
- agent: { ...Runner.getAgentInfo(), nodeVersion: process.version },
367
- status: "RUNNING"
368
- });
369
- await action.refresh();
370
- assert.strictEqual(action.status, "ERROR");
371
- assert.strictEqual(action.errorMessage, "WebdaAsyncAction must have method and serviceName defined at least");
372
- // Run without serviceName
373
- await action.patch({
374
- status: "RUNNING",
375
- errorMessage: ""
376
- });
377
- stub.resetHistory();
378
- stub.onCall(0).returns({
379
- // @ts-ignore
380
- method: "plop"
381
- });
382
- await service.runAsyncOperationAction();
383
- await action.refresh();
384
- assert.strictEqual(action.status, "ERROR");
385
- assert.strictEqual(action.errorMessage, "WebdaAsyncAction must have method and serviceName defined at least");
386
- // Run with unknown service
387
- await action.patch({
388
- status: "RUNNING",
389
- errorMessage: ""
390
- });
391
- stub.resetHistory();
392
- stub.onCall(0).returns({
393
- // @ts-ignore
394
- serviceName: "plop",
395
- method: "plop"
396
- });
397
- await service.runAsyncOperationAction();
398
- await action.refresh();
399
- assert.strictEqual(action.status, "ERROR");
400
- assert.strictEqual(action.errorMessage, "WebdaAsyncAction Service 'plop' not found: mismatch app version");
401
- // Run with known service but incorrect method
402
- await action.patch({
403
- uuid: action.getUuid(),
404
- status: "RUNNING",
405
- errorMessage: ""
406
- });
407
- stub.resetHistory();
408
- stub.onCall(0).returns({
409
- // @ts-ignore
410
- serviceName: "mine",
411
- method: "plop"
412
- });
413
- await service.runAsyncOperationAction();
414
- await action.refresh();
415
- assert.strictEqual(action.status, "ERROR");
416
- assert.strictEqual(action.errorMessage, "WebdaAsyncAction Method 'plop' not found in service mine: mismatch app version");
417
- // Run with known service but incorrect method
418
- await action.patch({
419
- uuid: action.getUuid(),
420
- status: "RUNNING",
421
- errorMessage: ""
422
- });
423
- stub.resetHistory();
424
- stub.onCall(0).returns({
425
- // @ts-ignore
426
- serviceName: "mine",
427
- method: "myMethod",
428
- arguments: ["plop", 666]
429
- });
430
- await service.runAsyncOperationAction();
431
- await action.refresh();
432
- assert.strictEqual(action.status, "SUCCESS");
433
- assert.deepStrictEqual(action.results, { myMethod: "async", success: true, args: ["plop", 666] });
434
- }
435
- finally {
436
- sinon.restore();
437
- }
438
- }
439
- async scheduledAction() {
440
- const fakeService = new FakeService(this.webda, "fake");
441
- this.registerService(fakeService);
442
- const service = this.getValidService();
443
- const action = new AsyncWebdaAction("fake", "schedule");
444
- const time = Date.now() + 1;
445
- await service.scheduleAction(action, time);
446
- await action.refresh();
447
- // It should be rounded to the prior minute
448
- assert.strictEqual(action.scheduled, time - (time % 60000));
449
- assert.strictEqual(action.status, "SCHEDULED");
450
- service.getParameters().includeCron = false;
451
- let p = service.scheduler();
452
- await this.sleep(100);
453
- await p.cancel();
454
- const stubLaunch = stub(service, "launchAction").callsFake(async () => new AsyncAction());
455
- await service.getCronExecutor({
456
- cron: "* * * * *",
457
- args: [],
458
- method: "cron1",
459
- serviceName: "fake",
460
- description: ""
461
- })();
462
- stubLaunch.callsFake(() => {
463
- throw new Error("");
464
- });
465
- // Should not fail if it cannot launch but log ERROR
466
- await service.getCronExecutor({
467
- cron: "* * * * *",
468
- args: [],
469
- method: "cron1",
470
- serviceName: "fake",
471
- description: ""
472
- })();
473
- assert.strictEqual(stubLaunch.getCalls().length, 2);
474
- const stubExec = stub(service, "getCronExecutor").callsFake(() => {
475
- return async () => { };
476
- });
477
- service.getParameters().includeCron = true;
478
- p = service.scheduler();
479
- await this.sleep(100);
480
- await p.cancel();
481
- assert.strictEqual(stubExec.getCalls().length, 2);
482
- }
483
- async operations() {
484
- const service = await this.addService(AsyncJobService, {
485
- queue: "AsyncQueue",
486
- runners: ["LocalRunner"],
487
- asyncOperationDefinition: "./test/asyncOperations.json"
488
- }, "async");
489
- service.resolve();
490
- assert.ok(this.webda.getApplication().hasSchema("userservice.revoke.input"));
491
- let context = await this.newContext();
492
- await service.listOperations(context);
493
- let res = JSON.parse(context.getOutput());
494
- assert.deepStrictEqual(res, ["User.Revoke"]);
495
- context.getParameters().full = true;
496
- await service.listOperations(context);
497
- res = JSON.parse(context.getOutput());
498
- assert.notStrictEqual(res.schemas["userservice.revoke.input"], undefined);
499
- assert.notStrictEqual(res.operations["User.Revoke"], undefined);
500
- await context.newSession();
501
- context.getSession().role = "hr";
502
- context.getParameters().full = false;
503
- await service.listOperations(context);
504
- res = JSON.parse(context.getOutput());
505
- assert.deepStrictEqual(res, ["User.Revoke", "User.Onboard"]);
506
- context.getParameters().full = true;
507
- await service.listOperations(context);
508
- context.getSession().role = "no-hr";
509
- context.getParameters().operationId = "User.Onboard";
510
- await assert.rejects(() => service.launchOperation(context), WebdaError.Forbidden);
511
- context.getParameters().operationId = "User.Onboard2";
512
- await assert.rejects(() => service.launchOperation(context), WebdaError.NotFound);
513
- context.getSession().role = "hr";
514
- context.getParameters().operationId = "User.Revoke";
515
- await assert.rejects(() => service.launchOperation(context), WebdaError.BadRequest);
516
- context = await this.newContext({ id: "my-id" });
517
- context.getSession().role = "hr";
518
- context.getParameters().operationId = "User.Revoke";
519
- await service.launchOperation(context);
520
- context.getParameters().schedule = Date.now() + 86400000;
521
- await service.launchOperation(context);
522
- sinon.stub(service.getWebda(), "checkOperation").callsFake(async () => {
523
- throw new Error("Plop");
524
- });
525
- await assert.rejects(() => service.launchOperation(context), /Plop/);
526
- }
527
- };
528
- __decorate([
529
- test
530
- ], AsyncJobServiceTest.prototype, "worker", null);
531
- __decorate([
532
- test
533
- ], AsyncJobServiceTest.prototype, "resolve", null);
534
- __decorate([
535
- test
536
- ], AsyncJobServiceTest.prototype, "checkRequest", null);
537
- __decorate([
538
- test
539
- ], AsyncJobServiceTest.prototype, "launchAction", null);
540
- __decorate([
541
- test
542
- ], AsyncJobServiceTest.prototype, "statusHook", null);
543
- __decorate([
544
- test
545
- ], AsyncJobServiceTest.prototype, "handleEvent", null);
546
- __decorate([
547
- test
548
- ], AsyncJobServiceTest.prototype, "postHook", null);
549
- __decorate([
550
- test
551
- ], AsyncJobServiceTest.prototype, "runAsyncOperationAction", null);
552
- __decorate([
553
- test
554
- ], AsyncJobServiceTest.prototype, "scheduledAction", null);
555
- __decorate([
556
- test
557
- ], AsyncJobServiceTest.prototype, "operations", null);
558
- AsyncJobServiceTest = __decorate([
559
- suite
560
- ], AsyncJobServiceTest);
561
- //# sourceMappingURL=asyncjobservice.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asyncjobservice.spec.js","sourceRoot":"","sources":["../../src/services/asyncjobservice.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"localrunner.d.ts","sourceRoot":"","sources":["../../src/services/localrunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAS,YAAY,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE/D,qBAAa,qBAAsB,SAAQ,gBAAgB;IACzD;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;gBAET,MAAM,EAAE,GAAG;CAKxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IACzG;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,iBAAiB;IAI9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS;IAKzE;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;CAgD/E"}