package debtik import ( "os" "path/filepath" "testing" ) func TestRefreshLegacyUpdater(t *testing.T) { dir := t.TempDir() if err := RefreshUpdateHelpers(dir); err != nil { t.Fatal(err) } if entries, _ := os.ReadDir(dir); len(entries) != 0 { t.Fatal("created helpers for an unmanaged server") } path := filepath.Join(dir, "debtik-update") if err := os.WriteFile(path, []byte("legacy"), 0700); err != nil { t.Fatal(err) } // An older update process may still hold the old inode open. old, err := os.Open(path) if err != nil { t.Fatal(err) } defer old.Close() if err = RefreshUpdateHelpers(dir); err != nil { t.Fatal(err) } for name, want := range map[string]string{"debtik-update": string(updateHelper), "debtik-release-version": string(versionHelper)} { got, err := os.ReadFile(filepath.Join(dir, name)) if err != nil || string(got) != want { t.Fatalf("%s was not refreshed: %v", name, err) } info, _ := os.Stat(filepath.Join(dir, name)) if info.Mode().Perm() != 0750 { t.Fatal("wrong helper permissions") } } buf := make([]byte, 6) if _, err = old.Read(buf); err != nil || string(buf) != "legacy" { t.Fatal("replacement modified the running updater inode") } }