]> git.giacomolli.uk - onechat/blob - daemon_start_helper_test.go
Log each schedule run by its ID
[onechat] / daemon_start_helper_test.go
1 package main
2
3 import (
4         "context"
5         "io"
6         "log"
7         "path/filepath"
8         "testing"
9         "time"
10
11         "github.com/stretchr/testify/require"
12 )
13
14 // daemonStartTestWithBot is daemonStartTest with bot, which can be nil.
15 // WhatsApp is not linked.
16 func daemonStartTestWithBot(t *testing.T, server *ModelFake, bot *TelegramBot) string {
17         t.Helper()
18
19         whatsapp, _, _ := whatsappStartTest(t, t.TempDir(), newTestClock())
20         socket, _ := daemonStartTestWithWhatsApp(t, server, bot, whatsapp)
21
22         return socket
23 }
24
25 // daemonStartTestWithWhatsApp is daemonStartTestWithBot with whatsapp. It also
26 // returns the memory of the agent.
27 func daemonStartTestWithWhatsApp(t *testing.T, server *ModelFake, bot *TelegramBot, whatsapp *WhatsApp) (string, *Memory) {
28         t.Helper()
29
30         clock := newTestClock()
31
32         return daemonStartTestWithSchedules(t, server, bot, whatsapp, newTestSchedules(t, clock.Now), clock.Now)
33 }
34
35 // daemonStartTestWithSchedules is daemonStartTestWithWhatsApp with schedules,
36 // and with clock for the memory and the turns.
37 func daemonStartTestWithSchedules(t *testing.T, server *ModelFake, bot *TelegramBot, whatsapp *WhatsApp, schedules *Schedules, clock func() time.Time) (string, *Memory) {
38         t.Helper()
39
40         dir := t.TempDir()
41         agent, err := openAgent(filepath.Join(dir, daemonAgentDirName))
42         require.NoError(t, err)
43
44         agent.config.Workdir = t.TempDir()
45         memory, err := openMemory(t.Context(), agent.dir, clock, newFakeSummarizer())
46         require.NoError(t, err)
47
48         socket := filepath.Join(dir, socketFileName)
49         listener, err := daemonListenSocket(socket)
50         require.NoError(t, err)
51
52         client := newModelClient(server.URL, ModelAPIKey(modelTestKey), agent.CacheKey(), filepath.Join(agent.dir, "usage.jsonl"))
53         ctx, cancel := context.WithCancel(t.Context())
54         done := make(chan error)
55         go func() {
56                 done <- daemonServe(ctx, listener, bot, whatsapp, schedules, func(notify func(Event)) (*TurnLoop, error) {
57                         return newTurnLoop(agent, memory, newTestSubagents(t), whatsapp, schedules, client, clock, log.New(io.Discard, "", 0), notify)
58                 })
59         }()
60
61         t.Cleanup(func() {
62                 cancel()
63                 require.NoError(t, <-done)
64                 require.NoError(t, memory.Close())
65         })
66
67         return socket, memory
68 }