FTP platform adapter for moon-file-storage
async test "这一腿不用连服务端就能拿到的读数:能力位与响亮拒绝" {
let platform = @ftp.FtpPlatform::new(
@ftp.FtpPlatformConfig::new(
"ftp-1",
"192.0.2.1",
"user",
"password",
domain=Some("ftp://files.example.invalid/"),
),
)
let caps = platform.capabilities()
// 单层列举与移动是真做过的;剩下四档在 FTP 协议里没有对应命令
assert_true(caps.list_files)
assert_true(caps.same_move)
assert_false(caps.multipart_upload)
assert_false(caps.presigned_url)
assert_false(caps.acl)
assert_false(caps.metadata)
assert_false(caps.same_copy)
let note = @model.FileInfo::draft("ftp-1", "", "note", "txt")
let refusal = try {
let _ = platform.presigned_url(note, @model.PresignMethod::Get, 60)
"no-error"
} catch {
error =>
match error {
@model.StorageError::NotSupported(detail) => "NotSupported: " + detail
_ => "别的档"
}
}
// 声明没有就必须响亮拒绝:静默接受是这条端口最不能容忍的失败形状
assert_true(refusal.has_prefix("NotSupported: ftp has no presigned url"))
platform.close()
let after = try {
let _ = platform.exists(note)
"no-error"
} catch {
error =>
match error {
@model.StorageError::InvalidInput(detail) => "InvalidInput: " + detail
_ => "别的档"
}
}
assert_true(after.has_prefix("InvalidInput"))
}moon add mldong/moon-file-storage-ftpInstall
Download zipFTP platform adapter for moon-file-storage