@bsb/tests 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/bin/bsb-tests.cjs +376 -0
- package/docs/index.md +101 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.js +24 -0
- package/lib/index.js.map +1 -0
- package/lib/mocks.d.ts +39 -0
- package/lib/mocks.js +191 -0
- package/lib/mocks.js.map +1 -0
- package/lib/plugins/config-default/index.d.ts +27 -0
- package/lib/plugins/config-default/index.js +172 -0
- package/lib/plugins/config-default/index.js.map +1 -0
- package/lib/plugins/events-default/index.d.ts +27 -0
- package/lib/plugins/events-default/index.js +143 -0
- package/lib/plugins/events-default/index.js.map +1 -0
- package/lib/plugins/logging-default/index.d.ts +27 -0
- package/lib/plugins/logging-default/index.js +390 -0
- package/lib/plugins/logging-default/index.js.map +1 -0
- package/lib/plugins/observable-default/index.d.ts +27 -0
- package/lib/plugins/observable-default/index.js +166 -0
- package/lib/plugins/observable-default/index.js.map +1 -0
- package/lib/runner/plugin-custom.d.ts +1 -0
- package/lib/runner/plugin-custom.js +119 -0
- package/lib/runner/plugin-custom.js.map +1 -0
- package/lib/runner/plugin-events.d.ts +1 -0
- package/lib/runner/plugin-events.js +37 -0
- package/lib/runner/plugin-events.js.map +1 -0
- package/lib/runner/plugin-observable.d.ts +1 -0
- package/lib/runner/plugin-observable.js +22 -0
- package/lib/runner/plugin-observable.js.map +1 -0
- package/lib/runner/setup.d.ts +1 -0
- package/lib/runner/setup.js +19 -0
- package/lib/runner/setup.js.map +1 -0
- package/lib/sb/plugins/events/broadcast.d.ts +30 -0
- package/lib/sb/plugins/events/broadcast.js +390 -0
- package/lib/sb/plugins/events/broadcast.js.map +1 -0
- package/lib/sb/plugins/events/emit.d.ts +30 -0
- package/lib/sb/plugins/events/emit.js +386 -0
- package/lib/sb/plugins/events/emit.js.map +1 -0
- package/lib/sb/plugins/events/emitAndReturn.d.ts +30 -0
- package/lib/sb/plugins/events/emitAndReturn.js +415 -0
- package/lib/sb/plugins/events/emitAndReturn.js.map +1 -0
- package/lib/sb/plugins/events/emitStreamAndReceiveStream.d.ts +30 -0
- package/lib/sb/plugins/events/emitStreamAndReceiveStream.js +331 -0
- package/lib/sb/plugins/events/emitStreamAndReceiveStream.js.map +1 -0
- package/lib/sb/plugins/events/index.d.ts +28 -0
- package/lib/sb/plugins/events/index.js +69 -0
- package/lib/sb/plugins/events/index.js.map +1 -0
- package/lib/sb/plugins/events/plugin.d.ts +0 -0
- package/lib/sb/plugins/events/plugin.js +2 -0
- package/lib/sb/plugins/events/plugin.js.map +1 -0
- package/lib/sb/plugins/observable/index.d.ts +28 -0
- package/lib/sb/plugins/observable/index.js +141 -0
- package/lib/sb/plugins/observable/index.js.map +1 -0
- package/lib/trace.d.ts +40 -0
- package/lib/trace.js +85 -0
- package/lib/trace.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const pluginId = process.env.BSB_TEST_PLUGIN_ID;
|
|
9
|
+
const pluginRoot = process.env.BSB_TEST_PLUGIN_ROOT;
|
|
10
|
+
const pluginName = process.env.BSB_TEST_PLUGIN_NAME || pluginId || "unknown-plugin";
|
|
11
|
+
const pluginConfigRaw = process.env.BSB_TEST_PLUGIN_CONFIG || "null";
|
|
12
|
+
if (!pluginId || !pluginRoot) {
|
|
13
|
+
throw new Error("BSB_TEST_PLUGIN_ID and BSB_TEST_PLUGIN_ROOT are required");
|
|
14
|
+
}
|
|
15
|
+
const config = JSON.parse(pluginConfigRaw);
|
|
16
|
+
const testsRoot = path_1.default.resolve(process.cwd(), "tests", pluginId);
|
|
17
|
+
if (!fs_1.default.existsSync(testsRoot)) {
|
|
18
|
+
describe(`custom: ${pluginName}`, () => {
|
|
19
|
+
it("no custom tests found", () => { });
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const isTestFile = (file) => {
|
|
24
|
+
const base = path_1.default.basename(file);
|
|
25
|
+
if (base.startsWith("_"))
|
|
26
|
+
return false;
|
|
27
|
+
return base.endsWith(".ts") || base.endsWith(".js") || base.endsWith(".cjs") || base.endsWith(".mjs");
|
|
28
|
+
};
|
|
29
|
+
const findTests = (dir) => {
|
|
30
|
+
const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
31
|
+
const results = [];
|
|
32
|
+
for (const entry of entries) {
|
|
33
|
+
const full = path_1.default.join(dir, entry.name);
|
|
34
|
+
if (entry.isDirectory()) {
|
|
35
|
+
results.push(...findTests(full));
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (entry.isFile() && isTestFile(entry.name)) {
|
|
39
|
+
results.push(full);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return results;
|
|
43
|
+
};
|
|
44
|
+
const findHook = (dir, name) => {
|
|
45
|
+
const exts = [".ts", ".js", ".cjs", ".mjs"];
|
|
46
|
+
for (const ext of exts) {
|
|
47
|
+
const candidate = path_1.default.join(dir, `${name}${ext}`);
|
|
48
|
+
if (fs_1.default.existsSync(candidate))
|
|
49
|
+
return candidate;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
};
|
|
53
|
+
const loadTestFn = (file) => {
|
|
54
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
55
|
+
const mod = require(file);
|
|
56
|
+
return mod.default || mod.test || mod.run || mod;
|
|
57
|
+
};
|
|
58
|
+
const tests = findTests(testsRoot);
|
|
59
|
+
const grouped = {};
|
|
60
|
+
for (const testFile of tests) {
|
|
61
|
+
const rel = path_1.default.relative(testsRoot, testFile);
|
|
62
|
+
const dir = path_1.default.dirname(rel);
|
|
63
|
+
const group = dir === "." ? "default" : dir;
|
|
64
|
+
if (!grouped[group])
|
|
65
|
+
grouped[group] = [];
|
|
66
|
+
grouped[group].push(testFile);
|
|
67
|
+
}
|
|
68
|
+
describe(`custom: ${pluginName}`, () => {
|
|
69
|
+
for (const group of Object.keys(grouped)) {
|
|
70
|
+
const groupDir = group === "default" ? testsRoot : path_1.default.join(testsRoot, group);
|
|
71
|
+
const beforeHook = findHook(groupDir, "_before");
|
|
72
|
+
const afterHook = findHook(groupDir, "_after");
|
|
73
|
+
let sharedData = undefined;
|
|
74
|
+
describe(group, () => {
|
|
75
|
+
before(async () => {
|
|
76
|
+
if (beforeHook) {
|
|
77
|
+
const hookFn = loadTestFn(beforeHook);
|
|
78
|
+
const maybe = await hookFn({
|
|
79
|
+
pluginId,
|
|
80
|
+
pluginName,
|
|
81
|
+
pluginRoot,
|
|
82
|
+
config,
|
|
83
|
+
group,
|
|
84
|
+
});
|
|
85
|
+
if (maybe !== undefined) {
|
|
86
|
+
sharedData = maybe;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
after(async () => {
|
|
91
|
+
if (afterHook) {
|
|
92
|
+
const hookFn = loadTestFn(afterHook);
|
|
93
|
+
await hookFn({
|
|
94
|
+
pluginId,
|
|
95
|
+
pluginName,
|
|
96
|
+
pluginRoot,
|
|
97
|
+
config,
|
|
98
|
+
group,
|
|
99
|
+
}, sharedData);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
for (const testFile of grouped[group]) {
|
|
103
|
+
const testName = path_1.default.basename(testFile).replace(/\.(ts|js|cjs|mjs)$/i, "");
|
|
104
|
+
it(testName, async () => {
|
|
105
|
+
const testFn = loadTestFn(testFile);
|
|
106
|
+
await testFn({
|
|
107
|
+
pluginId,
|
|
108
|
+
pluginName,
|
|
109
|
+
pluginRoot,
|
|
110
|
+
config,
|
|
111
|
+
group,
|
|
112
|
+
}, sharedData);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=plugin-custom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-custom.js","sourceRoot":"","sources":["../../src/runner/plugin-custom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const trace_1 = require("../trace");
|
|
8
|
+
const mocks_1 = require("../mocks");
|
|
9
|
+
const broadcast_1 = require("../sb/plugins/events/broadcast");
|
|
10
|
+
const emit_1 = require("../sb/plugins/events/emit");
|
|
11
|
+
const emitAndReturn_1 = require("../sb/plugins/events/emitAndReturn");
|
|
12
|
+
const emitStreamAndReceiveStream_1 = require("../sb/plugins/events/emitStreamAndReceiveStream");
|
|
13
|
+
const pluginModule = process.env.BSB_TEST_PLUGIN_MODULE;
|
|
14
|
+
const pluginName = process.env.BSB_TEST_PLUGIN_NAME || "unknown-plugin";
|
|
15
|
+
const pluginConfigRaw = process.env.BSB_TEST_PLUGIN_CONFIG || "null";
|
|
16
|
+
if (!pluginModule) {
|
|
17
|
+
throw new Error("BSB_TEST_PLUGIN_MODULE is required");
|
|
18
|
+
}
|
|
19
|
+
const resolvedModule = path_1.default.resolve(pluginModule);
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
21
|
+
const mod = require(resolvedModule);
|
|
22
|
+
const PluginCtor = mod.Plugin || mod.default || mod;
|
|
23
|
+
const config = JSON.parse(pluginConfigRaw);
|
|
24
|
+
describe(`events: ${pluginName}`, () => {
|
|
25
|
+
const gen = async () => {
|
|
26
|
+
const refP = new PluginCtor(await (0, mocks_1.getEventsConstructorConfig)(config));
|
|
27
|
+
if (refP.init) {
|
|
28
|
+
await refP.init((0, trace_1.createTestObservable)());
|
|
29
|
+
}
|
|
30
|
+
return refP;
|
|
31
|
+
};
|
|
32
|
+
(0, broadcast_1.broadcast)(gen, 30);
|
|
33
|
+
(0, emit_1.emit)(gen, 30);
|
|
34
|
+
(0, emitAndReturn_1.emitAndReturn)(gen, 30);
|
|
35
|
+
(0, emitStreamAndReceiveStream_1.emitStreamAndReceiveStream)(gen, 500);
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=plugin-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-events.js","sourceRoot":"","sources":["../../src/runner/plugin-events.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,oCAAgD;AAChD,oCAAsD;AACtD,8DAA2D;AAC3D,oDAAiD;AACjD,sEAAmE;AACnE,gGAA6F;AAE7F,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;AACxD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,gBAAgB,CAAC;AACxE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC;AAErE,IAAI,CAAC,YAAY,EAAE,CAAC;IAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,cAAc,GAAG,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAClD,8DAA8D;AAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AACpC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAE3C,QAAQ,CAAC,WAAW,UAAU,EAAE,EAAE,GAAG,EAAE;IACrC,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;QACrB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,IAAA,kCAA0B,EAAC,MAAM,CAAC,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,IAAI,CAAC,IAAA,4BAAoB,GAAE,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,IAAA,qBAAS,EAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnB,IAAA,WAAI,EAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACd,IAAA,6BAAa,EAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvB,IAAA,uDAA0B,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const index_1 = require("../sb/plugins/observable/index");
|
|
8
|
+
const pluginModule = process.env.BSB_TEST_PLUGIN_MODULE;
|
|
9
|
+
const pluginName = process.env.BSB_TEST_PLUGIN_NAME || "unknown-plugin";
|
|
10
|
+
const pluginConfigRaw = process.env.BSB_TEST_PLUGIN_CONFIG || "null";
|
|
11
|
+
if (!pluginModule) {
|
|
12
|
+
throw new Error("BSB_TEST_PLUGIN_MODULE is required");
|
|
13
|
+
}
|
|
14
|
+
const resolvedModule = path_1.default.resolve(pluginModule);
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
16
|
+
const mod = require(resolvedModule);
|
|
17
|
+
const PluginCtor = mod.Plugin || mod.default || mod;
|
|
18
|
+
const config = JSON.parse(pluginConfigRaw);
|
|
19
|
+
describe(`observable: ${pluginName}`, () => {
|
|
20
|
+
(0, index_1.RunObservablePluginTests)(PluginCtor, config);
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=plugin-observable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-observable.js","sourceRoot":"","sources":["../../src/runner/plugin-observable.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,0DAA0E;AAE1E,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;AACxD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,gBAAgB,CAAC;AACxE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC;AAErE,IAAI,CAAC,YAAY,EAAE,CAAC;IAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,cAAc,GAAG,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAClD,8DAA8D;AAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AACpC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAE3C,QAAQ,CAAC,eAAe,UAAU,EAAE,EAAE,GAAG,EAAE;IACzC,IAAA,gCAAwB,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const module_1 = __importDefault(require("module"));
|
|
8
|
+
const localBaseEntry = process.env.BSB_TEST_LOCAL_BASE_ENTRY;
|
|
9
|
+
if (localBaseEntry) {
|
|
10
|
+
const resolved = path_1.default.resolve(localBaseEntry);
|
|
11
|
+
const originalResolve = module_1.default._resolveFilename;
|
|
12
|
+
module_1.default._resolveFilename = function (request, parent, isMain, options) {
|
|
13
|
+
if (request === "@bsb/base") {
|
|
14
|
+
return resolved;
|
|
15
|
+
}
|
|
16
|
+
return originalResolve.call(this, request, parent, isMain, options);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/runner/setup.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,oDAA4B;AAE5B,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;AAE7D,IAAI,cAAc,EAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAI,gBAAc,CAAC,gBAK7B,CAAC;IAEX,gBAAc,CAAC,gBAAgB,GAAG,UACjC,OAAe,EACf,MAA8B,EAC9B,MAAe,EACf,OAAa;QAEb,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BSB (Better-Service-Base) is an event-bus based microservice framework.
|
|
3
|
+
* Copyright (C) 2016 - 2025 BetterCorp (PTY) Ltd
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published
|
|
7
|
+
* by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
* (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* Alternatively, you may obtain a commercial license for this program.
|
|
11
|
+
* The commercial license allows you to use the Program in a closed-source manner,
|
|
12
|
+
* including the right to create derivative works that are not subject to the terms
|
|
13
|
+
* of the AGPL.
|
|
14
|
+
*
|
|
15
|
+
* To obtain a commercial license, please contact the copyright holders at
|
|
16
|
+
* https://www.bettercorp.dev. The terms and conditions of the commercial license
|
|
17
|
+
* will be provided upon request.
|
|
18
|
+
*
|
|
19
|
+
* This program is distributed in the hope that it will be useful,
|
|
20
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
22
|
+
* GNU Affero General Public License for more details.
|
|
23
|
+
*
|
|
24
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
25
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
26
|
+
*/
|
|
27
|
+
import { BSBEvents } from "@bsb/base";
|
|
28
|
+
export declare function broadcast(genNewPlugin: {
|
|
29
|
+
(): Promise<BSBEvents>;
|
|
30
|
+
}, maxTimeoutToExpectAResponse: number): void;
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BSB (Better-Service-Base) is an event-bus based microservice framework.
|
|
4
|
+
* Copyright (C) 2016 - 2025 BetterCorp (PTY) Ltd
|
|
5
|
+
*
|
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
|
7
|
+
* it under the terms of the GNU Affero General Public License as published
|
|
8
|
+
* by the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
* (at your option) any later version.
|
|
10
|
+
*
|
|
11
|
+
* Alternatively, you may obtain a commercial license for this program.
|
|
12
|
+
* The commercial license allows you to use the Program in a closed-source manner,
|
|
13
|
+
* including the right to create derivative works that are not subject to the terms
|
|
14
|
+
* of the AGPL.
|
|
15
|
+
*
|
|
16
|
+
* To obtain a commercial license, please contact the copyright holders at
|
|
17
|
+
* https://www.bettercorp.dev. The terms and conditions of the commercial license
|
|
18
|
+
* will be provided upon request.
|
|
19
|
+
*
|
|
20
|
+
* This program is distributed in the hope that it will be useful,
|
|
21
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
22
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
23
|
+
* GNU Affero General Public License for more details.
|
|
24
|
+
*
|
|
25
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
26
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
27
|
+
*/
|
|
28
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
31
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
32
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
33
|
+
}
|
|
34
|
+
Object.defineProperty(o, k2, desc);
|
|
35
|
+
}) : (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
o[k2] = m[k];
|
|
38
|
+
}));
|
|
39
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
40
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
41
|
+
}) : function(o, v) {
|
|
42
|
+
o["default"] = v;
|
|
43
|
+
});
|
|
44
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
45
|
+
var ownKeys = function(o) {
|
|
46
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
47
|
+
var ar = [];
|
|
48
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
49
|
+
return ar;
|
|
50
|
+
};
|
|
51
|
+
return ownKeys(o);
|
|
52
|
+
};
|
|
53
|
+
return function (mod) {
|
|
54
|
+
if (mod && mod.__esModule) return mod;
|
|
55
|
+
var result = {};
|
|
56
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
57
|
+
__setModuleDefault(result, mod);
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
})();
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
exports.broadcast = broadcast;
|
|
63
|
+
const assert = __importStar(require("assert"));
|
|
64
|
+
const crypto_1 = require("crypto");
|
|
65
|
+
const base_1 = require("@bsb/base");
|
|
66
|
+
const trace_1 = require("../../../trace");
|
|
67
|
+
const randomName = () => (0, crypto_1.randomUUID)();
|
|
68
|
+
function broadcast(genNewPlugin, maxTimeoutToExpectAResponse) {
|
|
69
|
+
let emitter;
|
|
70
|
+
beforeEach(async () => {
|
|
71
|
+
emitter = await genNewPlugin();
|
|
72
|
+
});
|
|
73
|
+
afterEach(function () {
|
|
74
|
+
(0, base_1.SmartFunctionCallSync)(emitter, emitter.dispose);
|
|
75
|
+
});
|
|
76
|
+
describe("EmitBroadcast", async function () {
|
|
77
|
+
this.timeout(maxTimeoutToExpectAResponse + 100);
|
|
78
|
+
describe("emitBroadcast", async () => {
|
|
79
|
+
const emitData = true;
|
|
80
|
+
it("all plugins should receive the event", async () => {
|
|
81
|
+
const thisPlugin = randomName();
|
|
82
|
+
const thisEvent = randomName();
|
|
83
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
84
|
+
let receiveCounter = 0;
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
if (receiveCounter === 2) {
|
|
87
|
+
return assert.ok(receiveCounter);
|
|
88
|
+
}
|
|
89
|
+
if (receiveCounter === 0) {
|
|
90
|
+
return assert.fail("Event not received");
|
|
91
|
+
}
|
|
92
|
+
assert.fail("Received " + receiveCounter + " events");
|
|
93
|
+
}, maxTimeoutToExpectAResponse);
|
|
94
|
+
await emitter.onBroadcast(obs, thisPlugin, thisEvent, async (receivedObs, args) => {
|
|
95
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
96
|
+
receiveCounter++;
|
|
97
|
+
});
|
|
98
|
+
await emitter.onBroadcast(obs, thisPlugin, thisEvent, async (receivedObs, args) => {
|
|
99
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
100
|
+
receiveCounter++;
|
|
101
|
+
});
|
|
102
|
+
await emitter.emitBroadcast(obs, thisPlugin, thisEvent, [emitData]);
|
|
103
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
104
|
+
});
|
|
105
|
+
it("diff plugin names should not receive same event", async () => {
|
|
106
|
+
const thisPlugin = randomName();
|
|
107
|
+
const thisPlugin2 = randomName();
|
|
108
|
+
const thisEvent = randomName();
|
|
109
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
110
|
+
let receiveCounter = 0;
|
|
111
|
+
setTimeout(() => {
|
|
112
|
+
if (receiveCounter === 2) {
|
|
113
|
+
return assert.ok(receiveCounter);
|
|
114
|
+
}
|
|
115
|
+
if (receiveCounter === 0) {
|
|
116
|
+
return assert.fail("Event not received");
|
|
117
|
+
}
|
|
118
|
+
assert.fail("Received " + receiveCounter + " events");
|
|
119
|
+
}, maxTimeoutToExpectAResponse);
|
|
120
|
+
await emitter.onBroadcast(obs, thisPlugin, thisEvent, async () => {
|
|
121
|
+
assert.fail("Received on diff plugin name");
|
|
122
|
+
});
|
|
123
|
+
await emitter.onBroadcast(obs, thisPlugin2, thisEvent, async (receivedObs, args) => {
|
|
124
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
125
|
+
receiveCounter++;
|
|
126
|
+
});
|
|
127
|
+
await emitter.onBroadcast(obs, thisPlugin2, thisEvent, async (receivedObs, args) => {
|
|
128
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
129
|
+
receiveCounter++;
|
|
130
|
+
});
|
|
131
|
+
await emitter.emitBroadcast(obs, thisPlugin2, thisEvent, [emitData]);
|
|
132
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
133
|
+
});
|
|
134
|
+
it("should be able to emit to events with plugin name defined", async () => {
|
|
135
|
+
const thisPlugin = randomName();
|
|
136
|
+
const thisEvent = randomName();
|
|
137
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
138
|
+
const emitTimeout = setTimeout(() => {
|
|
139
|
+
assert.fail("Event not received");
|
|
140
|
+
}, maxTimeoutToExpectAResponse);
|
|
141
|
+
await emitter.onBroadcast(obs, thisPlugin, thisEvent, async (receivedObs, data) => {
|
|
142
|
+
clearTimeout(emitTimeout);
|
|
143
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
144
|
+
assert.ok(data[0]);
|
|
145
|
+
});
|
|
146
|
+
await emitter.emitBroadcast(obs, thisPlugin, thisEvent, [emitData]);
|
|
147
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
148
|
+
});
|
|
149
|
+
it("should be able to emit to events with self", async () => {
|
|
150
|
+
const thisCaller = randomName();
|
|
151
|
+
const thisEvent = randomName();
|
|
152
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
153
|
+
const emitTimeout = setTimeout(() => {
|
|
154
|
+
assert.fail("Event not received");
|
|
155
|
+
}, maxTimeoutToExpectAResponse);
|
|
156
|
+
await emitter.onBroadcast(obs, thisCaller, thisEvent, async (receivedObs, data) => {
|
|
157
|
+
clearTimeout(emitTimeout);
|
|
158
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
159
|
+
assert.ok(data[0]);
|
|
160
|
+
});
|
|
161
|
+
await emitter.emitBroadcast(obs, thisCaller, thisEvent, [emitData]);
|
|
162
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
163
|
+
});
|
|
164
|
+
it("should be able to emit to events with self multi-args", async () => {
|
|
165
|
+
const thisCaller = randomName();
|
|
166
|
+
const thisEvent = randomName();
|
|
167
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
168
|
+
const emitTimeout = setTimeout(() => {
|
|
169
|
+
assert.fail("Event not received");
|
|
170
|
+
}, maxTimeoutToExpectAResponse);
|
|
171
|
+
await emitter.onBroadcast(obs, thisCaller, thisEvent, async (receivedObs, data) => {
|
|
172
|
+
clearTimeout(emitTimeout);
|
|
173
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
174
|
+
assert.deepEqual(data[0], 0);
|
|
175
|
+
assert.deepEqual(data[1], 1);
|
|
176
|
+
assert.deepEqual(data[2], 2);
|
|
177
|
+
assert.deepEqual(data[3], 3);
|
|
178
|
+
});
|
|
179
|
+
await emitter.emitBroadcast(obs, thisCaller, thisEvent, [0, 1, 2, 3]);
|
|
180
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
181
|
+
});
|
|
182
|
+
it("should not be able to emit to other events with plugin name defined", async () => {
|
|
183
|
+
const thisPlugin = randomName();
|
|
184
|
+
const thisEvent = randomName();
|
|
185
|
+
const thisEvent2 = randomName();
|
|
186
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
187
|
+
const emitTimeout = setTimeout(() => {
|
|
188
|
+
assert.ok(true);
|
|
189
|
+
}, maxTimeoutToExpectAResponse);
|
|
190
|
+
await emitter.onBroadcast(obs, thisPlugin, thisEvent, async () => {
|
|
191
|
+
clearTimeout(emitTimeout);
|
|
192
|
+
assert.fail("Event received");
|
|
193
|
+
});
|
|
194
|
+
await emitter.emitBroadcast(obs, thisPlugin, thisEvent2, [emitData]);
|
|
195
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
196
|
+
});
|
|
197
|
+
it("should not be able to emit to other events with self", async () => {
|
|
198
|
+
const thisCaller = randomName();
|
|
199
|
+
const thisEvent = randomName();
|
|
200
|
+
const thisEvent2 = randomName();
|
|
201
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
202
|
+
const emitTimeout = setTimeout(() => {
|
|
203
|
+
assert.ok(true);
|
|
204
|
+
}, maxTimeoutToExpectAResponse);
|
|
205
|
+
await emitter.onBroadcast(obs, thisCaller, thisEvent, async () => {
|
|
206
|
+
clearTimeout(emitTimeout);
|
|
207
|
+
assert.fail("Event received");
|
|
208
|
+
});
|
|
209
|
+
await emitter.emitBroadcast(obs, thisCaller, thisEvent2, [emitData]);
|
|
210
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
describe("onBroadcast", async () => {
|
|
214
|
+
const emitData = "ABCD";
|
|
215
|
+
it("should be able to emit to events with plugin name defined", async () => {
|
|
216
|
+
const thisPlugin = randomName();
|
|
217
|
+
const thisEvent = randomName();
|
|
218
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
219
|
+
const emitTimeout = setTimeout(() => {
|
|
220
|
+
assert.fail("Event not received");
|
|
221
|
+
}, maxTimeoutToExpectAResponse);
|
|
222
|
+
await emitter.onBroadcast(obs, thisPlugin, thisEvent, async (receivedObs, data) => {
|
|
223
|
+
clearTimeout(emitTimeout);
|
|
224
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
225
|
+
assert.deepEqual(data[0], emitData);
|
|
226
|
+
});
|
|
227
|
+
await emitter.emitBroadcast(obs, thisPlugin, thisEvent, [emitData]);
|
|
228
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
229
|
+
});
|
|
230
|
+
it("should be able to emit to events with self", async () => {
|
|
231
|
+
const thisCaller = randomName();
|
|
232
|
+
const thisEvent = randomName();
|
|
233
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
234
|
+
const emitTimeout = setTimeout(() => {
|
|
235
|
+
assert.fail("Event not received");
|
|
236
|
+
}, maxTimeoutToExpectAResponse);
|
|
237
|
+
await emitter.onBroadcast(obs, thisCaller, thisEvent, async (receivedObs, data) => {
|
|
238
|
+
clearTimeout(emitTimeout);
|
|
239
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
240
|
+
assert.deepEqual(data[0], emitData);
|
|
241
|
+
});
|
|
242
|
+
await emitter.emitBroadcast(obs, thisCaller, thisEvent, [emitData]);
|
|
243
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
244
|
+
});
|
|
245
|
+
it("should not be able to emit to other events with plugin name defined", async () => {
|
|
246
|
+
const thisPlugin = randomName();
|
|
247
|
+
const thisEvent = randomName();
|
|
248
|
+
const thisEvent2 = randomName();
|
|
249
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
250
|
+
const emitTimeout = setTimeout(() => {
|
|
251
|
+
assert.ok(true);
|
|
252
|
+
}, maxTimeoutToExpectAResponse);
|
|
253
|
+
await emitter.onBroadcast(obs, thisPlugin, thisEvent, async () => {
|
|
254
|
+
clearTimeout(emitTimeout);
|
|
255
|
+
assert.fail("Event received");
|
|
256
|
+
});
|
|
257
|
+
await emitter.emitBroadcast(obs, thisPlugin, thisEvent2, [emitData]);
|
|
258
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
259
|
+
});
|
|
260
|
+
it("should not be able to emit to other events with self", async () => {
|
|
261
|
+
const thisCaller = randomName();
|
|
262
|
+
const thisEvent = randomName();
|
|
263
|
+
const thisEvent2 = randomName();
|
|
264
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
265
|
+
const emitTimeout = setTimeout(() => {
|
|
266
|
+
assert.ok(true);
|
|
267
|
+
}, maxTimeoutToExpectAResponse);
|
|
268
|
+
await emitter.onBroadcast(obs, thisCaller, thisEvent, async () => {
|
|
269
|
+
clearTimeout(emitTimeout);
|
|
270
|
+
assert.fail("Event received");
|
|
271
|
+
});
|
|
272
|
+
await emitter.emitBroadcast(obs, thisCaller, thisEvent2, [emitData]);
|
|
273
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
const typesToTest = [
|
|
277
|
+
{
|
|
278
|
+
name: "Null",
|
|
279
|
+
data: null,
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
name: "Boolean true",
|
|
283
|
+
data: true,
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
name: "Boolean false",
|
|
287
|
+
data: false,
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
name: "String",
|
|
291
|
+
data: "HELLO WO4lD",
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
name: "Min Number",
|
|
295
|
+
data: Number.MIN_SAFE_INTEGER,
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
name: "Max Number",
|
|
299
|
+
data: Number.MAX_SAFE_INTEGER,
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: "Array",
|
|
303
|
+
data: [
|
|
304
|
+
0,
|
|
305
|
+
"Hello",
|
|
306
|
+
true,
|
|
307
|
+
],
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
name: "Object",
|
|
311
|
+
data: {
|
|
312
|
+
name: "Sarah",
|
|
313
|
+
surname: "Blond",
|
|
314
|
+
age: 24,
|
|
315
|
+
meta: {
|
|
316
|
+
location: [
|
|
317
|
+
-12212,
|
|
318
|
+
55336,
|
|
319
|
+
],
|
|
320
|
+
},
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
];
|
|
324
|
+
for (const typeToTest of typesToTest) {
|
|
325
|
+
describe(`emitBroadcast ${typeToTest.name}`, async () => {
|
|
326
|
+
it("should be able to emit to events with plugin name defined", async () => {
|
|
327
|
+
const thisPlugin = randomName();
|
|
328
|
+
const thisEvent = randomName();
|
|
329
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
330
|
+
const emitTimeout = setTimeout(() => {
|
|
331
|
+
assert.fail("Event not received");
|
|
332
|
+
}, maxTimeoutToExpectAResponse);
|
|
333
|
+
await emitter.onBroadcast(obs, thisPlugin, thisEvent, async (receivedObs, data) => {
|
|
334
|
+
clearTimeout(emitTimeout);
|
|
335
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
336
|
+
assert.deepEqual(data[0], typeToTest.data);
|
|
337
|
+
});
|
|
338
|
+
await emitter.emitBroadcast(obs, thisPlugin, thisEvent, [typeToTest.data]);
|
|
339
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
340
|
+
});
|
|
341
|
+
it("should be able to emit to events with self", async () => {
|
|
342
|
+
const thisCaller = randomName();
|
|
343
|
+
const thisEvent = randomName();
|
|
344
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
345
|
+
const emitTimeout = setTimeout(() => {
|
|
346
|
+
assert.fail("Event not received");
|
|
347
|
+
}, maxTimeoutToExpectAResponse);
|
|
348
|
+
await emitter.onBroadcast(obs, thisCaller, thisEvent, async (receivedObs, data) => {
|
|
349
|
+
clearTimeout(emitTimeout);
|
|
350
|
+
assert.strictEqual(receivedObs.traceId, obs.traceId);
|
|
351
|
+
assert.deepEqual(data[0], typeToTest.data);
|
|
352
|
+
});
|
|
353
|
+
await emitter.emitBroadcast(obs, thisCaller, thisEvent, [typeToTest.data]);
|
|
354
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
355
|
+
});
|
|
356
|
+
it("should not be able to emit to other events with plugin name defined", async () => {
|
|
357
|
+
const thisPlugin = randomName();
|
|
358
|
+
const thisEvent = randomName();
|
|
359
|
+
const thisEvent2 = randomName();
|
|
360
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
361
|
+
const emitTimeout = setTimeout(() => {
|
|
362
|
+
assert.ok(true);
|
|
363
|
+
}, maxTimeoutToExpectAResponse);
|
|
364
|
+
await emitter.onBroadcast(obs, thisPlugin, thisEvent, async () => {
|
|
365
|
+
clearTimeout(emitTimeout);
|
|
366
|
+
assert.fail("Event received");
|
|
367
|
+
});
|
|
368
|
+
await emitter.emitBroadcast(obs, thisPlugin, thisEvent2, [typeToTest.data]);
|
|
369
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
370
|
+
});
|
|
371
|
+
it("should not be able to emit to other events with self", async () => {
|
|
372
|
+
const thisCaller = randomName();
|
|
373
|
+
const thisEvent = randomName();
|
|
374
|
+
const thisEvent2 = randomName();
|
|
375
|
+
const obs = (0, trace_1.createTestObservable)();
|
|
376
|
+
const emitTimeout = setTimeout(() => {
|
|
377
|
+
assert.ok(true);
|
|
378
|
+
}, maxTimeoutToExpectAResponse);
|
|
379
|
+
await emitter.onBroadcast(obs, thisCaller, thisEvent, async () => {
|
|
380
|
+
clearTimeout(emitTimeout);
|
|
381
|
+
assert.fail("Event received");
|
|
382
|
+
});
|
|
383
|
+
await emitter.emitBroadcast(obs, thisCaller, thisEvent2, [typeToTest.data]);
|
|
384
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=broadcast.js.map
|