package process import ( "os" "path/filepath" "testing" ) func newTestManager(t *testing.T) *Manager { t.Helper() dir := t.TempDir() script := filepath.Join(dir, "fake-frpc") // A fake frpc that sleeps (simulating a healthy worker). if err := os.WriteFile(script, []byte("#!/bin/sh\nsleep 60\n"), 0o700); err != nil { t.Fatal(err) } opts := Options{ ConfigsDir: filepath.Join(dir, "configs"), LogsDir: filepath.Join(dir, "logs"), BinaryPath: func() string { return script }, Render: func(name string) ([]byte, error) { return []byte(`{"name":"` + name + `"}`), nil }, AutoRestart: func(string) bool { return false }, RestartInterval: func() int { return 1 }, } return NewManager(opts) } func TestStartStop(t *testing.T) { pm := newTestManager(t) if err := pm.Start("srv-a"); err != nil { t.Fatal(err) } st, has := pm.Status("srv-a") if !has || st.State != "running" || st.Pid <= 0 { t.Fatalf("status = %+v has=%v", st, has) } if err := pm.Stop("srv-a"); err != nil { t.Fatal(err) } st, has = pm.Status("srv-a") if has { t.Fatalf("after stop has=%v", has) } } func TestConfigWritten(t *testing.T) { pm := newTestManager(t) _ = pm.Start("srv-b") defer pm.Stop("srv-b") data, err := os.ReadFile(pm.ConfigPath("srv-b")) if err != nil { t.Fatal(err) } if string(data) != `{"name":"srv-b"}` { t.Fatalf("config = %s", data) } }