aboutsummaryrefslogtreecommitdiff
path: root/tests/test-duet-transfer.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-duet-transfer.el')
-rw-r--r--tests/test-duet-transfer.el23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/test-duet-transfer.el b/tests/test-duet-transfer.el
index 84cf678..ebef0f9 100644
--- a/tests/test-duet-transfer.el
+++ b/tests/test-duet-transfer.el
@@ -180,6 +180,29 @@
(should (null (plist-get spec :argv)))
(should (eq 'rsync-remote-to-remote (plist-get spec :exec-mode))))))
+(ert-deftest test-duet-transfer-spec-async-explicit-nil ()
+ "An explicit :async nil in opts is honored rather than defaulting to t."
+ (test-duet-transfer--with-builtins
+ (let ((spec (duet--transfer-spec '("/tmp/a") "/tmp/b" '(:async nil))))
+ (should (null (plist-get spec :async))))))
+
+(ert-deftest test-duet-rsync-normalizer-classifies-known-stderr ()
+ "The rsync backend's normalizer maps known stderr signatures to classes."
+ (test-duet-transfer--with-builtins
+ (let ((rsync (duet-backend-by-name 'rsync)))
+ (should (eq 'permission-denied
+ (plist-get (duet--normalize-failure
+ rsync '(:exit 23 :stderr "rsync: Permission denied (13)"))
+ :class)))
+ (should (eq 'destination-full
+ (plist-get (duet--normalize-failure
+ rsync '(:exit 11 :stderr "No space left on device"))
+ :class)))
+ (should (eq 'rsync-protocol-mismatch
+ (plist-get (duet--normalize-failure
+ rsync '(:exit 12 :stderr "protocol version mismatch"))
+ :class))))))
+
;;; Conflict planning — pure, prompt-free
(ert-deftest test-duet-plan-conflicts-no-collisions-all-copy ()