Skip to content

test(interop): add --iconv UTF-8/LATIN1 round-trip vs upstream 3.4.1 (#1916)#3498

Merged
oferchen merged 2 commits into
masterfrom
test/iconv-utf8-latin1-interop
May 1, 2026
Merged

test(interop): add --iconv UTF-8/LATIN1 round-trip vs upstream 3.4.1 (#1916)#3498
oferchen merged 2 commits into
masterfrom
test/iconv-utf8-latin1-interop

Conversation

@oferchen
Copy link
Copy Markdown
Owner

@oferchen oferchen commented May 1, 2026

Summary

  • Adds test_iconv_upstream_interop to the standalone interop matrix in tools/ci/run_interop.sh. It exercises --iconv=UTF-8,ISO-8859-1 in both directions between oc-rsync and upstream rsync 3.4.1 via daemon transport, with a deterministic UTF-8 fixture (café.txt, über.txt, ångström.txt, plus an ASCII baseline) whose code points all fit in Latin-1.
  • Tracks the gap as a known failure: the audit in docs/audits/iconv-pipeline.md (Findings 1-5) plus PR feat: bridge IconvSetting to FilenameConverter #3458's bridge fix the SSH/local path, but daemon-mode iconv (the charset = directive) is not yet wired to the iconv runtime, so this test surfaces the remaining work without blocking CI.
  • Adds a matching reproducer in tools/ci/check_known_failures.sh so the tracking dashboard can rerun the scenario as the gap is closed.

What changed

  • tools/ci/run_interop.sh: new test_iconv_upstream_interop function (after the existing test_iconv at line 3092). Wired into the standalone matrix at the test_names, test_funcs, and port-injection case branches.
  • tools/ci/known_failures.conf: new "standalone:iconv-upstream" entry in KNOWN_FAILURES and a corresponding DASHBOARD_ENTRIES row referencing #1916 and the audit doc.
  • tools/ci/check_known_failures.sh: new iconv-upstream) dispatch case that drives a minimal upstream-client -> oc-rsync-daemon push.

Test plan

  • CI: Interop Validation workflow runs tools/ci/run_interop.sh. The new scenario should appear under [standalone] iconv-upstream and be reported as SKIP (known limitation) until the daemon iconv plumbing lands.
  • CI: fmt+clippy, nextest (stable), Windows, macOS, Linux musl pass unchanged (no Rust changes).
  • When daemon iconv plumbing is wired, drop the KNOWN_FAILURES entry; the test should then report PASS for both directions.

References

oferchen added 2 commits May 1, 2026 11:07
…1916)

Adds a bidirectional daemon-mode interop scenario that exercises
--iconv=UTF-8,ISO-8859-1 between oc-rsync and upstream rsync 3.4.1.

The test creates a deterministic source tree with UTF-8 filenames whose
code points all fit in Latin-1 (café.txt, über.txt, ångström.txt) plus
an ASCII baseline, then drives two transfers:

  1. upstream client -> oc-rsync daemon (charset = ISO-8859-1)
  2. oc-rsync client -> upstream daemon (charset = ISO-8859-1)

Each transfer is verified by re-reading the destination filenames and
comparing content byte-for-byte against the source.

Daemon-mode iconv negotiation in oc-rsync is still incomplete: the
`charset =` directive is parsed (crates/daemon/.../module_directives.rs)
but never threaded into the iconv runtime setup. Findings 1-3 of the
audit (symlink target transcoding, --files-from forwarding,
--secluded-args/--protect-args transcoding) also remain open. The
scenario is therefore added to KNOWN_FAILURES and DASHBOARD_ENTRIES so
CI tracks the gap without blocking, and check_known_failures.sh gets a
matching reproducer so the dashboard can rerun it.

References:
  upstream: options.c:recv_iconv_settings, flist.c:1579-1603,
            flist.c:738-754
  oc-rsync: docs/audits/iconv-pipeline.md

Touched files:
- tools/ci/run_interop.sh: new test_iconv_upstream_interop function,
  added "iconv-upstream" to standalone test_names/test_funcs arrays,
  port-injection case branch.
- tools/ci/known_failures.conf: KNOWN_FAILURES + DASHBOARD_ENTRIES entry.
- tools/ci/check_known_failures.sh: dashboard reproducer dispatch case.
@github-actions github-actions Bot added the test label May 1, 2026
@oferchen oferchen merged commit 5d127a3 into master May 1, 2026
4 checks passed
@oferchen oferchen deleted the test/iconv-utf8-latin1-interop branch May 1, 2026 21:09
oferchen added a commit that referenced this pull request May 5, 2026
…1916) (#3498)

Adds a bidirectional daemon-mode interop scenario that exercises
--iconv=UTF-8,ISO-8859-1 between oc-rsync and upstream rsync 3.4.1.

The test creates a deterministic source tree with UTF-8 filenames whose
code points all fit in Latin-1 (café.txt, über.txt, ångström.txt) plus
an ASCII baseline, then drives two transfers:

  1. upstream client -> oc-rsync daemon (charset = ISO-8859-1)
  2. oc-rsync client -> upstream daemon (charset = ISO-8859-1)

Each transfer is verified by re-reading the destination filenames and
comparing content byte-for-byte against the source.

Daemon-mode iconv negotiation in oc-rsync is still incomplete: the
`charset =` directive is parsed (crates/daemon/.../module_directives.rs)
but never threaded into the iconv runtime setup. Findings 1-3 of the
audit (symlink target transcoding, --files-from forwarding,
--secluded-args/--protect-args transcoding) also remain open. The
scenario is therefore added to KNOWN_FAILURES and DASHBOARD_ENTRIES so
CI tracks the gap without blocking, and check_known_failures.sh gets a
matching reproducer so the dashboard can rerun it.

References:
  upstream: options.c:recv_iconv_settings, flist.c:1579-1603,
            flist.c:738-754
  oc-rsync: docs/audits/iconv-pipeline.md

Touched files:
- tools/ci/run_interop.sh: new test_iconv_upstream_interop function,
  added "iconv-upstream" to standalone test_names/test_funcs arrays,
  port-injection case branch.
- tools/ci/known_failures.conf: KNOWN_FAILURES + DASHBOARD_ENTRIES entry.
- tools/ci/check_known_failures.sh: dashboard reproducer dispatch case.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant