//go:build !windows
|
|
package singleinstance
|
|
import (
|
"errors"
|
"path/filepath"
|
"testing"
|
)
|
|
func TestAcquireWithFallbackUsesFallbackWhenPrimaryCannotOpen(t *testing.T) {
|
tempDir := t.TempDir()
|
primary := filepath.Join(tempDir, "missing", "privatevoice-input.lock")
|
fallback := filepath.Join(tempDir, "fallback.lock")
|
|
lock, err := acquireWithFallback(primary, fallback)
|
if err != nil {
|
t.Fatalf("acquireWithFallback() error = %v", err)
|
}
|
lock.Release()
|
}
|
|
func TestAcquireWithFallbackDoesNotBypassHeldPrimaryLock(t *testing.T) {
|
tempDir := t.TempDir()
|
primary := filepath.Join(tempDir, "privatevoice-input.lock")
|
fallback := filepath.Join(tempDir, "fallback.lock")
|
|
held, err := acquirePath(primary)
|
if err != nil {
|
t.Fatalf("acquirePath() error = %v", err)
|
}
|
defer held.Release()
|
|
lock, err := acquireWithFallback(primary, fallback)
|
if err == nil {
|
lock.Release()
|
t.Fatal("acquireWithFallback() unexpectedly acquired fallback while primary was held")
|
}
|
var unavailable lockUnavailableError
|
if !errors.As(err, &unavailable) {
|
t.Fatalf("acquireWithFallback() error = %T %v, want lockUnavailableError", err, err)
|
}
|
}
|