]> git.ipfire.org Git - thirdparty/rsync.git/commit
Fix flaky hardlinks test
authorArnaud Rebillout <arnaudr@kali.org>
Thu, 6 Mar 2025 03:54:05 +0000 (10:54 +0700)
committerAndrew Tridgell <andrew@tridgell.net>
Sat, 23 Aug 2025 07:13:28 +0000 (17:13 +1000)
commitd941807915f0e10c245b3b2f943d01a1e4e04b2d
tree6f198efe11e7d81d32e445a95296380b065272f1
parent992e10efaf42d9ec3dd43431350accf1becc1d00
Fix flaky hardlinks test

The test was added in dc34990, it turns out that it's flaky. It failed
once on the Debian build infra, cf. [1].

The problem is that the command `rsync -aH '$fromdir/sym' '$todir'`
updates the mod time of `$todir`, so there might be a diff between the
output of `rsync_ls_lR $fromdir` and `rsync_ls_lR $todir`, if ever rsync
runs 1 second (or more) after the directories were created.

To clarify: it's easy to make the test fails 100% of the times with this
change:

```
 makepath "$fromdir/sym" "$todir"
+sleep 5
 checkit "$RSYNC -aH '$fromdir/sym' '$todir'" "$fromdir" "$todir"
```

With the fix proposed here, we don't use `checkit` anymore, instead we
just run the rsync command, then a simple `diff` to compare the two
directories. This is exactly what the other `-H` test just above does.

In case there's some doubts, `diff` fails if `sym` is missing:

```
$ mkdir -p foo/sym bar
$ diff foo bar || echo KO!
Only in foo: sym
KO!
```

I tested that, after this commit, the test still catches the `-H`
regression in rsync 3.4.0.

Fixes: https://github.com/RsyncProject/rsync/issues/735
[1]: https://buildd.debian.org/status/fetch.php?pkg=rsync&arch=ppc64el&ver=3.4.1%2Bds1-1&stamp=1741147156&raw=0
testsuite/hardlinks.test