Skip to content

test(sftp): third-party client interop validation for the raised channel sizing and pipelined write path (FileZilla, WinSCP, sshj/Cyberduck) #226

Description

@inureyes

Problem / Background

PR #224 (closing #187) raised maximum_packet_size to 65535 and window_size to 8 MiB, and restructured the server-side SFTP write path (bounded in-flight requests, sequential write coalescing, deferred flush). OpenSSH sftp and scp (both protocol modes) were verified locally with byte-for-byte integrity, but the interop matrix from #187's acceptance criteria (FileZilla, WinSCP, an sshj-based client such as Cyberduck) was not exercised in the implementation environment. That remaining acceptance criterion moves to this issue.

Motivation

These clients have historically surfaced bssh-server regressions: see #215, where sshj/Cyberduck and sftp -C sessions dropped mid-transfer. Channel window/packet-size negotiation and response ordering under pipelining are exactly the surfaces that third-party client stacks stress differently from OpenSSH, so the raised sizing and the pipelined write path need explicit interop coverage.

Tasks / Acceptance Criteria

  • 1 GiB upload and download with FileZilla against bssh-server, byte-for-byte integrity verified. (Waived: GUI-only client and no display on the validation host; a PuTTY-core psftp proxy run is the suggested follow-up. See the closing comment.)
  • 1 GiB upload and download with WinSCP against bssh-server, byte-for-byte integrity verified. (Waived: Windows-only GUI client; same PuTTY-core proxy note applies. See the closing comment.)
  • 1 GiB upload and download with an sshj-based client (e.g. Cyberduck) against bssh-server, byte-for-byte integrity verified.
  • Confirm negotiated packet/window sizes are sane per client (debug logs) and no mid-transfer stalls or drops occur.
  • Results table documented (client, direction, throughput, integrity, notes).

Technical Considerations

Server compression remains off by default (#220 added an opt-in server.compression option); interop runs should use the default configuration.

Related

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions