Skip to content

Commit 9ad51f3

Browse files
authored
Merge pull request #990 from scramjetorg/test/si-init
[CLI TEST] VDM-1507 si init
2 parents df6265e + 85dcdea commit 9ad51f3

File tree

4 files changed

+146
-4
lines changed

4 files changed

+146
-4
lines changed

bdd/features/e2e/E2E-010-cli.feature

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,14 @@ Feature: CLI tests
157157
Then I confirm instance id is: <instanceId>
158158
Examples:
159159
| instanceId |
160-
| Supervisor-Instance-0000-11111111111 |
160+
| Supervisor-Instance-0000-11111111111 |
161+
162+
@ci-api @cli @test-si-init
163+
Scenario: E2E-010 TC-019 Test Init template sequence
164+
When I execute CLI command si init <templateType>
165+
Then I confirm template <templateType> is created
166+
Examples:
167+
| templateType |
168+
| ts |
169+
| js |
170+
| py |

bdd/lib/utils.ts

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,3 +274,106 @@ export async function removeProfile(profileName: string) {
274274
logger.debug(res);
275275
}
276276
}
277+
278+
export function createDirectory(workingDirectory: string) {
279+
if (!fs.existsSync(workingDirectory)) {
280+
fs.mkdirSync(workingDirectory);
281+
if (isLogActive) {
282+
logger.debug(`Directory "${workingDirectory}" successfully created`);
283+
}
284+
} else {
285+
logger.error(`Directory "${workingDirectory}" already exist`);
286+
}
287+
}
288+
289+
export function deleteDirectory(workingDirectory: string) {
290+
try {
291+
fs.rmdirSync(workingDirectory, { recursive: true });
292+
if (isLogActive) {
293+
logger.debug(`Directory "${workingDirectory}" was successfully deleted`);
294+
}
295+
} catch (error: any) {
296+
logger.error(`Error while deleting direcory "${workingDirectory}": ${error.message}`);
297+
}
298+
}
299+
300+
export function spawnSiInit(
301+
command: string,
302+
templateType: string,
303+
workingDirectory: string,
304+
env: NodeJS.ProcessEnv = process.env
305+
) {
306+
return new Promise<void>((resolve, reject) => {
307+
const args = () => {
308+
return [...si, "init", "seq", templateType, "-p", workingDirectory];
309+
};
310+
311+
if (isLogActive) {
312+
logger.debug("Spawning command: /usr/bin/env", ...args());
313+
}
314+
315+
const childProcess = spawn(command, args(), {
316+
env
317+
});
318+
319+
childProcess.stdout.on("data", (data) => {
320+
if (isLogActive) {
321+
logger.debug(data.toString());
322+
}
323+
if (data.includes("Sequence template succesfully created")) {
324+
resolve();
325+
} else {
326+
childProcess.stdin.write("\n");
327+
}
328+
});
329+
childProcess.stderr.on("data", (data) => {
330+
const stderrString = data.toString();
331+
332+
logger.warn(`Stderr: ${stderrString}`);
333+
});
334+
childProcess.on("error", (err) => {
335+
logger.error(err);
336+
reject();
337+
});
338+
childProcess.on("exit", (code) => {
339+
if (isLogActive) {
340+
logger.debug(`Exit code: ${code}`);
341+
}
342+
resolve();
343+
});
344+
});
345+
}
346+
347+
export function isTemplateCreated(templateType: string, workingDirectory: string) {
348+
return new Promise<boolean>((resolve, reject) => {
349+
// eslint-disable-next-line complexity
350+
fs.readdir(workingDirectory, (err, files) => {
351+
if (err) {
352+
logger.error(`Can not read from directory: ${workingDirectory}`);
353+
reject(err);
354+
return;
355+
}
356+
if (
357+
templateType === "ts" &&
358+
files.includes("index.ts") &&
359+
files.includes("package.json") &&
360+
files.includes("tsconfig.json")
361+
) {
362+
resolve(true);
363+
}
364+
if (
365+
templateType === "py" &&
366+
files.includes("main.py") &&
367+
files.includes("package.json") &&
368+
files.includes("requirements.txt")
369+
) {
370+
resolve(true);
371+
}
372+
if (templateType === "js" && files.includes("index.js") && files.includes("package.json")) {
373+
resolve(true);
374+
} else {
375+
resolve(false);
376+
}
377+
});
378+
});
379+
}

bdd/step-definitions/e2e/cli.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,15 @@
66
import { Given, Then, When } from "@cucumber/cucumber";
77
import { strict as assert } from "assert";
88
import fs from "fs";
9-
import { getStreamsFromSpawn, defer, waitUntilStreamContains, killProcessByName, getSiCommand } from "../../lib/utils";
9+
import {
10+
getStreamsFromSpawn,
11+
defer,
12+
waitUntilStreamContains,
13+
killProcessByName,
14+
getSiCommand,
15+
spawnSiInit,
16+
isTemplateCreated
17+
} from "../../lib/utils";
1018
import { expectedResponses } from "./expectedResponses";
1119
import { CustomWorld } from "../world";
1220
import { spawn } from "child_process";
@@ -359,3 +367,15 @@ Then(/^I confirm instance id is: (.*)$/, async function (this: CustomWorld, expe
359367

360368
assert.equal(instance.id, expectedInstanceId);
361369
});
370+
371+
When(/^I execute CLI command si init (.*)$/, { timeout: 30000 }, async function (templateType: string) {
372+
const workingDirectory = "data/template_seq";
373+
374+
await spawnSiInit("/usr/bin/env", templateType, workingDirectory);
375+
});
376+
377+
Then(/^I confirm template (.*) is created$/, async function (templateType: string) {
378+
const workingDirectory = "data/template_seq";
379+
380+
assert.equal(await isTemplateCreated(templateType, workingDirectory), true);
381+
});

bdd/step-definitions/e2e/host-steps.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ import {
88
defer,
99
waitUntilStreamEquals,
1010
waitUntilStreamContains,
11+
removeProfile,
1112
createProfile,
1213
setProfile,
13-
removeProfile
14+
createDirectory,
15+
deleteDirectory
1416
} from "../../lib/utils";
1517
import fs, { createReadStream, existsSync, ReadStream } from "fs";
1618
import { HostClient, InstanceOutputStream } from "@scramjet/api-client";
@@ -179,6 +181,13 @@ Before(() => {
179181

180182
After({ tags: "@runner-cleanup" }, killRunner);
181183

184+
Before({ tags: "@test-si-init" }, function() {
185+
createDirectory("data/template_seq");
186+
});
187+
After({ tags: "@test-si-init" }, function() {
188+
deleteDirectory("data/template_seq");
189+
});
190+
182191
const startHost = async () => {
183192
let apiUrl = process.env.SCRAMJET_HOST_BASE_URL;
184193

@@ -683,7 +692,7 @@ When("confirm that sequence and volumes are removed", async function(this: Custo
683692

684693
if (!sequenceId) assert.fail();
685694

686-
const sequences = await hostClient.listSequences() || [];
695+
const sequences = (await hostClient.listSequences()) || [];
687696
const sequenceExist = !!sequences.find((sequenceInfo) => sequenceId === sequenceInfo.id);
688697

689698
assert.equal(sequenceExist, false);

0 commit comments

Comments
 (0)