update_helpers_test.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package debtik
  2. import (
  3. "os"
  4. "path/filepath"
  5. "testing"
  6. )
  7. func TestRefreshLegacyUpdater(t *testing.T) {
  8. dir := t.TempDir()
  9. if err := RefreshUpdateHelpers(dir); err != nil {
  10. t.Fatal(err)
  11. }
  12. if entries, _ := os.ReadDir(dir); len(entries) != 0 {
  13. t.Fatal("created helpers for an unmanaged server")
  14. }
  15. path := filepath.Join(dir, "debtik-update")
  16. if err := os.WriteFile(path, []byte("legacy"), 0700); err != nil {
  17. t.Fatal(err)
  18. }
  19. // An older update process may still hold the old inode open.
  20. old, err := os.Open(path)
  21. if err != nil {
  22. t.Fatal(err)
  23. }
  24. defer old.Close()
  25. if err = RefreshUpdateHelpers(dir); err != nil {
  26. t.Fatal(err)
  27. }
  28. for name, want := range map[string]string{"debtik-update": string(updateHelper), "debtik-release-version": string(versionHelper)} {
  29. got, err := os.ReadFile(filepath.Join(dir, name))
  30. if err != nil || string(got) != want {
  31. t.Fatalf("%s was not refreshed: %v", name, err)
  32. }
  33. info, _ := os.Stat(filepath.Join(dir, name))
  34. if info.Mode().Perm() != 0750 {
  35. t.Fatal("wrong helper permissions")
  36. }
  37. }
  38. buf := make([]byte, 6)
  39. if _, err = old.Read(buf); err != nil || string(buf) != "legacy" {
  40. t.Fatal("replacement modified the running updater inode")
  41. }
  42. }