Skip to content

Commit 313afac

Browse files
committed
feat: US-018 - Add SFTP directory operations e2e-docker fixture
1 parent ce5e5f2 commit 313afac

3 files changed

Lines changed: 84 additions & 0 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"entry": "src/index.js",
3+
"expectation": "pass",
4+
"services": ["ssh"]
5+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "e2e-docker-ssh2-sftp-dirs",
3+
"private": true,
4+
"type": "commonjs",
5+
"dependencies": {
6+
"ssh2": "1.17.0"
7+
}
8+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
const { Client } = require("ssh2");
2+
3+
async function main() {
4+
const result = await new Promise((resolve, reject) => {
5+
const conn = new Client();
6+
7+
conn.on("ready", () => {
8+
conn.sftp((err, sftp) => {
9+
if (err) return reject(err);
10+
11+
const testDir = "/home/testuser/upload/test-dir-e2e";
12+
const testFile = testDir + "/hello.txt";
13+
const fileContent = "hello-from-sftp-dirs";
14+
15+
// Create directory
16+
sftp.mkdir(testDir, (err) => {
17+
if (err) return reject(err);
18+
19+
// List empty directory
20+
sftp.readdir(testDir, (err, emptyList) => {
21+
if (err) return reject(err);
22+
const emptyNames = emptyList.map((e) => e.filename).sort();
23+
24+
// Create a file inside the directory
25+
const ws = sftp.createWriteStream(testFile);
26+
ws.end(fileContent, () => {
27+
// List directory again (should contain the file)
28+
sftp.readdir(testDir, (err, fileList) => {
29+
if (err) return reject(err);
30+
const fileNames = fileList.map((e) => e.filename).sort();
31+
32+
// Remove the file
33+
sftp.unlink(testFile, (err) => {
34+
if (err) return reject(err);
35+
36+
// Remove the directory
37+
sftp.rmdir(testDir, (err) => {
38+
conn.end();
39+
if (err) return reject(err);
40+
resolve({
41+
dirCreated: true,
42+
emptyDirContents: emptyNames,
43+
afterFileContents: fileNames,
44+
cleaned: true,
45+
});
46+
});
47+
});
48+
});
49+
});
50+
});
51+
});
52+
});
53+
});
54+
55+
conn.on("error", reject);
56+
57+
conn.connect({
58+
host: process.env.SSH_HOST,
59+
port: Number(process.env.SSH_PORT),
60+
username: "testuser",
61+
password: "testpass",
62+
});
63+
});
64+
65+
console.log(JSON.stringify(result));
66+
}
67+
68+
main().catch((err) => {
69+
console.error(err.message);
70+
process.exit(1);
71+
});

0 commit comments

Comments
 (0)