mirror of
https://github.com/langgenius/dify.git
synced 2026-10-04 13:47:55 +08:00
fix(dify-agent): keep tmux server alive without sessions (#39943)
This commit is contained in:
1 parent
a1769d0b3d
commit
21dbc6c60c
2 files changed
+87
-1
No files matched your search
@@ -21,7 +21,11 @@ func NewTmuxController(config *Config) *TmuxController {
|
||||
|
||||
// StartServer ensures the tmux server is running.
|
||||
func (t *TmuxController) StartServer() error {
|
||||
_, err := t.runTmux("start-server")
|
||||
_, err := t.runTmux(
|
||||
"start-server",
|
||||
";",
|
||||
"set-option", "-g", "exit-empty", "off",
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,91 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func newTestTmuxController(t *testing.T) *TmuxController {
|
||||
t.Helper()
|
||||
|
||||
if _, err := exec.LookPath("tmux"); err != nil {
|
||||
t.Skip("tmux is not installed")
|
||||
}
|
||||
|
||||
config := DefaultConfig()
|
||||
config.RuntimeDir = t.TempDir()
|
||||
controller := NewTmuxController(config)
|
||||
t.Cleanup(func() {
|
||||
_, _ = controller.runTmuxNoCheck("kill-server")
|
||||
})
|
||||
|
||||
return controller
|
||||
}
|
||||
|
||||
func assertTmuxServerRunning(t *testing.T, controller *TmuxController) {
|
||||
t.Helper()
|
||||
|
||||
exitEmpty, err := controller.runTmux("show-options", "-gv", "exit-empty")
|
||||
if err != nil {
|
||||
t.Fatalf("tmux server is not running: %v", err)
|
||||
}
|
||||
if got := strings.TrimSpace(exitEmpty); got != "off" {
|
||||
t.Fatalf("exit-empty = %q, want %q", got, "off")
|
||||
}
|
||||
}
|
||||
|
||||
func TestStartServerKeepsTmuxServerRunningWithoutSessions(t *testing.T) {
|
||||
controller := newTestTmuxController(t)
|
||||
|
||||
if err := controller.StartServer(); err != nil {
|
||||
t.Fatalf("StartServer() error = %v", err)
|
||||
}
|
||||
|
||||
assertTmuxServerRunning(t, controller)
|
||||
|
||||
sessions, err := controller.ListSessions()
|
||||
if err != nil {
|
||||
t.Fatalf("ListSessions() error = %v", err)
|
||||
}
|
||||
if len(sessions) != 0 {
|
||||
t.Fatalf("ListSessions() = %v, want no sessions", sessions)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTmuxServerRemainsRunningAfterLastSessionIsDeleted(t *testing.T) {
|
||||
controller := newTestTmuxController(t)
|
||||
|
||||
if err := controller.StartServer(); err != nil {
|
||||
t.Fatalf("StartServer() error = %v", err)
|
||||
}
|
||||
|
||||
const jobID = "last-session"
|
||||
sessionName := JobSessionName(jobID)
|
||||
if _, err := controller.runTmux("new-session", "-d", "-s", sessionName); err != nil {
|
||||
t.Fatalf("create tmux session: %v", err)
|
||||
}
|
||||
|
||||
sessions, err := controller.ListSessions()
|
||||
if err != nil {
|
||||
t.Fatalf("ListSessions() before cleanup error = %v", err)
|
||||
}
|
||||
if !sessions[sessionName] {
|
||||
t.Fatalf("ListSessions() = %v, want session %q", sessions, sessionName)
|
||||
}
|
||||
|
||||
controller.CleanupSession(jobID)
|
||||
assertTmuxServerRunning(t, controller)
|
||||
|
||||
sessions, err = controller.ListSessions()
|
||||
if err != nil {
|
||||
t.Fatalf("ListSessions() after cleanup error = %v", err)
|
||||
}
|
||||
if len(sessions) != 0 {
|
||||
t.Fatalf("ListSessions() after cleanup = %v, want no sessions", sessions)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShellQuote(t *testing.T) {
|
||||
tests := []struct {
|
||||
input string
|
||||
|
||||
Reference in new issue
Block a user