Skip to content

Commit ca4a9c2

Browse files
authored
Merge pull request #1576 from dgageot/fix-sessions
Test older database
2 parents da9d7c6 + 91f3e6f commit ca4a9c2

16 files changed

Lines changed: 204 additions & 0 deletions

e2e/cagent_api_test.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package e2e_test
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"encoding/json"
7+
"fmt"
8+
"io"
9+
"net"
10+
"net/http"
11+
"os"
12+
"path/filepath"
13+
"testing"
14+
15+
"github.com/stretchr/testify/assert"
16+
"github.com/stretchr/testify/require"
17+
18+
"github.com/docker/cagent/cmd/root"
19+
"github.com/docker/cagent/pkg/server"
20+
)
21+
22+
type Session struct {
23+
Title string `json:"title"`
24+
}
25+
26+
func TestCagentAPI_ListSessions(t *testing.T) {
27+
type testcase struct {
28+
db string
29+
expectedCount int
30+
}
31+
32+
for _, tc := range []testcase{
33+
{"one-session.db", 1},
34+
{"two-sessions.db", 2},
35+
{"transfer-task.db", 1},
36+
{"session.db", 1},
37+
{"session-not-found.db", 17},
38+
{"desktop.db", 2},
39+
} {
40+
t.Run(tc.db, func(t *testing.T) {
41+
dbPath, err := filepath.Abs("testdata/db/" + tc.db)
42+
require.NoError(t, err)
43+
44+
socketPath := startCagentAPI(t, dbPath)
45+
client := &http.Client{
46+
Transport: &http.Transport{
47+
DialContext: func(ctx context.Context, _, _ string) (net.Conn, error) {
48+
return (&net.Dialer{}).DialContext(ctx, "unix", socketPath)
49+
},
50+
},
51+
}
52+
53+
resp, err := client.Get("http://localhost/api/sessions")
54+
require.NoError(t, err)
55+
defer resp.Body.Close()
56+
57+
var sessions []Session
58+
err = json.NewDecoder(resp.Body).Decode(&sessions)
59+
require.NoError(t, err)
60+
61+
assert.Len(t, sessions, tc.expectedCount)
62+
})
63+
}
64+
}
65+
66+
func startCagentAPI(t *testing.T, db string) string {
67+
t.Helper()
68+
69+
tmpDir := t.TempDir()
70+
t.Chdir(tmpDir)
71+
72+
copyFile(t, "session.db", db)
73+
if _, err := os.Stat(db + "-wal"); err == nil {
74+
copyFile(t, "session.db-wal", db+"-wal")
75+
}
76+
77+
ln, err := server.Listen(t.Context(), "unix://cagent.sock")
78+
require.NoError(t, err)
79+
t.Cleanup(func() {
80+
_ = ln.Close()
81+
})
82+
83+
file, err := ln.(*net.UnixListener).File()
84+
require.NoError(t, err)
85+
86+
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")
89+
}()
90+
91+
return "cagent.sock"
92+
}
93+
94+
func copyFile(t *testing.T, dst, src string) {
95+
t.Helper()
96+
97+
srcFile, err := os.Open(src)
98+
require.NoError(t, err)
99+
defer srcFile.Close()
100+
101+
dstFile, err := os.Create(dst)
102+
require.NoError(t, err)
103+
defer dstFile.Close()
104+
105+
_, err = io.Copy(dstFile, srcFile)
106+
require.NoError(t, err)
107+
}

e2e/testdata/db/desktop.db

20 KB
Binary file not shown.

e2e/testdata/db/desktop.db-wal

398 KB
Binary file not shown.

e2e/testdata/db/one-session.db

4 KB
Binary file not shown.

e2e/testdata/db/one-session.db-wal

249 KB
Binary file not shown.
17.3 MB
Binary file not shown.

e2e/testdata/db/session.db

640 KB
Binary file not shown.

e2e/testdata/db/session.db-wal

4.13 MB
Binary file not shown.

e2e/testdata/db/transfer-task.db

4 KB
Binary file not shown.
402 KB
Binary file not shown.

0 commit comments

Comments
 (0)