//nolint:testpackage // exercises the unexported deviceNumberFromStat package snapshot import ( "os" "path/filepath" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // The device number a real backup reads is the same for two entries of // one directory and differs between two filesystems. Without it no // mount point is ever found. See // https://git.eeqj.de/sneak/vaultik/issues/395. func TestDeviceNumberFromStat(t *testing.T) { t.Parallel() dir := t.TempDir() file := filepath.Join(dir, "file.txt") require.NoError(t, os.WriteFile(file, nil, 0o600)) deviceOf := func(path string) uint64 { t.Helper() info, err := os.Stat(path) require.NoError(t, err) device, ok := deviceNumberFromStat(info) require.True(t, ok, "no device number read for %s", path) return device } assert.Equal(t, deviceOf(dir), deviceOf(file)) // /dev is a different filesystem from the temp dir on Linux, macOS and in Docker. assert.NotEqual(t, deviceOf(dir), deviceOf("/dev")) }