Skip to content

Test Methodology ​

Principles ​

  1. Reproducible before report: a test that can't be re-run doesn't enter the public record
  2. External ground truth: for each protocol we also verify with a third-party client (curl, mc, ssh, openssl) to distinguish AeroFTP regressions from server misconfig
  3. Integrity check: every heavy upload/download is verified with SHA-256
  4. Exit code first: every command must terminate with the correct exit code; textual output is secondary

Docker harness ​

Full local environment, containers exposed on localhost only. The files are published in the docs repository under tools/docker-harness, outside the site's public tree so that generated keys can never be copied into a site build: the compose file, the SFTP image and setup.sh, which generates the SSH test keys on your machine. No key is committed, and the credentials below are for these local containers only.

ServiceHost portProtocolCredentials
aeroftp-test-ftps2121FTP (vsftpd), plain FTP without TLSftpuser / password123
aeroftp-test-sftp2223SFTP (OpenSSH)user_key with key, user_pwd with password, user_mixed with key and password
aeroftp-test-webdav8080WebDAV (bytemark/webdav)webdavuser / password123
aeroftp-test-minio9000 / 9001S3 (MinIO)admin / password123

Quick start, from the docker-harness directory:

bash
./setup.sh
docker compose up -d --build

Initial S3 bucket ​

bash
mc alias set test http://127.0.0.1:9000 admin password123
mc mb --ignore-existing test/aeroftp-test

Coverage Class and scoring ​

The Provider Coverage Matrix assigns each provider a Coverage Class (A, B, C, D) and a numeric score out of 100 derived from a deterministic, speed-independent rubric.

ClassLabelScoreMeaning
APrimary90-100Full matrix green, ready for critical workloads
BExtended70-89Core operations solid, minor gaps on advanced features
CCompatible50-69Base works, known non-blocking limitations
DObserver< 50Partially covered, not recommended for production

Rubric (100 pt total):

DimensionWeightWhat it measures
Core Operations30connect, ls, put, get, stat, mkdir, rm, mv
Data Integrity20SHA-256 end-to-end + hashsum parity
Navigation & Discovery15tree, find, head, cat, recursive stat
Advanced Features15share links, trash/restore, versions, server-side copy, quota
Encoding Robustness10unicode, spaces, special characters in file names
Reconciliation10check, sync-doctor, reconcile post-sync matches

Throughput is deliberately excluded from scoring: it depends on distance from the provider endpoint and local network conditions, not on the client implementation.

Matrix conventions ​

Symbols used in tables:

  • ✅ passes completely with verified integrity
  • ⚠️ passes with caveat (noted below the table)
  • ⏳ pending benchmark (dimension not yet consolidated for this provider)
  • ❌ fails
  • "-" not applicable / not tested

Matrices are plain HTML tables without custom styling. The test-reports section uses a full-width layout to host them even when the grid is dense.

Comparative benchmarks ​

The DAG engine review and the comparative battery measure AeroFTP against other clients on the same link. They follow these rules:

  1. The same cell, the same window. Each tool runs the same payload against the same server back to back, with the other tools in the same operation. The tool order is reversed between passes, so a drift over time does not always land on the same tool.
  2. A control on every row. rclone runs every cell. It is evidence about shared drift, not proof of cause: when AeroFTP moves between two builds and rclone does not, the change most likely belongs to the build, and when both move, the window most likely does. A change in the network or the server can still affect two clients differently.
  3. Integrity before speed. Every download is compared with the source by SHA-256, file by file for trees. A timing without that check is not published: a failed or truncated transfer can look fast. Exit codes are recorded but not trusted alone, since a client can exit 0 after a partial transfer.
  4. Pairs, not single numbers. Rows show each run or the spread. A single run is labelled as one run. The noise floor is measured per target and per tool, using the tool that does not change between arms.
  5. Ratios, not absolute speed. Ratios are the other tool's seconds over AeroFTP's seconds. The link is the bottleneck for every tool, so a ratio travels better than a throughput figure.
  6. Pinned binaries. Each AeroFTP build is named by commit and sha256, and checked by probing its behaviour, not by the directory it came from. The versions of the other tools are recorded with each session.
  7. One configuration source. The rclone and Cyberduck configurations are exported from the same AeroFTP vault with aeroftp-cli export rclone and aeroftp-cli export cyberduck, so every tool talks to the same endpoint with the same credentials and TLS mode.
  8. Asymmetric cells are labelled or dropped. TLS against cleartext, different stream counts or different payloads make a row incomparable; such rows carry the clause or are left out.
  9. Anomalies are repeated before they are reported. A finding that does not survive repetition with the control is left out, and the page says what was left out and why.

What these measurements do not establish: a ranking of clients in general. They describe one station, one link and one set of servers.

The comparative harness itself is a maintainer script bound to the lab profiles and is not published. The rules above, the commands listed on each page and aeroftp-cli export are enough to rebuild an equivalent battery against your own servers.

What this suite is not ​

This suite is not:

  • a rigorous performance benchmark across networks (the comparative pages above measure one link, with the method described in Comparative benchmarks)
  • a security certification (that lives in Security)
  • an API contract (that lives in CLI and MCP)

It's an operational regression-testing log, published for transparency.

aeroftp.app - Released under the GPL-3.0 License. AeroFTP Reviews