package updates import ( "os" "path/filepath" "testing" ) func TestReplaceBinary(t *testing.T) { dir := t.TempDir() exePath := filepath.Join(dir, "newt") newPath := filepath.Join(dir, ".newt-update-test") if err := os.WriteFile(exePath, []byte("old"), 0755); err != nil { t.Fatal(err) } if err := os.WriteFile(newPath, []byte("new"), 0755); err != nil { t.Fatal(err) } if err := replaceBinary(newPath, exePath); err != nil { t.Fatalf("replaceBinary: %v", err) } got, err := os.ReadFile(exePath) if err != nil { t.Fatal(err) } if string(got) != "new" { t.Fatalf("expected new binary contents, got %q", got) } if _, err := os.Stat(newPath); !os.IsNotExist(err) { t.Fatalf("expected temp file to be consumed, stat err: %v", err) } removeStaleBinary(exePath) entries, err := os.ReadDir(dir) if err != nil { t.Fatal(err) } if len(entries) != 1 { t.Fatalf("expected only the installed binary to remain, got %d entries", len(entries)) } }