Back to Repositories

Testing FTP File Operations Implementation in RuoYi Vue Pro

This test suite evaluates the FTP file client implementation in the RuoYi Vue Pro framework, focusing on file upload, retrieval, and deletion operations. The test class verifies core FTP functionality with configurable connection parameters and passive mode support.

Test Coverage Overview

The test suite covers essential FTP operations including:
  • File upload functionality with content type specification
  • File content retrieval capabilities
  • File deletion operations
  • FTP connection configuration and initialization
The test encompasses both basic functionality and connection parameter validation, though currently marked as disabled for controlled execution.

Implementation Analysis

The testing approach utilizes JUnit 5 framework with a focused single-test implementation. The test demonstrates practical FTP client usage by:
  • Configuring FTP connection parameters programmatically
  • Implementing passive mode FTP transfers
  • Generating unique filenames using UUID
  • Handling binary file content for image uploads

Technical Details

Testing infrastructure includes:
  • JUnit Jupiter for test execution
  • Hutool library for FTP operations and resource handling
  • Custom FtpFileClient implementation
  • Configurable FTP connection parameters
  • Support for binary file handling

Best Practices Demonstrated

The test implementation showcases several testing best practices:
  • Isolation of FTP configuration from test logic
  • Use of unique file identifiers to prevent conflicts
  • Proper resource handling for file operations
  • Controlled test execution with @Disabled annotation
  • Clear separation of setup, execution, and verification phases

yunaiv/ruoyi-vue-pro

yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/framework/file/core/ftp/FtpFileClientTest.java

            
package cn.iocoder.yudao.module.infra.framework.file.core.ftp;

import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.extra.ftp.FtpMode;
import cn.iocoder.yudao.module.infra.framework.file.core.client.ftp.FtpFileClient;
import cn.iocoder.yudao.module.infra.framework.file.core.client.ftp.FtpFileClientConfig;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

public class FtpFileClientTest {

    @Test
    @Disabled
    public void test() {
        // 创建客户端
        FtpFileClientConfig config = new FtpFileClientConfig();
        config.setDomain("http://127.0.0.1:48080");
        config.setBasePath("/home/ftp");
        config.setHost("kanchai.club");
        config.setPort(221);
        config.setUsername("");
        config.setPassword("");
        config.setMode(FtpMode.Passive.name());
        FtpFileClient client = new FtpFileClient(0L, config);
        client.init();
        // 上传文件
        String path = IdUtil.fastSimpleUUID() + ".jpg";
        byte[] content = ResourceUtil.readBytes("file/erweima.jpg");
        String fullPath = client.upload(content, path, "image/jpeg");
        System.out.println("访问地址:" + fullPath);
        if (false) {
            byte[] bytes = client.getContent(path);
            System.out.println("文件内容:" + bytes);
        }
        if (false) {
            client.delete(path);
        }
    }

}