package installer import ( "errors" "os" "path/filepath" "runtime" "testing" "gitgud.io/mike/mpv-manager/pkg/platform" "github.com/stretchr/testify/require" ) func TestConfigRestoreAndRollbackPreservePrivateMode(t *testing.T) { if runtime.GOOS == "windows" { t.Skip("Windows DACL preservation covered by native fileops tests") } isolateHome(t) backup := validBackupPath(t) require.NoError(t, os.WriteFile(backup, []byte("volume=21\n"), 0644)) live := filepath.Join(t.TempDir(), "mpv.conf") require.NoError(t, os.WriteFile(live, []byte("volume=41\n"), 0600)) require.NoError(t, RestoreBackup(OSFileSystem{}, backup, live, nil)) info, err := os.Stat(live) require.NoError(t, err) require.Equal(t, os.FileMode(0600), info.Mode().Perm()) assertTransactionFile(t, live, "volume=21\n") recovery := filepath.Join(t.TempDir(), "recovery") require.NoError(t, os.WriteFile(recovery, []byte("volume=41\n"), 0600)) cause := errors.New("activation failed") require.ErrorIs(t, rollbackConfigReplacement(live, recovery, cause), cause) info, err = os.Stat(live) require.NoError(t, err) require.Equal(t, os.FileMode(0600), info.Mode().Perm()) assertTransactionFile(t, live, "volume=41\n") } func TestConfigRestoreMissingTargetUsesPrivateSnapshotMode(t *testing.T) { if runtime.GOOS == "windows" { t.Skip("Unix snapshot mode assertion") } isolateHome(t) backup := validBackupPath(t) require.NoError(t, os.WriteFile(backup, []byte("volume=21\n"), 0600)) live := filepath.Join(t.TempDir(), "mpv.conf") require.NoError(t, RestoreBackup(OSFileSystem{}, backup, live, nil)) info, err := os.Stat(live) require.NoError(t, err) require.Equal(t, os.FileMode(0600), info.Mode().Perm()) require.NoError(t, os.Remove(live)) cause := errors.New("activation failed") require.ErrorIs(t, rollbackConfigReplacement(live, backup, cause), cause) info, err = os.Stat(live) require.NoError(t, err) require.Equal(t, os.FileMode(0600), info.Mode().Perm()) } func TestRecommendedDefaultsPreserveModeProfilesAndComments(t *testing.T) { if runtime.GOOS == "windows" { t.Skip("Unix mode assertion") } live := filepath.Join(t.TempDir(), "mpv.conf") original := "# personal comment\nhwdec=auto # safe fallback\n[profile]\nhwdec=no # profile override\n" require.NoError(t, os.WriteFile(live, []byte(original), 0600)) cr, _ := newBufferedRunner() require.NoError(t, SetRecommendedHWADecoderIfEmpty(live, platform.Linux, &platform.GPUInfo{Brand: "nvidia"}, cr)) data, err := os.ReadFile(live) require.NoError(t, err) require.Contains(t, string(data), "# personal comment") require.Contains(t, string(data), "# safe fallback") require.Contains(t, string(data), "[profile]\nhwdec=no # profile override\n") info, err := os.Stat(live) require.NoError(t, err) require.Equal(t, os.FileMode(0600), info.Mode().Perm()) }