-
Notifications
You must be signed in to change notification settings - Fork 102
Expand file tree
/
Copy pathconnectivitySpec.js
More file actions
118 lines (104 loc) · 3.29 KB
/
Copy pathconnectivitySpec.js
File metadata and controls
118 lines (104 loc) · 3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
const { describe, it, beforeEach, afterEach } = require("node:test");
const assert = require("assert");
const { Client } = require("../dist");
const MockFtpServer = require("./MockFtpServer");
describe("Connectivity", () => {
let server, client;
beforeEach(() => {
server = new MockFtpServer()
client = new Client(50)
})
afterEach(() => {
client.close()
server.close()
})
it("throws error when sending before connecting", () => {
return assert.rejects(() => client.send("hi"), {
message: "Socket is closed (control socket)"
})
})
it("handles closing uninitialized socket", () => {
client.close()
})
it("can access a server", () => {
return client.access({
port: server.ctrlAddress.port,
user: "test",
password: "test"
}).then(result => {
assert.strictEqual(result.code, 200, "Welcome response")
})
});
it("throws on timeout when accessing a server", () => {
return assert.rejects(() => client.access({
host: "192.168.0.123"
}), {
message: "Timeout (control socket)"
})
})
it("throws if connection failed", () => {
return assert.rejects(() => client.access({
port: 111
}), {
code: "ECONNREFUSED"
})
})
it("throws if password wrong", () => {
return assert.rejects(() => client.access({
port: server.ctrlAddress.port,
user: "test",
password: "WRONGPASSWORD"
}), {
name: "FTPError",
message: "530 Wrong password"
})
})
it("throws if user unknown", () => {
return assert.rejects(() => client.access({
port: server.ctrlAddress.port,
user: "UNKNOWNUSER",
password: "test"
}), {
name: "FTPError",
message: "530 Unknown user"
})
})
it("access executes default set of commands", () => {
server.handlers = {
// Set the minimum required commands, not all default settings need to succeed.
user: () => "200 OK",
type: () => "200 OK"
}
return client.access({
port: server.ctrlAddress.port,
user: "test",
password: "test"
}).then(() => {
assert.deepEqual(server.receivedCommands, [
"OPTS UTF8 ON",
"USER test",
"FEAT",
"TYPE I",
"STRU F",
"OPTS UTF8 ON",
])
})
});
it("client reflects closed state correctly", async () => {
assert.strictEqual(client.closed, true, "before access")
await client.access({
port: server.ctrlAddress.port,
user: "test",
password: "test"
})
assert.strictEqual(client.closed, false, "after access")
client.close()
assert.strictEqual(client.closed, true, "after close")
return assert.rejects(() => client.send("TYPE I"), {
name: "Error",
message: "Client is closed because User closed client"
})
});
it.todo("can connect using explicit TLS")
it.todo("can connect using implicit TLS")
})