@eclipse-che/che-e2e 7.98.0-next-5eb56bf → 7.98.0-next-04d0b55
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/specs/api/JBossEapDevFileAPI.spec.js +127 -0
- package/dist/specs/api/JBossEapDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/NodeJSMongoDBDevFileAPI.spec.js +81 -0
- package/dist/specs/api/NodeJSMongoDBDevFileAPI.spec.js.map +1 -0
- package/dist/utils/KubernetesCommandLineToolsExecutor.js +11 -2
- package/dist/utils/KubernetesCommandLineToolsExecutor.js.map +1 -1
- package/package.json +1 -1
- package/specs/api/JBossEapDevFileAPI.spec.ts +153 -0
- package/specs/api/NodeJSMongoDBDevFileAPI.spec.ts +93 -0
- package/utils/KubernetesCommandLineToolsExecutor.ts +20 -2
|
@@ -0,0 +1,127 @@
|
|
|
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
|
+
/** *******************************************************************
|
|
7
|
+
* copyright (c) 2024 Red Hat, Inc.
|
|
8
|
+
*
|
|
9
|
+
* This program and the accompanying materials are made
|
|
10
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
11
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
12
|
+
*
|
|
13
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
14
|
+
**********************************************************************/
|
|
15
|
+
const BASE_TEST_CONSTANTS_1 = require("../../constants/BASE_TEST_CONSTANTS");
|
|
16
|
+
const inversify_config_1 = require("../../configs/inversify.config");
|
|
17
|
+
const inversify_types_1 = require("../../configs/inversify.types");
|
|
18
|
+
const DevWorkspaceConfigurationHelper_1 = require("../../utils/DevWorkspaceConfigurationHelper");
|
|
19
|
+
const chai_1 = require("chai");
|
|
20
|
+
const API_TEST_CONSTANTS_1 = require("../../constants/API_TEST_CONSTANTS");
|
|
21
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
22
|
+
const Logger_1 = require("../../utils/Logger");
|
|
23
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
24
|
+
suite('JBoss EAP devfile API test', function () {
|
|
25
|
+
const devfilesRegistryHelper = inversify_config_1.e2eContainer.get(inversify_types_1.CLASSES.DevfilesRegistryHelper);
|
|
26
|
+
const kubernetesCommandLineToolsExecutor = inversify_config_1.e2eContainer.get(inversify_types_1.CLASSES.KubernetesCommandLineToolsExecutor);
|
|
27
|
+
const devfileID = 'java-jboss-eap';
|
|
28
|
+
const containerTerminal = inversify_config_1.e2eContainer.get(inversify_types_1.CLASSES.ContainerTerminal);
|
|
29
|
+
let devWorkspaceConfigurationHelper;
|
|
30
|
+
let devfileContext;
|
|
31
|
+
let devfileContent = '';
|
|
32
|
+
let devfileName = '';
|
|
33
|
+
suiteSetup(`Prepare login ${BASE_TEST_CONSTANTS_1.BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function () {
|
|
34
|
+
kubernetesCommandLineToolsExecutor.loginToOcp();
|
|
35
|
+
});
|
|
36
|
+
test(`Create ${devfileID} workspace`, async function () {
|
|
37
|
+
const randomPref = crypto_1.default.randomBytes(4).toString('hex');
|
|
38
|
+
kubernetesCommandLineToolsExecutor.namespace = API_TEST_CONSTANTS_1.API_TEST_CONSTANTS.TS_API_TEST_NAMESPACE || 'admin-devspaces';
|
|
39
|
+
devfileContent = devfilesRegistryHelper.getDevfileContent(devfileID);
|
|
40
|
+
const editorDevfileContent = devfilesRegistryHelper.obtainCheDevFileEditorFromCheConfigMap('editors-definitions');
|
|
41
|
+
devfileName = yaml_1.default.parse(devfileContent).metadata.name;
|
|
42
|
+
const uniqueName = yaml_1.default.parse(devfileContent).metadata.name + randomPref;
|
|
43
|
+
kubernetesCommandLineToolsExecutor.workspaceName = uniqueName;
|
|
44
|
+
devWorkspaceConfigurationHelper = new DevWorkspaceConfigurationHelper_1.DevWorkspaceConfigurationHelper({
|
|
45
|
+
editorContent: editorDevfileContent,
|
|
46
|
+
devfileContent: devfileContent
|
|
47
|
+
});
|
|
48
|
+
devfileContext = await devWorkspaceConfigurationHelper.generateDevfileContext();
|
|
49
|
+
if (devfileContext.devWorkspace.metadata) {
|
|
50
|
+
devfileContext.devWorkspace.metadata.name = uniqueName;
|
|
51
|
+
}
|
|
52
|
+
const devWorkspaceConfigurationYamlString = devWorkspaceConfigurationHelper.getDevWorkspaceConfigurationYamlAsString(devfileContext);
|
|
53
|
+
const output = kubernetesCommandLineToolsExecutor.applyAndWaitDevWorkspace(devWorkspaceConfigurationYamlString);
|
|
54
|
+
(0, chai_1.expect)(output.stdout).contains('condition met');
|
|
55
|
+
});
|
|
56
|
+
test('Check "package" command', function () {
|
|
57
|
+
const containerName = yaml_1.default.parse(devfileContent).commands[0].exec.component;
|
|
58
|
+
if (BASE_TEST_CONSTANTS_1.BASE_TEST_CONSTANTS.IS_CLUSTER_DISCONNECTED()) {
|
|
59
|
+
Logger_1.Logger.info('Test cluster is disconnected. Init Java Truststore...');
|
|
60
|
+
const initJavaTruststoreCommand = 'cp /home/user/init-java-truststore.sh /tmp && chmod +x /tmp/init-java-truststore.sh && /tmp/init-java-truststore.sh';
|
|
61
|
+
const output = containerTerminal.execInContainerCommand(initJavaTruststoreCommand, containerName);
|
|
62
|
+
(0, chai_1.expect)(output.code).eqls(0);
|
|
63
|
+
}
|
|
64
|
+
const workdir = yaml_1.default.parse(devfileContent).commands[0].exec.workingDir;
|
|
65
|
+
const commandLine = yaml_1.default.parse(devfileContent).commands[0].exec.commandLine;
|
|
66
|
+
Logger_1.Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
67
|
+
Logger_1.Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
68
|
+
let runCommandInBash = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
69
|
+
if (workdir !== undefined && workdir !== '') {
|
|
70
|
+
runCommandInBash = `cd ${workdir} && ` + runCommandInBash;
|
|
71
|
+
}
|
|
72
|
+
const output = containerTerminal.execInContainerCommand(runCommandInBash, containerName);
|
|
73
|
+
(0, chai_1.expect)(output.code).eqls(0);
|
|
74
|
+
const outputText = output.stdout.trim();
|
|
75
|
+
(0, chai_1.expect)(outputText).contains('BUILD SUCCESS');
|
|
76
|
+
});
|
|
77
|
+
test('Check "run" command', function () {
|
|
78
|
+
const workdir = yaml_1.default.parse(devfileContent).commands[1].exec.workingDir;
|
|
79
|
+
const commandLine = yaml_1.default.parse(devfileContent).commands[1].exec.commandLine;
|
|
80
|
+
const containerName = yaml_1.default.parse(devfileContent).commands[1].exec.component;
|
|
81
|
+
Logger_1.Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
82
|
+
Logger_1.Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
83
|
+
let runCommandInBash = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
84
|
+
if (workdir !== undefined && workdir !== '') {
|
|
85
|
+
runCommandInBash = `cd ${workdir} && sh -c "(` + runCommandInBash + ' > command.log 2>&1 &) && sleep 15s && exit"';
|
|
86
|
+
}
|
|
87
|
+
let commandOutput = containerTerminal.execInContainerCommand(runCommandInBash, containerName);
|
|
88
|
+
(0, chai_1.expect)(commandOutput.code).eqls(0);
|
|
89
|
+
commandOutput = containerTerminal.execInContainerCommand(`cat ${workdir}/command.log`, containerName);
|
|
90
|
+
const commandLog = commandOutput.stdout.trim();
|
|
91
|
+
(0, chai_1.expect)(commandLog).contains('Server configuration file in use: standalone.xml');
|
|
92
|
+
});
|
|
93
|
+
test('Check "shutdown" command', function () {
|
|
94
|
+
const workdir = yaml_1.default.parse(devfileContent).commands[3].exec.workingDir;
|
|
95
|
+
const commandLine = yaml_1.default.parse(devfileContent).commands[3].exec.commandLine;
|
|
96
|
+
const containerName = yaml_1.default.parse(devfileContent).commands[3].exec.component;
|
|
97
|
+
Logger_1.Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
98
|
+
Logger_1.Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
99
|
+
let runCommandInBash = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
100
|
+
if (workdir !== undefined && workdir !== '') {
|
|
101
|
+
runCommandInBash = `cd ${workdir} && ` + runCommandInBash;
|
|
102
|
+
}
|
|
103
|
+
const output = containerTerminal.execInContainerCommand(runCommandInBash, containerName);
|
|
104
|
+
(0, chai_1.expect)(output.code).eqls(0);
|
|
105
|
+
});
|
|
106
|
+
test('Check "debug" command', function () {
|
|
107
|
+
const workdir = yaml_1.default.parse(devfileContent).commands[2].exec.workingDir;
|
|
108
|
+
const commandLine = yaml_1.default.parse(devfileContent).commands[2].exec.commandLine;
|
|
109
|
+
const containerName = yaml_1.default.parse(devfileContent).commands[2].exec.component;
|
|
110
|
+
Logger_1.Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
111
|
+
Logger_1.Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
112
|
+
let runCommandInBash = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
113
|
+
if (workdir !== undefined && workdir !== '') {
|
|
114
|
+
runCommandInBash = `cd ${workdir} && sh -c "(` + runCommandInBash + ' > command.log 2>&1 &) && sleep 15s && exit"';
|
|
115
|
+
}
|
|
116
|
+
let commandOutput = containerTerminal.execInContainerCommand(runCommandInBash, containerName);
|
|
117
|
+
(0, chai_1.expect)(commandOutput.code).eqls(0);
|
|
118
|
+
commandOutput = containerTerminal.execInContainerCommand(`cat ${workdir}/command.log`, containerName);
|
|
119
|
+
const commandLog = commandOutput.stdout.trim();
|
|
120
|
+
(0, chai_1.expect)(commandLog).contains('Listening for transport dt_socket at address: 5005');
|
|
121
|
+
(0, chai_1.expect)(commandLog).contains('Server configuration file in use: standalone.xml');
|
|
122
|
+
});
|
|
123
|
+
suiteTeardown('Delete workspace', function () {
|
|
124
|
+
kubernetesCommandLineToolsExecutor.deleteDevWorkspace(devfileName);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=JBossEapDevFileAPI.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JBossEapDevFileAPI.spec.js","sourceRoot":"","sources":["../../../specs/api/JBossEapDevFileAPI.spec.ts"],"names":[],"mappings":";;;;;AAAA;;;;;;;;wEAQwE;AACxE,6EAA0E;AAC1E,qEAA8D;AAC9D,mEAAwD;AAGxD,iGAA8F;AAG9F,+BAA8B;AAC9B,2EAAwE;AACxE,gDAAwB;AACxB,+CAA4C;AAC5C,oDAA4B;AAE5B,KAAK,CAAC,4BAA4B,EAAE;IACnC,MAAM,sBAAsB,GAAmB,+BAAY,CAAC,GAAG,CAAC,yBAAO,CAAC,sBAAsB,CAAC,CAAC;IAChG,MAAM,kCAAkC,GAAuC,+BAAY,CAAC,GAAG,CAC9F,yBAAO,CAAC,kCAAkC,CAC1C,CAAC;IACF,MAAM,SAAS,GAAW,gBAAgB,CAAC;IAC3C,MAAM,iBAAiB,GAAsB,+BAAY,CAAC,GAAG,CAAC,yBAAO,CAAC,iBAAiB,CAAC,CAAC;IACzF,IAAI,+BAAgE,CAAC;IACrE,IAAI,cAA8B,CAAC;IACnC,IAAI,cAAc,GAAW,EAAE,CAAC;IAChC,IAAI,WAAW,GAAW,EAAE,CAAC;IAE7B,UAAU,CAAC,iBAAiB,yCAAmB,CAAC,gBAAgB,EAAE,EAAE;QACnE,kCAAkC,CAAC,UAAU,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,SAAS,YAAY,EAAE,KAAK;QAC1C,MAAM,UAAU,GAAW,gBAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjE,kCAAkC,CAAC,SAAS,GAAG,uCAAkB,CAAC,qBAAqB,IAAI,iBAAiB,CAAC;QAC7G,cAAc,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,oBAAoB,GAAW,sBAAsB,CAAC,sCAAsC,CAAC,qBAAqB,CAAC,CAAC;QAC1H,WAAW,GAAG,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvD,MAAM,UAAU,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;QACjF,kCAAkC,CAAC,aAAa,GAAG,UAAU,CAAC;QAE9D,+BAA+B,GAAG,IAAI,iEAA+B,CAAC;YACrE,aAAa,EAAE,oBAAoB;YACnC,cAAc,EAAE,cAAc;SAC9B,CAAC,CAAC;QACH,cAAc,GAAG,MAAM,+BAA+B,CAAC,sBAAsB,EAAE,CAAC;QAChF,IAAI,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE;YACzC,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;SACvD;QACD,MAAM,mCAAmC,GACxC,+BAA+B,CAAC,wCAAwC,CAAC,cAAc,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAgB,kCAAkC,CAAC,wBAAwB,CAAC,mCAAmC,CAAC,CAAC;QAC7H,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yBAAyB,EAAE;QAC/B,MAAM,aAAa,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAEpF,IAAI,yCAAmB,CAAC,uBAAuB,EAAE,EAAE;YAClD,eAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACrE,MAAM,yBAAyB,GAC9B,qHAAqH,CAAC;YACvH,MAAM,MAAM,GAAgB,iBAAiB,CAAC,sBAAsB,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAC;YAC/G,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC5B;QAED,MAAM,OAAO,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/E,MAAM,WAAW,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACpF,eAAM,CAAC,IAAI,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;QAC1E,eAAM,CAAC,IAAI,CAAC,uDAAuD,WAAW,EAAE,CAAC,CAAC;QAElF,IAAI,gBAAgB,GAAW,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,mDAAmD;QACtH,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE;YAC5C,gBAAgB,GAAG,MAAM,OAAO,MAAM,GAAG,gBAAgB,CAAC;SAC1D;QAED,MAAM,MAAM,GAAgB,iBAAiB,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACtG,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,UAAU,GAAW,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChD,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qBAAqB,EAAE;QAC3B,MAAM,OAAO,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/E,MAAM,WAAW,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACpF,MAAM,aAAa,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACpF,eAAM,CAAC,IAAI,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;QAC1E,eAAM,CAAC,IAAI,CAAC,uDAAuD,WAAW,EAAE,CAAC,CAAC;QAElF,IAAI,gBAAgB,GAAW,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,mDAAmD;QACtH,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE;YAC5C,gBAAgB,GAAG,MAAM,OAAO,cAAc,GAAG,gBAAgB,GAAG,8CAA8C,CAAC;SACnH;QAED,IAAI,aAAa,GAAgB,iBAAiB,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAC3G,IAAA,aAAM,EAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnC,aAAa,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,OAAO,OAAO,cAAc,EAAE,aAAa,CAAC,CAAC;QACtG,MAAM,UAAU,GAAW,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAEvD,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0BAA0B,EAAE;QAChC,MAAM,OAAO,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/E,MAAM,WAAW,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACpF,MAAM,aAAa,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACpF,eAAM,CAAC,IAAI,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;QAC1E,eAAM,CAAC,IAAI,CAAC,uDAAuD,WAAW,EAAE,CAAC,CAAC;QAElF,IAAI,gBAAgB,GAAW,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,mDAAmD;QACtH,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE;YAC5C,gBAAgB,GAAG,MAAM,OAAO,MAAM,GAAG,gBAAgB,CAAC;SAC1D;QAED,MAAM,MAAM,GAAgB,iBAAiB,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACtG,IAAA,aAAM,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE;QAC7B,MAAM,OAAO,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/E,MAAM,WAAW,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACpF,MAAM,aAAa,GAAW,cAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACpF,eAAM,CAAC,IAAI,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;QAC1E,eAAM,CAAC,IAAI,CAAC,uDAAuD,WAAW,EAAE,CAAC,CAAC;QAElF,IAAI,gBAAgB,GAAW,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,mDAAmD;QACtH,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE;YAC5C,gBAAgB,GAAG,MAAM,OAAO,cAAc,GAAG,gBAAgB,GAAG,8CAA8C,CAAC;SACnH;QAED,IAAI,aAAa,GAAgB,iBAAiB,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAC3G,IAAA,aAAM,EAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEnC,aAAa,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,OAAO,OAAO,cAAc,EAAE,aAAa,CAAC,CAAC;QACtG,MAAM,UAAU,GAAW,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAEvD,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC,CAAC;QAClF,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,aAAa,CAAC,kBAAkB,EAAE;QACjC,kCAAkC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
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
|
+
/** *******************************************************************
|
|
7
|
+
* copyright (c) 2024 Red Hat, Inc.
|
|
8
|
+
*
|
|
9
|
+
* This program and the accompanying materials are made
|
|
10
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
11
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
12
|
+
*
|
|
13
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
14
|
+
**********************************************************************/
|
|
15
|
+
const BASE_TEST_CONSTANTS_1 = require("../../constants/BASE_TEST_CONSTANTS");
|
|
16
|
+
const inversify_config_1 = require("../../configs/inversify.config");
|
|
17
|
+
const inversify_types_1 = require("../../configs/inversify.types");
|
|
18
|
+
const DevWorkspaceConfigurationHelper_1 = require("../../utils/DevWorkspaceConfigurationHelper");
|
|
19
|
+
const chai_1 = require("chai");
|
|
20
|
+
const API_TEST_CONSTANTS_1 = require("../../constants/API_TEST_CONSTANTS");
|
|
21
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
22
|
+
const Logger_1 = require("../../utils/Logger");
|
|
23
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
24
|
+
suite('NodeJS MongoDB devfile API test', function () {
|
|
25
|
+
const devfilesRegistryHelper = inversify_config_1.e2eContainer.get(inversify_types_1.CLASSES.DevfilesRegistryHelper);
|
|
26
|
+
const kubernetesCommandLineToolsExecutor = inversify_config_1.e2eContainer.get(inversify_types_1.CLASSES.KubernetesCommandLineToolsExecutor);
|
|
27
|
+
const devfileID = 'nodejs-mongodb';
|
|
28
|
+
const containerTerminal = inversify_config_1.e2eContainer.get(inversify_types_1.CLASSES.ContainerTerminal);
|
|
29
|
+
let devWorkspaceConfigurationHelper;
|
|
30
|
+
let devfileContext;
|
|
31
|
+
let devfileContent = '';
|
|
32
|
+
let devfileName = '';
|
|
33
|
+
suiteSetup(`Prepare login ${BASE_TEST_CONSTANTS_1.BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function () {
|
|
34
|
+
kubernetesCommandLineToolsExecutor.loginToOcp();
|
|
35
|
+
});
|
|
36
|
+
test(`Create ${devfileID} workspace`, async function () {
|
|
37
|
+
const randomPref = crypto_1.default.randomBytes(4).toString('hex');
|
|
38
|
+
kubernetesCommandLineToolsExecutor.namespace = API_TEST_CONSTANTS_1.API_TEST_CONSTANTS.TS_API_TEST_NAMESPACE || 'admin-devspaces';
|
|
39
|
+
devfileContent = devfilesRegistryHelper.getDevfileContent(devfileID);
|
|
40
|
+
const editorDevfileContent = devfilesRegistryHelper.obtainCheDevFileEditorFromCheConfigMap('editors-definitions');
|
|
41
|
+
devfileName = yaml_1.default.parse(devfileContent).metadata.name;
|
|
42
|
+
const uniqueName = yaml_1.default.parse(devfileContent).metadata.name + randomPref;
|
|
43
|
+
kubernetesCommandLineToolsExecutor.workspaceName = uniqueName;
|
|
44
|
+
devWorkspaceConfigurationHelper = new DevWorkspaceConfigurationHelper_1.DevWorkspaceConfigurationHelper({
|
|
45
|
+
editorContent: editorDevfileContent,
|
|
46
|
+
devfileContent: devfileContent
|
|
47
|
+
});
|
|
48
|
+
devfileContext = await devWorkspaceConfigurationHelper.generateDevfileContext();
|
|
49
|
+
if (devfileContext.devWorkspace.metadata) {
|
|
50
|
+
devfileContext.devWorkspace.metadata.name = uniqueName;
|
|
51
|
+
}
|
|
52
|
+
const devWorkspaceConfigurationYamlString = devWorkspaceConfigurationHelper.getDevWorkspaceConfigurationYamlAsString(devfileContext);
|
|
53
|
+
const output = kubernetesCommandLineToolsExecutor.applyAndWaitDevWorkspace(devWorkspaceConfigurationYamlString);
|
|
54
|
+
(0, chai_1.expect)(output.stdout).contains('condition met');
|
|
55
|
+
});
|
|
56
|
+
test('Check "Run the application" command', function () {
|
|
57
|
+
const containerName = yaml_1.default.parse(devfileContent).commands[0].exec.component;
|
|
58
|
+
if (BASE_TEST_CONSTANTS_1.BASE_TEST_CONSTANTS.IS_CLUSTER_DISCONNECTED()) {
|
|
59
|
+
Logger_1.Logger.info('Test cluster is disconnected. Ignore Self-Signed Certificate error.');
|
|
60
|
+
const ignoreSelfSignedCertificateErrorCommand = 'npm config set strict-ssl false';
|
|
61
|
+
const output = containerTerminal.execInContainerCommand(ignoreSelfSignedCertificateErrorCommand, containerName);
|
|
62
|
+
(0, chai_1.expect)(output.code).eqls(0);
|
|
63
|
+
}
|
|
64
|
+
const workdir = yaml_1.default.parse(devfileContent).commands[0].exec.workingDir;
|
|
65
|
+
const commandLine = yaml_1.default.parse(devfileContent).commands[0].exec.commandLine;
|
|
66
|
+
Logger_1.Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
67
|
+
Logger_1.Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
68
|
+
let runCommandInBash = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
69
|
+
if (workdir !== undefined && workdir !== '') {
|
|
70
|
+
runCommandInBash = `cd ${workdir} && ` + runCommandInBash;
|
|
71
|
+
}
|
|
72
|
+
const output = containerTerminal.execInContainerCommandWithTimeout(runCommandInBash, containerName);
|
|
73
|
+
(0, chai_1.expect)(output.code).eqls(124);
|
|
74
|
+
const outputText = output.stdout.trim();
|
|
75
|
+
(0, chai_1.expect)(outputText).contains('App listening on port 8080');
|
|
76
|
+
});
|
|
77
|
+
suiteTeardown('Delete workspace', function () {
|
|
78
|
+
kubernetesCommandLineToolsExecutor.deleteDevWorkspace(devfileName);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=NodeJSMongoDBDevFileAPI.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeJSMongoDBDevFileAPI.spec.js","sourceRoot":"","sources":["../../../specs/api/NodeJSMongoDBDevFileAPI.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,7 @@ const BASE_TEST_CONSTANTS_1 = require("../constants/BASE_TEST_CONSTANTS");
|
|
|
55
55
|
const OAUTH_CONSTANTS_1 = require("../constants/OAUTH_CONSTANTS");
|
|
56
56
|
const inversify_1 = require("inversify");
|
|
57
57
|
const inversify_types_1 = require("../configs/inversify.types");
|
|
58
|
+
const fs = __importStar(require("fs"));
|
|
58
59
|
let KubernetesCommandLineToolsExecutor = KubernetesCommandLineToolsExecutor_1 = class KubernetesCommandLineToolsExecutor {
|
|
59
60
|
constructor(shellExecutor) {
|
|
60
61
|
this.shellExecutor = shellExecutor;
|
|
@@ -136,11 +137,19 @@ let KubernetesCommandLineToolsExecutor = KubernetesCommandLineToolsExecutor_1 =
|
|
|
136
137
|
}
|
|
137
138
|
execInContainerCommand(commandToExecute, container = KubernetesCommandLineToolsExecutor_1.container) {
|
|
138
139
|
Logger_1.Logger.debug(`${this.kubernetesCommandLineTool}`);
|
|
139
|
-
return this.shellExecutor.executeCommand(`${this.kubernetesCommandLineTool} exec -i ${KubernetesCommandLineToolsExecutor_1.pod} -n ${this.namespace} -c ${container} -- sh -c '${commandToExecute}'`);
|
|
140
|
+
return this.shellExecutor.executeCommand(`${this.kubernetesCommandLineTool} exec -i -t ${KubernetesCommandLineToolsExecutor_1.pod} -n ${this.namespace} -c ${container} -- sh -c '${commandToExecute}'`);
|
|
141
|
+
}
|
|
142
|
+
execInContainerCommandWithTimeout(commandToExecute, container = KubernetesCommandLineToolsExecutor_1.container, timeout = '20') {
|
|
143
|
+
Logger_1.Logger.debug(`${this.kubernetesCommandLineTool}`);
|
|
144
|
+
return this.shellExecutor.executeCommand(` timeout ${timeout} ${this.kubernetesCommandLineTool} exec -i ${KubernetesCommandLineToolsExecutor_1.pod} -n ${this.namespace} -c ${container} -- sh -c '${commandToExecute}'`);
|
|
140
145
|
}
|
|
141
146
|
applyYamlConfigurationAsStringOutput(yamlConfiguration) {
|
|
142
147
|
Logger_1.Logger.debug(`${this.kubernetesCommandLineTool}`);
|
|
143
|
-
|
|
148
|
+
// write yaml configuration to the devfile file
|
|
149
|
+
const randomSuffix = Math.floor(Math.random() * 10000);
|
|
150
|
+
const devfileYamlPath = `/tmp/devfile-${randomSuffix}.yaml`;
|
|
151
|
+
fs.writeFileSync(devfileYamlPath, yamlConfiguration);
|
|
152
|
+
return this.shellExecutor.executeCommand(`${this.kubernetesCommandLineTool} apply -n ${this.namespace} -f ${devfileYamlPath} && rm -f ${devfileYamlPath}`);
|
|
144
153
|
}
|
|
145
154
|
applyWithoutNamespace(yamlConfiguration) {
|
|
146
155
|
Logger_1.Logger.debug(`${this.kubernetesCommandLineTool}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KubernetesCommandLineToolsExecutor.js","sourceRoot":"","sources":["../../utils/KubernetesCommandLineToolsExecutor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;wEAQwE;AACxE,qCAAkD;AAClD,qCAAkC;AAClC,mDAAgD;AAChD,2CAA6B;AAC7B,wEAAgG;AAChG,0EAAuE;AACvE,kEAA+D;AAE/D,yCAA+C;AAC/C,gEAAqD;
|
|
1
|
+
{"version":3,"file":"KubernetesCommandLineToolsExecutor.js","sourceRoot":"","sources":["../../utils/KubernetesCommandLineToolsExecutor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/** *******************************************************************
|
|
2
|
+
* copyright (c) 2024 Red Hat, Inc.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made
|
|
5
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
**********************************************************************/
|
|
10
|
+
import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS';
|
|
11
|
+
import { e2eContainer } from '../../configs/inversify.config';
|
|
12
|
+
import { CLASSES } from '../../configs/inversify.types';
|
|
13
|
+
import { DevfilesHelper } from '../../utils/DevfilesHelper';
|
|
14
|
+
import { ContainerTerminal, KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesCommandLineToolsExecutor';
|
|
15
|
+
import { DevWorkspaceConfigurationHelper } from '../../utils/DevWorkspaceConfigurationHelper';
|
|
16
|
+
import { DevfileContext } from '@eclipse-che/che-devworkspace-generator/lib/api/devfile-context';
|
|
17
|
+
import { ShellString } from 'shelljs';
|
|
18
|
+
import { expect } from 'chai';
|
|
19
|
+
import { API_TEST_CONSTANTS } from '../../constants/API_TEST_CONSTANTS';
|
|
20
|
+
import YAML from 'yaml';
|
|
21
|
+
import { Logger } from '../../utils/Logger';
|
|
22
|
+
import crypto from 'crypto';
|
|
23
|
+
|
|
24
|
+
suite('JBoss EAP devfile API test', function (): void {
|
|
25
|
+
const devfilesRegistryHelper: DevfilesHelper = e2eContainer.get(CLASSES.DevfilesRegistryHelper);
|
|
26
|
+
const kubernetesCommandLineToolsExecutor: KubernetesCommandLineToolsExecutor = e2eContainer.get(
|
|
27
|
+
CLASSES.KubernetesCommandLineToolsExecutor
|
|
28
|
+
);
|
|
29
|
+
const devfileID: string = 'java-jboss-eap';
|
|
30
|
+
const containerTerminal: ContainerTerminal = e2eContainer.get(CLASSES.ContainerTerminal);
|
|
31
|
+
let devWorkspaceConfigurationHelper: DevWorkspaceConfigurationHelper;
|
|
32
|
+
let devfileContext: DevfileContext;
|
|
33
|
+
let devfileContent: string = '';
|
|
34
|
+
let devfileName: string = '';
|
|
35
|
+
|
|
36
|
+
suiteSetup(`Prepare login ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): void {
|
|
37
|
+
kubernetesCommandLineToolsExecutor.loginToOcp();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test(`Create ${devfileID} workspace`, async function (): Promise<void> {
|
|
41
|
+
const randomPref: string = crypto.randomBytes(4).toString('hex');
|
|
42
|
+
kubernetesCommandLineToolsExecutor.namespace = API_TEST_CONSTANTS.TS_API_TEST_NAMESPACE || 'admin-devspaces';
|
|
43
|
+
devfileContent = devfilesRegistryHelper.getDevfileContent(devfileID);
|
|
44
|
+
const editorDevfileContent: string = devfilesRegistryHelper.obtainCheDevFileEditorFromCheConfigMap('editors-definitions');
|
|
45
|
+
devfileName = YAML.parse(devfileContent).metadata.name;
|
|
46
|
+
const uniqueName: string = YAML.parse(devfileContent).metadata.name + randomPref;
|
|
47
|
+
kubernetesCommandLineToolsExecutor.workspaceName = uniqueName;
|
|
48
|
+
|
|
49
|
+
devWorkspaceConfigurationHelper = new DevWorkspaceConfigurationHelper({
|
|
50
|
+
editorContent: editorDevfileContent,
|
|
51
|
+
devfileContent: devfileContent
|
|
52
|
+
});
|
|
53
|
+
devfileContext = await devWorkspaceConfigurationHelper.generateDevfileContext();
|
|
54
|
+
if (devfileContext.devWorkspace.metadata) {
|
|
55
|
+
devfileContext.devWorkspace.metadata.name = uniqueName;
|
|
56
|
+
}
|
|
57
|
+
const devWorkspaceConfigurationYamlString: string =
|
|
58
|
+
devWorkspaceConfigurationHelper.getDevWorkspaceConfigurationYamlAsString(devfileContext);
|
|
59
|
+
const output: ShellString = kubernetesCommandLineToolsExecutor.applyAndWaitDevWorkspace(devWorkspaceConfigurationYamlString);
|
|
60
|
+
expect(output.stdout).contains('condition met');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('Check "package" command', function (): void {
|
|
64
|
+
const containerName: string = YAML.parse(devfileContent).commands[0].exec.component;
|
|
65
|
+
|
|
66
|
+
if (BASE_TEST_CONSTANTS.IS_CLUSTER_DISCONNECTED()) {
|
|
67
|
+
Logger.info('Test cluster is disconnected. Init Java Truststore...');
|
|
68
|
+
const initJavaTruststoreCommand: string =
|
|
69
|
+
'cp /home/user/init-java-truststore.sh /tmp && chmod +x /tmp/init-java-truststore.sh && /tmp/init-java-truststore.sh';
|
|
70
|
+
const output: ShellString = containerTerminal.execInContainerCommand(initJavaTruststoreCommand, containerName);
|
|
71
|
+
expect(output.code).eqls(0);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const workdir: string = YAML.parse(devfileContent).commands[0].exec.workingDir;
|
|
75
|
+
const commandLine: string = YAML.parse(devfileContent).commands[0].exec.commandLine;
|
|
76
|
+
Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
77
|
+
Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
78
|
+
|
|
79
|
+
let runCommandInBash: string = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
80
|
+
if (workdir !== undefined && workdir !== '') {
|
|
81
|
+
runCommandInBash = `cd ${workdir} && ` + runCommandInBash;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const output: ShellString = containerTerminal.execInContainerCommand(runCommandInBash, containerName);
|
|
85
|
+
expect(output.code).eqls(0);
|
|
86
|
+
|
|
87
|
+
const outputText: string = output.stdout.trim();
|
|
88
|
+
expect(outputText).contains('BUILD SUCCESS');
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test('Check "run" command', function (): void {
|
|
92
|
+
const workdir: string = YAML.parse(devfileContent).commands[1].exec.workingDir;
|
|
93
|
+
const commandLine: string = YAML.parse(devfileContent).commands[1].exec.commandLine;
|
|
94
|
+
const containerName: string = YAML.parse(devfileContent).commands[1].exec.component;
|
|
95
|
+
Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
96
|
+
Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
97
|
+
|
|
98
|
+
let runCommandInBash: string = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
99
|
+
if (workdir !== undefined && workdir !== '') {
|
|
100
|
+
runCommandInBash = `cd ${workdir} && sh -c "(` + runCommandInBash + ' > command.log 2>&1 &) && sleep 15s && exit"';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
let commandOutput: ShellString = containerTerminal.execInContainerCommand(runCommandInBash, containerName);
|
|
104
|
+
expect(commandOutput.code).eqls(0);
|
|
105
|
+
|
|
106
|
+
commandOutput = containerTerminal.execInContainerCommand(`cat ${workdir}/command.log`, containerName);
|
|
107
|
+
const commandLog: string = commandOutput.stdout.trim();
|
|
108
|
+
|
|
109
|
+
expect(commandLog).contains('Server configuration file in use: standalone.xml');
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test('Check "shutdown" command', function (): void {
|
|
113
|
+
const workdir: string = YAML.parse(devfileContent).commands[3].exec.workingDir;
|
|
114
|
+
const commandLine: string = YAML.parse(devfileContent).commands[3].exec.commandLine;
|
|
115
|
+
const containerName: string = YAML.parse(devfileContent).commands[3].exec.component;
|
|
116
|
+
Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
117
|
+
Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
118
|
+
|
|
119
|
+
let runCommandInBash: string = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
120
|
+
if (workdir !== undefined && workdir !== '') {
|
|
121
|
+
runCommandInBash = `cd ${workdir} && ` + runCommandInBash;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const output: ShellString = containerTerminal.execInContainerCommand(runCommandInBash, containerName);
|
|
125
|
+
expect(output.code).eqls(0);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
test('Check "debug" command', function (): void {
|
|
129
|
+
const workdir: string = YAML.parse(devfileContent).commands[2].exec.workingDir;
|
|
130
|
+
const commandLine: string = YAML.parse(devfileContent).commands[2].exec.commandLine;
|
|
131
|
+
const containerName: string = YAML.parse(devfileContent).commands[2].exec.component;
|
|
132
|
+
Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
133
|
+
Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
134
|
+
|
|
135
|
+
let runCommandInBash: string = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
136
|
+
if (workdir !== undefined && workdir !== '') {
|
|
137
|
+
runCommandInBash = `cd ${workdir} && sh -c "(` + runCommandInBash + ' > command.log 2>&1 &) && sleep 15s && exit"';
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
let commandOutput: ShellString = containerTerminal.execInContainerCommand(runCommandInBash, containerName);
|
|
141
|
+
expect(commandOutput.code).eqls(0);
|
|
142
|
+
|
|
143
|
+
commandOutput = containerTerminal.execInContainerCommand(`cat ${workdir}/command.log`, containerName);
|
|
144
|
+
const commandLog: string = commandOutput.stdout.trim();
|
|
145
|
+
|
|
146
|
+
expect(commandLog).contains('Listening for transport dt_socket at address: 5005');
|
|
147
|
+
expect(commandLog).contains('Server configuration file in use: standalone.xml');
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
suiteTeardown('Delete workspace', function (): void {
|
|
151
|
+
kubernetesCommandLineToolsExecutor.deleteDevWorkspace(devfileName);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/** *******************************************************************
|
|
2
|
+
* copyright (c) 2024 Red Hat, Inc.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made
|
|
5
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
**********************************************************************/
|
|
10
|
+
import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS';
|
|
11
|
+
import { e2eContainer } from '../../configs/inversify.config';
|
|
12
|
+
import { CLASSES } from '../../configs/inversify.types';
|
|
13
|
+
import { DevfilesHelper } from '../../utils/DevfilesHelper';
|
|
14
|
+
import { ContainerTerminal, KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesCommandLineToolsExecutor';
|
|
15
|
+
import { DevWorkspaceConfigurationHelper } from '../../utils/DevWorkspaceConfigurationHelper';
|
|
16
|
+
import { DevfileContext } from '@eclipse-che/che-devworkspace-generator/lib/api/devfile-context';
|
|
17
|
+
import { ShellString } from 'shelljs';
|
|
18
|
+
import { expect } from 'chai';
|
|
19
|
+
import { API_TEST_CONSTANTS } from '../../constants/API_TEST_CONSTANTS';
|
|
20
|
+
import YAML from 'yaml';
|
|
21
|
+
import { Logger } from '../../utils/Logger';
|
|
22
|
+
import crypto from 'crypto';
|
|
23
|
+
|
|
24
|
+
suite('NodeJS MongoDB devfile API test', function (): void {
|
|
25
|
+
const devfilesRegistryHelper: DevfilesHelper = e2eContainer.get(CLASSES.DevfilesRegistryHelper);
|
|
26
|
+
const kubernetesCommandLineToolsExecutor: KubernetesCommandLineToolsExecutor = e2eContainer.get(
|
|
27
|
+
CLASSES.KubernetesCommandLineToolsExecutor
|
|
28
|
+
);
|
|
29
|
+
const devfileID: string = 'nodejs-mongodb';
|
|
30
|
+
const containerTerminal: ContainerTerminal = e2eContainer.get(CLASSES.ContainerTerminal);
|
|
31
|
+
let devWorkspaceConfigurationHelper: DevWorkspaceConfigurationHelper;
|
|
32
|
+
let devfileContext: DevfileContext;
|
|
33
|
+
let devfileContent: string = '';
|
|
34
|
+
let devfileName: string = '';
|
|
35
|
+
|
|
36
|
+
suiteSetup(`Prepare login ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): void {
|
|
37
|
+
kubernetesCommandLineToolsExecutor.loginToOcp();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test(`Create ${devfileID} workspace`, async function (): Promise<void> {
|
|
41
|
+
const randomPref: string = crypto.randomBytes(4).toString('hex');
|
|
42
|
+
kubernetesCommandLineToolsExecutor.namespace = API_TEST_CONSTANTS.TS_API_TEST_NAMESPACE || 'admin-devspaces';
|
|
43
|
+
devfileContent = devfilesRegistryHelper.getDevfileContent(devfileID);
|
|
44
|
+
const editorDevfileContent: string = devfilesRegistryHelper.obtainCheDevFileEditorFromCheConfigMap('editors-definitions');
|
|
45
|
+
devfileName = YAML.parse(devfileContent).metadata.name;
|
|
46
|
+
const uniqueName: string = YAML.parse(devfileContent).metadata.name + randomPref;
|
|
47
|
+
kubernetesCommandLineToolsExecutor.workspaceName = uniqueName;
|
|
48
|
+
|
|
49
|
+
devWorkspaceConfigurationHelper = new DevWorkspaceConfigurationHelper({
|
|
50
|
+
editorContent: editorDevfileContent,
|
|
51
|
+
devfileContent: devfileContent
|
|
52
|
+
});
|
|
53
|
+
devfileContext = await devWorkspaceConfigurationHelper.generateDevfileContext();
|
|
54
|
+
if (devfileContext.devWorkspace.metadata) {
|
|
55
|
+
devfileContext.devWorkspace.metadata.name = uniqueName;
|
|
56
|
+
}
|
|
57
|
+
const devWorkspaceConfigurationYamlString: string =
|
|
58
|
+
devWorkspaceConfigurationHelper.getDevWorkspaceConfigurationYamlAsString(devfileContext);
|
|
59
|
+
const output: ShellString = kubernetesCommandLineToolsExecutor.applyAndWaitDevWorkspace(devWorkspaceConfigurationYamlString);
|
|
60
|
+
expect(output.stdout).contains('condition met');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('Check "Run the application" command', function (): void {
|
|
64
|
+
const containerName: string = YAML.parse(devfileContent).commands[0].exec.component;
|
|
65
|
+
|
|
66
|
+
if (BASE_TEST_CONSTANTS.IS_CLUSTER_DISCONNECTED()) {
|
|
67
|
+
Logger.info('Test cluster is disconnected. Ignore Self-Signed Certificate error.');
|
|
68
|
+
const ignoreSelfSignedCertificateErrorCommand: string = 'npm config set strict-ssl false';
|
|
69
|
+
const output: ShellString = containerTerminal.execInContainerCommand(ignoreSelfSignedCertificateErrorCommand, containerName);
|
|
70
|
+
expect(output.code).eqls(0);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const workdir: string = YAML.parse(devfileContent).commands[0].exec.workingDir;
|
|
74
|
+
const commandLine: string = YAML.parse(devfileContent).commands[0].exec.commandLine;
|
|
75
|
+
Logger.info(`workdir from exec section of DevWorkspace file: ${workdir}`);
|
|
76
|
+
Logger.info(`commandLine from exec section of DevWorkspace file: ${commandLine}`);
|
|
77
|
+
|
|
78
|
+
let runCommandInBash: string = commandLine.replaceAll('$', '\\$'); // don't wipe out env. vars like "${PROJECTS_ROOT}"
|
|
79
|
+
if (workdir !== undefined && workdir !== '') {
|
|
80
|
+
runCommandInBash = `cd ${workdir} && ` + runCommandInBash;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const output: ShellString = containerTerminal.execInContainerCommandWithTimeout(runCommandInBash, containerName);
|
|
84
|
+
expect(output.code).eqls(124);
|
|
85
|
+
|
|
86
|
+
const outputText: string = output.stdout.trim();
|
|
87
|
+
expect(outputText).contains('App listening on port 8080');
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
suiteTeardown('Delete workspace', function (): void {
|
|
91
|
+
kubernetesCommandLineToolsExecutor.deleteDevWorkspace(devfileName);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
@@ -17,6 +17,7 @@ import { OAUTH_CONSTANTS } from '../constants/OAUTH_CONSTANTS';
|
|
|
17
17
|
import { IKubernetesCommandLineToolsExecutor } from './IKubernetesCommandLineToolsExecutor';
|
|
18
18
|
import { inject, injectable } from 'inversify';
|
|
19
19
|
import { CLASSES } from '../configs/inversify.types';
|
|
20
|
+
import * as fs from 'fs';
|
|
20
21
|
|
|
21
22
|
@injectable()
|
|
22
23
|
export class KubernetesCommandLineToolsExecutor implements IKubernetesCommandLineToolsExecutor {
|
|
@@ -128,15 +129,32 @@ export class KubernetesCommandLineToolsExecutor implements IKubernetesCommandLin
|
|
|
128
129
|
Logger.debug(`${this.kubernetesCommandLineTool}`);
|
|
129
130
|
|
|
130
131
|
return this.shellExecutor.executeCommand(
|
|
131
|
-
`${this.kubernetesCommandLineTool} exec -i ${KubernetesCommandLineToolsExecutor.pod} -n ${this.namespace} -c ${container} -- sh -c '${commandToExecute}'`
|
|
132
|
+
`${this.kubernetesCommandLineTool} exec -i -t ${KubernetesCommandLineToolsExecutor.pod} -n ${this.namespace} -c ${container} -- sh -c '${commandToExecute}'`
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
execInContainerCommandWithTimeout(
|
|
137
|
+
commandToExecute: string,
|
|
138
|
+
container: string = KubernetesCommandLineToolsExecutor.container,
|
|
139
|
+
timeout: string = '20'
|
|
140
|
+
): ShellString {
|
|
141
|
+
Logger.debug(`${this.kubernetesCommandLineTool}`);
|
|
142
|
+
|
|
143
|
+
return this.shellExecutor.executeCommand(
|
|
144
|
+
` timeout ${timeout} ${this.kubernetesCommandLineTool} exec -i ${KubernetesCommandLineToolsExecutor.pod} -n ${this.namespace} -c ${container} -- sh -c '${commandToExecute}'`
|
|
132
145
|
);
|
|
133
146
|
}
|
|
134
147
|
|
|
135
148
|
applyYamlConfigurationAsStringOutput(yamlConfiguration: string): ShellString {
|
|
136
149
|
Logger.debug(`${this.kubernetesCommandLineTool}`);
|
|
137
150
|
|
|
151
|
+
// write yaml configuration to the devfile file
|
|
152
|
+
const randomSuffix: number = Math.floor(Math.random() * 10000);
|
|
153
|
+
const devfileYamlPath: string = `/tmp/devfile-${randomSuffix}.yaml`;
|
|
154
|
+
fs.writeFileSync(devfileYamlPath, yamlConfiguration);
|
|
155
|
+
|
|
138
156
|
return this.shellExecutor.executeCommand(
|
|
139
|
-
|
|
157
|
+
`${this.kubernetesCommandLineTool} apply -n ${this.namespace} -f ${devfileYamlPath} && rm -f ${devfileYamlPath}`
|
|
140
158
|
);
|
|
141
159
|
}
|
|
142
160
|
|