mirror of
https://github.com/rclone/rclone.git
synced 2025-03-22 21:15:13 +08:00

Some checks failed
build / windows (push) Has been cancelled
build / other_os (push) Has been cancelled
build / mac_amd64 (push) Has been cancelled
build / mac_arm64 (push) Has been cancelled
build / linux (push) Has been cancelled
build / go1.23 (push) Has been cancelled
build / linux_386 (push) Has been cancelled
build / lint (push) Has been cancelled
build / android-all (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/386 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/amd64 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/arm/v6 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/arm/v7 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/arm64 (push) Has been cancelled
Build & Push Docker Images / Merge & Push Final Docker Image (push) Has been cancelled
This fixes another way that the gitannex tests can hang. The issue is that our test harness explicitly called `wg.Done()` at the end of each test case, but when assertions checked with [require] fail, they halt test execution and prevent `wg.Done()` from happening. A second issue is that we were incorrectly calling [require] functions in the goroutine that runs the gitannex server. I found that [require] calls [testing.T.FailNow] under the hood, which says "FailNow must be called from the goroutine running the test or benchmark function, not from other goroutines created during the test." [1] This commit fixes both issues by replacing the explicit synchronization with a `chan error`. This enables us to run the gitannex server in a goroutine, interact with the server in the test's goroutine, and then at then end use [require] on the test-associated goroutine to ensure the server's error/nil value matches expectations. [1]: https://pkg.go.dev/testing#T.FailNow