codify-plugin-test 0.0.45 → 0.0.47
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/plugin-process.js +1 -5
- package/dist/plugin-process.js.map +1 -1
- package/dist/plugin-tester.js +16 -5
- package/dist/plugin-tester.js.map +1 -1
- package/dist/utils.d.ts +5 -0
- package/dist/utils.js +13 -0
- package/dist/utils.js.map +1 -0
- package/package.json +3 -3
- package/src/plugin-process.ts +1 -7
- package/src/plugin-tester.ts +20 -5
- package/src/utils.ts +19 -0
- package/test/plugin-tester.test.ts +20 -8
package/dist/plugin-process.js
CHANGED
|
@@ -15,15 +15,12 @@ export class PluginProcess {
|
|
|
15
15
|
if (!path.isAbsolute(pluginPath)) {
|
|
16
16
|
throw new Error('A fully qualified path must be supplied to PluginTester');
|
|
17
17
|
}
|
|
18
|
-
const debug = (process.env.DEBUG) ? ['--inspect-brk
|
|
19
|
-
console.log(JSON.stringify({ debug }, null, 2));
|
|
18
|
+
const debug = (process.env.DEBUG) ? ['--inspect-brk=9221'] : [];
|
|
20
19
|
this.childProcess = fork(pluginPath, [], {
|
|
21
20
|
env: { ...process.env },
|
|
22
21
|
execArgv: ['--import', 'tsx/esm', ...debug],
|
|
23
22
|
stdio: 'pipe',
|
|
24
23
|
});
|
|
25
|
-
console.log(process.env.DEBUG);
|
|
26
|
-
console.log(JSON.stringify({ debug: process.env.DEBUG }, null, 2));
|
|
27
24
|
this.childProcess.stderr?.pipe(process.stderr);
|
|
28
25
|
this.childProcess.stdout?.pipe(process.stdout);
|
|
29
26
|
this.handleSudoRequests(this.childProcess);
|
|
@@ -77,7 +74,6 @@ export class PluginProcess {
|
|
|
77
74
|
throw new Error(`Invalid sudo request from plugin. ${JSON.stringify(sudoRequestValidator.errors, null, 2)}`);
|
|
78
75
|
}
|
|
79
76
|
const { command, options } = data;
|
|
80
|
-
console.log(`Running command with sudo: 'sudo ${command}'`);
|
|
81
77
|
const result = await sudoSpawn(command, options);
|
|
82
78
|
process.send({
|
|
83
79
|
cmd: MessageCmd.SUDO_REQUEST + '_Response',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-process.js","sourceRoot":"","sources":["../src/plugin-process.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAGL,gBAAgB,EAEhB,UAAU,EACV,WAAW,EAEX,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAA8B,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;IAC1B,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1D,MAAM,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEhE,MAAM,OAAO,aAAa;IACxB,YAAY,CAAc;IAO1B,YAAY,UAAkB;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"plugin-process.js","sourceRoot":"","sources":["../src/plugin-process.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin-tester.js
CHANGED
|
@@ -2,6 +2,7 @@ import chalk from 'chalk';
|
|
|
2
2
|
import { ResourceOperation, } from 'codify-schemas';
|
|
3
3
|
import unionBy from 'lodash.unionby';
|
|
4
4
|
import { PluginProcess } from './plugin-process.js';
|
|
5
|
+
import { splitUserConfig } from './utils.js';
|
|
5
6
|
export class PluginTester {
|
|
6
7
|
static async fullTest(pluginPath, configs, options) {
|
|
7
8
|
const ids = configs.map((c) => c.name ? `${c.type}.${c.name}` : c.type).join(', ');
|
|
@@ -16,7 +17,10 @@ export class PluginTester {
|
|
|
16
17
|
throw new Error(`The plugin does not support the following configs supplied:\n ${JSON.stringify(unsupportedConfigs, null, 2)}\n Initialize result: ${JSON.stringify(initializeResult)}`);
|
|
17
18
|
}
|
|
18
19
|
console.info(chalk.cyan('Testing validate...'));
|
|
19
|
-
const validate = await plugin.validate({ configs
|
|
20
|
+
const validate = await plugin.validate({ configs: configs.map((c) => {
|
|
21
|
+
const { coreParameters, parameters } = splitUserConfig(c);
|
|
22
|
+
return { core: coreParameters, parameters };
|
|
23
|
+
}) });
|
|
20
24
|
const invalidConfigs = validate.resourceValidations.filter((v) => !v.isValid);
|
|
21
25
|
if (invalidConfigs.length > 0) {
|
|
22
26
|
throw new Error(`The following configs did not validate:\n ${JSON.stringify(invalidConfigs, null, 2)}`);
|
|
@@ -24,8 +28,10 @@ export class PluginTester {
|
|
|
24
28
|
console.info(chalk.cyan('Testing plan...'));
|
|
25
29
|
const plans = [];
|
|
26
30
|
for (const config of configs) {
|
|
31
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
27
32
|
plans.push(await plugin.plan({
|
|
28
|
-
|
|
33
|
+
core: coreParameters,
|
|
34
|
+
desired: parameters,
|
|
29
35
|
isStateful: false,
|
|
30
36
|
state: undefined,
|
|
31
37
|
}));
|
|
@@ -51,7 +57,8 @@ export class PluginTester {
|
|
|
51
57
|
console.info(chalk.cyan('Testing import...'));
|
|
52
58
|
const importResults = [];
|
|
53
59
|
for (const config of configs) {
|
|
54
|
-
const
|
|
60
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
61
|
+
const importResult = await importPlugin.import({ core: coreParameters, parameters });
|
|
55
62
|
importResults.push(importResult);
|
|
56
63
|
}
|
|
57
64
|
if (options?.validateImport) {
|
|
@@ -67,8 +74,10 @@ export class PluginTester {
|
|
|
67
74
|
console.info(chalk.cyan('Testing modify...'));
|
|
68
75
|
const modifyPlans = [];
|
|
69
76
|
for (const config of options.testModify.modifiedConfigs) {
|
|
77
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
70
78
|
modifyPlans.push(await modifyPlugin.plan({
|
|
71
|
-
|
|
79
|
+
core: coreParameters,
|
|
80
|
+
desired: parameters,
|
|
72
81
|
isStateful: false,
|
|
73
82
|
state: undefined,
|
|
74
83
|
}));
|
|
@@ -104,9 +113,11 @@ ${JSON.stringify(modifyPlans, null, 2)}`);
|
|
|
104
113
|
console.info(chalk.cyan('Testing destroy...'));
|
|
105
114
|
const plans = [];
|
|
106
115
|
for (const config of configs) {
|
|
116
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
107
117
|
plans.push(await destroyPlugin.plan({
|
|
118
|
+
core: coreParameters,
|
|
108
119
|
isStateful: true,
|
|
109
|
-
state:
|
|
120
|
+
state: parameters,
|
|
110
121
|
desired: undefined
|
|
111
122
|
}));
|
|
112
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-tester.js","sourceRoot":"","sources":["../src/plugin-tester.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAIL,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-tester.js","sourceRoot":"","sources":["../src/plugin-tester.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
package/dist/utils.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function splitUserConfig(config) {
|
|
2
|
+
const coreParameters = {
|
|
3
|
+
type: config.type,
|
|
4
|
+
...(config.name ? { name: config.name } : {}),
|
|
5
|
+
...(config.dependsOn ? { dependsOn: config.dependsOn } : {}),
|
|
6
|
+
};
|
|
7
|
+
const { type, name, dependsOn, ...parameters } = config;
|
|
8
|
+
return {
|
|
9
|
+
parameters: parameters,
|
|
10
|
+
coreParameters,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAC7B,MAA0B;IAE1B,MAAM,cAAc,GAAG;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;IAGF,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;IAExD,OAAO;QACL,UAAU,EAAE,UAAe;QAC3B,cAAc;KACf,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codify-plugin-test",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.47",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"ajv": "^8.12.0",
|
|
17
17
|
"ajv-formats": "^3.0.1",
|
|
18
|
-
"codify-schemas": "1.0.
|
|
18
|
+
"codify-schemas": "1.0.61",
|
|
19
19
|
"lodash.matches": "^4.6.0",
|
|
20
20
|
"lodash.differencewith": "4.5.0",
|
|
21
21
|
"lodash.unionby": "^4.8.0",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"tsx": "^4.7.3",
|
|
37
37
|
"typescript": "^5",
|
|
38
38
|
"vitest": "^1.4.0",
|
|
39
|
-
"codify-plugin-lib": "1.0.
|
|
39
|
+
"codify-plugin-lib": "1.0.130"
|
|
40
40
|
},
|
|
41
41
|
"engines": {
|
|
42
42
|
"node": ">=18.0.0"
|
package/src/plugin-process.ts
CHANGED
|
@@ -35,8 +35,7 @@ export class PluginProcess {
|
|
|
35
35
|
throw new Error('A fully qualified path must be supplied to PluginTester');
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
const debug = (process.env.DEBUG) ? ['--inspect-brk
|
|
39
|
-
console.log(JSON.stringify({ debug }, null, 2))
|
|
38
|
+
const debug = (process.env.DEBUG) ? ['--inspect-brk=9221'] : [];
|
|
40
39
|
|
|
41
40
|
this.childProcess = fork(
|
|
42
41
|
pluginPath,
|
|
@@ -50,9 +49,6 @@ export class PluginProcess {
|
|
|
50
49
|
},
|
|
51
50
|
)
|
|
52
51
|
|
|
53
|
-
console.log(process.env.DEBUG);
|
|
54
|
-
console.log(JSON.stringify({ debug: process.env.DEBUG }, null, 2));
|
|
55
|
-
|
|
56
52
|
this.childProcess.stderr?.pipe(process.stderr);
|
|
57
53
|
this.childProcess.stdout?.pipe(process.stdout);
|
|
58
54
|
|
|
@@ -117,8 +113,6 @@ export class PluginProcess {
|
|
|
117
113
|
}
|
|
118
114
|
|
|
119
115
|
const { command, options } = data as unknown as SudoRequestData;
|
|
120
|
-
|
|
121
|
-
console.log(`Running command with sudo: 'sudo ${command}'`)
|
|
122
116
|
const result = await sudoSpawn(command, options);
|
|
123
117
|
|
|
124
118
|
process.send(<IpcMessageV2>{
|
package/src/plugin-tester.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import unionBy from 'lodash.unionby';
|
|
9
9
|
|
|
10
10
|
import { PluginProcess } from './plugin-process.js';
|
|
11
|
+
import { splitUserConfig } from './utils.js';
|
|
11
12
|
|
|
12
13
|
export class PluginTester {
|
|
13
14
|
static async fullTest(
|
|
@@ -45,7 +46,10 @@ export class PluginTester {
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
console.info(chalk.cyan('Testing validate...'))
|
|
48
|
-
const validate = await plugin.validate({ configs
|
|
49
|
+
const validate = await plugin.validate({ configs: configs.map((c) => {
|
|
50
|
+
const { coreParameters, parameters } = splitUserConfig(c)
|
|
51
|
+
return { core: coreParameters, parameters };
|
|
52
|
+
}) });
|
|
49
53
|
|
|
50
54
|
const invalidConfigs = validate.resourceValidations.filter((v) => !v.isValid)
|
|
51
55
|
if (invalidConfigs.length > 0) {
|
|
@@ -55,8 +59,11 @@ export class PluginTester {
|
|
|
55
59
|
console.info(chalk.cyan('Testing plan...'))
|
|
56
60
|
const plans = [];
|
|
57
61
|
for (const config of configs) {
|
|
62
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
63
|
+
|
|
58
64
|
plans.push(await plugin.plan({
|
|
59
|
-
|
|
65
|
+
core: coreParameters,
|
|
66
|
+
desired: parameters,
|
|
60
67
|
isStateful: false,
|
|
61
68
|
state: undefined,
|
|
62
69
|
}));
|
|
@@ -86,7 +93,9 @@ export class PluginTester {
|
|
|
86
93
|
|
|
87
94
|
const importResults = [];
|
|
88
95
|
for (const config of configs) {
|
|
89
|
-
const
|
|
96
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
97
|
+
|
|
98
|
+
const importResult = await importPlugin.import({ core: coreParameters, parameters })
|
|
90
99
|
importResults.push(importResult);
|
|
91
100
|
}
|
|
92
101
|
|
|
@@ -105,8 +114,11 @@ export class PluginTester {
|
|
|
105
114
|
|
|
106
115
|
const modifyPlans = [];
|
|
107
116
|
for (const config of options.testModify.modifiedConfigs) {
|
|
117
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
118
|
+
|
|
108
119
|
modifyPlans.push(await modifyPlugin.plan({
|
|
109
|
-
|
|
120
|
+
core: coreParameters,
|
|
121
|
+
desired: parameters,
|
|
110
122
|
isStateful: false,
|
|
111
123
|
state: undefined,
|
|
112
124
|
}));
|
|
@@ -153,9 +165,12 @@ ${JSON.stringify(modifyPlans, null, 2)}`)
|
|
|
153
165
|
|
|
154
166
|
const plans = [];
|
|
155
167
|
for (const config of configs) {
|
|
168
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
169
|
+
|
|
156
170
|
plans.push(await destroyPlugin.plan({
|
|
171
|
+
core: coreParameters,
|
|
157
172
|
isStateful: true,
|
|
158
|
-
state:
|
|
173
|
+
state: parameters,
|
|
159
174
|
desired: undefined
|
|
160
175
|
}))
|
|
161
176
|
}
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ResourceConfig, StringIndexedObject } from 'codify-schemas';
|
|
2
|
+
|
|
3
|
+
export function splitUserConfig<T extends StringIndexedObject>(
|
|
4
|
+
config: ResourceConfig & T
|
|
5
|
+
): { parameters: T; coreParameters: ResourceConfig } {
|
|
6
|
+
const coreParameters = {
|
|
7
|
+
type: config.type,
|
|
8
|
+
...(config.name ? { name: config.name } : {}),
|
|
9
|
+
...(config.dependsOn ? { dependsOn: config.dependsOn } : {}),
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
13
|
+
const { type, name, dependsOn, ...parameters } = config;
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
parameters: parameters as T,
|
|
17
|
+
coreParameters,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -41,10 +41,14 @@ describe('Plugin tester integration tests', () => {
|
|
|
41
41
|
it('Can validate a config', async () => {
|
|
42
42
|
const result = await plugin.validate({
|
|
43
43
|
configs: [{
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
core: {
|
|
45
|
+
type: 'test',
|
|
46
|
+
},
|
|
47
|
+
parameters: {
|
|
48
|
+
propA: 'a',
|
|
49
|
+
propB: 2,
|
|
50
|
+
propC: 'c',
|
|
51
|
+
}
|
|
48
52
|
}]
|
|
49
53
|
})
|
|
50
54
|
|
|
@@ -55,8 +59,10 @@ describe('Plugin tester integration tests', () => {
|
|
|
55
59
|
|
|
56
60
|
it('Can generate a plan', async () => {
|
|
57
61
|
const result = await plugin.plan({
|
|
58
|
-
|
|
62
|
+
core: {
|
|
59
63
|
type: 'test',
|
|
64
|
+
},
|
|
65
|
+
desired: {
|
|
60
66
|
propA: 'a',
|
|
61
67
|
propB: 10,
|
|
62
68
|
propC: 'c',
|
|
@@ -74,8 +80,10 @@ describe('Plugin tester integration tests', () => {
|
|
|
74
80
|
|
|
75
81
|
it('Can generate a plan', async () => {
|
|
76
82
|
const result = await plugin.plan({
|
|
77
|
-
|
|
83
|
+
core: {
|
|
78
84
|
type: 'test',
|
|
85
|
+
},
|
|
86
|
+
desired: {
|
|
79
87
|
propA: 'a',
|
|
80
88
|
propB: 10,
|
|
81
89
|
propC: 'c',
|
|
@@ -93,8 +101,10 @@ describe('Plugin tester integration tests', () => {
|
|
|
93
101
|
|
|
94
102
|
it('Can apply a plan', async () => {
|
|
95
103
|
const plan = await plugin.plan({
|
|
96
|
-
|
|
104
|
+
core: {
|
|
97
105
|
type: 'test',
|
|
106
|
+
},
|
|
107
|
+
desired: {
|
|
98
108
|
propA: 'a',
|
|
99
109
|
propB: 10,
|
|
100
110
|
propC: 'c',
|
|
@@ -109,8 +119,10 @@ describe('Plugin tester integration tests', () => {
|
|
|
109
119
|
|
|
110
120
|
it('Handles errors that are thrown', async () => {
|
|
111
121
|
expect(async () => plugin.plan({
|
|
112
|
-
|
|
122
|
+
core: {
|
|
113
123
|
type: 'test',
|
|
124
|
+
},
|
|
125
|
+
desired: {
|
|
114
126
|
propA: 'a',
|
|
115
127
|
propB: 10,
|
|
116
128
|
propC: 'c',
|