FTP Fixtures
FTP fixtures allow you to pre-configure file structures and upload rules for your mock FTP server.
Fixture Structure
Fixtures are defined in YAML format and contain:
- Virtual files: Pre-defined files in the virtual file system
- Upload rules: Rules for accepting and handling file uploads
Basic Fixture Example
fixtures:
- name: "sample_files"
description: "Sample files for testing FTP clients"
virtual_files:
- path: "/welcome.txt"
content:
type: "static"
content: "Welcome to MockForge FTP Server!"
permissions: "644"
owner: "ftp"
group: "ftp"
- path: "/data.json"
content:
type: "template"
template: '{"timestamp": "{{now}}", "server": "mockforge"}'
permissions: "644"
owner: "ftp"
group: "ftp"
upload_rules:
- path_pattern: "/uploads/.*"
auto_accept: true
max_size_bytes: 1048576
allowed_extensions: ["txt", "json", "xml"]
storage:
type: "memory"
Virtual Files
Static Content Files
virtual_files:
- path: "/readme.txt"
content:
type: "static"
content: |
This is a mock FTP server.
You can upload files to the /uploads directory.
permissions: "644"
owner: "ftp"
group: "ftp"
Template Files
virtual_files:
- path: "/status.json"
content:
type: "template"
template: |
{
"server": "MockForge FTP",
"version": "1.0.0",
"uptime": "{{timestamp}}",
"status": "running"
}
permissions: "644"
owner: "ftp"
group: "ftp"
Generated Content Files
virtual_files:
- path: "/random.bin"
content:
type: "generated"
size: 1024
pattern: "random"
permissions: "644"
owner: "ftp"
group: "ftp"
Upload Rules
Upload rules control how the server handles file uploads.
Basic Upload Rule
upload_rules:
- path_pattern: "/uploads/.*"
auto_accept: true
storage:
type: "memory"
Advanced Upload Rule
upload_rules:
- path_pattern: "/documents/.*"
auto_accept: true
validation:
max_size_bytes: 5242880 # 5MB
allowed_extensions: ["pdf", "doc", "docx", "txt"]
mime_types: ["application/pdf", "application/msword"]
storage:
type: "file"
path: "/tmp/uploads"
Validation Options
File Size Limits
validation:
max_size_bytes: 1048576 # 1MB limit
File Extensions
validation:
allowed_extensions: ["jpg", "png", "gif"]
MIME Types
validation:
mime_types: ["image/jpeg", "image/png"]
Storage Backends
Memory Storage
Files are stored in memory (default):
storage:
type: "memory"
File Storage
Files are written to disk:
storage:
type: "file"
path: "/var/ftp/uploads"
Discard Storage
Files are accepted but not stored:
storage:
type: "discard"
Loading Fixtures
From Configuration File
mockforge ftp serve --config ftp-config.yaml
From Directory
mockforge ftp fixtures load ./fixtures/ftp/
Validate Fixtures
mockforge ftp fixtures validate fixture.yaml
Example Complete Fixture
fixtures:
- name: "test_environment"
description: "Complete test environment with various file types"
virtual_files:
# Static files
- path: "/readme.txt"
content:
type: "static"
content: "FTP Test Server - Upload files to /uploads/"
permissions: "644"
owner: "ftp"
group: "ftp"
# Template files
- path: "/server-info.json"
content:
type: "template"
template: |
{
"server": "MockForge FTP",
"started_at": "{{now}}",
"session_id": "{{uuid}}"
}
permissions: "644"
owner: "ftp"
group: "ftp"
# Generated files
- path: "/test-data.bin"
content:
type: "generated"
size: 4096
pattern: "random"
permissions: "644"
owner: "ftp"
group: "ftp"
upload_rules:
# General uploads
- path_pattern: "/uploads/.*"
auto_accept: true
validation:
max_size_bytes: 10485760 # 10MB
storage:
type: "memory"
# Image uploads
- path_pattern: "/images/.*"
auto_accept: true
validation:
max_size_bytes: 5242880 # 5MB
allowed_extensions: ["jpg", "jpeg", "png", "gif"]
mime_types: ["image/jpeg", "image/png", "image/gif"]
storage:
type: "file"
path: "/tmp/images"
# Log files (discard)
- path_pattern: "/logs/.*"
auto_accept: true
storage:
type: "discard"
CLI Management
List Fixtures
mockforge ftp fixtures list
Load Fixtures
# Load from directory
mockforge ftp fixtures load ./fixtures/
# Load specific file
mockforge ftp fixtures load fixture.yaml
Validate Fixtures
mockforge ftp fixtures validate fixture.yaml
Virtual File System Management
Add Files
# Static content
mockforge ftp vfs add /hello.txt --content "Hello World"
# Template content
mockforge ftp vfs add /user.json --template '{"name": "{{faker.name}}"}'
# Generated content
mockforge ftp vfs add /data.bin --generate random --size 1024
List Files
mockforge ftp vfs list /
Remove Files
mockforge ftp vfs remove /old-file.txt
Get File Info
mockforge ftp vfs info /hello.txt