11package e2e_test
22
33import (
4- "bytes"
54 "context"
65 "encoding/json"
7- "fmt"
86 "io"
97 "net"
108 "net/http"
@@ -15,8 +13,9 @@ import (
1513 "github.com/stretchr/testify/assert"
1614 "github.com/stretchr/testify/require"
1715
18- "github.com/docker/cagent/cmd/root "
16+ "github.com/docker/cagent/pkg/config "
1917 "github.com/docker/cagent/pkg/server"
18+ "github.com/docker/cagent/pkg/session"
2019)
2120
2221type Session struct {
@@ -38,10 +37,8 @@ func TestCagentAPI_ListSessions(t *testing.T) {
3837 {"desktop.db" , 2 },
3938 } {
4039 t .Run (tc .db , func (t * testing.T ) {
41- dbPath , err := filepath .Abs ("testdata/db/" + tc .db )
42- require .NoError (t , err )
40+ socketPath := startCagentAPI (t , filepath .Join ("testdata" , "db" , tc .db ))
4341
44- socketPath := startCagentAPI (t , dbPath )
4542 client := & http.Client {
4643 Transport : & http.Transport {
4744 DialContext : func (ctx context.Context , _ , _ string ) (net.Conn , error ) {
@@ -66,12 +63,18 @@ func TestCagentAPI_ListSessions(t *testing.T) {
6663func startCagentAPI (t * testing.T , db string ) string {
6764 t .Helper ()
6865
66+ // Get absolute path to db before changing directory
67+ absDB , err := filepath .Abs (db )
68+ require .NoError (t , err )
69+
6970 tmpDir := t .TempDir ()
70- t .Chdir (tmpDir )
71+ t .Chdir (tmpDir ) // Use relative socket path to avoid Unix socket path length limit
7172
72- copyFile (t , "session.db" , db )
73- if _ , err := os .Stat (db + "-wal" ); err == nil {
74- copyFile (t , "session.db-wal" , db + "-wal" )
73+ // Copy database files to temp directory
74+ dbCopy := tmpDir + "/session.db"
75+ copyFile (t , dbCopy , absDB )
76+ if _ , err := os .Stat (absDB + "-wal" ); err == nil {
77+ copyFile (t , dbCopy + "-wal" , absDB + "-wal" )
7578 }
7679
7780 ln , err := server .Listen (t .Context (), "unix://cagent.sock" )
@@ -80,12 +83,14 @@ func startCagentAPI(t *testing.T, db string) string {
8083 _ = ln .Close ()
8184 })
8285
83- file , err := ln .(* net.UnixListener ).File ()
86+ sessionStore , err := session .NewSQLiteSessionStore (dbCopy )
87+ require .NoError (t , err )
88+
89+ srv , err := server .New (t .Context (), sessionStore , & config.RuntimeConfig {}, 0 , nil )
8490 require .NoError (t , err )
8591
8692 go func () {
87- var stdout , stderr bytes.Buffer
88- _ = root .Execute (t .Context (), nil , & stdout , & stderr , "api" , "-s" , "session.db" , "--listen" , fmt .Sprintf ("fd://%d" , file .Fd ()), "default" )
93+ _ = srv .Serve (t .Context (), ln )
8994 }()
9095
9196 return "cagent.sock"
0 commit comments