mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-11-02 10:04:51 -05:00
55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import time
|
|
|
|
from harness.rsync import (
|
|
SCRATCHDIR, claim_ports, require_tcp, start_rsyncd, test_fail,
|
|
)
|
|
from harness import protocol as rp
|
|
|
|
PORT = 12955
|
|
MARKER = b'SCANNER-0009-FORWARDED'
|
|
require_tcp("the pure-Python sender needs a real TCP daemon; run with --use-tcp")
|
|
claim_ports(PORT)
|
|
|
|
mod = SCRATCHDIR / 'mi-mod'
|
|
mod.mkdir(parents=True, exist_ok=True)
|
|
conf = SCRATCHDIR / 'mi.conf'
|
|
log = SCRATCHDIR / 'mi.log'
|
|
conf.write_text(f"""\
|
|
pid file = {SCRATCHDIR}/mi-rsyncd.pid
|
|
use chroot = no
|
|
log file = {log}
|
|
|
|
[mod]
|
|
path = {mod}
|
|
read only = no
|
|
""")
|
|
start_rsyncd(conf, PORT)
|
|
|
|
s = rp.DaemonSender('127.0.0.1', PORT)
|
|
s.handshake('mod', ['--server', '-e.LsfxCIu', '.', 'mod/'], greeting_version=30)
|
|
s.send_flat_flist([rp.FileEntry('hello.txt', mode=rp.S_IFREG | 0o644, length=0)])
|
|
s.send_message(rp.MSG_INFO, MARKER + b'\n')
|
|
back = s.drain(timeout=3.0)
|
|
s.close()
|
|
|
|
forwarded = MARKER in back
|
|
for _ in range(50):
|
|
if log.exists() and MARKER.decode() in log.read_text(errors='replace'):
|
|
forwarded = True
|
|
break
|
|
if forwarded:
|
|
break
|
|
time.sleep(0.1)
|
|
|
|
if not forwarded:
|
|
log_text = log.read_text(errors='replace') if log.exists() else '(no log)'
|
|
test_fail(
|
|
"daemon receiver did not forward a peer MSG_INFO -- it aborted on the "
|
|
"rwrite() assert(!is_utf8) (the marker never reached the generator).\n"
|
|
f"daemon log:\n{log_text}")
|
|
|
|
print("msg-info-forwarding: daemon receiver forwarded a peer MSG_INFO without "
|
|
"aborting (the rwrite assert is gone).")
|