#289 checksum/compression: - -c/--checksum now implies the incremental content quick-check (without implying -t), so an unchanged file is skipped like rsync. - --checksum-choice/--cc accepts xxh64/xxhash, xxh3, xxh128, md5 and auto; md4/sha1/none and the two-name form are rejected by name. - --compress-choice/--zc rejects lz4/zlib/zlibx by name (zstd/none/auto kept). - --checksum-seed=0 is randomized per transfer and sent on the wire. - --skip-compress uses rsync 3.4.1's default suffix list; slash separators and dot-less suffixes are accepted. - add --no-whole-file. #295 timeouts/alloc/temp-dir: - --timeout default 0 (disabled), --contimeout default 60; 0 disables both, plus --no-timeout/--no-contimeout. - --max-alloc=0 means no allocation limit (was rejected). - --temp-dir accepts any dir, requires it to exist, and falls back to a non-atomic copy on EXDEV instead of aborting. #296 connectivity/daemon: - -M/--remote-option is rejected for daemon/TCP destinations (SSH-only). - --trust-sender clarified as receiver-local; server-path tests added. - --stop-at accepts rsync's full date form (y-m-dTh:m etc.). Adds unit and integration coverage; no wire-field change, PROTOCOL_VERSION stays 2.22.0.
This commit is contained in:
@@ -291,6 +291,35 @@ static void test_max_alloc_allows_configured_buffer() {
|
||||
protocol_session_unbind();
|
||||
}
|
||||
|
||||
/* max_alloc == 0 is rsync's --max-alloc=0 "no limit": allocations of any size
|
||||
* are permitted. */
|
||||
static void test_max_alloc_zero_means_unlimited() {
|
||||
ProtocolSession session;
|
||||
protocol_session_init(&session, -1, -1);
|
||||
protocol_session_set_max_alloc(&session, 0);
|
||||
protocol_session_bind(&session);
|
||||
void* first = protocol_alloc(1024 * 1024);
|
||||
void* second = protocol_alloc(8 * 1024 * 1024);
|
||||
EXPECT_NOT_NULL(first);
|
||||
EXPECT_NOT_NULL(second);
|
||||
free(first);
|
||||
free(second);
|
||||
protocol_session_unbind();
|
||||
}
|
||||
|
||||
/* A non-positive session io timeout disables the deadline: the getter reports 0
|
||||
* (not the built-in 60 s fallback) so callers know to wait indefinitely. */
|
||||
static void test_protocol_get_io_timeout_zero_disables() {
|
||||
ProtocolSession session;
|
||||
protocol_session_init(&session, -1, -1);
|
||||
protocol_session_bind(&session);
|
||||
protocol_session_set_io_timeout(&session, 0);
|
||||
EXPECT_EQ_INT(protocol_get_io_timeout_sec(), 0);
|
||||
protocol_session_set_io_timeout(&session, 45);
|
||||
EXPECT_EQ_INT(protocol_get_io_timeout_sec(), 45);
|
||||
protocol_session_unbind();
|
||||
}
|
||||
|
||||
static void test_max_alloc_is_bound_in_worker_threads() {
|
||||
enum { WORKER_COUNT = 4 };
|
||||
ProtocolSession sessions[WORKER_COUNT];
|
||||
@@ -650,6 +679,8 @@ void test_protocol() {
|
||||
test_max_alloc_rejects_single_buffer();
|
||||
test_explicit_session_max_alloc_cannot_be_bypassed();
|
||||
test_max_alloc_allows_configured_buffer();
|
||||
test_max_alloc_zero_means_unlimited();
|
||||
test_protocol_get_io_timeout_zero_disables();
|
||||
test_max_alloc_is_bound_in_worker_threads();
|
||||
test_protocol_accounting_is_released_in_worker_threads();
|
||||
test_protocol_accounting_reservation_is_atomic();
|
||||
|
||||
Reference in New Issue
Block a user