fix: use exec.LookPath instead of 'command -v' for binary detection

'command' is a shell builtin, not a real binary, so exec.Command
always failed with exit 127. Replaced with os/exec.LookPath which
correctly resolves binaries in PATH.

Also adds capabilities_test.go to verify Probe() matches
exec.LookPath results.

Version: 0.7.2
This commit is contained in:
2026-07-07 00:06:06 -04:00
parent d3d59b4e45
commit e5b9b233b8
3 changed files with 57 additions and 7 deletions
+49
View File
@@ -0,0 +1,49 @@
package storage
import (
"context"
"os/exec"
"testing"
)
func TestProbeDetectsRsync(t *testing.T) {
caps, err := Probe(context.Background())
if err != nil {
t.Fatalf("Probe: %v", err)
}
_, rsyncErr := exec.LookPath("rsync")
if rsyncErr != nil && caps.Rsync {
t.Error("Probe claims rsync is available but exec.LookPath says it is not")
}
if rsyncErr == nil && !caps.Rsync {
t.Error("exec.LookPath found rsync but Probe did not detect it")
}
}
func TestProbeDetectsSnapraid(t *testing.T) {
caps, err := Probe(context.Background())
if err != nil {
t.Fatalf("Probe: %v", err)
}
_, snapraidErr := exec.LookPath("snapraid")
if snapraidErr != nil && caps.SnapraidBin {
t.Error("Probe claims snapraid is available but exec.LookPath says it is not")
}
if snapraidErr == nil && !caps.SnapraidBin {
t.Error("exec.LookPath found snapraid but Probe did not detect it")
}
}
func TestProbeDetectsMergerfsBin(t *testing.T) {
caps, err := Probe(context.Background())
if err != nil {
t.Fatalf("Probe: %v", err)
}
_, mergerfsErr := exec.LookPath("mergerfs")
if mergerfsErr != nil && caps.MergerfsBin {
t.Error("Probe claims mergerfs is available but exec.LookPath says it is not")
}
if mergerfsErr == nil && !caps.MergerfsBin {
t.Error("exec.LookPath found mergerfs but Probe did not detect it")
}
}